tnx-shared 5.1.174 → 5.1.178

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.
Files changed (51) hide show
  1. package/bundles/tnx-shared.umd.js +1639 -160
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/tree-list-base.d.ts +125 -0
  6. package/classes/base/tree-list-base.d.ts.map +1 -0
  7. package/classes/public-function.d.ts +1 -1
  8. package/components/check-box-list/check-box-list.component.d.ts.map +1 -1
  9. package/components/crud/crud-form/crud-form.component.d.ts +4 -3
  10. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  11. package/components/crud/tree-table/tree-table.component.d.ts +71 -0
  12. package/components/crud/tree-table/tree-table.component.d.ts.map +1 -0
  13. package/components/crud/tree-table/tree-table.component.ngfactory.d.ts.map +1 -0
  14. package/components/crud/tree-table/tree-table.component.scss.shim.ngstyle.d.ts.map +1 -0
  15. package/components/tn-app-notification/tn-app-notification.component.d.ts +3 -3
  16. package/components/tn-app-notification/tn-app-notification.component.d.ts.map +1 -1
  17. package/configs/component-context.constant.d.ts +5 -0
  18. package/configs/component-context.constant.d.ts.map +1 -1
  19. package/directives/primeng/tn-table.directive.d.ts +9 -0
  20. package/directives/primeng/tn-table.directive.d.ts.map +1 -1
  21. package/esm2015/classes/base/tree-list-base.js +746 -0
  22. package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
  23. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
  24. package/esm2015/components/check-box-list/check-box-list.component.js +60 -19
  25. package/esm2015/components/crud/crud-form/crud-form.component.js +6 -2
  26. package/esm2015/components/crud/tree-table/tree-table.component.js +377 -0
  27. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +32 -22
  28. package/esm2015/configs/component-context.constant.js +6 -1
  29. package/esm2015/directives/primeng/tn-table.directive.js +44 -1
  30. package/esm2015/public-api.js +2 -1
  31. package/esm2015/services/base.service.js +11 -1
  32. package/esm2015/services/crud.service.js +1 -1
  33. package/esm2015/services/notification.service.js +5 -2
  34. package/esm2015/tnx-shared.js +119 -118
  35. package/esm2015/tnx-shared.module.js +5 -2
  36. package/fesm2015/tnx-shared.js +1243 -41
  37. package/fesm2015/tnx-shared.js.map +1 -1
  38. package/package.json +2 -2
  39. package/public-api.d.ts +1 -0
  40. package/public-api.d.ts.map +1 -1
  41. package/services/base.service.d.ts +2 -0
  42. package/services/base.service.d.ts.map +1 -1
  43. package/services/crud.service.d.ts.map +1 -1
  44. package/services/notification.service.d.ts +1 -0
  45. package/services/notification.service.d.ts.map +1 -1
  46. package/tnx-shared.d.ts +118 -117
  47. package/tnx-shared.d.ts.map +1 -1
  48. package/tnx-shared.metadata.json +1 -1
  49. package/tnx-shared.module.d.ts +3 -2
  50. package/tnx-shared.module.d.ts.map +1 -1
  51. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -265,6 +265,11 @@ ComCtxConstants.PERMISSION = {
265
265
  REFRESH_PERMISSION: 'REFRESH_PERMISSION',
266
266
  SELECTED_OBJECT_CHANGED: 'SELECTED_OBJECT_CHANGED',
267
267
  REFRESH_USER_PERMISSION: 'REFRESH_USER_PERMISSION',
268
+ };
269
+ ComCtxConstants.NOTIFICATION = {
270
+ NOTIFICATION_RELOAD: 'NOTIFICATION_RELOAD',
271
+ NOTIFICATION_CHANGE: 'NOTIFICATION_CHANGE',
272
+ NOTIFICATION_USER_CHANGE: 'NOTIFICATION_USER_CHANGE'
268
273
  };
269
274
 
270
275
  // TODO: Test later
@@ -5686,6 +5691,13 @@ class BaseService {
5686
5691
  this.convertValueFilterToOldBase(gridInfo.filters);
5687
5692
  return this.postGridInfo(apiUrl, gridInfo);
5688
5693
  }
5694
+ baseGetTreeData(gridInfo, plusUrl = '') {
5695
+ let apiUrl = 'GetTreeData';
5696
+ if (plusUrl != null && plusUrl != '') {
5697
+ apiUrl += '/' + plusUrl;
5698
+ }
5699
+ return this.postGridInfo(apiUrl, gridInfo);
5700
+ }
5689
5701
  convertValueFilterToOldBase(filters) {
5690
5702
  filters.forEach(filter => {
5691
5703
  if (filter.filters && filter.filters.length > 0) {
@@ -6221,6 +6233,9 @@ class BaseService {
6221
6233
  updateDaDuyetQuyetDinh(id) {
6222
6234
  return this.defaultPost(`${this.serviceUri}/UpdateDaDuyetQuyetDinh/${id}`, {});
6223
6235
  }
6236
+ updateMaPhanCapBase() {
6237
+ return this.defaultPost(`${this.serviceUri}/UpdateMaPhanCapBase`, {});
6238
+ }
6224
6239
  }
6225
6240
 
6226
6241
  class GenerateLinkDownloadDTO {
@@ -13424,6 +13439,10 @@ class CrudFormComponent extends ComponentBase {
13424
13439
  }
13425
13440
  });
13426
13441
  }
13442
+ handleDataSourceLoadComplete(control, parentPath, dataSource) {
13443
+ return __awaiter(this, void 0, void 0, function* () {
13444
+ });
13445
+ }
13427
13446
  handleDataSourceLoaded(control, parentPath, dataFromDropdown) {
13428
13447
  return __awaiter(this, void 0, void 0, function* () {
13429
13448
  const parentNode = this._rootNode.getNodeByPath(parentPath);
@@ -23336,7 +23355,7 @@ ChatBoxComponent.decorators = [
23336
23355
  selector: 'chat-box',
23337
23356
  template: "<div class=\"dashboard\">\r\n <div class=\"chat\">\r\n <div class=\"group-info\">\r\n <a href=\"javascript:\">C\u00F3 {{peopleAll.length}} ng\u01B0\u1EDDi trong nh\u00F3m n\u00E0y</a>\r\n <div class=\"circleButton\" pTooltip=\"Xem to\u00E0n b\u1ED9 \u0111\u00EDnh k\u00E8m\" tooltipPosition=\"top\">\r\n <a href=\"javascript:\"><i class=\"far fa-images\"></i></a>\r\n </div>\r\n <div (click)=\"addPeople()\" class=\"circleButton\" pTooltip=\"Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi v\u00E0o nh\u00F3m\" tooltipPosition=\"top\"\r\n disabled=\"true\">\r\n <a href=\"javascript:\"><i class=\"fas fa-user-plus\"></i></a>\r\n </div>\r\n </div>\r\n <ul #scrollMe [ngClass]=\"{'hasPin': model.pinnedMessage != null}\">\r\n <li *ngIf=\"model.pinnedMessage\" class=\"clearfix pin\" [ngClass]=\"{'message-from': true}\">\r\n <ng-container\r\n *ngTemplateOutlet=\"messageItem; context: { i : -1, item: model.pinnedMessage, isPinnedMessage: true}\">\r\n </ng-container>\r\n </li>\r\n <li *ngFor=\"let item of model.dataSource; let i = index; trackBy: trackByFunc\" class=\"clearfix\"\r\n [ngClass]=\"{ 'message-own': item.type == 'own'}\">\r\n <ng-container *ngTemplateOutlet=\"messageItem; context: { i : i, item: item}\">\r\n </ng-container>\r\n </li>\r\n </ul>\r\n <!-- <chat-send-message-box *ngIf=\"showSendMessageBox\"></chat-send-message-box>-->\r\n <div [ngClass]=\"{'visible2': model.scrolling, 'hidden2': !model.scrolling}\" class=\"scroll-to-bottom\">\r\n <span *ngIf=\"model.newMessageNotUpdatedCount > 0\" (click)=\"scrollToBottom(350, true, null)\">\r\n {{model.newMessageNotUpdatedCount <= 5 ? model.newMessageNotUpdatedCount : '5+' }} </span>\r\n <span (click)=\"scrollToBottom(350, true, null)\" *ngIf=\"model.newMessageNotUpdatedCount == 0\">\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<file-viewer *ngIf=\"fileViewerModel.showEditForm\" [parentContext]=\"context\" [parentModel]=\"model\"\r\n [model]=\"fileViewerModel\">\r\n</file-viewer>\r\n\r\n<ng-template #messageItem let-i=\"i\" let-isPinnedMessage=\"isPinnedMessage\" let-item=\"item\">\r\n <img *ngIf=\"item.isFirstMessageFlow && item.type != 'own' && !isPinnedMessage && item.avatar != null\" alt=\"\"\r\n class=\"chat-avatar\" src=\"{{getCurrentUserAvatar(item.avatar)}}\">\r\n <p *ngIf=\"(item.isFirstMessageFlow && item.type != 'own') && !isPinnedMessage\" class=\"message-created-by\">\r\n {{item.fullName}}\r\n </p>\r\n <span *ngIf=\"!hasAttachment(item)\">\r\n <!-- [class]=\"addClassToMessage(item, isPinnedMessage)\">-->\r\n <p *ngIf=\"!hasAttachment(item)\" class=\"message-content\">\r\n <i (click)=\"pinMessage(item)\" class=\"fas fa-thumbtack\" style=\"right: 0;\"></i>\r\n <i (click)=\"quickNote(item)\" class=\"fas fa-sticky-note\"></i>\r\n {{item.content}}\r\n </p>\r\n <p *ngIf=\"!isPinnedMessage && (item.isLastMessageFlow || !inTheSameTime(i, item, model.dataSource))\"\r\n class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n <p *ngIf=\"isPinnedMessage\" class=\"message-created\">\r\n {{item.createdBy}} \u0111\u00E3 g\u1EEDi l\u00FAc {{item.created | date:'dd/MM/yyyy HH:mm'}}\r\n </p>\r\n </span>\r\n <ng-container *ngIf=\"hasAttachment(item)\">\r\n <ng-container *ngFor=\"let attachmentItem of item.attachments;let index=index\">\r\n <div class=\"file\"\r\n [ngClass]=\"{'first':item.isFirstMessageFlow && index == 0, 'middle':index > 0 || !item.isFirstMessageFlow, 'image' : attachmentItem.type == 'image'}\"\r\n [ngStyle]=\"{'width': model.img[i + 'width' + index]}\">\r\n <p class=\"attachment\">\r\n <span (mouseup)=\"onMouseUp($event)\" class=\"attachment-item\">\r\n <a *ngIf=\"attachmentItem.type != 'image'\" (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <i class=\"fas fa-paperclip\"></i>{{attachmentItem.fileName}}\r\n </a>\r\n <a *ngIf=\"attachmentItem.type == 'image'\" #aElement\r\n [ngClass]=\"{'hidden': !model.img[i + '' + index], 'visible':model.img[i + '' + index]}\"\r\n (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <img class=\"message-img\" (load)=\"loadImg($event, i, index)\"\r\n [src]=\"attachmentItem.url | secure | async\" />\r\n </a>\r\n </span>\r\n </p>\r\n <div style=\"clear: both\"></div>\r\n <p class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n </div>\r\n <div style=\"clear: both\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <after-view-checked *ngIf=\"model.dataSource.length == i + 1\" (loading)=\"scrollToBottom(0, false, item.sent)\">\r\n </after-view-checked>\r\n</ng-template>\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\"-->\r\n<!-- (onCancel)=\"userPickerForm.show = false\"-->\r\n<!-- (onHide)=\"userPickerForm.show = false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n<!-- <user-picker-box #formBase [control]=\"userPickerControl\"-->\r\n<!-- [(ngModel)]=\"this.peopleAll\" [multiple]=\"userPickerControl.multiple\">-->\r\n<!-- </user-picker-box>-->\r\n<!--</tn-dialog>-->\r\n\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\" (onHide)=\"userPickerForm.show == false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n\r\n<!-- &lt;!&ndash;<quick-add-form *ngIf=\"model.editFormModel.showQuickNoteForm\" [parentContext]=\"context\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; [parentModel]=\"context.data.noteDataModel\"></quick-add-form>&ndash;&gt;-->\r\n<!--</tn-dialog>-->",
23338
23357
  providers: [ComponentContextService, CheckControlVisibleService],
23339
- styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(D:\\Code\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\Code\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
23358
+ styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(D:\\Projects\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\Projects\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
23340
23359
  },] }
23341
23360
  ];
23342
23361
  ChatBoxComponent.ctorParameters = () => [
@@ -24074,7 +24093,7 @@ ChatSendMessageBoxComponent.decorators = [
24074
24093
  selector: 'chat-send-message-box',
24075
24094
  template: "<div class=\"dashboard\" (mouseup)=\"onMouseUp($event)\">\r\n <div class=\"chat\">\r\n <div class=\"new-message\">\r\n <div class=\"message-emotion\">\r\n <i class=\"far fa-smile\" style=\"color: gray;\" disabled=\"true\"></i>\r\n </div>\r\n <div class=\"message-attachment\" pTooltip=\"\u0110\u00EDnh k\u00E8m file\" tooltipPosition=\"top\" (click)=\"op.toggle($event)\">\r\n <i class=\"fas fa-paperclip\"></i>\r\n </div>\r\n <p-overlayPanel #op [dismissable]=\"true\" [appendTo]=\"'body'\" [styleClass]=\"'paging-advance-overlay'\"\r\n (mouseup)=\"onMouseUp($event)\">\r\n <ul class=\"paging-advance\">\r\n <li (click)=\"browseFileFromPersonal()\">T\u1EEB file c\u00E1 nh\u00E2n</li>\r\n <li (click)=\"browseFileFromComputer()\">T\u1EA3i l\u00EAn t\u1EEB m\u00E1y t\u00EDnh</li>\r\n </ul>\r\n </p-overlayPanel>\r\n <div class=\"message-input p-float-label\">\r\n <input #input pInputText\r\n id=\"message\"\r\n autocomplete=\"off\" autocorrect=\"off\"\r\n spellcheck=\"false\" class=\"ui-inputtext\"\r\n type=\"text\" placeholder=\"N\u1ED9i dung tin nh\u1EAFn\"\r\n [(ngModel)]=\"model.content\"\r\n (keyup.enter)=\"onSendMessage($event.target.value)\" (keydown.shift.tab)=\"cancelBlur($event)\"\r\n (keydown.tab)=\"cancelBlur($event)\" (paste)=\"handlePaste($event)\" (click)=\"clickInputText()\"/>\r\n </div>\r\n <div>\r\n <button pButton class=\"p-button-danger\" icon=\"fas fa-send\" type=\"button\" label=\"G\u1EEDi\"\r\n (click)=\"onSendMessage(model.content)\">\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"attachment-list\" [ngClass]=\"model.classHasAttachment\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'height': '100px'}\">\r\n <div *ngFor=\"let item of model.attachments\" class=\"attachment-item\">\r\n <img *ngIf=\"item.type == 'image'\" [src]=\"item.url | safeUrl\"/>\r\n <span *ngIf=\"item.type == 'file'\">{{item.fileName}}</span>\r\n <i class=\"far fa-times-circle label-danger remove-file-attachment\"\r\n (click)=\"removeAttachment(item)\"></i>\r\n </div>\r\n </tn-custom-scrollbar>\r\n <!-- <div class=\"clearfix\"></div>-->\r\n </div>\r\n </div>\r\n</div>\r\n<p-fileUpload [ngStyle]=\"{'display': 'none'}\" #fileElement (onSelect)=\"onSelectFileFromComputer($event)\"\r\n multiple=\"multiple\" name=\"fileUpload\" [maxFileSize]=\"model.maxFileSize\" auto=\"false\">\r\n</p-fileUpload>\r\n\r\n<!-- <app-drive-file-dialog *ngIf=\"model.driveFileDialog.show\" [parentDataContext]=\"dataContext\"\r\n []=\"model.driveFileDialog\" #driveFileDialog>\r\n</app-drive-file-dialog> -->\r\n",
24076
24095
  providers: [ComponentContextService],
24077
- styles: ["", "@charset \"UTF-8\";@import url(D:\\Code\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\Code\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
24096
+ styles: ["", "@charset \"UTF-8\";@import url(D:\\Projects\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\Projects\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
24078
24097
  },] }
24079
24098
  ];
24080
24099
  ChatSendMessageBoxComponent.ctorParameters = () => [
@@ -24123,9 +24142,12 @@ class CheckBoxListComponent {
24123
24142
  ngOnInit() {
24124
24143
  this.fieldValue = this.control.valueField;
24125
24144
  if (this.control.dataSource == null || this.control.dataSource.length == 0) {
24126
- if (this.control.serviceUri) {
24127
- this.bindDataSource();
24128
- }
24145
+ this.bindDataSource(this.control.serviceUri, this.control.baseService);
24146
+ // if (this.control.serviceUri) {
24147
+ // }
24148
+ // else if(this.control.baseService) {
24149
+ //
24150
+ // }
24129
24151
  }
24130
24152
  else {
24131
24153
  this.dataSourceInternal = this.control.dataSource;
@@ -24143,19 +24165,55 @@ class CheckBoxListComponent {
24143
24165
  this.classCheckBox += ` p-col-${this.control.pColClass}`;
24144
24166
  }
24145
24167
  }
24146
- bindDataSource() {
24147
- this._dropDownService.getDataSource(this.control.serviceUri).then(rs => {
24148
- const arr = [];
24149
- // for (let i = 0; i < rs.data.length; i++) {
24150
- // arr.push({ label: rs.data[i][this.control.displayField], title: rs.data[i][this.control.displayField], value: rs.data[i][this.control.valueField] });
24151
- // }
24152
- this.dataSourceInternal = rs.data;
24153
- this.gotData = true;
24154
- if (this.wroteValue) {
24155
- this.fixValue();
24168
+ bindDataSource(serviceUri, baseService) {
24169
+ var _a, _b;
24170
+ if (baseService) {
24171
+ if (baseService instanceof BaseService) {
24172
+ const dropdownOptions = new DropdownOptions({
24173
+ displayField: (_a = this.control.displayField) !== null && _a !== void 0 ? _a : 'ten',
24174
+ valueField: (_b = this.control.valueField) !== null && _b !== void 0 ? _b : 'id',
24175
+ });
24176
+ baseService.getDataDropdown(dropdownOptions).then(res => {
24177
+ this.dataSourceInternal = res;
24178
+ this.gotData = true;
24179
+ if (this.wroteValue)
24180
+ this.fixValue();
24181
+ this.onReady.emit(this.control.field);
24182
+ }).catch(err => {
24183
+ this.onReady.emit(this.control.field);
24184
+ console.log(err);
24185
+ });
24156
24186
  }
24157
- }, error => {
24158
- });
24187
+ else if (baseService instanceof MasterDataService) {
24188
+ baseService.getDropdown(this.control.groupCode).then(res => {
24189
+ // const displayField = this.control.displayField ?? 'id';
24190
+ // const valueField = this.control.valueField ?? 'code';
24191
+ this.dataSourceInternal = res.map(item => {
24192
+ return { id: item.value, ten: item.label };
24193
+ });
24194
+ if (this.wroteValue)
24195
+ this.fixValue();
24196
+ this.onReady.emit(this.control.field);
24197
+ }).catch(err => {
24198
+ console.log(err);
24199
+ this.onReady.emit(this.control.field);
24200
+ });
24201
+ }
24202
+ }
24203
+ else if (serviceUri) {
24204
+ this._dropDownService.getDataSource(serviceUri).then(rs => {
24205
+ const arr = [];
24206
+ // for (let i = 0; i < rs.data.length; i++) {
24207
+ // arr.push({ label: rs.data[i][this.control.displayField], title: rs.data[i][this.control.displayField], value: rs.data[i][this.control.valueField] });
24208
+ // }
24209
+ this.dataSourceInternal = rs.data;
24210
+ this.gotData = true;
24211
+ if (this.wroteValue) {
24212
+ this.fixValue();
24213
+ }
24214
+ }, error => {
24215
+ });
24216
+ }
24159
24217
  }
24160
24218
  change(event) {
24161
24219
  const totalValue = [...this.selectedValue];
@@ -24217,8 +24275,8 @@ CheckBoxListComponent.decorators = [
24217
24275
  {
24218
24276
  provide: NG_VALUE_ACCESSOR,
24219
24277
  useExisting: forwardRef(() => CheckBoxListComponent),
24220
- multi: true
24221
- }
24278
+ multi: true,
24279
+ },
24222
24280
  ],
24223
24281
  styles: [".tn-check-box-list.p-grid{margin-bottom:-.5em}.p-col-horizontal{padding:.5em;position:relative}.tn-check-box-list{position:relative}.tn-check-box-list.flex-end{justify-content:flex-end}.tn-check-box-list.flex-center{justify-content:center}"]
24224
24282
  },] }
@@ -28424,6 +28482,374 @@ CheckReadyComponent.propDecorators = {
28424
28482
  onReady: [{ type: Output }]
28425
28483
  };
28426
28484
 
28485
+ class TreeTableComponent extends ComponentBase {
28486
+ constructor(injector, _crudService) {
28487
+ super(injector);
28488
+ this._crudService = _crudService;
28489
+ this.model = new CrudListData();
28490
+ this.setting = new CrudListSetting();
28491
+ this.config = new CrudListConfig();
28492
+ this._dataSource = [];
28493
+ this.hiddenDelete = false;
28494
+ this.hiddenEdit = false;
28495
+ this.onReload = new EventEmitter();
28496
+ this.onAdd = new EventEmitter();
28497
+ this.onEdit = new EventEmitter();
28498
+ this.onView = new EventEmitter();
28499
+ this.onDelete = new EventEmitter();
28500
+ this.template = {};
28501
+ this.cachedTransforms = {};
28502
+ }
28503
+ set dataSource(value) {
28504
+ let dataSource = [];
28505
+ if (value) {
28506
+ dataSource = value;
28507
+ }
28508
+ this.processDataSource(dataSource);
28509
+ this._dataSource = dataSource;
28510
+ }
28511
+ get dataSource() {
28512
+ return this._dataSource;
28513
+ }
28514
+ ngOnInit() {
28515
+ this.getData();
28516
+ }
28517
+ getData() {
28518
+ const infoGetData = this.getGridInfo();
28519
+ this.onReload.emit(infoGetData);
28520
+ }
28521
+ processDataSource(dataSource) {
28522
+ if (!dataSource)
28523
+ return;
28524
+ dataSource.forEach(itemSource => {
28525
+ const source = itemSource.data;
28526
+ if (source.id == undefined) {
28527
+ source.id = this._commonService.guid();
28528
+ }
28529
+ source.objStyleClass = {};
28530
+ if (!source.colSpan) {
28531
+ source.colSpan = {};
28532
+ }
28533
+ if (!source.rowSpan) {
28534
+ source.rowSpan = {};
28535
+ }
28536
+ if (!source.hidden) {
28537
+ source.hidden = {};
28538
+ }
28539
+ if (source.isNew) {
28540
+ source.objStyleClass.isNew = true;
28541
+ }
28542
+ if (source.isExpiring) {
28543
+ source.objStyleClass.expiring = true;
28544
+ }
28545
+ if (source.class) {
28546
+ source.class.split(' ').filter(p => p).forEach(cls => {
28547
+ source.objStyleClass[cls] = true;
28548
+ });
28549
+ }
28550
+ // this.setting.advanceData.fieldHasMaximumLength.forEach(_col => {
28551
+ // const col = <ColumnSchemaBase>_col;
28552
+ // const value = source[col.field];
28553
+ // if (value && value.substring && value.length > col.maxLengthDisplay) {
28554
+ // // sv: short value
28555
+ // source[`${col.field}__sv`] = `${value.substring(0, col.maxLengthDisplay)}`;
28556
+ // }
28557
+ // });
28558
+ // this.setting.advanceData.fieldHasMaximumWord.forEach(_col => {
28559
+ // const col = <ColumnSchemaBase>_col;
28560
+ // const valueShortWord = this.subWord(source[col.field], col.maxWordDisplay);
28561
+ // if (valueShortWord) {
28562
+ // // sv: short value
28563
+ // source[`${col.field}__sv`] = `${valueShortWord}`;
28564
+ // }
28565
+ // });
28566
+ this.processDataSource(itemSource.children);
28567
+ });
28568
+ }
28569
+ subWord(value, wordCount) {
28570
+ if (!value || !value.trim)
28571
+ return value;
28572
+ value = value.trim();
28573
+ let index = -1, beforeChar = 'a';
28574
+ for (let i = 0; i < value.length; i++) {
28575
+ if (value[i] == '' && beforeChar != '') {
28576
+ wordCount--;
28577
+ }
28578
+ beforeChar = value[i];
28579
+ if (wordCount == 0) {
28580
+ index = i;
28581
+ break;
28582
+ }
28583
+ }
28584
+ if (index > -1)
28585
+ return value.substring(0, index);
28586
+ return null;
28587
+ }
28588
+ toggleShowFull(rowData, field) {
28589
+ rowData[field + '__showFull'] = !rowData[field + '__showFull'];
28590
+ }
28591
+ reload(filter_custom, page = 1) {
28592
+ this.filter_custom = filter_custom;
28593
+ this.setting.pageSetting.page = page;
28594
+ this.getData();
28595
+ }
28596
+ adjustPositionLoadingMask() {
28597
+ // if (this.interval) {
28598
+ // clearInterval(this.interval);
28599
+ // }
28600
+ // if (!this.model.loading) {
28601
+ // return;
28602
+ // }
28603
+ // this.interval = setInterval(f => {
28604
+ // const element = this.table.containerViewChild.nativeElement.querySelector('.p-datatable-loading-overlay');
28605
+ // if (element) {
28606
+ // const parent = element.closest('p-table');
28607
+ // if (parent) {
28608
+ // const nodeScrollBarContent = parent.parentNode;
28609
+ // if (!nodeScrollBarContent.classList.contains('ps-content')) {
28610
+ // return;
28611
+ // }
28612
+ // nodeScrollBarContent.parentNode.prepend(element);
28613
+ // }
28614
+ // const firstTh = element.parentNode.querySelector('p-table thead tr:first-child > th');
28615
+ // const firstThSize = firstTh.getBoundingClientRect();
28616
+ // const loadingIcon = element.querySelector('.p-datatable-loading-icon');
28617
+ // const fontSize = parseFloat(getComputedStyle(loadingIcon).fontSize);
28618
+ // const top = (firstThSize.height - fontSize) / 2;
28619
+ // const left = (firstThSize.width - fontSize) / 2;
28620
+ // loadingIcon.style.marginTop = `${top}px`;
28621
+ // loadingIcon.style.marginLeft = `${left}px`;
28622
+ // }
28623
+ // else {
28624
+ // this.adjustPositionLoadingMask();
28625
+ // }
28626
+ // }, 20);
28627
+ }
28628
+ processBaseData() {
28629
+ return __awaiter(this, void 0, void 0, function* () {
28630
+ yield this.preProcessData(this.model.dataSource);
28631
+ });
28632
+ }
28633
+ preProcessData(dataSource) {
28634
+ return __awaiter(this, void 0, void 0, function* () {
28635
+ const colHasPipe = this.setting.cols.filter(x => x.pipe);
28636
+ for (const col of colHasPipe) {
28637
+ for (const item of dataSource) {
28638
+ this.transform(col.pipe, col.asyncPipe, item[col.field]).then(rs => {
28639
+ item[`pipe__${col.field} `] = rs;
28640
+ });
28641
+ }
28642
+ }
28643
+ });
28644
+ }
28645
+ transform(pipe, asyncPipe, value) {
28646
+ return __awaiter(this, void 0, void 0, function* () {
28647
+ if (this.cachedTransforms[value]) {
28648
+ return this.cachedTransforms[value];
28649
+ }
28650
+ if (asyncPipe) {
28651
+ const val = yield pipe.transform(value);
28652
+ this.cachedTransforms[value] = val;
28653
+ return val;
28654
+ }
28655
+ else {
28656
+ const val = pipe.transform(value);
28657
+ this.cachedTransforms[value] = val;
28658
+ return val;
28659
+ }
28660
+ });
28661
+ }
28662
+ getGridInfo() {
28663
+ const gridInfo = new GridInfo({
28664
+ pageInfo: {
28665
+ page: this.setting.pageSetting.page,
28666
+ pageSize: this.setting.pageSetting.pageSize
28667
+ },
28668
+ filters: this.getFilters(),
28669
+ sorts: []
28670
+ });
28671
+ return gridInfo;
28672
+ }
28673
+ getFilters() {
28674
+ const result = [];
28675
+ if (this.keyword) {
28676
+ result.push(this.newFilter('ten', Operator.contain, this.keyword));
28677
+ }
28678
+ if (this.filter_custom && this.filter_custom.length) {
28679
+ result.push(...this.filter_custom);
28680
+ }
28681
+ return result;
28682
+ }
28683
+ getContextCell(rowData, rowIndex, col, $this) {
28684
+ return {
28685
+ crudList: $this,
28686
+ rowData,
28687
+ rowIndex,
28688
+ col,
28689
+ field: col.field
28690
+ };
28691
+ }
28692
+ disableEdit(rowData) {
28693
+ if (rowData.__disableEdit) {
28694
+ return true;
28695
+ }
28696
+ if (this.hiddenEdit) {
28697
+ return true;
28698
+ }
28699
+ if (rowData['metadataStatus'] && rowData['metadataStatus'] != '0') {
28700
+ return true;
28701
+ }
28702
+ return false;
28703
+ }
28704
+ disableDelete(rowData) {
28705
+ if (rowData.__disableDelete) {
28706
+ return true;
28707
+ }
28708
+ if (this.hiddenDelete) {
28709
+ return true;
28710
+ }
28711
+ if (rowData['metadataStatus'] && rowData['metadataStatus'] != '0') {
28712
+ return true;
28713
+ }
28714
+ return false;
28715
+ }
28716
+ findTemplate(templateName) {
28717
+ let item = this._commonService.findTemplateFromList(this.children, templateName);
28718
+ if (!item && this.templates) {
28719
+ item = this._commonService.findTemplateFromList(this.templates, templateName);
28720
+ }
28721
+ return item;
28722
+ }
28723
+ hasTemplate(templateName) {
28724
+ if (this.template[templateName] === undefined) {
28725
+ this.template[templateName] = this.findTemplate(templateName);
28726
+ }
28727
+ return this.template[templateName] != null;
28728
+ }
28729
+ getTemplate(templateName) {
28730
+ if (this.template[templateName] === undefined) {
28731
+ this.template[templateName] = this.findTemplate(templateName);
28732
+ }
28733
+ return this.template[templateName];
28734
+ }
28735
+ getComponentByType(controlType) {
28736
+ // if (controlType == 'trangThaiV5') {
28737
+ // return this.templateTrangThaiV5;
28738
+ // }
28739
+ // if (controlType == '__viewHistory') {
28740
+ // return this.templateColViewHistory;
28741
+ // }
28742
+ return this.findTemplate(controlType);
28743
+ }
28744
+ handleAdd(evt) {
28745
+ this.onAdd.emit(evt);
28746
+ }
28747
+ handleView(rowData) {
28748
+ this.onView.emit(rowData);
28749
+ }
28750
+ handleEdit(rowData) {
28751
+ this.onEdit.emit(rowData);
28752
+ }
28753
+ handleDelete(rowData) {
28754
+ this.onDelete.emit(rowData);
28755
+ }
28756
+ onNext(event) {
28757
+ this.setting.pageSetting.page = this.setting.pageSetting.page + 1;
28758
+ this.getData();
28759
+ this.scrollTop();
28760
+ }
28761
+ onPrev(event) {
28762
+ if (this.setting.pageSetting.page > 1) {
28763
+ this.setting.pageSetting.page = this.setting.pageSetting.page - 1;
28764
+ }
28765
+ this.getData();
28766
+ this.scrollTop();
28767
+ }
28768
+ onOldest(event) {
28769
+ this.setting.pageSetting.page = Math.ceil(this.model.total / this.setting.pageSetting.pageSize);
28770
+ this.getData();
28771
+ this.scrollTop();
28772
+ }
28773
+ onLatest(event) {
28774
+ this.setting.pageSetting.page = 1;
28775
+ this.getData();
28776
+ this.scrollTop();
28777
+ }
28778
+ savePageSize() {
28779
+ this.savePageSetting();
28780
+ }
28781
+ savePageSetting() {
28782
+ let pathName = location.pathname;
28783
+ if (this.setting.settingKey) {
28784
+ pathName += '/' + this.setting.settingKey;
28785
+ }
28786
+ let pageSetting = [];
28787
+ let checkExist = false;
28788
+ const dataPageSetting = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.PAGE_SETTING);
28789
+ if (dataPageSetting) {
28790
+ pageSetting = JSON.parse(dataPageSetting);
28791
+ pageSetting.forEach(element => {
28792
+ if (element.pathname === pathName) {
28793
+ element.pageSize = this.setting.pageSetting.pageSize;
28794
+ checkExist = true;
28795
+ }
28796
+ });
28797
+ }
28798
+ if (!checkExist) {
28799
+ pageSetting.push({ pathname: pathName, pageSize: this.setting.pageSetting.pageSize });
28800
+ }
28801
+ localStorage.setItem(ComCtxConstants.LOCALSTORAGE_KEY.PAGE_SETTING, JSON.stringify(pageSetting));
28802
+ }
28803
+ scrollTop() {
28804
+ setTimeout(() => {
28805
+ if (this.scrollbar) {
28806
+ this.scrollbar.scrollToTop(0, 0);
28807
+ }
28808
+ });
28809
+ }
28810
+ scrollToBottom() {
28811
+ setTimeout(() => {
28812
+ if (this.scrollbar) {
28813
+ this.scrollbar.scrollToBottom(0, 0);
28814
+ }
28815
+ });
28816
+ }
28817
+ handleDanhMaPC(evt) {
28818
+ this.setting.baseService.updateMaPhanCapBase()
28819
+ .then(res => this.handleResponse(res, 'Đánh lại mã phân cấp thành công', f => {
28820
+ this.reload();
28821
+ }));
28822
+ }
28823
+ }
28824
+ TreeTableComponent.decorators = [
28825
+ { type: Component, args: [{
28826
+ selector: 'tn-tree-table',
28827
+ template: "<div class=\"custom-card card card-w-title tn-g-page-layout-1\">\r\n <div class=\"ui-helper-clearfix tn-g-page-layout-1__header-area\">\r\n <div class=\"p-grid ui-fluid custom-p-col page-title-area\">\r\n <div class=\"main-title p-col-8\">\r\n <h1>{{setting.title}}</h1>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onOldest)=\"onOldest($event)\"\r\n (onNext)=\"onNext($event)\" (onPrev)=\"onPrev($event)\" (onLatest)=\"onLatest($event)\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-grid crudListToolbar tn-g-page-layout-1__toolbar-area\">\r\n <div class=\"p-col-8 button-group function-topbar\">\r\n <button pButton pRipple type=\"button\" label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\r\n (click)=\"handleAdd($event)\"></button>\r\n <button pButton pRipple type=\"button\" label=\"\u0110\u00E1nh l\u1EA1i m\u00E3 ph\u00E2n c\u1EA5p\" icon=\"pi pi-plus\" class=\"p-button-text\"\r\n (click)=\"handleDanhMaPC($event)\"></button>\r\n </div>\r\n <div class=\"p-col-4 p-inputgroup\">\r\n <input [placeholder]=\"'T\u00ECm ki\u1EBFm'\" [(ngModel)]=\"keyword\" pInputText type=\"text\" (change)=\"getData()\">\r\n <button pButton type=\"button\" class=\"btn-info btn-search\" label=\"T\u00ECm ki\u1EBFm\" (click)=\"getData()\"></button>\r\n </div>\r\n </div>\r\n <div class=\"tn-g-page-layout-1__table-area\">\r\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\" class=\"--has-border\">\r\n <p-treeTable #treetable [value]=\"dataSource\" [columns]=\"setting.cols\" styleClass=\"treeOrganization\">\r\n <ng-template let-columns pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width: 70px\" class=\"chkbox\">\r\n <button type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\r\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\r\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"getData()\"></button>\r\n </th>\r\n <th *ngFor=\"let col of columns\" [ttSortableColumn]=\"col.field\" [style.width]=\"col.width\"\r\n [style.textAlign]=\"col.textAlign\" [className]=\"col.class\" [pTooltip]=\"col.fullLabel\"\r\n tooltipStyleClass=\"unset-width\" style=\"text-align: center;\">\r\n {{col.label}}\r\n <p-treeTableSortIcon [field]=\"col.field\"></p-treeTableSortIcon>\r\n </th>\r\n <th style=\"text-align: center; width: 8em\">\r\n Ch\u1EE9c n\u0103ng\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template let-rowNode let-rowData=\"rowData\" let-index=\"index\" let-columns=\"columns\" pTemplate=\"body\">\r\n <tr [ttRow]=\"rowNode\">\r\n <td class=\"chkbox\"></td>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, rowNode: rowNode, col: col, index: index, i: i}\">\r\n </ng-container>\r\n </ng-container>\r\n <td style=\"text-align: center; width: 8em;\">\r\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\r\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple\r\n pTooltip=\"{{'FORM.EDIT' | translate}}\" tooltipPosition=\"top\"\r\n [disabled]=\"disableEdit(rowData)\"\r\n class=\"p-button-rounded p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-pencil\" (click)=\"handleEdit(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" pTooltip=\"{{'FORM.DELETE' | translate}}\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\r\n icon=\"pi pi-trash\" (click)=\"handleDelete(rowData)\"></button>\r\n <!-- <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button> -->\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n <div class=\"row-bottom-sticky\"></div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</div>\r\n\r\n<ng-template #contentTd let-rowData let-rowNode=\"rowNode\" let-col=\"col\" let-index=\"index\" let-i=\"i\">\r\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\r\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\r\n <tn-treeTableToggler *ngIf=\"i == 0\" [rowNode]=\"rowNode\"></tn-treeTableToggler>\r\n <span *ngIf=\"col.pipe\">\r\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span> -->\r\n {{rowData['pipe__' + col.field]}}\r\n </span>\r\n <span *ngIf=\"!col.pipe\">\r\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span> -->\r\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\r\n class=\"link-or-action\">\r\n <a href=\"javascript:;\" (click)=\"handleView(rowData)\" [pTooltip]=\"config.tooltipView\"\r\n tooltipPosition=\"top\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, this)\">\r\n </ng-container>\r\n </a>\r\n </span>\r\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, this)\">\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\r\n let-expanded=\"expanded\">\r\n <ng-container *ngIf=\"col.template\">\r\n <ng-container [ngTemplateOutlet]=\"col.template\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, this)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.template\">\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\r\n <div pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\r\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\r\n <i pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" style=\"text-align: center;\"\r\n [ngClass]=\"rowData[field]\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'date'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy'}}\" tooltipPosition=\"top\">\r\n {{_crudService.renderDate(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"top\">\r\n {{_crudService.renderDateTime(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\" class=\"user\">\r\n {{rowData[field] | userFormat | async}}\r\n </span>\r\n <div *ngSwitchCase=\"'users'\" [innerHTML]=\"rowData[field] | usersFormat | async\">\r\n </div>\r\n <span *ngSwitchCase=\"'int'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\r\n [disabled]=\"col.disableCheckBox\">\r\n </p-checkbox>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'metadataStatus'\">\r\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\r\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\r\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\r\n duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'string'\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"null\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, this)\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentCellString let-rowData let-field=\"field\">\r\n <span>\r\n <!-- __sv: Short Value -->\r\n <ng-container *ngIf=\"rowData[field + '__sv']\">\r\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\r\n {{rowData[field + '__sv']}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\r\n tooltipPosition=\"top\">[...]</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\r\n {{rowData[field]}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\r\n {{rowData[field]}}\r\n </ng-container>\r\n </span>\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 bottom\"></span> -->\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>",
28828
+ styles: [""]
28829
+ },] }
28830
+ ];
28831
+ TreeTableComponent.ctorParameters = () => [
28832
+ { type: Injector },
28833
+ { type: CrudService }
28834
+ ];
28835
+ TreeTableComponent.propDecorators = {
28836
+ treeTable: [{ type: ViewChild, args: ['treetable',] }],
28837
+ scrollbar: [{ type: ViewChild, args: ['scrollbar', { static: true },] }],
28838
+ children: [{ type: ContentChildren, args: [TemplateRef,] }],
28839
+ templates: [{ type: Input }],
28840
+ model: [{ type: Input }],
28841
+ setting: [{ type: Input }],
28842
+ config: [{ type: Input }],
28843
+ dataSource: [{ type: Input }],
28844
+ hiddenDelete: [{ type: Input }],
28845
+ hiddenEdit: [{ type: Input }],
28846
+ onReload: [{ type: Output }],
28847
+ onAdd: [{ type: Output }],
28848
+ onEdit: [{ type: Output }],
28849
+ onView: [{ type: Output }],
28850
+ onDelete: [{ type: Output }]
28851
+ };
28852
+
28427
28853
  class TableDetailFormComponent extends DataFormBase {
28428
28854
  constructor(injector) {
28429
28855
  super(injector);
@@ -38740,6 +39166,9 @@ class NotificationService extends BaseService {
38740
39166
  sendNotification(data) {
38741
39167
  return this.defaultPost(`${this.serviceUri}/InsertToManyUser/`, data);
38742
39168
  }
39169
+ sendNotificationMultiple(lstNotification) {
39170
+ return this.defaultPost(`${this.serviceUri}/InsertMultiple`, lstNotification);
39171
+ }
38743
39172
  markReadById(id) {
38744
39173
  return this.defaultPost(`${this.serviceUri}/MarkReadById/${id}`, {});
38745
39174
  }
@@ -38747,7 +39176,7 @@ class NotificationService extends BaseService {
38747
39176
  return this.defaultPost(`${this.serviceUri}/MarkUnread/${id}`, {});
38748
39177
  }
38749
39178
  markReadAllByUserCurrent() {
38750
- return this.defaultPost(`${this.serviceUri}/MarkReadAllByUserCurrent`, {});
39179
+ return this.defaultPost(`${this.serviceUri}/MarkReadAllByCurrentUser`, {});
38751
39180
  }
38752
39181
  }
38753
39182
  NotificationService.ɵprov = ɵɵdefineInjectable({ factory: function NotificationService_Factory() { return new NotificationService(ɵɵinject(HttpClient), ɵɵinject(INJECTOR), ɵɵinject(ModuleConfigService)); }, token: NotificationService, providedIn: "root" });
@@ -39302,6 +39731,7 @@ class TnAppNotificationComponent extends ComponentBase {
39302
39731
  this._crudService = _crudService;
39303
39732
  this._notifierService = _notifierService;
39304
39733
  this._customRouterService = _customRouterService;
39734
+ this.openMenu = new EventEmitter();
39305
39735
  this.maxNotification = 10;
39306
39736
  this.totalUnRead = 0;
39307
39737
  this.bounceNoti = true;
@@ -39311,13 +39741,15 @@ class TnAppNotificationComponent extends ComponentBase {
39311
39741
  this.url = '';
39312
39742
  this.urldetail = '';
39313
39743
  this.notifications = [];
39314
- this.openMenu = new EventEmitter();
39315
39744
  this.rootContext.subscribe('NOTIFICATION_CHANGE', rs => {
39316
39745
  this.refreshNotification();
39317
39746
  });
39318
39747
  this._signalRService.start('NotificationHub', TopicReloadNotification, data => {
39319
39748
  this.refreshNotification();
39320
39749
  });
39750
+ this.rootContext.subscribe(ComCtxConstants.NOTIFICATION.NOTIFICATION_RELOAD, res => {
39751
+ this.refreshNotification();
39752
+ });
39321
39753
  this.environment = this._moduleConfigService.getConfig().environment;
39322
39754
  }
39323
39755
  ngOnInit() {
@@ -39384,13 +39816,24 @@ class TnAppNotificationComponent extends ComponentBase {
39384
39816
  ],
39385
39817
  fields: ''
39386
39818
  });
39387
- this._notificationService.getByGridRequest(gridInfo)
39388
- .then(res => this.handleResponse(res, '', f => {
39389
- this.notifications = res.data;
39390
- this.totalUnRead = res.totalRecord;
39391
- this.bounceNoti = true;
39392
- this.afterGetNotication();
39393
- }));
39819
+ const readedFilters = [
39820
+ this.newFilter('userId', Operator.equal, this.userId),
39821
+ this.newFilter('readedTime', Operator.isNull, '1')
39822
+ ];
39823
+ Promise.all([
39824
+ this._notificationService.getByGridRequest(gridInfo).then(res => this.handleResponse(res, '', f => {
39825
+ this.notifications = res.data;
39826
+ this.totalUnRead = 0;
39827
+ this.bounceNoti = true;
39828
+ this.afterGetNotication();
39829
+ })),
39830
+ this._notificationService.getAll(readedFilters, 'readedTime').then(res => {
39831
+ if (res.success && res.data && res.data.length)
39832
+ this.totalUnRead = res.totalRecord;
39833
+ else
39834
+ this.totalUnRead = 0;
39835
+ })
39836
+ ]);
39394
39837
  }
39395
39838
  afterGetNotication() {
39396
39839
  this.notifications.forEach(element => {
@@ -39410,18 +39853,19 @@ class TnAppNotificationComponent extends ComponentBase {
39410
39853
  if (!rs)
39411
39854
  return;
39412
39855
  this._notificationService.markReadAllByUserCurrent().then(rs => {
39413
- this.notifications.forEach(element => {
39414
- element.readedTime = new Date();
39415
- });
39416
- this.rootContext.fireEvent('NOTIFICATION_ALL_READ', true);
39856
+ // this.notifications.forEach(element => {
39857
+ // element.readedTime = new Date();
39858
+ // });
39859
+ this.rootContext.fireEvent(ComCtxConstants.NOTIFICATION.NOTIFICATION_RELOAD, true);
39417
39860
  });
39418
39861
  this.totalUnRead = 0;
39419
39862
  });
39420
39863
  }
39421
39864
  readById(data) {
39422
- this._notificationService.markReadById(data.id).then(rs => {
39423
- data.readedTime = new Date();
39424
- });
39865
+ data.readedTime = new Date();
39866
+ this._notificationService.markReadById(data.id).then(res => {
39867
+ this.rootContext.fireEvent(ComCtxConstants.NOTIFICATION.NOTIFICATION_RELOAD);
39868
+ }).catch(err => this._commonService.handleError(err, this._injector));
39425
39869
  }
39426
39870
  isHasAvatar(item) {
39427
39871
  if (item.avatarId) {
@@ -39470,11 +39914,7 @@ class TnAppNotificationComponent extends ComponentBase {
39470
39914
  this.bounceNoti = false;
39471
39915
  }
39472
39916
  handleClicked() {
39473
- return __awaiter(this, void 0, void 0, function* () {
39474
- // TODO: xem có cách nào lấy domain linh động hơn
39475
- const domain = this.environment.clientDomain.thongbaoDomain;
39476
- window.open(`${domain}`);
39477
- });
39917
+ this._router.navigate([`user/managemant-notification`]);
39478
39918
  }
39479
39919
  }
39480
39920
  TnAppNotificationComponent.decorators = [
@@ -45836,6 +46276,48 @@ TnSortIcon.ctorParameters = () => [
45836
46276
  ];
45837
46277
  TnSortIcon.propDecorators = {
45838
46278
  field: [{ type: Input }]
46279
+ };
46280
+ class TnTreeTableToggler {
46281
+ constructor(ttb) {
46282
+ this.ttb = ttb;
46283
+ this.tt = ttb.treeTable;
46284
+ }
46285
+ onClick(event) {
46286
+ this.rowNode.node.expanded = !this.rowNode.node.expanded;
46287
+ if (this.rowNode.node.expanded) {
46288
+ this.tt.onNodeExpand.emit({
46289
+ originalEvent: event,
46290
+ node: this.rowNode.node
46291
+ });
46292
+ }
46293
+ else {
46294
+ this.tt.onNodeCollapse.emit({
46295
+ originalEvent: event,
46296
+ node: this.rowNode.node
46297
+ });
46298
+ }
46299
+ this.tt.updateSerializedValue();
46300
+ this.tt.tableService.onUIUpdate(this.tt.value);
46301
+ event.preventDefault();
46302
+ }
46303
+ }
46304
+ TnTreeTableToggler.decorators = [
46305
+ { type: Component, args: [{
46306
+ selector: 'tn-treeTableToggler',
46307
+ template: `
46308
+ <button type="button" class="p-treetable-toggler p-link" (click)="onClick($event)" tabindex="-1" pRipple
46309
+ [style.visibility]="rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'" [style.marginLeft]="rowNode.level * 16 + 'px'">
46310
+ <i [ngClass]="rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'"></i>
46311
+ </button>
46312
+ `,
46313
+ encapsulation: ViewEncapsulation.None
46314
+ },] }
46315
+ ];
46316
+ TnTreeTableToggler.ctorParameters = () => [
46317
+ { type: TreeTableComponent }
46318
+ ];
46319
+ TnTreeTableToggler.propDecorators = {
46320
+ rowNode: [{ type: Input }]
45839
46321
  };
45840
46322
 
45841
46323
  class TnTemplateDirective {
@@ -47376,6 +47858,7 @@ function coreDeclaration() {
47376
47858
  CoCauToChucPickerListComponent,
47377
47859
  CrudFormComponent,
47378
47860
  CrudListComponent,
47861
+ TreeTableComponent,
47379
47862
  BaseCongViecTestComponent,
47380
47863
  BaseCongViecComponent,
47381
47864
  BaseCongViecFormComponent,
@@ -47465,6 +47948,7 @@ function coreDeclaration() {
47465
47948
  TnSortableColumnDirective,
47466
47949
  TnTemplateDirective,
47467
47950
  TnSortIcon,
47951
+ TnTreeTableToggler,
47468
47952
  UserPickerComponent,
47469
47953
  UserPickerBoxComponent,
47470
47954
  AutocompleteDatasourceComponent,
@@ -47631,6 +48115,724 @@ class MultiTranslateHttpLoader {
47631
48115
  }
47632
48116
  }
47633
48117
 
48118
+ class TreeListBase extends ComponentBase {
48119
+ constructor(_injector) {
48120
+ super(_injector);
48121
+ this.notConfigBaseServiceMessage = 'Chưa cấu hình CRUD base service';
48122
+ this.environment = {};
48123
+ this.setting = new CrudListSetting();
48124
+ this.model = new CrudListData();
48125
+ this.formModel = new CrudFormData();
48126
+ this.scopeDataEdit = {};
48127
+ this.showDetailForm = false;
48128
+ this.countReady = 0;
48129
+ this.hasCrudList = true;
48130
+ this.customGetData = false;
48131
+ this.readyToTrinhKy = false;
48132
+ this.plusUrl = '';
48133
+ this.fieldParent = 'idParent';
48134
+ this.isCrudList = false;
48135
+ this.levelOpen = 1;
48136
+ this._notifierService = this._injector.get(NotifierService);
48137
+ this._activatedRoute = this._injector.get(ActivatedRoute);
48138
+ this._router = this._injector.get(Router);
48139
+ this._customRouterService = this._injector.get(CustomRouterService);
48140
+ this._listHelperService = this._injector.get(ListHelperService);
48141
+ this._commonService = this._injector.get(CommonService);
48142
+ this._translateService = this._injector.get(TranslateService);
48143
+ this._exportService = this._injector.get(ExportService);
48144
+ this._crudService = this._injector.get(CrudService);
48145
+ this._datePipe = this._injector.get(DatePipe);
48146
+ this._cd = this._injector.get(ChangeDetectorRef);
48147
+ this._userService = this._injector.get(UserService);
48148
+ this._masterDataService = this._injector.get(MasterDataService);
48149
+ this._entityWorkflowSettingService = this._injector.get(EntityWorkflowSettingService);
48150
+ this._entityWorkflowHistoryService = this._injector.get(EntityWorkflowHistoryService);
48151
+ this._entityPermissionService = this._injector.get(EntityPermissionService);
48152
+ this._workflowSettingService = this._injector.get(WorkflowSettingsService);
48153
+ this._workflowPermissionDetailService = this._injector.get(WorkflowPermissionDetailService);
48154
+ this._stateMachinesService = this._injector.get(StateMachinesService);
48155
+ this._congViecServiceInBase = this._injector.get(CongViecService);
48156
+ }
48157
+ set content(content) {
48158
+ const beforeValue = this.crudList;
48159
+ if (content) {
48160
+ this.crudList = content;
48161
+ if (!beforeValue) {
48162
+ this.countReady++;
48163
+ if (this.countReady < 2) {
48164
+ return;
48165
+ }
48166
+ this.processData();
48167
+ }
48168
+ }
48169
+ }
48170
+ ngOnInit() {
48171
+ this.model.baseReady = false;
48172
+ if (this.setting.cols) {
48173
+ this.setting.cols = this.setting.cols.filter(q => !q.removeOnInit);
48174
+ }
48175
+ this.mergeInfoToColumnSchema();
48176
+ this.generateFieldSearchText();
48177
+ if (!this.setting.baseService) {
48178
+ this._notifierService.showWarning(this.notConfigBaseServiceMessage);
48179
+ }
48180
+ else {
48181
+ if (!this.setting.hiddenSettingWorkflow
48182
+ || !this.setting.hiddenSettingWorkflowNew) {
48183
+ this.setting.baseService.useWorkflow = true;
48184
+ }
48185
+ this.registerGlobalService(this.setting.baseService);
48186
+ }
48187
+ const moduleConfigService = this._injector.get(ModuleConfigService);
48188
+ this.environment = moduleConfigService.getConfig().environment;
48189
+ if (this.environment.clientDomain
48190
+ && this.setting.baseService
48191
+ && this.environment.clientDomain[this.setting.baseService.serviceCode]
48192
+ && !this.setting.targetPath) {
48193
+ this.setting.targetPath = `${this.environment.clientDomain[this.setting.baseService.serviceCode]}/${this.setting.baseService.entityName.toLowerCase()}/detail`;
48194
+ }
48195
+ this.getMenuButtons = this.getMenuButtons.bind(this);
48196
+ }
48197
+ registerGlobalService(service) {
48198
+ const key = service.getKeyWorkflowSetting();
48199
+ this._entityWorkflowSettingService.registerService(key, service);
48200
+ this._entityWorkflowHistoryService.registerService(key, service);
48201
+ this._entityPermissionService.registerService(key, service);
48202
+ this._workflowSettingService.registerService(key, service);
48203
+ }
48204
+ loadItemFromQueryParam() {
48205
+ if (this.loadDetailFromQueryParam === undefined || this.loadDetailFromQueryParam === true) {
48206
+ let idInQueryString = null;
48207
+ let pid = null; // permission Id được người khác share
48208
+ if (this._activatedRoute.snapshot
48209
+ && this._activatedRoute.snapshot.queryParams) {
48210
+ idInQueryString = this._activatedRoute.snapshot.queryParams.id || this._activatedRoute.snapshot.queryParams.entityKey;
48211
+ pid = this._activatedRoute.snapshot.queryParams.pid;
48212
+ }
48213
+ if (pid) {
48214
+ this.loadDetailPid(pid);
48215
+ }
48216
+ else if (idInQueryString) {
48217
+ // get detail data
48218
+ this.setting.baseService.getDetailWithPermission(idInQueryString)
48219
+ .then(res => {
48220
+ if (!res.data) {
48221
+ this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
48222
+ }
48223
+ if ((res.data.basePermission & PermissionBase.EDIT) == PermissionBase.EDIT
48224
+ || (res.data.basePermission & PermissionBase.READ) == PermissionBase.READ) {
48225
+ this._edit(res.data);
48226
+ }
48227
+ else {
48228
+ this._notifierService.showWarning('Bạn không có quyền xem bản ghi');
48229
+ }
48230
+ }).catch(err => {
48231
+ console.error('error on get detail from querystring', err);
48232
+ this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
48233
+ });
48234
+ }
48235
+ }
48236
+ }
48237
+ loadDetailPid(pid) {
48238
+ this.setting.baseService.getDetailByPid(pid)
48239
+ .then(res => this.handleResponse(res, '', f => {
48240
+ if (!res.data) {
48241
+ this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
48242
+ }
48243
+ if ((res.data.basePermission & PermissionBase.EDIT) == PermissionBase.EDIT
48244
+ || (res.data.basePermission & PermissionBase.READ) == PermissionBase.READ) {
48245
+ res.data.pid = pid;
48246
+ res.data.basePermissionByPid = res.data.basePermission;
48247
+ this._edit(res.data);
48248
+ }
48249
+ else {
48250
+ this._notifierService.showWarning('Bạn không có quyền xem bản ghi');
48251
+ }
48252
+ })).catch(err => {
48253
+ console.error('error on get detail from querystring', err);
48254
+ this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
48255
+ });
48256
+ }
48257
+ ngAfterViewInit() {
48258
+ this.handleAfterViewInit();
48259
+ }
48260
+ ngOnDestroy() {
48261
+ super.ngOnDestroy();
48262
+ clearTimeout(this.loadingTimeout);
48263
+ }
48264
+ handleAfterViewInit() {
48265
+ return __awaiter(this, void 0, void 0, function* () {
48266
+ this.countReady++;
48267
+ if (this.countReady > 1) {
48268
+ this.model.baseReady = true;
48269
+ this._triggerProcessData();
48270
+ }
48271
+ this.loadItemFromQueryParam();
48272
+ });
48273
+ }
48274
+ getMenuButtons(rowData) {
48275
+ this.rowDataCurrent = rowData;
48276
+ return [];
48277
+ }
48278
+ _add(evt) {
48279
+ return __awaiter(this, void 0, void 0, function* () {
48280
+ const resultValidate = yield this.validateAdd();
48281
+ if (!resultValidate) {
48282
+ return;
48283
+ }
48284
+ this.formModel.data = {};
48285
+ this.formModel.formState = FormState.ADD;
48286
+ yield this.beforeAdd();
48287
+ this.setting.popupHeader = `Thêm mới ${this.setting.objectName}`;
48288
+ this.setting.maskClass = null;
48289
+ this.showDetailForm = true;
48290
+ });
48291
+ }
48292
+ validateAdd() {
48293
+ return __awaiter(this, void 0, void 0, function* () {
48294
+ return true;
48295
+ });
48296
+ }
48297
+ beforeAdd() {
48298
+ return __awaiter(this, void 0, void 0, function* () {
48299
+ });
48300
+ }
48301
+ _view(rowData) {
48302
+ return __awaiter(this, void 0, void 0, function* () {
48303
+ if (rowData.basePermission & PermissionBase.EDIT) {
48304
+ this._edit(rowData);
48305
+ }
48306
+ else {
48307
+ this.formModel.formState = FormState.VIEW;
48308
+ yield this.beforeView();
48309
+ this.setting.popupHeader = `Chi tiết ${this.setting.objectName}`;
48310
+ this.setting.maskClass = null;
48311
+ this.formModel.data = this.cloneData(rowData);
48312
+ yield this.modifyViewModel(rowData);
48313
+ this.showDetailForm = true;
48314
+ }
48315
+ });
48316
+ }
48317
+ beforeView() {
48318
+ return __awaiter(this, void 0, void 0, function* () {
48319
+ });
48320
+ }
48321
+ modifyViewModel(rowData) {
48322
+ return __awaiter(this, void 0, void 0, function* () {
48323
+ });
48324
+ }
48325
+ _copyLinkMultiple() {
48326
+ return __awaiter(this, void 0, void 0, function* () {
48327
+ const paths = [];
48328
+ for (const item of this.model.selectedItems) {
48329
+ paths.push(yield this.getCopyPath(this.setting, item));
48330
+ }
48331
+ this._commonService.copyByStorage(paths.join('\r\n'));
48332
+ this._notifierService.showSuccess('Đã sao chép các liên kết đã chọn');
48333
+ });
48334
+ }
48335
+ _copyLink(rowData) {
48336
+ return __awaiter(this, void 0, void 0, function* () {
48337
+ const path = yield this.getCopyPath(this.setting, rowData);
48338
+ this._commonService.copyByStorage(path);
48339
+ this._notifierService.showSuccess('Đã sao chép liên kết');
48340
+ });
48341
+ }
48342
+ _edit(rowData, scopeDataEdit = {}) {
48343
+ return __awaiter(this, void 0, void 0, function* () {
48344
+ const flashShow = rowData[KeyFlashShow];
48345
+ delete rowData[KeyFlashShow];
48346
+ yield this.beforeEdit();
48347
+ this.formModel.formState = FormState.EDIT;
48348
+ this.setting.popupHeader = `Chi tiết ${this.setting.objectName}`;
48349
+ this.setting.maskClass = flashShow ? 'hide' : null;
48350
+ this.scopeDataEdit = scopeDataEdit;
48351
+ this.formModel.data = this.cloneData(rowData);
48352
+ yield this.modifyEditModel(rowData);
48353
+ this.formModel.data[KeyFlashShow] = flashShow;
48354
+ this.showDetailForm = true;
48355
+ });
48356
+ }
48357
+ beforeEdit() {
48358
+ return __awaiter(this, void 0, void 0, function* () {
48359
+ });
48360
+ }
48361
+ modifyEditModel(rowData) {
48362
+ return __awaiter(this, void 0, void 0, function* () {
48363
+ });
48364
+ }
48365
+ cloneData(rowData) {
48366
+ return {
48367
+ pid: rowData.pid,
48368
+ basePermissionByPid: rowData.basePermissionByPid,
48369
+ id: rowData[this.setting.entityKey],
48370
+ basePermission: rowData.basePermission
48371
+ };
48372
+ }
48373
+ getPromiseDeleteItem(rowData) {
48374
+ return this.setting.baseService.delete(rowData.id);
48375
+ }
48376
+ _delete(rowData) {
48377
+ if (rowData.__disableDelete) {
48378
+ return;
48379
+ }
48380
+ this._notifierService.showDeleteConfirm().then(rs => {
48381
+ if (!rs) {
48382
+ return;
48383
+ }
48384
+ if (this.setting.baseService) {
48385
+ this.getPromiseDeleteItem(rowData)
48386
+ .then(response => {
48387
+ if (response.success) {
48388
+ if (this.setting.showVersionButton) {
48389
+ this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
48390
+ }
48391
+ else {
48392
+ this._triggerProcessData();
48393
+ }
48394
+ this._notifierService.showDeleteDataSuccess();
48395
+ }
48396
+ else {
48397
+ this._notifierService.showWarningByResponse(response);
48398
+ }
48399
+ }, error => {
48400
+ this._notifierService.showDeleteDataError();
48401
+ });
48402
+ }
48403
+ });
48404
+ }
48405
+ getPromiseDeleteItems(items) {
48406
+ const ids = items.map(x => x.id).join(',');
48407
+ return this.setting.baseService.deleteMany(ids);
48408
+ }
48409
+ _deleteMultiple(items) {
48410
+ this._notifierService.showDeleteConfirm().then(rs => {
48411
+ if (!rs) {
48412
+ return;
48413
+ }
48414
+ if (this.setting.baseService) {
48415
+ this.getPromiseDeleteItems(items).then(response => {
48416
+ if (response.success) {
48417
+ this._triggerProcessData();
48418
+ this._notifierService.showDeleteDataSuccess();
48419
+ }
48420
+ else {
48421
+ this._notifierService.showWarningByResponse(response);
48422
+ }
48423
+ });
48424
+ }
48425
+ });
48426
+ }
48427
+ onBeforeCancel() {
48428
+ }
48429
+ _handleSaved() {
48430
+ this.showDetailForm = false;
48431
+ this._triggerProcessData();
48432
+ }
48433
+ _handleCancel($event) {
48434
+ this.onBeforeCancel();
48435
+ this.showDetailForm = false;
48436
+ }
48437
+ getEntityMetadata() {
48438
+ return __awaiter(this, void 0, void 0, function* () {
48439
+ try {
48440
+ // if (this._entityMetadataService) {
48441
+ // this.setting.entityMetadataSetting.data = this._entityMetadataService.getWf1Setting();
48442
+ // return;
48443
+ // } else {
48444
+ // this.setting.entityMetadataService = this._injector.get(EntityMetadataService);
48445
+ // this._entityMetadataService = this.setting.entityMetadataService;
48446
+ // await this._entityMetadataService.load(this._baseService, this.context, true); // force load để đọc từ csdl
48447
+ // this.setting.entityMetadataSetting.data = this._entityMetadataService.getWf1Setting();
48448
+ // }
48449
+ }
48450
+ catch (e) {
48451
+ console.error('Please include EntityMetadataService in provider of component');
48452
+ }
48453
+ return null;
48454
+ });
48455
+ }
48456
+ reload() {
48457
+ return __awaiter(this, void 0, void 0, function* () {
48458
+ this.crudList.reload();
48459
+ });
48460
+ }
48461
+ _triggerProcessData(gridInfo) {
48462
+ return __awaiter(this, void 0, void 0, function* () {
48463
+ yield this.processData(gridInfo);
48464
+ });
48465
+ }
48466
+ processData(gridInfo) {
48467
+ return __awaiter(this, void 0, void 0, function* () {
48468
+ this.readyToTrinhKy = false;
48469
+ if (this.hasCrudList) {
48470
+ if (!this.crudList) {
48471
+ return;
48472
+ }
48473
+ if (!gridInfo) {
48474
+ gridInfo = this.crudList.getGridInfo();
48475
+ }
48476
+ }
48477
+ else {
48478
+ if (!gridInfo) {
48479
+ gridInfo = new GridInfo({
48480
+ pageInfo: {
48481
+ page: 1,
48482
+ pageSize: 999
48483
+ },
48484
+ filters: [],
48485
+ sorts: []
48486
+ });
48487
+ }
48488
+ }
48489
+ this.getData(gridInfo);
48490
+ });
48491
+ }
48492
+ modifyGridInfo(gridInfo) {
48493
+ return __awaiter(this, void 0, void 0, function* () {
48494
+ return true;
48495
+ });
48496
+ }
48497
+ getData(gridInfo) {
48498
+ return __awaiter(this, void 0, void 0, function* () {
48499
+ if (this.setting.baseService && this.model.ready) {
48500
+ this._markLoading();
48501
+ gridInfo.modifyFilter(WorkflowFieldStateCode, filter => {
48502
+ if (filter.value) {
48503
+ let hasNullValue = false;
48504
+ const restValues = [];
48505
+ JSON.parse(filter.value).forEach(value => {
48506
+ if (value === null) {
48507
+ hasNullValue = true;
48508
+ }
48509
+ else {
48510
+ restValues.push(value);
48511
+ }
48512
+ });
48513
+ if (hasNullValue) {
48514
+ if (restValues.length == 0) {
48515
+ filter.operator = Operator.isNull;
48516
+ return;
48517
+ }
48518
+ filter.logic = 'or';
48519
+ filter.field = null;
48520
+ filter.value = null;
48521
+ filter.operator = null;
48522
+ filter.filters = [
48523
+ this.newFilter(WorkflowFieldStateCode, Operator.isNull, ''),
48524
+ this.newFilter(WorkflowFieldStateCode, Operator.in, restValues)
48525
+ ];
48526
+ }
48527
+ }
48528
+ });
48529
+ const resultModify = yield this.modifyGridInfo(gridInfo);
48530
+ if (resultModify === false) {
48531
+ this.model.dataSource = [];
48532
+ this.model.total = 0;
48533
+ this.model.expandedRowKeys = {};
48534
+ this._unmarkLoading();
48535
+ return;
48536
+ }
48537
+ this.doGetRequest(gridInfo);
48538
+ }
48539
+ });
48540
+ }
48541
+ _markLoading() {
48542
+ this.model.loading = true;
48543
+ if (this.crudList) {
48544
+ this.crudList.adjustPositionLoadingMask();
48545
+ }
48546
+ clearTimeout(this.loadingTimeout);
48547
+ this.loadingTimeout = setTimeout(() => {
48548
+ this._notifierService.showWarning('Máy chủ phản hồi quá lâu, vui lòng kiểm tra lại đường truyền mạng!');
48549
+ this.model.loading = false;
48550
+ }, 20000);
48551
+ }
48552
+ _handleReloaded(evt = null) {
48553
+ this._unmarkLoading();
48554
+ this.afterReloaded();
48555
+ }
48556
+ afterReloaded() {
48557
+ return __awaiter(this, void 0, void 0, function* () { });
48558
+ }
48559
+ _unmarkLoading() {
48560
+ clearTimeout(this.loadingTimeout);
48561
+ this.model.loading = false;
48562
+ }
48563
+ fireDataLoaded(success = true) {
48564
+ if (success && this.crudList) {
48565
+ this.crudList.processBaseData();
48566
+ }
48567
+ this._unmarkLoading();
48568
+ }
48569
+ getPromiseGetData(gridInfo) {
48570
+ return this.setting.baseService.baseGetTreeData(gridInfo, this.plusUrl);
48571
+ }
48572
+ getDataCustom(gridInfo) {
48573
+ }
48574
+ doGetRequest(gridInfo) {
48575
+ if (!this.customGetData) {
48576
+ if (this.setting.baseService) {
48577
+ this.getPromiseGetData(gridInfo)
48578
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
48579
+ if (response.success) {
48580
+ yield this.processGetData(response);
48581
+ this.fireDataLoaded();
48582
+ }
48583
+ else {
48584
+ this._notifierService.showWarning(response.message);
48585
+ this.fireDataLoaded(false);
48586
+ }
48587
+ }), error => {
48588
+ this._notifierService.showHttpUnknowError();
48589
+ this.fireDataLoaded(false);
48590
+ });
48591
+ }
48592
+ }
48593
+ else {
48594
+ this.getDataCustom(gridInfo);
48595
+ }
48596
+ }
48597
+ processGetData(response) {
48598
+ return __awaiter(this, void 0, void 0, function* () {
48599
+ this.model.expandedRowKeys = {};
48600
+ this.model.total = response.totalRecord;
48601
+ if (response.data && response.data.length > 0) {
48602
+ yield this.beforeRenderDataSource(response.data);
48603
+ }
48604
+ yield this.afterProcessDataInBase(response.data);
48605
+ const dataSource = [];
48606
+ this.createTreeData(response.data, dataSource);
48607
+ this.model.dataSource = dataSource;
48608
+ const resetSelectedItems = this.model.selectedItems && this.model.selectedItems.length;
48609
+ if (resetSelectedItems) {
48610
+ this.model.selectedItems.length = 0;
48611
+ }
48612
+ yield this.afterGetData();
48613
+ this._getRefDataDropdown(this.model.dataSource);
48614
+ });
48615
+ }
48616
+ beforeRenderDataSource(datasource) {
48617
+ return datasource;
48618
+ }
48619
+ afterProcessDataInBase(dataSource = []) {
48620
+ return __awaiter(this, void 0, void 0, function* () {
48621
+ });
48622
+ }
48623
+ createTreeData(dataSource, result, level = 1, idParent = null, lstIdParent = []) {
48624
+ dataSource.forEach(item => {
48625
+ if (item[this.fieldParent] != idParent)
48626
+ return;
48627
+ // Bị vòng lặp vô hạn
48628
+ if (lstIdParent.indexOf(item.id) > -1)
48629
+ return;
48630
+ const node = {
48631
+ data: item,
48632
+ label: item.ten,
48633
+ expanded: level <= this.levelOpen,
48634
+ level,
48635
+ children: []
48636
+ };
48637
+ result.push(node);
48638
+ this.createTreeData(dataSource, node.children, level + 1, node.data.id, [...lstIdParent, item.id]);
48639
+ });
48640
+ return result;
48641
+ }
48642
+ afterGetData() {
48643
+ return __awaiter(this, void 0, void 0, function* () {
48644
+ });
48645
+ }
48646
+ _getRefDataDropdown(dataSource) {
48647
+ return __awaiter(this, void 0, void 0, function* () {
48648
+ if (dataSource && dataSource.length > 0) {
48649
+ if (this.setting.advanceData.fieldNeedGetRef) {
48650
+ const arrPromiseDontNeedWait = [];
48651
+ const arrSchemaDontNeedWait = [];
48652
+ for (const schema of this.setting.advanceData.fieldNeedGetRef) {
48653
+ const field = schema.field;
48654
+ if (schema[KeyFieldGetRefType] == EnumGetRefType.SERVER) {
48655
+ if (schema.forceGetData
48656
+ || (this.setting.groupColumn && this.setting.groupColumn.rawColumn && this.setting.groupColumn.rawColumn.field == schema.field)
48657
+ || this.setting.cols.some(item => item.field == 'str' + field && item.visible != false)) {
48658
+ const arrValue = [];
48659
+ dataSource.forEach(itemData => {
48660
+ const currentValue = itemData[field];
48661
+ if (currentValue != null) {
48662
+ if (schema.multiple) {
48663
+ let ids = currentValue;
48664
+ if (!Array.isArray(ids)) {
48665
+ ids = ids.split(',');
48666
+ }
48667
+ ids.forEach(id => {
48668
+ if (!id)
48669
+ return;
48670
+ if (!arrValue.some(p => p == id)) {
48671
+ arrValue.push(id);
48672
+ }
48673
+ });
48674
+ }
48675
+ else if (!arrValue.some(p => p == currentValue)) {
48676
+ arrValue.push(currentValue);
48677
+ }
48678
+ }
48679
+ });
48680
+ if (arrValue.length > 0) {
48681
+ let promise = null;
48682
+ if (schema.baseService instanceof MasterDataService) {
48683
+ promise = schema.baseService.getDataDropdown(schema.groupCode, arrValue, this.createDropdownOptions(schema));
48684
+ }
48685
+ else {
48686
+ promise = schema.baseService.getDataDropdownByFilter([this.newFilter(schema.valueField, Operator.in, arrValue)], this.createDropdownOptions(schema));
48687
+ }
48688
+ if (schema.order != null) {
48689
+ const result = yield promise;
48690
+ this.mergeRefDataToDatasource(dataSource, schema, result);
48691
+ }
48692
+ else {
48693
+ arrPromiseDontNeedWait.push(promise);
48694
+ arrSchemaDontNeedWait.push(schema);
48695
+ }
48696
+ }
48697
+ }
48698
+ }
48699
+ else {
48700
+ let funcGetLabel = item => item[schema.displayFieldInGrid] || item['label'];
48701
+ if (schema.funcGetLabel) {
48702
+ funcGetLabel = schema.funcGetLabel;
48703
+ }
48704
+ dataSource.forEach(itemData => {
48705
+ const refItem = schema.dataSource.find(i => schema.funcCompare(i, itemData[field]));
48706
+ if (refItem != null) {
48707
+ itemData['str' + field] = funcGetLabel(refItem);
48708
+ }
48709
+ });
48710
+ }
48711
+ }
48712
+ if (arrPromiseDontNeedWait.length > 0) {
48713
+ const arrRes = yield Promise.all(arrPromiseDontNeedWait);
48714
+ arrSchemaDontNeedWait.forEach((schema, index) => {
48715
+ this.mergeRefDataToDatasource(dataSource, schema, arrRes[index]);
48716
+ });
48717
+ }
48718
+ this.afterGetRefDataDropdown(null);
48719
+ this.readyToTrinhKy = true;
48720
+ }
48721
+ else {
48722
+ this.readyToTrinhKy = true;
48723
+ }
48724
+ }
48725
+ });
48726
+ }
48727
+ mergeRefDataToDatasource(dataSource, schema, data) {
48728
+ const field = schema.field;
48729
+ let funcGetLabel = item => item[schema.displayFieldInGrid] || item['ten'];
48730
+ if (schema.funcGetLabel) {
48731
+ funcGetLabel = schema.funcGetLabel;
48732
+ }
48733
+ let funcSetValueRow = (rowItem, data) => { };
48734
+ let funcGetRefDataRow = (refItems) => {
48735
+ return refItems.map(item => funcGetLabel(item)).join(`${schema.separator} `);
48736
+ };
48737
+ if (schema.funcSetValueRow) {
48738
+ funcSetValueRow = schema.funcSetValueRow;
48739
+ }
48740
+ if (schema.funcGetRefDataRow) {
48741
+ funcGetRefDataRow = schema.funcGetRefDataRow;
48742
+ }
48743
+ if (schema.multiple) {
48744
+ dataSource.forEach(itemData => {
48745
+ if (itemData[field] != null) {
48746
+ let ids = itemData[field];
48747
+ if (!Array.isArray(ids)) {
48748
+ ids = ids.split(',');
48749
+ }
48750
+ const refItems = data.filter(i => ids.some(q => schema.funcCompare(i, q)));
48751
+ if (refItems.length > 0) {
48752
+ itemData['str' + field] = funcGetRefDataRow(refItems);
48753
+ funcSetValueRow(itemData, refItems);
48754
+ }
48755
+ }
48756
+ });
48757
+ }
48758
+ else {
48759
+ dataSource.forEach(itemData => {
48760
+ if (itemData[field] != null) {
48761
+ const refItem = data.find(i => schema.funcCompare(i, itemData[field]));
48762
+ if (refItem != null) {
48763
+ itemData['str' + field] = funcGetLabel(refItem);
48764
+ funcSetValueRow(itemData, refItem);
48765
+ }
48766
+ }
48767
+ });
48768
+ }
48769
+ this.afterGetRefDataDropdown(field);
48770
+ }
48771
+ createDropdownOptions(schema) {
48772
+ return new DropdownOptions({
48773
+ displayField: schema.displayField,
48774
+ valueField: schema.valueField,
48775
+ fieldPlus: schema.fieldPlus,
48776
+ fieldTree: schema.fieldTree,
48777
+ fieldParentTreeItem: schema.fieldParentTreeItem,
48778
+ funcGetLabel: schema.funcGetLabel,
48779
+ sortField: schema.sortField,
48780
+ sortDir: schema.sortDir,
48781
+ callbackDataFinish: schema.callbackDataFinish
48782
+ });
48783
+ }
48784
+ afterGetRefDataDropdown(field) {
48785
+ }
48786
+ mergeInfoToColumnSchema() {
48787
+ this.setting.cols.forEach(col => {
48788
+ const columnModelSchema = this.setting.modelSchemas.find(p => p.field == col.field);
48789
+ if (columnModelSchema) {
48790
+ col.label = columnModelSchema.name;
48791
+ col.fullLabel = columnModelSchema.fullName;
48792
+ if (!col.displayFieldInGrid) {
48793
+ col.displayFieldInGrid = col.displayField;
48794
+ }
48795
+ if (!col.dataType) {
48796
+ col.dataType = this.getDataType(columnModelSchema.dataType);
48797
+ }
48798
+ }
48799
+ });
48800
+ }
48801
+ getDataType(type) {
48802
+ return type;
48803
+ }
48804
+ generateFieldSearchText() {
48805
+ this.setting.cols.forEach(col => {
48806
+ if (col.fullTextSearch) {
48807
+ this.setting.fieldSearchText.push(col.field);
48808
+ }
48809
+ });
48810
+ if (this.setting.fieldSearchText.length > 0) {
48811
+ const filters = [];
48812
+ this.setting.fieldSearchText.forEach(field => {
48813
+ filters.push(new Filter({ field, operator: Operator.contain, sourceField: '_k' }));
48814
+ });
48815
+ if (this.setting.filterTemplateAdvs) {
48816
+ this.setting.filterTemplateAdvs.splice(0, 0, new Filter({
48817
+ logic: 'or',
48818
+ filters
48819
+ }));
48820
+ }
48821
+ }
48822
+ }
48823
+ }
48824
+ TreeListBase.decorators = [
48825
+ { type: Directive }
48826
+ ];
48827
+ TreeListBase.ctorParameters = () => [
48828
+ { type: Injector }
48829
+ ];
48830
+ TreeListBase.propDecorators = {
48831
+ content: [{ type: ViewChild, args: [TreeTableComponent,] }],
48832
+ parentModel: [{ type: Input }],
48833
+ loadDetailFromQueryParam: [{ type: Input }]
48834
+ };
48835
+
47634
48836
  class PermissionUtilsInterceptor {
47635
48837
  constructor(authenService, _moduleConfigService, _applicationContextService) {
47636
48838
  this.authenService = authenService;
@@ -49292,5 +50494,5 @@ DynamicComponentService.ctorParameters = () => [
49292
50494
  * Generated bundle index. Do not edit.
49293
50495
  */
49294
50496
 
49295
- export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecNextFirstStepComponent, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourcePermissionBase, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCheckboxOption, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumLoaiVanBanBase, EnumPermissionType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, ImageService, JsPlumbOption, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, multipleSort, romanize, setMetadataConnection, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ13, ɵ14, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, BaseCongviecDinhkemFormComponent as ɵba, DatetimePickerComponent as ɵbb, DatetimePickerRangeComponent as ɵbc, DynamicNodeComponent as ɵbd, EntityPickerBoxComponent as ɵbe, EntityPickerDataComponent as ɵbf, EntityPickerSelectedComponent as ɵbg, EntityPickerComponent as ɵbh, EntityPickerDialogComponent as ɵbi, EntityPermissionComponent as ɵbj, DM_ChucVuService as ɵbk, RoleService as ɵbl, EntityPermissionService as ɵbm, EquationEditorComponent as ɵbn, MaskComponent as ɵbo, NumberPickerRangeComponent as ɵbp, PagingNextBackOnlyComponent as ɵbq, RadioButtonListComponent as ɵbr, VanBanPickerComponent as ɵbs, VanBanDenService as ɵbt, VanBanDiService as ɵbu, VanBanPickerDialogComponent as ɵbv, VanbanDiPickerComponent as ɵbw, VanbanDenPickerComponent as ɵbx, CongViecPickerComponent as ɵby, CongViecService$1 as ɵbz, EntityPickerService as ɵc, TaskWorkflowHistoriesService as ɵca, SettingsComponent as ɵcb, SettingsRowComponent as ɵcc, SettingsWorkflowComponent as ɵcd, SettingsWorkflowNo1Component as ɵce, SimpleWorkflowFormComponent as ɵcf, ProcessWorkflowTargetComponent as ɵcg, DmChucVuService as ɵch, ChoYKienFormComponent as ɵci, SplashComponentV1Component as ɵcj, SplashComponentV2Component as ɵck, StateMachinesConnectionReceiverComponent as ɵcl, StateMachinesConnectionReceiverConditionComponent as ɵcm, WorkflowSettingsService as ɵcn, StateMachinesConnectionReceiverDepartmentComponent as ɵco, StateMachinesConnectionReceiverGroupComponent as ɵcp, StateMachinesConnectionReceiverUserComponent as ɵcq, StateMachinesConnectionReceiverRoleComponent as ɵcr, StateMachinesConnectionSenderComponent as ɵcs, StartWorkflowComponent as ɵct, ShareLinkByPermissionComponent as ɵcu, WorkflowSettingNewComponent as ɵcv, PermissionSharingComponent as ɵcw, WorkflowPermissionService as ɵcx, TnDialogComponent as ɵcy, TnColorPickerComponent as ɵcz, ExceptionHandlerService as ɵd, TnTinymceComponent as ɵda, TnTabViewComponent as ɵdb, TableDetailFormComponent as ɵdc, FileIconPipe as ɵdd, FileSizePipe as ɵde, QuickAddFormComponent as ɵdf, PreventShiftTabDirective as ɵdg, TnTemplateDirective as ɵdh, UserPickerComponent as ɵdi, UserPickerBoxComponent as ɵdj, CoCauToChucTestService as ɵdk, TnAppHelpComponent as ɵdl, PathNameService as ɵdm, HelperCurrentPageComponent as ɵdn, TnAppNotificationListComponent as ɵdo, TnAppNotificationComponent as ɵdp, MyDriveService as ɵdq, FileVersionService as ɵdr, FileExplorerNewService as ɵds, FileManagerService as ɵdt, FolderFormComponent as ɵdu, FileFormComponent as ɵdv, FileViewerComponent as ɵdw, FileVersionListComponent as ɵdx, WorkflowHistoryComponent as ɵdy, EntityWorkflowHistoryService as ɵdz, CanBo_HoSoService as ɵe, WorkflowHistoryDialogComponent as ɵea, WorkflowHistoryNewComponent as ɵeb, WorkflowSettingComponent as ɵec, EntityWorkflowSettingService as ɵed, WorkflowSettingDialogComponent as ɵee, WorkflowPermissionComponent as ɵef, WorkflowPermissionFormComponent as ɵeg, QrCodeGeneratorComponent as ɵeh, AccessDeniedV1Component as ɵei, AddNewsComponent as ɵej, ArticleService as ɵek, NewsCategoryService as ɵel, NotFoundComponent as ɵem, UniversalLinkProcessorComponent as ɵen, SignatureDetailComponent as ɵeo, ChatService as ɵep, ContentsService as ɵeq, StatusExtendsService as ɵer, MessageBoardService as ɵes, KySoSimDanhSachChuKyComponent as ɵet, KySoSimChuKyUserService as ɵeu, FileKySoSimComponent as ɵev, KySoSimSignPDFService as ɵew, TaiLieuCuaToiComponent as ɵex, KhaiThacTaiLieuDungChungComponent as ɵey, DanhMucDungChungService as ɵez, AfterViewCheckedComponent as ɵf, CheckReadyComponent as ɵfa, SendAccessTokenInterceptor as ɵfb, LogInterceptor as ɵfc, PermissionUtilsInterceptor as ɵfd, TraceInterceptor as ɵfe, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppTopBarV2Component as ɵk, AppProfileComponent as ɵl, AppSubMenuComponent as ɵm, AppMenuComponent as ɵn, AutoCompletePickerComponent as ɵo, CheckBoxListComponent as ɵp, ReportQueueComponent as ɵq, CoCauToChucPickerListComponent as ɵr, BaseCongViecTestComponent as ɵs, ProcessWorkflowFormComponent as ɵt, BaseCauHinhWorkflowDetailComponent as ɵu, BaseDmLoaiCongViecFormComponent as ɵv, BaseDmLinhVucCongViecFormComponent as ɵw, BaseDmPriorityFormComponent as ɵx, BaseCongviecDinhkemComponent as ɵy, CongviecDinhkemService as ɵz };
50497
+ export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecNextFirstStepComponent, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourcePermissionBase, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCheckboxOption, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumLoaiVanBanBase, EnumPermissionType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, ImageService, JsPlumbOption, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnTreeTableToggler, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TreeListBase, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, multipleSort, romanize, setMetadataConnection, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ13, ɵ14, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, CongviecDinhkemService as ɵba, BaseCongviecDinhkemFormComponent as ɵbb, DatetimePickerComponent as ɵbc, DatetimePickerRangeComponent as ɵbd, DynamicNodeComponent as ɵbe, EntityPickerBoxComponent as ɵbf, EntityPickerDataComponent as ɵbg, EntityPickerSelectedComponent as ɵbh, EntityPickerComponent as ɵbi, EntityPickerDialogComponent as ɵbj, EntityPermissionComponent as ɵbk, DM_ChucVuService as ɵbl, RoleService as ɵbm, EntityPermissionService as ɵbn, EquationEditorComponent as ɵbo, MaskComponent as ɵbp, NumberPickerRangeComponent as ɵbq, PagingNextBackOnlyComponent as ɵbr, RadioButtonListComponent as ɵbs, VanBanPickerComponent as ɵbt, VanBanDenService as ɵbu, VanBanDiService as ɵbv, VanBanPickerDialogComponent as ɵbw, VanbanDiPickerComponent as ɵbx, VanbanDenPickerComponent as ɵby, CongViecPickerComponent as ɵbz, EntityPickerService as ɵc, CongViecService$1 as ɵca, TaskWorkflowHistoriesService as ɵcb, SettingsComponent as ɵcc, SettingsRowComponent as ɵcd, SettingsWorkflowComponent as ɵce, SettingsWorkflowNo1Component as ɵcf, SimpleWorkflowFormComponent as ɵcg, ProcessWorkflowTargetComponent as ɵch, DmChucVuService as ɵci, ChoYKienFormComponent as ɵcj, SplashComponentV1Component as ɵck, SplashComponentV2Component as ɵcl, StateMachinesConnectionReceiverComponent as ɵcm, StateMachinesConnectionReceiverConditionComponent as ɵcn, WorkflowSettingsService as ɵco, StateMachinesConnectionReceiverDepartmentComponent as ɵcp, StateMachinesConnectionReceiverGroupComponent as ɵcq, StateMachinesConnectionReceiverUserComponent as ɵcr, StateMachinesConnectionReceiverRoleComponent as ɵcs, StateMachinesConnectionSenderComponent as ɵct, StartWorkflowComponent as ɵcu, ShareLinkByPermissionComponent as ɵcv, WorkflowSettingNewComponent as ɵcw, PermissionSharingComponent as ɵcx, WorkflowPermissionService as ɵcy, TnDialogComponent as ɵcz, ExceptionHandlerService as ɵd, TnColorPickerComponent as ɵda, TnTinymceComponent as ɵdb, TnTabViewComponent as ɵdc, TableDetailFormComponent as ɵdd, FileIconPipe as ɵde, FileSizePipe as ɵdf, QuickAddFormComponent as ɵdg, PreventShiftTabDirective as ɵdh, TnTemplateDirective as ɵdi, UserPickerComponent as ɵdj, UserPickerBoxComponent as ɵdk, CoCauToChucTestService as ɵdl, TnAppHelpComponent as ɵdm, PathNameService as ɵdn, HelperCurrentPageComponent as ɵdo, TnAppNotificationListComponent as ɵdp, TnAppNotificationComponent as ɵdq, MyDriveService as ɵdr, FileVersionService as ɵds, FileExplorerNewService as ɵdt, FileManagerService as ɵdu, FolderFormComponent as ɵdv, FileFormComponent as ɵdw, FileViewerComponent as ɵdx, FileVersionListComponent as ɵdy, WorkflowHistoryComponent as ɵdz, CanBo_HoSoService as ɵe, EntityWorkflowHistoryService as ɵea, WorkflowHistoryDialogComponent as ɵeb, WorkflowHistoryNewComponent as ɵec, WorkflowSettingComponent as ɵed, EntityWorkflowSettingService as ɵee, WorkflowSettingDialogComponent as ɵef, WorkflowPermissionComponent as ɵeg, WorkflowPermissionFormComponent as ɵeh, QrCodeGeneratorComponent as ɵei, AccessDeniedV1Component as ɵej, AddNewsComponent as ɵek, ArticleService as ɵel, NewsCategoryService as ɵem, NotFoundComponent as ɵen, UniversalLinkProcessorComponent as ɵeo, SignatureDetailComponent as ɵep, ChatService as ɵeq, ContentsService as ɵer, StatusExtendsService as ɵes, MessageBoardService as ɵet, KySoSimDanhSachChuKyComponent as ɵeu, KySoSimChuKyUserService as ɵev, FileKySoSimComponent as ɵew, KySoSimSignPDFService as ɵex, TaiLieuCuaToiComponent as ɵey, KhaiThacTaiLieuDungChungComponent as ɵez, AfterViewCheckedComponent as ɵf, DanhMucDungChungService as ɵfa, CheckReadyComponent as ɵfb, SendAccessTokenInterceptor as ɵfc, LogInterceptor as ɵfd, PermissionUtilsInterceptor as ɵfe, TraceInterceptor as ɵff, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppTopBarV2Component as ɵk, AppProfileComponent as ɵl, AppSubMenuComponent as ɵm, AppMenuComponent as ɵn, AutoCompletePickerComponent as ɵo, CheckBoxListComponent as ɵp, ReportQueueComponent as ɵq, CoCauToChucPickerListComponent as ɵr, TreeTableComponent as ɵs, BaseCongViecTestComponent as ɵt, ProcessWorkflowFormComponent as ɵu, BaseCauHinhWorkflowDetailComponent as ɵv, BaseDmLoaiCongViecFormComponent as ɵw, BaseDmLinhVucCongViecFormComponent as ɵx, BaseDmPriorityFormComponent as ɵy, BaseCongviecDinhkemComponent as ɵz };
49296
50498
  //# sourceMappingURL=tnx-shared.js.map