{"version":3,"file":"c10t-nice-component-library.mjs","sources":["../../NiceComponentLibrary/src/models/navigator.model.ts","../../NiceComponentLibrary/src/models/button-click.event.ts","../../NiceComponentLibrary/src/enums/icon-type.enum.ts","../../NiceComponentLibrary/src/models/components/button.model.ts","../../NiceComponentLibrary/src/models/components/checkbox.model.ts","../../NiceComponentLibrary/src/enums/column-type.enum.ts","../../NiceComponentLibrary/src/enums/align.enum.ts","../../NiceComponentLibrary/src/models/components/column.model.ts","../../NiceComponentLibrary/src/models/base.model.ts","../../NiceComponentLibrary/src/models/menu.model.ts","../../NiceComponentLibrary/src/models/oauth/oAuth2AuthenticationDto.ts","../../NiceComponentLibrary/src/models/oauth/authority.ts","../../NiceComponentLibrary/src/models/components/table-paging-response.model.ts","../../NiceComponentLibrary/src/models/components/table-paging-request.model.ts","../../NiceComponentLibrary/src/models/role.model.ts","../../NiceComponentLibrary/src/models/components/select.model.ts","../../NiceComponentLibrary/src/models/ui.state.ts","../../NiceComponentLibrary/src/enums/file-type.enum.ts","../../NiceComponentLibrary/src/models/components/upload.model.ts","../../NiceComponentLibrary/src/models/components/bread-crumb.model.ts","../../NiceComponentLibrary/src/models/components/flat-tree.model.ts","../../NiceComponentLibrary/src/models/components/table-footer.model.ts","../../NiceComponentLibrary/src/models/components/range-date-picker.model.ts","../../NiceComponentLibrary/src/models/components/flat-tree-config.model.ts","../../NiceComponentLibrary/src/models/components/flat-tree-node.model.ts","../../NiceComponentLibrary/src/enums/dialog-type.enum.ts","../../NiceComponentLibrary/src/models/components/custom-dialog-data-config.model.ts","../../NiceComponentLibrary/src/models/oauth/principal.ts","../../NiceComponentLibrary/src/models/components/dialog-import-file-config.model.ts","../../NiceComponentLibrary/src/models/permission.model.ts","../../NiceComponentLibrary/src/enums/action-type.enum.ts","../../NiceComponentLibrary/src/enums/base-status.enum.ts","../../NiceComponentLibrary/src/components/base/base-table.component.ts","../../NiceComponentLibrary/src/models/nice-component-library.config.ts","../../NiceComponentLibrary/src/components/cva-custom-dialog.component.ts","../../NiceComponentLibrary/src/services/utils.service.ts","../../NiceComponentLibrary/src/services/api.service.ts","../../NiceComponentLibrary/src/services/form-state.service.ts","../../NiceComponentLibrary/src/services/authorities.service.ts","../../NiceComponentLibrary/src/components/base/base-search.component.ts","../../NiceComponentLibrary/src/components/base/base-add-edit.component.ts","../../NiceComponentLibrary/src/services/MultiTranslateHttpLoader.ts","../../NiceComponentLibrary/src/directives/multi-language-table-paginator.ts","../../NiceComponentLibrary/src/services/table.service.ts","../../NiceComponentLibrary/src/services/loader.service.ts","../../NiceComponentLibrary/src/services/validator.service.ts","../../NiceComponentLibrary/src/components/cva-counter-input.component.ts","../../NiceComponentLibrary/src/directives/style-paginator.directive.ts","../../NiceComponentLibrary/src/components/table/cva-header-expand-button.component.ts","../../NiceComponentLibrary/src/pipes/secure.pipe.ts","../../NiceComponentLibrary/src/components/table/cva-table.component.ts","../../NiceComponentLibrary/src/directives/pattern.directive.ts","../../NiceComponentLibrary/src/directives/format-input.directive.ts","../../NiceComponentLibrary/src/components/cva-input.component.ts","../../NiceComponentLibrary/src/directives/format-datepicker.ts","../../NiceComponentLibrary/src/services/date-util.service.ts","../../NiceComponentLibrary/src/components/datepicker/cva-date-picker.component.ts","../../NiceComponentLibrary/src/components/cva-multi-select-autocomplete.ts","../../NiceComponentLibrary/src/components/cva-live-searching.component.ts","../../NiceComponentLibrary/src/components/table/cva-smart-table.component.ts","../../NiceComponentLibrary/src/components/datepicker/cva-range-date-picker.component.ts","../../NiceComponentLibrary/src/directives/drag-drop.directive.ts","../../NiceComponentLibrary/src/components/upload/cva-multi-upload.component.ts","../../NiceComponentLibrary/src/components/upload/cva-upload-file.component.ts","../../NiceComponentLibrary/src/components/upload/cva-multi-upload-img.component.ts","../../NiceComponentLibrary/src/components/cva-breadcrumb.component.ts","../../NiceComponentLibrary/src/components/cva-loader.component.ts","../../NiceComponentLibrary/src/components/cva-tree.component.ts","../../NiceComponentLibrary/src/components/cva-radiobutton.component.ts","../../NiceComponentLibrary/src/services/flat.tree.service.ts","../../NiceComponentLibrary/src/components/tree/cva-flat-tree-node-left.component.ts","../../NiceComponentLibrary/src/components/tree/cva-flat-tree-node-right.component.ts","../../NiceComponentLibrary/src/components/tree/cva-flat-tree.component.ts","../../NiceComponentLibrary/src/components/upload/cva-dialog-import-file.component.ts","../../NiceComponentLibrary/src/components/cva-quill-editor.component.ts","../../NiceComponentLibrary/src/services/jsog.http.interceptor.ts","../../NiceComponentLibrary/src/services/loader.interceptor.ts","../../NiceComponentLibrary/src/services/authorities.resolver.service.ts","../../NiceComponentLibrary/src/services/singleton.translate.service.ts","../../NiceComponentLibrary/src/modules/angular-material.module.ts","../../NiceComponentLibrary/src/modules/nice-component-library.module.ts","../../NiceComponentLibrary/src/index.ts","../../NiceComponentLibrary/src/c10t-nice-component-library.ts"],"sourcesContent":["export class NavigatorModel {\r\n  displayName: string = '';\r\n  disabled?: boolean = true;\r\n  iconName: string = '';\r\n  roleMenu: string = '';\r\n  route?: string = '';\r\n  children?: NavigatorModel[] = [];\r\n  isOnlyIcon: boolean = true;\r\n  expanded: boolean = false;\r\n}\r\n","export class ButtonClickEvent {\r\n  action: string;\r\n  object: any;\r\n  index: number | null | undefined;\r\n\r\n  constructor(action: string, object: any, index?: number | null) {\r\n    this.action = action;\r\n    this.object = object;\r\n    this.index = index;\r\n  }\r\n}\r\n","export enum IconTypeEnum {\r\n    MATERIAL_ICON='MATERIAL_ICON',\r\n    FONT_AWESOME='FONT_AWESOME'\r\n}\r\n","import {AlignEnum} from \"../../enums/align.enum\";\r\nimport {IconTypeEnum} from \"../../enums/icon-type.enum\";\r\n\r\nexport class ButtonModel {\r\n  columnDef: string = '';\r\n  color?: string = 'warn';\r\n  icon: string = '';\r\n  iconType?: IconTypeEnum = IconTypeEnum.MATERIAL_ICON;\r\n  click: string = '';\r\n  isShowHeader?: boolean;\r\n  title?: string = '';\r\n  display?: (e: any) => boolean;\r\n  disabled?: (e: any) => boolean;\r\n  className?: string;\r\n  header?: ButtonModel | string;\r\n  alignHeader?: AlignEnum;\r\n}\r\n","export class CheckboxModel {\r\n  id: number;\r\n  viewValue: string;\r\n  checked: boolean;\r\n  disabled: boolean | undefined;\r\n\r\n  constructor(id: number, viewValue: string, checked: boolean, disabled?: boolean) {\r\n    this.id = id;\r\n    this.viewValue = viewValue;\r\n    this.checked = checked;\r\n    this.disabled = disabled;\r\n  }\r\n}\r\n","export enum ColumnTypeEnum {\r\n  VIEW = 'VIEW',\r\n  INPUT_COUNTER = 'INPUT_COUNTER',\r\n  DATE_PICKER = 'DATE_PICKER',\r\n  MULTI_SELECT_AUTOCOMPLETE = 'MULTI_SELECT_AUTOCOMPLETE',\r\n  CHECKBOX = 'CHECKBOX',\r\n  BASE64 = 'BASE64',\r\n  IMG = 'IMG',\r\n  IMG_NO_SECURE = 'IMG_NO_SECURE',\r\n  // HTML = 'HTML',\r\n  // INNER_TEXT = 'INNER_TEXT',\r\n  BUTTON = 'BUTTON',\r\n  INPUT = 'INPUT',\r\n  LINK = 'LINK',\r\n  STYLE_CSS = 'STYLE_CSS',\r\n  LIVE_SEARCHING = 'LIVE_SEARCHING'\r\n}\r\n","export enum AlignEnum {\r\n  LEFT = 'start',\r\n  CENTER = 'center',\r\n  RIGHT = 'end'\r\n}\r\n","import { ColumnTypeEnum } from '../../enums/column-type.enum';\r\nimport { SelectModel } from './select.model';\r\nimport { AlignEnum } from '../../enums/align.enum';\r\nimport { TableFooterModel } from './table-footer.model';\r\nimport { ButtonModel } from './button.model';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport class ColumnModel {\r\n  columnDef: string = '';\r\n  header: ((e: any) => string) | string | undefined;\r\n  // set default theo ly thuyet, phai gan lai\r\n  align?: AlignEnum = AlignEnum.LEFT;\r\n  alignHeader?: AlignEnum;\r\n  // phục vụ cho loại cột là hiển thị đường dẫn\r\n  link?: (e: any) => string;\r\n  // Phục vụ cho style css\r\n  style?: (e: any) => string;\r\n  className?: ((e: any) => string) | string;\r\n  headerClassName?: (() => string) | string;\r\n  columnType?: ColumnTypeEnum | ((e: any) => ColumnTypeEnum) = ColumnTypeEnum.VIEW;\r\n  onCellValueChange?: (e: any) => void;\r\n  onHeaderCellValueChange?: (val: any) => void;\r\n  disabled?: (e: any) => boolean;\r\n  optionValues?: (e: any) => SelectModel[];\r\n  display?: (e: any) => boolean;\r\n  isShowHeader?: boolean = false;\r\n  isNotShowHeaderCheckbox?: boolean = false;\r\n  isRequired?: boolean | (() => boolean) = false;\r\n  min?: (e: any) => any;\r\n  max?: (e: any) => any;\r\n  hasWordBreakStyle?: boolean = false;\r\n  validate?: (e: any) => any | null;\r\n  errorMessage?: Map<string, () => string>;\r\n  isTree?: boolean = false;\r\n  isMultipleSelect?: boolean = false;\r\n  isDecimal?: boolean | (() => boolean) = false;\r\n  isExpandOptionColumn?: () => boolean;\r\n  footer?: TableFooterModel;\r\n  footers?: TableFooterModel[] = [];\r\n  button?: ButtonModel;\r\n  // Dùng cho cva-live-searching\r\n  displayKey?: string;\r\n  mappingConfig?: Record<string, string> = {};\r\n  searchFn?: (term: string) => Observable<any[]>;\r\n\r\n  title: (e: any) => string = (e) => `${e}`;\r\n\r\n  cell: (e: any) => string = (e) => `${e}`;\r\n}\r\n","export class BaseModel {\r\n  id?: number | null;\r\n  checked?: boolean = false;\r\n  invalid?: boolean = false;\r\n  createdDate?: string;\r\n  createdBy?: string;\r\n  lastModifiedDate?: string;\r\n  lastModifiedBy?: string;\r\n}\r\n","import {FormGroup} from \"@angular/forms\";\r\nimport {BaseModel} from \"./base.model\";\r\n\r\nexport class MenuModel extends BaseModel {\r\n    clientId: string | null = null;\r\n    code: string | null = null;\r\n    url: string | null = null;\r\n    appType: string | null = null;\r\n    parentMenu: MenuModel | null = null;\r\n\r\n    constructor(form: FormGroup | number) {\r\n        super();\r\n        if (form instanceof FormGroup) {\r\n            this.id = form.get('id')?.value;\r\n            this.clientId = form.get('clientId')?.value;\r\n            this.code = form.get('code')?.value;\r\n            this.url = form.get('url')?.value;\r\n            this.appType = form.get('appType')?.value;\r\n            if (form.get('parentMenu')?.value) {\r\n                this.parentMenu = new MenuModel(form.get('parentMenu')?.value);\r\n            }\r\n        } else {\r\n            this.id = form;\r\n        }\r\n    }\r\n}\r\n","import { UserAuthentication } from './user.authentication';\r\nimport { Authority } from './authority';\r\n\r\nexport class OAuth2AuthenticationDto {\r\n  userAuthentication: UserAuthentication | null = null;\r\n  authorities: Authority[] | null = null;\r\n  name: string | null = null;\r\n  orgId: number | null = null;\r\n  orgCode: string | null = null;\r\n  orgName: string | null = null;\r\n  orgType: string | null = null;\r\n  orgForm: string | null = null;\r\n  orgPath: string | null = null;\r\n  orgIsApproveVo: boolean | null = null;\r\n  sapId: number | null = null;\r\n  voAuthentication: string | null = null;\r\n}\r\n\r\n","export class Authority {\r\n  authority: string = '';\r\n}\r\n","export class TablePagingResponseModel {\r\n  content: any[] = [];\r\n  page: {\r\n    size: number | null;\r\n    number: number | null;\r\n    totalElements: number | null;\r\n    totalPages: number | null;\r\n  } = {\r\n    size: null,\r\n    number: null,\r\n    totalElements: null,\r\n    totalPages: null,\r\n  };\r\n}\r\n","export class TablePagingRequestModel {\r\n  text: string = '';\r\n  pageSize: number = 0;\r\n  pageNumber: number = 0;\r\n  totalElements: number = 0;\r\n}\r\n","import {MenuModel} from './menu.model';\r\nimport {AbstractControl, FormGroup} from '@angular/forms';\r\nimport {PermissionModel} from \"./permission.model\";\r\nimport {BaseModel} from \"./base.model\";\r\n\r\nexport class RoleModel extends BaseModel {\r\n    clientId: string | null = null;\r\n    roleName: string | null = null;\r\n    description: string = '';\r\n    permissions: PermissionModel[] = [];\r\n    menus: MenuModel[] = [];\r\n\r\n    constructor(form: FormGroup | number) {\r\n        super();\r\n        if (!form) {\r\n            return;\r\n        }\r\n        if (form instanceof FormGroup) {\r\n            const formId: AbstractControl | null = form.get('id');\r\n            if (formId) {\r\n                this.id = formId.value;\r\n            }\r\n            const formClientId: AbstractControl | null = form.get('clientId');\r\n            if (formClientId) {\r\n                this.clientId = formClientId.value;\r\n            }\r\n            const formRoleName: AbstractControl | null = form.get('roleName');\r\n            if (formRoleName) {\r\n                this.roleName = formRoleName.value;\r\n            }\r\n            const formDescription: AbstractControl | null = form.get('description');\r\n            if (formDescription) {\r\n                this.description = formDescription.value;\r\n            }\r\n        } else {\r\n            this.id = form;\r\n        }\r\n    }\r\n}\r\n","export class SelectModel {\r\n  value: any;\r\n  displayValue: string;\r\n  disabled: boolean | undefined;\r\n  rawData: any;\r\n\r\n  constructor(value: any, displayValue: string, disabled?: boolean, rawData?: any) {\r\n    this.value = value;\r\n    this.displayValue = displayValue;\r\n    this.disabled = disabled;\r\n    this.rawData = rawData;\r\n  }\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\n\r\nexport class UIState {\r\n  moduleName: string = '';\r\n  formGroup: FormGroup = new FormGroup({});\r\n}\r\n","export enum FileTypeEnum {\r\n  DOCX = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n  JPG = 'image/jpeg',\r\n  PDF = 'application/pdf',\r\n  PNG = 'image/png',\r\n  RTF = 'application/msword',\r\n  TXT = 'text/plain',\r\n  XLSX = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n  XML = 'text/xml',\r\n  ZIP = 'application/x-zip-compressed',\r\n  DOC = 'application/msword',\r\n  XLS = 'application/vnd.ms-excel'\r\n}\r\n","export class UploadModel {\r\n  id?:number;\r\n  name: string;\r\n  type?: string;\r\n  binary: File|null;\r\n  previewValue: string | ArrayBuffer | null;\r\n\r\n  constructor(name: string, binary: File|null, previewValue: string | ArrayBuffer | null, type?: string,\r\n              id?:number) {\r\n    this.name = name;\r\n    this.binary = binary;\r\n    this.previewValue = previewValue;\r\n    this.type = type;\r\n    this.id = id;\r\n  }\r\n  static init(url: string){\r\n    const type = UploadModel.getFileType(url);\r\n    const name = UploadModel.getFileName(url);\r\n    return new UploadModel(name?name:'', null, url, type);\r\n  }\r\n\r\n  static getFileType(url: string) {\r\n    const fileTypes = url ? url.split('.') : [];\r\n    const type = fileTypes.length > 0 ? fileTypes[fileTypes.length - 1] : '';\r\n    if (['png', 'jpg', 'jpeg', 'img'].includes(type?.toLowerCase())) {\r\n      return 'image/' + type;\r\n    } else if ('pdf' === type?.toLowerCase()) {\r\n      return 'application/pdf';\r\n    }\r\n    return type;\r\n  }\r\n\r\n  static getFileName(url: string) {\r\n    let fileName = url ? url.split('/') : [];\r\n\r\n    return fileName.pop();\r\n  }\r\n}\r\n","export class BreadCrumbModel {\r\n  label: string;\r\n  url: string;\r\n\r\n  constructor(label: string, url: string) {\r\n    this.label = label;\r\n    this.url = url;\r\n  }\r\n}\r\n","import {BaseModel} from \"../base.model\";\r\n\r\nexport class FlatTreeModel {\r\n    rootData: BaseModel[] = [];\r\n    value: (node: any) => string | number = (node) => `${node}`;\r\n    display: (node: any) => string = (node) => `${node}`;\r\n    children: (node: any) => any[] = (node) => [];\r\n}\r\n","import { AlignEnum } from '../../enums/align.enum';\r\n\r\nexport class TableFooterModel {\r\n  columnDef: string = '';\r\n  title: (e: any) => string = (e) => `${e}`;\r\n  cell: (e: any) => string = (e) => `${e}`;\r\n  colspan: number | ((e: any) => number) = 1;\r\n  align?: AlignEnum = AlignEnum.LEFT;\r\n  className?: ((e: any) => string) | string;\r\n  display?: (e:any) => boolean; // default is false\r\n}\r\n","export class RangeDatePickerModel {\r\n  fromDate: any = '';\r\n  toDate: any = '';\r\n\r\n  constructor(fromDate?: any, toDate?: any) {\r\n    this.fromDate = fromDate ? fromDate : '';\r\n    this.toDate = toDate ? toDate : '';\r\n  }\r\n\r\n  isString(inputValue: any): boolean {\r\n    return typeof inputValue === 'string' || inputValue instanceof String;\r\n  }\r\n\r\n  reset() {\r\n    this.toDate = '';\r\n    this.fromDate = '';\r\n  }\r\n\r\n}\r\n","export class FlatTreeConfigModel {\r\n    isDynamicConfig = false; /* bằng true khi muốn call liên tục hàm display và hàm disabled */\r\n    display: ((node: any) => boolean) | boolean = true;\r\n    disabled: ((node: any) => boolean) | boolean = false;\r\n}\r\n","export class FlatTreeNodeModel {\r\n    children?: FlatTreeNodeModel[] = [];\r\n    value: any;\r\n    displayValue = '';\r\n    checked?: boolean;\r\n    checkedDisplay?: boolean;\r\n    filterChecked?: boolean;\r\n    level = 0;\r\n    expandable?: boolean;\r\n    isExpanded?: boolean; // storage expanded status in selected tree\r\n    isFilterExpanded?: boolean; // storage expanded status in choose tree\r\n    display?: boolean = true;\r\n    _displayFuncInput?: ((node: any) => boolean) | boolean;\r\n    disabled?: boolean = false;\r\n    _disabledFuncInput?: ((node: any) => boolean) | boolean;\r\n}\r\n","export enum DialogTypeEnum {\r\n  CONFIRM='CONFIRM',\r\n  ERROR='ERROR',\r\n  INPUT_CONFIRM='INPUT_CONFIRM'\r\n}\r\n","import {DialogTypeEnum} from \"../../enums/dialog-type.enum\";\r\n\r\nexport class CustomDialogDataConfigModel {\r\n    type: DialogTypeEnum = DialogTypeEnum.CONFIRM;\r\n    maxLength?: number;\r\n    msg?: string;\r\n    msgDetail?: string;\r\n    errorMsg?: string;\r\n    btnOKString?: string;\r\n    btnOKClass?: string;\r\n    btnOK_IconClass?: string;\r\n    btnCancelClass?: string;\r\n    btnCancel_IconClass?: string;\r\n    btnCancelString?: string;\r\n    customClass?: string;\r\n    hideIconButton?: boolean;\r\n}\r\n","import { RoleModel } from '../role.model';\r\n\r\nexport class Principal {\r\n  username: string | null = null;\r\n  firstName: string | null = null;\r\n  middleName: string | null = null;\r\n  lastName: string | null = null;\r\n  fullName: string | null = null;\r\n  gender: string | null = null;\r\n  email: string | null = null;\r\n  phone: string | null = null;\r\n  voAuthentication: string | null = null;\r\n  orgId: number | null = null;\r\n  orgCode: string | null = null;\r\n  orgName: string | null = null;\r\n  orgType: string | null = null;\r\n  orgForm: string | null = null;\r\n  orgSapId: number | null = null;\r\n  orgPath: string | null = null;\r\n  orgIsApproveVo: boolean | null = null;\r\n  roles: RoleModel[] | null = [];\r\n  mustChangePassword: boolean | null = null;\r\n}\r\n","import {Observable} from \"rxjs\";\r\n\r\nexport class DialogImportFileConfigModel {\r\n    downloadTemplateFunc?: () => void;\r\n    importFunc?: (file: File | undefined) => Observable<any>;\r\n    downloadErrorFile?: (errorImportExcelUrl: String) => void;\r\n    confirmMsgKey = '';\r\n    successMsgKey = '';\r\n    errorMsgKey = '';\r\n}\r\n","import {BaseModel} from \"./base.model\";\r\n\r\nexport class PermissionModel extends BaseModel{\r\n    clientId: string | undefined;\r\n    description: string | undefined;\r\n    id: number | null = null;\r\n    url: string | undefined;\r\n}\r\n","export enum ActionTypeEnum {\r\n  '_ADD' = 'add',\r\n  '_EDIT' = 'edit',\r\n  '_VIEW' = 'view'\r\n}\r\n","export enum BaseStatusEnum {\r\n  _ = 'base.status.all',\r\n  _DRAFT = 'base.status.draft',\r\n  _APPROVED = 'base.status.approved',\r\n  _REJECTED = 'base.status.rejected',\r\n}\r\n","import { ButtonClickEvent } from '../../models/button-click.event';\r\nimport { OAuth2AuthenticationDto } from '../../models/oauth/oAuth2AuthenticationDto';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AuthoritiesService } from '../../services/authorities.service';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { HttpParams } from '@angular/common/http';\r\n\r\nexport class BaseTableComponent {\r\n  me: OAuth2AuthenticationDto | null = null;\r\n\r\n  constructor(protected activatedRoute: ActivatedRoute, protected authoritiesService: AuthoritiesService) {\r\n    if (!this.authoritiesService.me && this.activatedRoute.snapshot.data) {\r\n      this.me = this.activatedRoute.snapshot.data['me'];\r\n    }\r\n    if (!!this.authoritiesService.me) {\r\n      this.me = this.authoritiesService.me;\r\n    }\r\n    if (!!this.me) {\r\n      this.authoritiesService.me = this.me;\r\n      this.authoritiesService.stateMe.next(this.me);\r\n    }\r\n  }\r\n\r\n  onRowButtonClick(event: ButtonClickEvent) {\r\n    const window = this as any;\r\n    if (window[event.action]) {\r\n      window[event.action](event.object, event.index);\r\n    }\r\n  }\r\n\r\n  _collectParams(searchForm: FormGroup, map: { [key: string]: string }): HttpParams {\r\n    let params = new HttpParams();\r\n    for (const key of Object.keys(map)) {\r\n      const value = map[key];\r\n      if (value) {\r\n        const control = searchForm.get(value);\r\n        if (control) {\r\n          params = params.set(key, control.value ? control.value : '');\r\n        }\r\n      }\r\n    }\r\n    return params;\r\n  }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface NiceComponentLibraryConfig {\r\n  BASE_URL: string;\r\n  BASE_AUTHORIZATION_URL: string;\r\n  PAGE_SIZE: number;\r\n  PAGE_SIZE_OPTIONS: number[];\r\n  API_DATE_FORMAT: string;\r\n  DIS_DATE_FORMAT: string;\r\n  DIS_DATE_TIME_FORMAT?: string;\r\n  DIALOG_LOGO?: string;\r\n  NO_IMAGE_AVAILABLE?: string;\r\n}\r\n\r\nexport const InjectTokenNextSolutionsConfig = new InjectionToken<NiceComponentLibraryConfig>('InjectTokenNextSolutionsConfig');\r\n","import { Component, Inject, Injector, OnInit, Optional, Self } from '@angular/core';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogTypeEnum } from '../enums/dialog-type.enum';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { CustomDialogDataConfigModel } from '../models/components/custom-dialog-data-config.model';\r\n\r\n@Component({\r\n  selector: 'cva-custom-dialog',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-custom-dialog dialog-content {{data.customClass}}\" *ngIf=\"data\"\r\n\r\n         style=\"padding-bottom: 0px !important;\"\r\n         fxLayout=\"column\">\r\n      <div class=\"img\"\r\n           fxLayoutAlign=\"center center\"\r\n           fxLayout\r\n           *ngIf=\"config && config.DIALOG_LOGO\">\r\n        <img src=\"{{config.DIALOG_LOGO}}\" alt=\"confirm-logo\" />\r\n      </div>\r\n      <div class=\"content\"\r\n           fxLayoutAlign=\"start stretch\"\r\n           fxLayout=\"column\">\r\n        <div class=\"text-msg\">\r\n          {{ data && data.msg ? data.msg : '' }}\r\n        </div>\r\n        <div class=\"text-msg-detail\" *ngIf=\"data && data.msgDetail\">\r\n          {{ data.msgDetail }}\r\n        </div>\r\n        <!--                <div class=\"text-error\" *ngIf=\"data.type === DialogTypeEnum.ERROR\">-->\r\n        <!--                    {{data && data.msg ? data.msg : ''}}-->\r\n        <!--                </div>-->\r\n        <!--                <div class=\"text-area\" *ngIf=\"data.type === DialogTypeEnum.INPUT_CONFIRM\"-->\r\n        <!--                     fxLayoutAlign=\"center center\"-->\r\n        <!--                     fxLayout=\"column\">-->\r\n        <!--                    <label fxLayoutAlign=\"center center\"-->\r\n        <!--                           fxLayout>{{data && data.msg ? data.msg : ''}}</label>-->\r\n\r\n        <mat-form-field appearance=\"outline\" class=\"input-confirm-dialog\" fxFlex=\"100%\"\r\n                        fxLayout=\"column\" *ngIf=\"data.type === DialogTypeEnum.INPUT_CONFIRM\">\r\n                            <textarea matInput [(ngModel)]=\"inputText\" fxFlex=\"100%\"\r\n                                      maxlength=\"{{(data && !!data.maxLength) ? data.maxLength : 524288}}\"\r\n                                      (ngModelChange)=\"onChangeInput()\"></textarea>\r\n          <span *ngIf=\"!!data && !!data.maxLength\" class=\"input-suffix\"\r\n                matSuffix>{{ (inputText?.length ? inputText.length : 0) + '/' + data.maxLength }}</span>\r\n          <mat-hint style=\"color: red\" *ngIf=\"isError\">{{ errorInputText }}</mat-hint>\r\n        </mat-form-field>\r\n        <!--                </div>-->\r\n      </div>\r\n    </div>\r\n    <hr class=\"display-hr-tag\" *ngIf=\"data.type !== DialogTypeEnum.INPUT_CONFIRM\">\r\n    <div class=\"buttonArea margin-top-10\">\r\n      <button mat-button\r\n              class=\"{{data.btnCancelClass ? data.btnCancelClass : 'primary outline'}} btn-Cancel\"\r\n              *ngIf=\"data.type !== DialogTypeEnum.ERROR\"\r\n              (click)=\"onCancel()\">\r\n        <i *ngIf=\"!data.hideIconButton\"\r\n           class=\"{{data.btnCancel_IconClass ? data.btnCancel_IconClass : 'fa fa-times' }}\"></i> {{ data && data.btnCancelString ? data.btnCancelString : ('common.Cancel' | translate) }}\r\n      </button>\r\n      <button mat-button\r\n              class=\"{{data.btnOKClass ? data.btnOKClass : 'primary'}} btn-OK\"\r\n              (click)=\"onConfirm()\">\r\n        <i *ngIf=\"!data.hideIconButton\"\r\n           class=\"{{data.btnOK_IconClass ? data.btnOK_IconClass : 'fa fa-check'}}\"></i> {{ data && data.btnOKString ? data.btnOKString : ('common.OK' | translate) }}\r\n      </button>\r\n    </div>\r\n\r\n  `,\r\n  styles: [],\r\n})\r\nexport class CvaCustomDialogComponent implements OnInit, ControlValueAccessor {\r\n\r\n  config: NiceComponentLibraryConfig;\r\n\r\n  get DialogTypeEnum() {\r\n    return DialogTypeEnum;\r\n  }\r\n\r\n  inputText = '';\r\n  errorInputText = '';\r\n  isError = false;\r\n\r\n  constructor(\r\n    private translateService: TranslateService,\r\n    private dialogRef: MatDialogRef<CvaCustomDialogComponent>,\r\n    private injector: Injector,\r\n    @Self() @Optional() ngControl: NgControl,\r\n    @Inject(MAT_DIALOG_DATA) public data: CustomDialogDataConfigModel) {\r\n    if (ngControl) {\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    this.inputText = obj;\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  onConfirm() {\r\n    if (this.data && this.data.type) {\r\n      if (this.data.type === DialogTypeEnum.INPUT_CONFIRM) {\r\n        this.isError = !this.inputText.trim();\r\n        if (this.isError) {\r\n          this.errorInputText = !!this.data?.errorMsg ? this.translateService.instant(this.data.errorMsg) : this.translateService.instant('common.required');\r\n          return;\r\n        }\r\n        this.dialogRef.close({ value: this.inputText });\r\n      } else {\r\n        this.dialogRef.close({ value: 1 });\r\n      }\r\n    }\r\n  }\r\n\r\n  onCancel() {\r\n    this.dialogRef.close();\r\n  }\r\n\r\n  onChangeInput() {\r\n    this.isError = !this.inputText.trim();\r\n    if (this.isError) {\r\n      this.errorInputText = !!this.data?.errorMsg ? this.translateService.instant(this.data.errorMsg) : this.translateService.instant('common.required');\r\n    }\r\n  }\r\n}\r\n","import { ToastrService } from 'ngx-toastr';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TablePagingRequestModel } from '../models/components/table-paging-request.model';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { AbstractControl, FormArray, FormControl, FormGroup, NgControl } from '@angular/forms';\r\nimport { SelectModel } from '../models/components/select.model';\r\nimport { FlatTreeModel } from '../models/components/flat-tree.model';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { CvaCustomDialogComponent } from '../components/cva-custom-dialog.component';\r\nimport { DialogTypeEnum } from '../enums/dialog-type.enum';\r\nimport { CustomDialogDataConfigModel } from '../models/components/custom-dialog-data-config.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UtilsService {\r\n\r\n  constructor(\r\n    private dialog: MatDialog,\r\n    private transService: TranslateService, private toastr: ToastrService) {\r\n  }\r\n\r\n  static getEnumValue<T>(o: T, value: string): { [P in keyof T]: T[P] }[keyof T] {\r\n    return (o as any)['_' + value]; // No type safety here unfrotunately\r\n  }\r\n\r\n  static calcPosition(e: any, results: MatTableDataSource<BaseModel>, paging: TablePagingRequestModel) {\r\n    return (paging ? ((paging.pageNumber - 1) * paging.pageSize) : 0) + (results.data.indexOf(e) + 1);\r\n  }\r\n\r\n  static reduceEntityAttributeForFormControl(formGroup: FormGroup, e: any,\r\n                                             dateRangeConfigList?: {\r\n                                               dateRangeControlName: string,\r\n                                               fromDateControlName: string,\r\n                                               toDateControlName: string\r\n                                             }[]) {\r\n    return Object.keys(formGroup.controls).reduce(reduceEntityAttributeForFormControlByControlName, {});\r\n\r\n    function reduceEntityAttributeForFormControlByControlName(formControl: any, ctrlName: string) {\r\n      if (e) {\r\n        let includesOfDateRangeConfig = false;\r\n        if (dateRangeConfigList) {\r\n          for (const dateRangeConfig of dateRangeConfigList) {\r\n            if (dateRangeConfig\r\n              && [dateRangeConfig.dateRangeControlName,\r\n                dateRangeConfig.fromDateControlName, dateRangeConfig.toDateControlName].includes(ctrlName)) {\r\n              includesOfDateRangeConfig = true;\r\n              switch (ctrlName) {\r\n                case dateRangeConfig.dateRangeControlName:\r\n                  formControl[ctrlName] = {\r\n                    fromDate: e[dateRangeConfig.fromDateControlName] ? e[dateRangeConfig.fromDateControlName] : null,\r\n                    toDate: e[dateRangeConfig.toDateControlName] ? e[dateRangeConfig.toDateControlName] : null,\r\n                  };\r\n                  break;\r\n                case dateRangeConfig.fromDateControlName:\r\n                  formControl[ctrlName] = e[ctrlName];\r\n                  if (formControl[dateRangeConfig.dateRangeControlName]\r\n                    && typeof (formControl[dateRangeConfig.dateRangeControlName]) === 'object') {\r\n                    formControl[dateRangeConfig.dateRangeControlName].fromDate = e[ctrlName];\r\n                  }\r\n                  break;\r\n                case dateRangeConfig.toDateControlName:\r\n                  formControl[ctrlName] = e[ctrlName];\r\n                  if (formControl[dateRangeConfig.dateRangeControlName]\r\n                    && typeof (formControl[dateRangeConfig.dateRangeControlName]) === 'object') {\r\n                    formControl[dateRangeConfig.dateRangeControlName].toDate = e[ctrlName];\r\n                  }\r\n                  break;\r\n                default:\r\n                  break;\r\n              }\r\n            }\r\n          }\r\n        }\r\n        if (!includesOfDateRangeConfig) {\r\n          if (typeof (e[ctrlName]) === 'boolean') {\r\n            formControl[ctrlName] = e[ctrlName] ? '1' : '0';\r\n          } else if (e[ctrlName] instanceof Array) {\r\n            formControl[ctrlName] = e[ctrlName];\r\n          } else if (typeof (e[ctrlName]) === 'object') {\r\n            formControl[ctrlName] = e[ctrlName]\r\n              ? (e[ctrlName].id\r\n                ? e[ctrlName].id\r\n                : (e[ctrlName].code ? e[ctrlName].code : ''))\r\n              : null;\r\n          } else {\r\n            formControl[ctrlName] = (e[ctrlName] != null && e[ctrlName] != undefined) ? e[ctrlName] : '';\r\n          }\r\n        }\r\n      } else {\r\n        formControl[ctrlName] = '';\r\n      }\r\n      return formControl;\r\n    }\r\n  }\r\n\r\n  static cloneAbstractControl<T extends AbstractControl>(control: T): T | undefined {\r\n    let newControl: T | undefined;\r\n\r\n    if (control instanceof FormGroup) {\r\n      const formGroup = new FormGroup({}, control.validator, control.asyncValidator);\r\n      const controls = control.controls;\r\n      if (controls) {\r\n        Object.keys(controls).forEach(key => {\r\n          const tempControl: AbstractControl | undefined = UtilsService.cloneAbstractControl(controls[key]);\r\n          if (tempControl) {\r\n            formGroup.addControl(key, tempControl);\r\n          }\r\n        });\r\n      }\r\n      newControl = formGroup as any;\r\n    } else if (control instanceof FormArray) {\r\n      const formArray = new FormArray<AbstractControl<any, any>>([], control.validator, control.asyncValidator);\r\n      const controls = control.controls;\r\n      if (controls) {\r\n        controls.forEach((formControl: AbstractControl) => {\r\n          const tempControl: AbstractControl | undefined = UtilsService.cloneAbstractControl<AbstractControl>(formControl);\r\n          if (tempControl) {\r\n            formArray.push(tempControl);\r\n          }\r\n        });\r\n      }\r\n      newControl = formArray as any;\r\n    } else if (control instanceof FormControl || this.isNgControl(control)) {\r\n      newControl = new FormControl(control.value, control.validator, control.asyncValidator) as any;\r\n    } else {\r\n      console.error('Error: unexpected formControl value', control);\r\n    }\r\n\r\n    if (control.disabled && newControl) newControl.disable({ emitEvent: false });\r\n\r\n    return newControl;\r\n  }\r\n\r\n  static isNgControl(control: any): control is NgControl {\r\n    return control && 'control' in control;\r\n  }\r\n\r\n  static convertTreeDataToAutocompleteData(treeFields: FlatTreeModel,\r\n                                           symbol: string,\r\n                                           hasChildFn: (_: number, node: any) => boolean,\r\n                                           nodes: BaseModel[],\r\n                                           prefixDisplayValue: string | null): SelectModel[] {\r\n    let result: SelectModel[] = [];\r\n    if (treeFields) {\r\n      for (const node of nodes) {\r\n        const value = treeFields.value(node).toString();\r\n        const displayValue = prefixDisplayValue ? prefixDisplayValue + symbol + treeFields.display(node) : treeFields.display(node);\r\n        const hasChild = hasChildFn(0, node);\r\n        if (hasChild) {\r\n          const childen = treeFields.children(node);\r\n          result.push(...this.convertTreeDataToAutocompleteData(treeFields, symbol, hasChildFn, childen, displayValue));\r\n        } else {\r\n          result.push(new SelectModel(value, displayValue, hasChild, node));\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  public strFormat(str: string, replacement?: string[]) {\r\n    let a = this.transService.instant(str);\r\n    if (replacement === null || replacement === undefined || replacement.length === 0) {\r\n      return a;\r\n    }\r\n    replacement.forEach((value, index) => {\r\n      a = a.replace('{' + index + '}', this.transService.instant(value));\r\n    });\r\n    return a;\r\n  }\r\n\r\n  public onSuccessFunc = (onSuccessMessage?: string): void => {\r\n    if (onSuccessMessage) {\r\n      const msg = this.transService.instant(onSuccessMessage);\r\n      this.toastr.toastrConfig.positionClass = 'toast-bottom-right';\r\n      this.toastr.success(msg);\r\n    }\r\n  };\r\n\r\n  public showWarningToarst(msgKey: string, replacement?: string[]) {\r\n    const msg = this.strFormat(msgKey, replacement);\r\n    this.toastr.toastrConfig.positionClass = 'toast-bottom-right';\r\n    this.toastr.warning(msg);\r\n  }\r\n\r\n  public showErrorToarst(msgKey: string, replacement?: string[]) {\r\n    const msg = this.strFormat(msgKey, replacement);\r\n    this.toastr.toastrConfig.positionClass = 'toast-bottom-right';\r\n    this.toastr.error(msg);\r\n  }\r\n\r\n  public showError = (err: string): void => {\r\n    let errLocale = '';\r\n    if (err !== undefined && err !== null) {\r\n      errLocale = this.transService.instant(err);\r\n    }\r\n    this.dialog.open(CvaCustomDialogComponent, {\r\n      width: '500px',\r\n      data: {\r\n        msg: `${errLocale}`,\r\n        type: DialogTypeEnum.ERROR,\r\n      },\r\n    });\r\n  };\r\n\r\n  public execute3(apiCall: any, onSuccessFunc: (this: void, data: any, onSuccessMessage?: string) => void, onSuccessMessage: string,\r\n                  onErrorFunc?: (err: any) => void) {\r\n\r\n    if (!apiCall) {\r\n      if (onSuccessFunc) {\r\n        onSuccessFunc(null);\r\n      }\r\n      return;\r\n    }\r\n    apiCall.subscribe((data: any) => {\r\n      if (onSuccessFunc) {\r\n        if (onSuccessMessage) {\r\n          onSuccessFunc(data, onSuccessMessage);\r\n        } else {\r\n          onSuccessFunc(data);\r\n        }\r\n      } else {\r\n        this.onSuccessFunc(onSuccessMessage);\r\n      }\r\n    }, (error1: any) => {\r\n      if (error1 !== '401') {\r\n        if (!!onErrorFunc) {\r\n          onErrorFunc(error1);\r\n        } else {\r\n          this.showError(error1);\r\n        }\r\n\r\n      }\r\n    });\r\n  }\r\n\r\n  public execute(apiCall: any, onSuccessFunc: (this: void, d: any, onSuccessMessage?: string) => void, onSuccessMessage: string,\r\n                 confirmMsgTitle: string, confirmMsgTitleParamsFormat: string[] = [],\r\n                 confirmMsgDetail: string = '', confirmMsgDetailParamsFormat: string[] = [],\r\n                 confirmDialogConfig: MatDialogConfig<CustomDialogDataConfigModel> | undefined = undefined,\r\n                 confirmDialogButtonOk: string = 'common.OK', confirmDialogButtonCancel: string = 'common.Cancel',\r\n  ) {\r\n    if (confirmMsgTitle !== undefined && confirmMsgTitle !== null && confirmMsgTitle !== '') {\r\n      this.showConfirmDialog(confirmMsgTitle, confirmMsgTitleParamsFormat, confirmMsgDetail, confirmMsgDetailParamsFormat,\r\n        confirmDialogConfig, confirmDialogButtonOk, confirmDialogButtonCancel)\r\n        .afterClosed().subscribe(result => {\r\n        if (result && result.value) {\r\n          this.execute3(apiCall, onSuccessFunc, onSuccessMessage);\r\n        }\r\n      });\r\n    } else {\r\n      this.execute3(apiCall, onSuccessFunc, onSuccessMessage);\r\n    }\r\n  }\r\n\r\n  public executeWithErrorHandle(method: () => Observable<any>,\r\n                                onSuccessFunc: (this: void, d: any, onSuccessMessage?: string) => void,\r\n                                onSuccessMessage: string,\r\n                                confirmMsgTitle: string,\r\n                                confirmMsgParamsFormat: string[] = [],\r\n                                confirmMsgDetail: string = '',\r\n                                confirmMsgDetailParamsFormat: string[] = [],\r\n                                onErrorFunc: ((err: any) => void) | undefined,\r\n                                dialogConfig?: MatDialogConfig<CustomDialogDataConfigModel>,\r\n                                confirmDialogButtonOk: string = 'common.OK', confirmDialogButtonCancel: string = 'common.Cancel',\r\n  ) {\r\n\r\n    if (confirmMsgTitle !== undefined && confirmMsgTitle !== null && confirmMsgTitle !== '') {\r\n      this.showConfirmDialog(confirmMsgTitle, confirmMsgParamsFormat, confirmMsgDetail, confirmMsgDetailParamsFormat, dialogConfig,\r\n        confirmDialogButtonOk, confirmDialogButtonCancel)\r\n        .afterClosed().subscribe((result: any) => {\r\n        if (result && result.value) {\r\n          this.execute3(method(), onSuccessFunc, onSuccessMessage, onErrorFunc);\r\n        }\r\n      });\r\n    } else {\r\n      this.execute3(method(), onSuccessFunc, onSuccessMessage, onErrorFunc);\r\n    }\r\n  }\r\n\r\n  public showConfirmDialog(strTitle: string, replacementTitle: string[],\r\n                           strDetailMsg: string = '', replacementDetail: string[] = [],\r\n                           confirmDialogConfig: MatDialogConfig<CustomDialogDataConfigModel> | undefined = undefined,\r\n                           strOkText: string = 'common.OK', strCancelTex: string = 'common.Cancel', strCustomClass?: string,\r\n  ) {\r\n    const msgTitle = this.strFormat(strTitle, replacementTitle);\r\n    const msgDetail = !!strDetailMsg ? this.strFormat(strDetailMsg, replacementDetail) : '';\r\n    const strOk = this.transService.instant(strOkText);\r\n    const strCancel = this.transService.instant(strCancelTex);\r\n    const re = /\\./gi;\r\n    const customClass = (strCustomClass ? strCustomClass : strTitle).replace(re, '-');\r\n    return this.dialog.open(CvaCustomDialogComponent, confirmDialogConfig ? confirmDialogConfig : {\r\n      width: '500px',\r\n\r\n      data: {\r\n        customClass: customClass,\r\n        msg: msgTitle,\r\n        msgDetail: msgDetail,\r\n        type: DialogTypeEnum.CONFIRM,\r\n        btnOKString: strOk,\r\n        btnCanceString: strCancel,\r\n      } as CustomDialogDataConfigModel,\r\n    });\r\n  }\r\n\r\n  public showConfirmInputDialog(str1: string, replacement: string[],\r\n                                confirmInputDialogConfig: MatDialogConfig<CustomDialogDataConfigModel> | undefined = undefined,\r\n                                strOkText: string = 'common.OK', strCancelTex: string = 'common.Cancel', strCustomClass?: string,\r\n  ) {\r\n    const str = this.strFormat(str1, replacement);\r\n    const strOk = this.transService.instant(strOkText);\r\n    const strCancel = this.transService.instant(strCancelTex);\r\n    const re = /\\./gi;\r\n    const customClass = (strCustomClass ? strCustomClass : str1).replace(re, '-');\r\n\r\n    return this.dialog.open(CvaCustomDialogComponent,\r\n      confirmInputDialogConfig ? confirmInputDialogConfig : {\r\n        width: '500px',\r\n\r\n        data: {\r\n          customClass: customClass,\r\n          msg: str,\r\n          type: DialogTypeEnum.INPUT_CONFIRM,\r\n          btnOKString: strOk,\r\n          btnCancelString: strCancel,\r\n        } as CustomDialogDataConfigModel,\r\n      });\r\n  }\r\n\r\n  public getEnumValueTranslated<T>(o: T, value: string): { [P in keyof T]: T[P] }[keyof T] {\r\n    const key = (o as any)['_' + value]; // No type safety here unfrotunately\r\n    return this.transService.instant(key);\r\n  }\r\n\r\n  public toBlobJon(obj: any): Blob {\r\n    return new Blob([JSON.stringify(obj)], {\r\n      type: 'application/json',\r\n    });\r\n  }\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { FileSaverService } from 'ngx-filesaver';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ApiService {\r\n\r\n  config: NiceComponentLibraryConfig;\r\n\r\n  constructor(private http: HttpClient, private fileSaver: FileSaverService, private injector: Injector) {\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n  }\r\n\r\n  getFullUrl(url: string) {\r\n    return this.config.BASE_URL + url;\r\n  }\r\n\r\n  get<T>(nativeUrl: string, params: HttpParams, baseUrl?: string): Observable<T> {\r\n    return this.http.get<T>(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), { params });\r\n  }\r\n\r\n  getJSON<T>(file: string): Observable<T> {\r\n    return this.http.get<T>(file);\r\n  }\r\n\r\n  getBlob(nativeUrl: string, params: HttpParams, baseUrl?: string): Observable<Blob> {\r\n    const url = baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl);\r\n    return this.http.get(url, {\r\n      responseType: 'blob',  // Đặt responseType thành 'blob'\r\n    });\r\n  }\r\n\r\n  post(nativeUrl: string, obj: any, options?: { headers?: HttpHeaders, params?: HttpParams }, baseUrl?: string) {\r\n    return this.http.post(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), obj, options ? {\r\n      headers: options.headers,\r\n      params: options.params,\r\n    } : {});\r\n  }\r\n\r\n  postBlob(nativeUrl: string, obj: any, options: { headers?: HttpHeaders; params?: HttpParams }, baseUrl?: string) {\r\n    return this.http.post(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), obj, {\r\n      headers: options.headers,\r\n      params: options.params,\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n    });\r\n  }\r\n\r\n  patch(nativeUrl: string, obj: any, options?: { headers?: HttpHeaders, params?: HttpParams }, baseUrl?: string) {\r\n    return this.http.patch(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), obj,\r\n      options ? { headers: options.headers, params: options.params } : {});\r\n  }\r\n\r\n  put(nativeUrl: string, obj: any, options?: { headers?: HttpHeaders, params?: HttpParams }, baseUrl?: string) {\r\n    return this.http.put(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), obj,\r\n      options ? { headers: options.headers, params: options.params } : {});\r\n  }\r\n\r\n  delete(nativeUrl: string, options?: { headers?: HttpHeaders, params?: HttpParams }, baseUrl?: string) {\r\n    return this.http.delete(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), options ? {\r\n      headers: options.headers,\r\n      params: options.params,\r\n    } : {});\r\n  }\r\n\r\n  saveFile(nativeUrl: string, obj: any, options: {\r\n    headers?: HttpHeaders;\r\n    params?: HttpParams\r\n  }, baseUrl?: string, onErrorFunc?: (err: any) => void) {\r\n    this.http.post(baseUrl ? (baseUrl + nativeUrl) : this.getFullUrl(nativeUrl), obj, {\r\n      headers: options.headers,\r\n      params: options.params,\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n    }).subscribe((l: HttpResponse<Blob>) => {\r\n      let filename = '';\r\n      const disposition = l.headers.get('Content-Disposition');\r\n      if (disposition && disposition.indexOf('attachment') !== -1) {\r\n        const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n        const matches = filenameRegex.exec(disposition);\r\n        if (matches != null && matches[1]) {\r\n          filename = matches[1].replace(/['\"]/g, '');\r\n        }\r\n      }\r\n      const blobData: Blob | null = l.body;\r\n      const contentType: string | null = l.headers.get('Content-Type');\r\n      if (blobData && contentType) {\r\n        this.fileSaver.save(blobData, filename, contentType);\r\n      }\r\n    }, (err) => {\r\n      if (onErrorFunc) {\r\n        onErrorFunc(err);\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormStateService {\r\n  private subject = new BehaviorSubject<Map<string, FormGroup>>(new Map<string, FormGroup>());\r\n  uiState$ = this.subject.asObservable();\r\n\r\n  setMapState(mapState: Map<string, FormGroup>) {\r\n    this.subject.next(mapState);\r\n  }\r\n}\r\n","import { OAuth2AuthenticationDto } from '../models/oauth/oAuth2AuthenticationDto';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthoritiesService {\r\n\r\n  me: OAuth2AuthenticationDto | null = null;\r\n  stateMe: BehaviorSubject<OAuth2AuthenticationDto> = new BehaviorSubject<OAuth2AuthenticationDto>(new OAuth2AuthenticationDto());\r\n  me$: Observable<OAuth2AuthenticationDto> = this.stateMe.asObservable();\r\n\r\n  hasAuthorities(authorities: string[]) {\r\n    if (!authorities) {\r\n      return false;\r\n    }\r\n    let checkAuthority = false;\r\n    for (const authority of authorities) {\r\n      checkAuthority = checkAuthority || this.hasAuthority(authority.toLowerCase());\r\n      if (checkAuthority) {\r\n        break;\r\n      }\r\n    }\r\n    return checkAuthority;\r\n  }\r\n\r\n  hasAuthority(authority: string): boolean {\r\n    if (!authority || !this.me || !this.me.authorities) {\r\n      return false;\r\n    }\r\n    return this.me.authorities.map(x => x.authority.toString().toLowerCase()).includes(authority.toLowerCase());\r\n  }\r\n}\r\n","import { AfterViewInit, Directive, Injector, OnDestroy, OnInit } from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { UtilsService } from '../../services/utils.service';\r\nimport { FormStateService } from '../../services/form-state.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TablePagingRequestModel } from '../../models/components/table-paging-request.model';\r\nimport { Subject } from 'rxjs';\r\nimport { HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { BaseModel } from '../../models/base.model';\r\nimport { ButtonClickEvent } from '../../models/button-click.event';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { TablePagingResponseModel } from '../../models/components/table-paging-response.model';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../../models/nice-component-library.config';\r\nimport { ApiService } from '../../services/api.service';\r\nimport { ColumnModel } from '../../models/components/column.model';\r\nimport { AuthoritiesService } from '../../services/authorities.service';\r\n\r\n@Directive({\r\n  selector: 'BaseSearchComponent',\r\n  standalone: false,\r\n})\r\n\r\nexport class BaseSearchComponent extends BaseTableComponent implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n  isAdvancedSearch: boolean = false;\r\n  searchForm: FormGroup;\r\n  paging: TablePagingRequestModel;\r\n  results: MatTableDataSource<BaseModel> = new MatTableDataSource<BaseModel>([]);\r\n  columns: ColumnModel[] = [];\r\n  config: NiceComponentLibraryConfig;\r\n  protected moduleName: string = '';\r\n  protected unsubscribe$ = new Subject<void>();\r\n  protected isResetPaging: boolean = true;\r\n\r\n  constructor(protected router: Router,\r\n              protected apiService: ApiService,\r\n              protected utilsService: UtilsService,\r\n              protected formStateService: FormStateService,\r\n              protected translateService: TranslateService,\r\n              protected injector: Injector,\r\n              protected activatedRoute: ActivatedRoute,\r\n              protected authoritiesService: AuthoritiesService,\r\n              protected formGroup: FormGroup) {\r\n    super(activatedRoute, authoritiesService);\r\n    this.searchForm = this.formGroup;\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n    this.paging = new TablePagingRequestModel();\r\n    this.paging.pageSize = this.config.PAGE_SIZE;\r\n    this.paging.pageNumber = 1;\r\n    this.paging.totalElements = 0;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.formStateService.uiState$\r\n      .subscribe((mapState: Map<string, FormGroup>) => {\r\n        if (mapState && mapState.has(this.moduleName)) {\r\n          const stateFormGroup = mapState.get(this.moduleName);\r\n          if (stateFormGroup) {\r\n            const formGroup = UtilsService.cloneAbstractControl(stateFormGroup);\r\n            if (formGroup) {\r\n              if (!this.searchForm) {\r\n                this.searchForm = formGroup;\r\n              } else {\r\n                const formControls = formGroup.controls;\r\n                Object.keys(formControls).forEach(key => {\r\n                  const abstractControl: AbstractControl | null = this.searchForm.get(key);\r\n                  if (abstractControl) {\r\n                    abstractControl.setValue(formControls[key].value);\r\n                  }\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      });\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    Object.keys(this.searchForm.controls).forEach(key => {\r\n      const abstractControl: AbstractControl | null = this.searchForm.get(key);\r\n      if (abstractControl) {\r\n        abstractControl.valueChanges.subscribe(\r\n          value => {\r\n            this.isResetPaging = true;\r\n          },\r\n        );\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    let isOK: boolean = false;\r\n    this.formStateService.uiState$.subscribe((mapState: Map<string, FormGroup>) => {\r\n      if (!isOK) {\r\n        isOK = true;\r\n        mapState.set(this.moduleName, this.searchForm);\r\n        this.formStateService.setMapState(mapState);\r\n        this.unsubscribe$.next();\r\n        this.unsubscribe$.complete();\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n  onSubmit() {\r\n    this.isResetPaging = true;\r\n    this.search();\r\n  }\r\n\r\n  search() {\r\n    // Form extends will be override custom by business\r\n  }\r\n\r\n  afterSearch = (data: TablePagingResponseModel) => {\r\n    // Form extends will be override custom by business\r\n  };\r\n\r\n  _fillData(nativeUrl: string, params: HttpParams, baseUrl?: string) {\r\n    params = this.updateHttpParams(params);\r\n    this.apiService.get<TablePagingResponseModel>(nativeUrl, params, baseUrl).subscribe(this.afterFillData);\r\n  }\r\n\r\n  _fillDataByPostMethod(nativeUrl: string, obj: any, options: {\r\n    headers?: HttpHeaders,\r\n    params: HttpParams\r\n  }, baseUrl?: string) {\r\n    options.params = this.updateHttpParams(options.params);\r\n    this.apiService.post(nativeUrl, obj, options, baseUrl).subscribe(this.afterFillData);\r\n  }\r\n\r\n  pagingChange(event: TablePagingRequestModel) {\r\n    if (this.paging) {\r\n      this.paging = event;\r\n      this.search();\r\n    } else {\r\n      this.paging = event;\r\n    }\r\n  }\r\n\r\n  onClick(event: ButtonClickEvent) {\r\n    // Form extends will be override custom by business\r\n  }\r\n\r\n  onSuccessFunc = (data: any, onSuccessMessage?: string): void => {\r\n    this.utilsService.onSuccessFunc(onSuccessMessage ? onSuccessMessage : 'common.default.success');\r\n    this.search();\r\n  };\r\n\r\n  resetSearchFormValue() {\r\n    if (!this.searchForm) {\r\n      return;\r\n    }\r\n    for (const ctrName in this.searchForm.controls) {\r\n      this.searchForm.controls[ctrName].setValue('');\r\n    }\r\n  }\r\n\r\n  toggleAdvancedSearch() {\r\n    this.isAdvancedSearch = !this.isAdvancedSearch;\r\n  }\r\n\r\n  params2Object(params: HttpParams): Object {\r\n    const result: { [key: string]: any } = {};\r\n    params = this.removeEmptyParams(params);\r\n    params.keys().forEach(k => {\r\n      const value = params.get(k);\r\n      if (value && value.indexOf(',') >= 0) {\r\n        result[k] = value?.split(',');\r\n      } else {\r\n        result[k] = value;\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  private afterFillData = (data: TablePagingResponseModel | any) => {\r\n    this.isResetPaging = false;\r\n    if (data.content && data.content.length > 0) {\r\n      this.columns.forEach((column: ColumnModel) => {\r\n        column.isShowHeader = false;\r\n      });\r\n    }\r\n    this.afterSearch(data);\r\n    this.results = new MatTableDataSource<BaseModel>(data.content);\r\n    this.paging = new TablePagingRequestModel();\r\n    this.paging.pageSize = data.page.size ? data.page.size : 0;\r\n    this.paging.pageNumber = (data.page.number ? data.page.number : 0) + 1;\r\n    this.paging.totalElements = data.page.totalElements ? data.page.totalElements : 0;\r\n  };\r\n\r\n  private removeEmptyParams(params: HttpParams): HttpParams {\r\n    params.keys().forEach(key => {\r\n      const value = params.get(key) ? params.get(key) + '' : '';\r\n      if (value) {\r\n        params = params.set(key, value.trim());\r\n      }\r\n    });\r\n    const emptyValuesKey = params.keys().filter(key => !params.get(key));\r\n    emptyValuesKey.forEach(key => {\r\n      params = params.delete(key);\r\n    });\r\n    return params;\r\n  }\r\n\r\n  private updateHttpParams(params: HttpParams): HttpParams {\r\n    params = this.removeEmptyParams(params);\r\n    if (!params.keys().includes('pageNumber')) {\r\n      params = params.append('pageNumber', this.isResetPaging ? '1' : (this.paging ? this.paging.pageNumber.toString() : '1'))\r\n        .append('pageSize', this.paging ? this.paging.pageSize.toString() : this.config.PAGE_SIZE.toString());\r\n    }\r\n    return params;\r\n  }\r\n}\r\n","import { Directive, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Location } from '@angular/common';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { UtilsService } from '../../services/utils.service';\r\nimport { AuthoritiesService } from '../../services/authorities.service';\r\nimport { ActionTypeEnum } from '../../enums/action-type.enum';\r\n\r\n@Directive({\r\n  selector: 'BaseAddEditComponent',\r\n  standalone: false,\r\n})\r\nexport class BaseAddEditComponent extends BaseTableComponent implements OnInit {\r\n\r\n  addEditForm: FormGroup = new FormGroup({});\r\n  isEdit: boolean;\r\n  id: any;\r\n  isView = false;\r\n\r\n  constructor(protected activatedRoute: ActivatedRoute,\r\n              protected location: Location,\r\n              protected translateService: TranslateService,\r\n              protected utilsService: UtilsService,\r\n              protected authoritiesService: AuthoritiesService) {\r\n    super(activatedRoute, authoritiesService);\r\n    this.isEdit = false;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.id = this.activatedRoute.snapshot.paramMap.get('id');\r\n    if (this.id) {\r\n      this.isEdit = true;\r\n    }\r\n    this.isView = this.activatedRoute.routeConfig?.data?.actionType === ActionTypeEnum._VIEW;\r\n  }\r\n\r\n  back(): void {\r\n    this.location.back();\r\n  }\r\n\r\n  onSuccessFunc = (data: any, onSuccessMessage?: string): void => {\r\n    this.utilsService.onSuccessFunc(onSuccessMessage ? onSuccessMessage : 'common.default.success');\r\n    setTimeout(() => {\r\n      this.back();\r\n    }, 1500);\r\n  };\r\n\r\n  hasAuthority() {\r\n    return false;\r\n  }\r\n\r\n  getPosition(e: any, arr: any[]) {\r\n    return !!arr && arr.length > 0 ? (arr.indexOf(e) + 1).toString() : '';\r\n  }\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { TranslateLoader } from '@ngx-translate/core';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\n\r\nexport interface ITranslationResource {\r\n  prefix: string;\r\n  suffix: string;\r\n}\r\n\r\nexport class MultiTranslateHttpLoader implements TranslateLoader {\r\n  constructor(\r\n    private http: HttpClient,\r\n    private resources: ITranslationResource[],\r\n  ) {\r\n  }\r\n\r\n  public getTranslation(lang: string): Observable<any> {\r\n    const requests = this.resources.map(resource => {\r\n      const path = resource.prefix + lang + resource.suffix;\r\n      return this.http.get(path).pipe(catchError(res => {\r\n        console.error('Something went wrong for the following translation file:', path);\r\n        console.error(res.message);\r\n        return of({});\r\n      }));\r\n    });\r\n    return forkJoin(requests).pipe(map(responses => {\r\n      if (!responses.length) return {};\r\n      const target = {};\r\n      for (const index in responses) {\r\n        Object.assign(target, responses[index]);\r\n      }\r\n      return target;\r\n    }));\r\n  }\r\n}\r\n","import { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MultiLanguageTablePaginator extends MatPaginatorIntl {\r\n  constructor(private translateService: TranslateService) {\r\n    super();\r\n    this.translateService.onLangChange.subscribe((e: Event) => {\r\n      this.getAndInitTranslations();\r\n    });\r\n    this.getAndInitTranslations();\r\n  }\r\n\r\n  range: string = '';\r\n\r\n  getAndInitTranslations() {\r\n    this.translateService.get('MatPaginator.itemsPerPageLabel').subscribe((res: string) => {\r\n      this.itemsPerPageLabel = res;\r\n    });\r\n    this.translateService.get('MatPaginator.nextPageLabel').subscribe((res: string) => {\r\n      this.nextPageLabel = res;\r\n    });\r\n    this.translateService.get('MatPaginator.previousPageLabel').subscribe((res: string) => {\r\n      this.previousPageLabel = res;\r\n    });\r\n    this.translateService.get('MatPaginator.range').subscribe((res: string) => {\r\n      this.range = ' ' + res + ' ';\r\n    });\r\n    this.changes.next();\r\n  }\r\n\r\n  getRangeLabel = (page: number, pageSize: number, length: number): string => {\r\n    // use style-paginator directive\r\n    return '';\r\n\r\n    // if (length === 0 || pageSize === 0) {\r\n    //   return '0' + this.range + length;\r\n    // }\r\n    // length = Math.max(length, 0);\r\n    // const startIndex = page * pageSize;\r\n    // const endIndex = startIndex < length ?\r\n    //   Math.min(startIndex + pageSize, length) :\r\n    //   startIndex + pageSize;\r\n    // return startIndex + 1 + ' - ' + endIndex + this.range + length;\r\n  };\r\n\r\n}\r\n","import {ButtonModel} from \"../models/components/button.model\";\r\nimport {ColumnModel} from \"../models/components/column.model\";\r\nimport {ColumnTypeEnum} from \"../enums/column-type.enum\";\r\nimport {AlignEnum} from \"../enums/align.enum\";\r\nimport {TableFooterModel} from \"../models/components/table-footer.model\";\r\nimport {IconTypeEnum} from \"../enums/icon-type.enum\";\r\n\r\nexport class TableService {\r\n\r\n    static DEFAULT_NO_IMAGE_AVAILABLE = 'data:image/png;base64, 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';\r\n\r\n    static displayHeaderName(column: ColumnModel, moduleName: string) {\r\n        if (typeof (column.header) === 'string') {\r\n            return moduleName + '.table.header.' + column.header;\r\n        }\r\n        return column.header ? column.header(column) : '';\r\n    }\r\n\r\n    static onDisplayButtonHeaderCell(buttons: ButtonModel[], button: ButtonModel, header: any, index: number): boolean {\r\n        if (typeof (button.header) === 'object' && !!button.header) {\r\n            return (button.isShowHeader ? button.isShowHeader : false) ||\r\n                ((button.header && button.header.display) ? button.header.display(header) : false);\r\n        }\r\n        if (typeof (button.header) === 'string') {\r\n            return !(!!buttons[index - 1] && typeof (buttons[index - 1].header) === 'string');\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static getColumnType(col: ColumnModel, row: any): ColumnTypeEnum {\r\n        if (!col.columnType) {\r\n            return ColumnTypeEnum.VIEW;\r\n        }\r\n        return (typeof (col.columnType) === 'function' ? col.columnType(row) : col.columnType);\r\n    }\r\n\r\n    static getHeaderButtonColspan(buttons: ButtonModel[], data: any[]) {\r\n        if (!buttons) {\r\n            return 0;\r\n        }\r\n        let displayCell = false;\r\n        return buttons.reduce((colspan, button) => {\r\n            displayCell = data.some(row => TableService.onDisplayButtonCell(button, row));\r\n            return colspan + (displayCell ? 1 : 0);\r\n        }, 0);\r\n    }\r\n\r\n    static onDisplayButtonCell(button: ButtonModel, cell: any): boolean {\r\n        button.isShowHeader = button.isShowHeader || (button.display ? button.display(cell) : false);\r\n        return button.display ? button.display(cell) : false;\r\n    }\r\n\r\n    static onDisplayCell(column: ColumnModel, cell: any): boolean {\r\n        if (column.display) {\r\n            column.isShowHeader = column.isShowHeader || column.display(cell);\r\n        } else {\r\n            column.isShowHeader = true;\r\n        }\r\n        return column.isShowHeader;\r\n    }\r\n\r\n    static alignCellContent(column: ColumnModel) {\r\n        return column.align ? column.align : AlignEnum.LEFT;\r\n    }\r\n\r\n    static getColspan(footer: TableFooterModel, data: any[]): number {\r\n        return typeof (footer.colspan) === 'function' ? footer.colspan(data) : footer.colspan;\r\n    }\r\n\r\n    static getColumnClassName(col: ColumnModel | TableFooterModel, data: any = null): string {\r\n        return !!col && !!col.className ? (typeof (col.className) === 'function' ? col.className(data) : col.className) : '';\r\n    }\r\n\r\n    static getColumnHeaderClassName(col: ColumnModel): string {\r\n        return !!col && !!col.headerClassName ? (typeof (col.headerClassName) === 'function' ? col.headerClassName() : col.headerClassName) : '';\r\n    }\r\n\r\n    static getIconType(button: ButtonModel) {\r\n        return button.iconType ? button.iconType : IconTypeEnum.MATERIAL_ICON;\r\n    }\r\n\r\n    static onErrorImgEvent(img: HTMLImageElement, noImageConfigBase64?: string) {\r\n        img.onerror = null;\r\n        img.src = noImageConfigBase64 ? noImageConfigBase64 : TableService.DEFAULT_NO_IMAGE_AVAILABLE;\r\n    }\r\n\r\n    static isButtonHeader(button: ButtonModel): boolean {\r\n        return !!button.header && typeof (button.header) === 'object';\r\n    }\r\n\r\n    static getButtonHeader(button: ButtonModel): ButtonModel | null {\r\n        return this.isButtonHeader(button) ? (button.header as ButtonModel) : null;\r\n    }\r\n\r\n    static getButtonHeaderString(button: ButtonModel): string | null {\r\n        return !this.isButtonHeader(button) ? (button.header as string) : null;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoaderService {\r\n  public isLoading = new BehaviorSubject(false);\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, FormControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { ColumnModel } from '../models/components/column.model';\r\nimport { RangeDatePickerModel } from '../models/components/range-date-picker.model';\r\nimport { ColumnTypeEnum } from '../enums/column-type.enum';\r\nimport { TableService } from './table.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ValidatorService {\r\n\r\n  static invalid(control: AbstractControl | undefined): boolean {\r\n    return !!control && control.dirty ? control.invalid : false;\r\n  }\r\n\r\n  static getErrorMessage(control: AbstractControl | undefined, errorMessages: Map<string, (e?: any) => string>): string {\r\n    if (!control) {\r\n      return '';\r\n    }\r\n    const { errors } = control;\r\n\r\n    const messages: string[] = errors ? Object.keys(errors).map(key => {\r\n      const fn = errorMessages.has(key) ? errorMessages.get(key) : null;\r\n      return fn ? fn(errors) : 'common.error.' + key;\r\n    }) : [];\r\n    return messages && messages.length > 0 ? messages[0] : '';\r\n  }\r\n\r\n\r\n  static getErrorMessageV1(control?: AbstractControl, errorMessages?: Map<string, (e?: any) => string>): any {\r\n    if (!control) {\r\n      return '';\r\n    }\r\n    const { errors } = control;\r\n    if (!errors) {\r\n      return {};\r\n    }\r\n    let errKey = Object.keys(errors)[0];\r\n    const fn = errorMessages && errorMessages.has(errKey) ? errorMessages.get(errKey) : null;\r\n    const msg = fn ? fn(errors) : 'common.error.' + errKey;\r\n    // const messages: string[] = errors ? Object.keys(errors).map(key => {\r\n    //   const fn = errorMessages.has(key) ? errorMessages.get(key) : null;\r\n    //   errKey = key;\r\n    //   return fn ? fn(errors) : 'common.error.' + key;\r\n    // }) : [];\r\n    return errors && msg ? { msg, params: errors[errKey] } : {};\r\n  }\r\n\r\n  static generateNsMultiSelectValidators(conditions: {\r\n    required?: boolean | (() => boolean),\r\n    multiple?: boolean\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n    const validation = (control: AbstractControl): ValidationErrors | null => {\r\n      const value = control.value;\r\n      if (ValidatorService.getRequiredDynamic(conditions.required) && (value === undefined || value === null || value === ''\r\n        || (!!conditions.multiple && value.length === 0))) {\r\n        return { required: true };\r\n      }\r\n      return null;\r\n    };\r\n    validationFns.push(validation);\r\n    return validationFns;\r\n  }\r\n\r\n  static generateNsInputValidators(conditions: {\r\n    required: boolean | (() => boolean),\r\n    minLength: number | undefined,\r\n    maxLength: number | undefined,\r\n    pattern: string | undefined\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n\r\n    if (conditions.required) {\r\n      validationFns.push(Validators.required);\r\n    }\r\n    if (conditions.minLength) {\r\n      validationFns.push(Validators.minLength(conditions.minLength));\r\n    }\r\n    if (conditions.maxLength) {\r\n      validationFns.push(Validators.maxLength(conditions.maxLength));\r\n    }\r\n\r\n    if (conditions.pattern) {\r\n      validationFns.push(Validators.pattern(conditions.pattern));\r\n    }\r\n    return validationFns;\r\n  }\r\n\r\n  static generateNsAutocompleteValidators(conditions: {\r\n    required: boolean | (() => boolean)\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n    if (conditions.required) {\r\n      validationFns.push(Validators.required);\r\n    }\r\n    return validationFns;\r\n  }\r\n\r\n  static getMinMaxDynamic(minOrMax: (() => number) | number | null) {\r\n    return minOrMax !== null ? typeof (minOrMax) === 'function' ? minOrMax() : minOrMax : null;\r\n  }\r\n\r\n  static generateNsCounterInputValidators(conditions: {\r\n    required?: boolean | (() => boolean),\r\n    min: (() => number) | number | null,\r\n    max: (() => number) | number | null,\r\n    isDecimal?: boolean | null\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n    validationFns.push(Validators.pattern(conditions.isDecimal ? '^[^-]?[0-9]+[.]?[0-9]*$' : '^[0-9]*$'));\r\n    if (conditions.required) {\r\n      validationFns.push(Validators.required);\r\n    }\r\n    if (conditions.min != undefined && conditions.min != null) {\r\n      const validationMin = (control: AbstractControl): ValidationErrors | null => {\r\n        return ValidatorService.customMinValueNsCounterInput(control.value, ValidatorService.getMinMaxDynamic(conditions.min));\r\n      };\r\n      validationFns.push(validationMin);\r\n    }\r\n    if (conditions.max != undefined && conditions.max != null) {\r\n      const validationMax = (control: AbstractControl): ValidationErrors | null => {\r\n        return ValidatorService.customMaxValueNsCounterInput(control.value, ValidatorService.getMinMaxDynamic(conditions.max));\r\n      };\r\n      validationFns.push(validationMax);\r\n    }\r\n    return validationFns;\r\n  }\r\n\r\n  static generateNsDatePickerValidators(conditions: {\r\n    required?: boolean | (() => boolean),\r\n    min: Date | null,\r\n    max: Date | null\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n    if (conditions.required) {\r\n      validationFns.push(Validators.required);\r\n    }\r\n    // if (conditions.min) {\r\n    //     validationFns.push(new NsValidator({minDate: conditions.min}).customMinDateValidator());\r\n    // }\r\n    // if (conditions.max) {\r\n    //     validationFns.push(new NsValidator({maxDate: conditions.max}).customMaxDateValidator());\r\n    // }\r\n    return validationFns;\r\n  }\r\n\r\n  static getRequiredDynamic(isRequired?: boolean | (() => boolean)) {\r\n    return isRequired ? typeof (isRequired) === 'boolean' ? isRequired : isRequired() : false;\r\n  }\r\n\r\n  static generateNsDateRangePickerValidators(conditions: {\r\n    requiredFromDate: boolean | (() => boolean),\r\n    requiredToDate: boolean | (() => boolean),\r\n  }): ValidatorFn[] {\r\n    const validationFns: ValidatorFn[] = [];\r\n    // if (NsValidator.getRequiredDynamic(conditions.requiredFromDate)\r\n    //     || NsValidator.getRequiredDynamic(conditions.requiredToDate)) {\r\n    const validation = (control: AbstractControl): ValidationErrors | null => {\r\n      const range = control.value as RangeDatePickerModel;\r\n      if (!range?.fromDate && ValidatorService.getRequiredDynamic(conditions.requiredFromDate)) {\r\n        return { requiredFromDate: true };\r\n      }\r\n      if (!range?.toDate && ValidatorService.getRequiredDynamic(conditions.requiredToDate)) {\r\n        return { requiredToDate: true };\r\n      }\r\n      return null;\r\n    };\r\n    validationFns.push(validation);\r\n    // }\r\n    return validationFns;\r\n  }\r\n\r\n  // customMinDateValidator(): ValidatorFn {\r\n  //     return this.customMinDateValidatorControl;\r\n  // }\r\n\r\n  static customMinDateValidatorControl(value: string | any, minDate: Date | null): ValidationErrors | null {\r\n    if (!minDate || !value) {\r\n      return null;\r\n    }\r\n    let date = value instanceof Date ? value : new Date((value as string).replace(' ', 'T'));\r\n    if (date < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), 0, 0, 0)) {\r\n      return { min: { valid: false, minValue: minDate, actual: date } };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // customMaxDateValidator(): ValidatorFn {\r\n  //     return this.customMaxDateValidatorControl;\r\n  // }\r\n\r\n  static customMaxDateValidatorControl(value: string | any, maxDate: Date | null): ValidationErrors | null {\r\n    if (!maxDate || !value) {\r\n      return null;\r\n    }\r\n    let date = value instanceof Date ? value : new Date((value as string).replace(' ', 'T').replace('Z', ''));\r\n    if (date > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 0, 0, 0)) {\r\n      return { max: { valid: false, maxValue: maxDate, actual: date } };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  static getRequired(column: ColumnModel) {\r\n    return column.isRequired ? typeof (column.isRequired) === 'boolean' ? column.isRequired : column.isRequired() : false;\r\n  }\r\n\r\n  static getIsDecimal(column: ColumnModel) {\r\n    return column.isDecimal ? typeof (column.isDecimal) === 'boolean' ? column.isDecimal : column.isDecimal() : false;\r\n  }\r\n\r\n  static customMinValueNsCounterInput(value: number | any, min: number | null): ValidationErrors | null {\r\n    if (!isNaN(Number(value)) && min !== null && value < min) {\r\n      return { min: { min: min, actual: value } };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  static customMaxValueNsCounterInput(value: number | any, max: number | null): ValidationErrors | null {\r\n    if (!isNaN(Number(value)) && max !== null && value > max) {\r\n      return { max: { max: max, actual: value } };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  static generateNsSmartTableValidators(conditions: {\r\n    columns: ColumnModel[],\r\n    minRow: number,\r\n    maxRow: number\r\n  }): ValidatorFn {\r\n    const validator = (control: AbstractControl): ValidationErrors | null => {\r\n      let errors: any = null;\r\n      if (control) {\r\n        const controlValueLength: number = control.value ? control.value.length : 0;\r\n        if (conditions.minRow > controlValueLength) {\r\n          return { minRow: { valid: false, min: conditions.minRow, actual: controlValueLength } };\r\n        }\r\n        if (conditions.maxRow < controlValueLength) {\r\n          return { maxRow: { valid: false, max: conditions.maxRow, actual: controlValueLength } };\r\n        }\r\n        if (!control.value) {\r\n          return null;\r\n        }\r\n        control.value.forEach((row: any) => {\r\n          if (errors || !conditions.columns) {\r\n            return;\r\n          }\r\n          conditions.columns.forEach((column: ColumnModel) => {\r\n            if (errors) {\r\n              return;\r\n            }\r\n            const tempControl = new FormControl();\r\n            tempControl.setValue(row[column.columnDef]);\r\n            if (TableService.getColumnType(column, row) === ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE) {\r\n              if (ValidatorService.getRequired(column)) {\r\n                tempControl.setValidators(Validators.required);\r\n              }\r\n            } else if (TableService.getColumnType(column, row) === ColumnTypeEnum.INPUT_COUNTER) {\r\n              tempControl.setValidators(ValidatorService.generateNsCounterInputValidators({\r\n                required: ValidatorService.getRequired(column),\r\n                min: null,\r\n                max: null,\r\n                isDecimal: ValidatorService.getIsDecimal(column),\r\n              }));\r\n            } else if (TableService.getColumnType(column, row) === ColumnTypeEnum.DATE_PICKER) {\r\n              tempControl.setValidators(ValidatorService.generateNsDatePickerValidators({\r\n                required: ValidatorService.getRequired(column),\r\n                min: null,\r\n                max: null,\r\n              }));\r\n            } else if (TableService.getColumnType(column, row) === ColumnTypeEnum.INPUT) {\r\n              tempControl.setValidators(ValidatorService.generateNsInputValidators({\r\n                required: ValidatorService.getRequired(column),\r\n                maxLength: column.max ? column.max(row) : undefined,\r\n                minLength: column.min ? column.min(row) : undefined,\r\n                pattern: undefined,\r\n              }));\r\n            }\r\n            tempControl.updateValueAndValidity();\r\n            if (TableService.getColumnType(column, row) === ColumnTypeEnum.DATE_PICKER) {\r\n              const errorsArr = [];\r\n              if (tempControl.errors) {\r\n                errorsArr.push(tempControl.errors);\r\n              }\r\n\r\n              if (ValidatorService.customMinDateValidatorControl(tempControl.value, column.min ? column.min(row) : null)) {\r\n                errorsArr.push(ValidatorService.customMinDateValidatorControl(tempControl.value, column.min ? column.min(row) : null));\r\n              }\r\n\r\n              if (ValidatorService.customMaxDateValidatorControl(tempControl.value, column.max ? column.max(row) : null)) {\r\n                errorsArr.push(ValidatorService.customMaxDateValidatorControl(tempControl.value, column.max ? column.max(row) : null));\r\n              }\r\n\r\n              if (errorsArr.length > 0) {\r\n                tempControl.setErrors(errorsArr);\r\n              }\r\n            }\r\n            if (TableService.getColumnType(column, row) === ColumnTypeEnum.INPUT_COUNTER) {\r\n              const errorsArr = [];\r\n              if (tempControl.errors) {\r\n                errorsArr.push(tempControl.errors);\r\n              }\r\n\r\n              if (ValidatorService.customMinValueNsCounterInput(tempControl.value, column.min ? column.min(row) : null)) {\r\n                errorsArr.push(ValidatorService.customMinValueNsCounterInput(tempControl.value, column.min ? column.min(row) : null));\r\n              }\r\n\r\n              if (ValidatorService.customMaxValueNsCounterInput(tempControl.value, column.max ? column.max(row) : null)) {\r\n                errorsArr.push(ValidatorService.customMaxValueNsCounterInput(tempControl.value, column.max ? column.max(row) : null));\r\n              }\r\n\r\n              if (errorsArr.length > 0) {\r\n                tempControl.setErrors(errorsArr);\r\n              }\r\n            }\r\n\r\n            tempControl.markAllAsTouched();\r\n            errors = tempControl.errors;\r\n          });\r\n        });\r\n      }\r\n      return errors;\r\n    };\r\n    return validator;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  Self,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { ValidatorService } from '../services/validator.service';\r\nimport { AlignEnum } from '../enums/align.enum';\r\n\r\n@Component({\r\n  selector: 'cva-counter-input',\r\n  standalone: false,\r\n  template: `\r\n    <!-- css labelOutside trong base.theme-->\r\n    <div class=\"cva-counter-input\"\r\n         [ngClass]=\"{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : placeholder) | translate }}<span\r\n            class=\"required-label-outside\">{{ !!required ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <mat-form-field appearance=\"outline\" [floatLabel]=\"!!isFloatLabel ? 'always' : 'auto'\"\r\n                      [hideRequiredMarker]=\"!isFloatLabel\"\r\n                      fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-label *ngIf=\"!isLabelOutside && !!isFloatLabel\">{{ (label ? label : placeholder) | translate }}</mat-label>\r\n        <div class=\"input-area\">\r\n          <input matInput type=\"number\" [(ngModel)]=\"counterValue\" #nsCounterInput=\"ngModel\"\r\n                 style=\"text-align:{{alignNumber}}\"\r\n                 [disabled]=\"disabled\" [required]=\"required\"\r\n                 (keydown.enter)=\"onEnter.emit()\"\r\n                 [placeholder]=\"placeholder|translate\"\r\n                 autocomplete=\"off\"\r\n                 pattern=\"{{isDecimal ? '^[^-]?[0-9]+[.]?[0-9]*$' : '^[0-9]*$'}}\" min=\"{{min}}\" max=\"{{max}}\" />\r\n          <span *ngIf=\"!!suffixText\" class=\"input-suffix\"\r\n                matSuffix>{{ suffixText }}</span>\r\n        </div>\r\n        <mat-hint *ngIf=\"!NsValidator.invalid(formControl)\">\r\n          {{ hint | translate }}\r\n        </mat-hint>\r\n        <mat-hint style=\"color: red\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n          {{ NsValidator.getErrorMessage(formControl, errorMessages) | translate }}\r\n        </mat-hint>\r\n      </mat-form-field>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaCounterInputComponent implements ControlValueAccessor, OnInit, OnChanges {\r\n  @Input() label: string = '';\r\n  @Input() placeholder: string = '';\r\n  @Input() suffixText: string = '';\r\n  @Input() hint: string = '';\r\n  @Input() value: number = 0;\r\n  @Input() disabled: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() min: (() => number) | number | null = null;\r\n  @Input() max: (() => number) | number | null = null;\r\n  @Input() error: any;\r\n  @Input() isDecimal: boolean = false;\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n  @Input() alignNumber: AlignEnum = AlignEnum.RIGHT;\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl: boolean = true;\r\n\r\n  @Output() onChange = new EventEmitter<number>();\r\n  @Output() onEnter = new EventEmitter<void>();\r\n\r\n  // Cái này là để gắn khi nó là FormControl trong 1 FormGroup\r\n  formControl: AbstractControl | undefined;\r\n\r\n  constructor(private injector: Injector, @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      // ngControl là parent FormControl\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  get NsValidator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  get counterValue() {\r\n    return this.value;\r\n  }\r\n\r\n  set counterValue(val: number) {\r\n    this.writeValue(val);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if ('value' in changes) {\r\n      this.value = changes.value.currentValue;\r\n      this.writeValue(this.value);\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.callValidator();\r\n  }\r\n\r\n  getMinNumber() {\r\n    return typeof (this.min) === 'function' ? this.min() : this.min;\r\n  }\r\n\r\n  getMaxNumber() {\r\n    return typeof (this.max) === 'function' ? this.max() : this.max;\r\n  }\r\n\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.formControl) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.formControl) {\r\n        this.formControl.setValidators(ValidatorService.generateNsCounterInputValidators({\r\n          required: this.required,\r\n          min: this.min,\r\n          max: this.max,\r\n          isDecimal: this.isDecimal,\r\n        }));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      this.formControl.updateValueAndValidity();\r\n\r\n      if (!this.formControl.errors) {\r\n        const minErr = ValidatorService.customMinValueNsCounterInput(this.value, this.getMinNumber());\r\n        if (minErr) {\r\n          this.formControl.setErrors(minErr);\r\n        }\r\n        const maxErr = ValidatorService.customMaxValueNsCounterInput(this.value, this.getMaxNumber());\r\n        if (maxErr) {\r\n          this.formControl.setErrors(maxErr);\r\n        }\r\n\r\n        this.formControl.markAllAsTouched();\r\n        if (!this.isFormControl) {\r\n          this.formControl.markAsDirty();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  writeValue(value: any) {\r\n    if (value !== undefined) {\r\n      this.value = value;\r\n      this.propagateChange(this.value);\r\n      this.callValidator();\r\n      this.onChange.emit(this.value);\r\n    }\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  EventEmitter,\r\n  Host,\r\n  Inject,\r\n  Input,\r\n  Optional,\r\n  Output,\r\n  Renderer2,\r\n  Self,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\r\nimport { TablePagingRequestModel } from '../models/components/table-paging-request.model';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\n\r\n@Directive({\r\n  selector: '[style-paginator]',\r\n  standalone: false,\r\n})\r\n\r\nexport class StylePaginatorDirective implements AfterViewInit {\r\n  private _currentPage = 1;\r\n  private _pageGapTxt = '...';\r\n  private _rangeStart?: number;\r\n  private _rangeEnd?: number;\r\n  private _buttons: any[] = [];\r\n  private _showTotalPages = 5;\r\n\r\n  @Input() get showTotalPages(): number {\r\n    return this._showTotalPages;\r\n  }\r\n\r\n  set showTotalPages(value: number) {\r\n    this._showTotalPages = value % 2 == 0 ? value + 1 : value;\r\n  }\r\n\r\n  $paging?: TablePagingRequestModel;\r\n\r\n  @Input() get paging() {\r\n    return this.$paging;\r\n  }\r\n\r\n  set paging(paging) {\r\n    if (paging) {\r\n      this.$paging = paging;\r\n      // pageIndex = pageNumber -1\r\n      this.switchPage(paging.pageNumber - 1, false);\r\n    }\r\n\r\n  }\r\n\r\n  @Output() pagingChangeEvent: EventEmitter<any> = new EventEmitter<any>(); // PageEvent\r\n\r\n  constructor(\r\n    @Inject(InjectTokenNextSolutionsConfig) private config: NiceComponentLibraryConfig,\r\n    @Host() @Self() @Optional() private readonly matPag: MatPaginator,\r\n    private vr: ViewContainerRef,\r\n    private ren: Renderer2,\r\n  ) {\r\n    //Sub to rerender buttons when next page and last page is used or choose pageSize\r\n    this.matPag.page.subscribe((pageEvent: PageEvent) => {\r\n      if (this.paging) {\r\n        this.paging.pageSize = pageEvent.pageSize;\r\n      }\r\n      this.switchPage(pageEvent.pageIndex, true);\r\n    });\r\n  }\r\n\r\n  private buildPageNumbers() {\r\n    const actionContainer = this.vr.element.nativeElement.querySelector(\r\n      'div.mat-paginator-range-actions',\r\n    );\r\n    const nextPageNode = this.vr.element.nativeElement.querySelector(\r\n      'button.mat-paginator-navigation-next',\r\n    );\r\n\r\n    // remove buttons before creating new ones\r\n    if (this._buttons.length > 0) {\r\n      this._buttons.forEach(button => {\r\n        this.ren.removeChild(actionContainer, button);\r\n      });\r\n      //Empty state array\r\n      this._buttons.length = 0;\r\n    }\r\n\r\n    //initialize next page and last page buttons\r\n    if (this._buttons.length == 0) {\r\n      let nodeArray = this.vr.element.nativeElement?.childNodes[0]?.childNodes[0]\r\n        ?.childNodes[2]?.childNodes;\r\n      if (nodeArray) {\r\n        setTimeout(() => {\r\n          for (let i = 0; i < nodeArray.length; i++) {\r\n            if (nodeArray[i].nodeName === 'BUTTON') {\r\n              if (nodeArray[i].disabled) {\r\n                this.ren.setStyle(\r\n                  nodeArray[i],\r\n                  'background-color',\r\n                  'rgba(190, 130, 130, 1)',\r\n                );\r\n                this.ren.setStyle(nodeArray[i], 'color', 'white');\r\n                this.ren.setStyle(nodeArray[i], 'margin', '.5%');\r\n              } else {\r\n                this.ren.setStyle(\r\n                  nodeArray[i],\r\n                  'background-color',\r\n                  'rgba(255, 0, 0, 1)',\r\n                );\r\n                this.ren.setStyle(nodeArray[i], 'color', 'white');\r\n                this.ren.setStyle(nodeArray[i], 'margin', '.6%');\r\n              }\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n    }\r\n\r\n    let dots = false;\r\n    if ((!!this._rangeStart || this._rangeStart === 0) && (!!this._rangeEnd || this._rangeEnd === 0)) {\r\n      for (let i = 0; i < this.matPag.getNumberOfPages(); i = i + 1) {\r\n        if ((i < this._showTotalPages &&\r\n          this._currentPage < this._showTotalPages &&\r\n          i > this._rangeStart) ||\r\n          (i >= this._rangeStart && i <= this._rangeEnd)\r\n        ) {\r\n          this.ren.insertBefore(\r\n            actionContainer,\r\n            this.createButton(i, this.matPag.pageIndex),\r\n            nextPageNode,\r\n          );\r\n        } else {\r\n          if (i > this._rangeEnd && !dots) {\r\n            // if (!isNaN(i)) {\r\n            //     this.ren.insertBefore(\r\n            //         actionContainer,\r\n            //         this.createButton(this._pageGapTxt, this.matPag.pageIndex),\r\n            //         nextPageNode\r\n            //     );\r\n            //     dots = true;\r\n            // }\r\n\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n  private createButton(i: any, pageIndex: number): any {\r\n    const linkBtn = this.ren.createElement('mat-button');\r\n    this.ren.addClass(linkBtn, 'mat-mini-fab');\r\n    this.ren.setStyle(linkBtn, 'margin', '1%');\r\n\r\n    const pagingTxt = isNaN(i) ? this._pageGapTxt : +(i + 1);\r\n    const text = this.ren.createText(pagingTxt + '');\r\n\r\n    this.ren.addClass(linkBtn, 'mat-custom-page');\r\n    switch (i) {\r\n      case pageIndex:\r\n        this.ren.setAttribute(linkBtn, 'disabled', 'disabled');\r\n        break;\r\n      case this._pageGapTxt:\r\n        // this.ren.listen(linkBtn, \"click\", () => {\r\n        //     this.switchPage(this._currentPage + this._showTotalPages);\r\n        // });\r\n        break;\r\n      default:\r\n        this.ren.listen(linkBtn, 'click', () => {\r\n          this.switchPage(i, true);\r\n        });\r\n        break;\r\n    }\r\n\r\n    this.ren.appendChild(linkBtn, text);\r\n    //Add button to private array for state\r\n    this._buttons.push(linkBtn);\r\n    return linkBtn;\r\n  }\r\n\r\n  private initPageRange(): void {\r\n    this._rangeStart = this._currentPage - this._showTotalPages / 2;\r\n    this._rangeEnd = this._currentPage + this._showTotalPages / 2;\r\n\r\n    this.buildPageNumbers();\r\n  }\r\n\r\n  private switchPage(i: number, isEvent: boolean) {\r\n    this._currentPage = i;\r\n    this.matPag.pageIndex = i;\r\n    if (isEvent) {\r\n      this.pagingChangeEvent.emit({\r\n        pageIndex: i,\r\n        pageSize: this.paging ? this.paging.pageSize : this.config.PAGE_SIZE,\r\n      });\r\n    }\r\n\r\n    this.initPageRange();\r\n  }\r\n\r\n  public ngAfterViewInit() {\r\n    this.initPageRange();\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { ColumnModel } from '../../models/components/column.model';\r\nimport { ButtonModel } from '../../models/components/button.model';\r\nimport { ColumnTypeEnum } from '../../enums/column-type.enum';\r\nimport { IconTypeEnum } from '../../enums/icon-type.enum';\r\nimport { TableService } from '../../services/table.service';\r\n\r\n@Component({\r\n  selector: 'cva-header-expand-button',\r\n  standalone: false,\r\n  template: `\r\n    <button mat-icon-button\r\n            class=\"expand-column-header-button\"\r\n            color=\"{{expandHeaderButton?.color}}\"\r\n            [matMenuTriggerFor]=\"menu\"\r\n            matTooltip=\"{{((expandHeaderButton && expandHeaderButton.title) ? expandHeaderButton.title : '') | translate}}\"\r\n    >\r\n      <mat-icon *ngIf=\"expandHeaderButton && TableService.getIconType(expandHeaderButton)===IconTypes.MATERIAL_ICON\">\r\n        {{ expandHeaderButton?.icon }}\r\n      </mat-icon>\r\n      <i *ngIf=\"expandHeaderButton && TableService.getIconType(expandHeaderButton) === IconTypes.FONT_AWESOME\"\r\n         class=\"{{expandHeaderButton?.icon}}\"></i>\r\n    </button>\r\n\r\n\r\n    <mat-menu class=\"menu-expand-column\" #menu=\"matMenu\">\r\n      <div class=\"header-menu-expand\" fxLayout fxLayoutAlign=\"space-between center\">\r\n        <mat-label>{{ 'common.expand.menu.header.label' | translate }}</mat-label>\r\n        <button mat-flat-button>{{ 'common.label.done' | translate }}</button>\r\n      </div>\r\n      <div class=\"choose-area\" (click)=\"$event.stopPropagation()\">\r\n        <div mat-menu-item *ngFor=\"let col of columns\">\r\n          <ng-container *ngIf=\"col.columnType!==ColumnTypes.CHECKBOX\">\r\n            <mat-checkbox style=\"width: 100%\"\r\n                          [(ngModel)]=\"expandDisplayCols[col.columnDef]\"\r\n                          [value]=\"col.columnDef\"\r\n                          (change)=\"this.onChange.emit(this.expandDisplayCols)\">\r\n              {{ (moduleName + '.table.header.' + col.header) | translate }}\r\n            </mat-checkbox>\r\n          </ng-container>\r\n        </div>\r\n      </div>\r\n    </mat-menu>\r\n\r\n  `,\r\n})\r\nexport class CvaHeaderExpandButtonComponent implements OnInit {\r\n  @Input() expandHeaderButton?: ButtonModel;\r\n  @Input() columns: ColumnModel[] = [];\r\n  @Input() moduleName = '';\r\n  @Output() onChange = new EventEmitter<{ [key: string]: any }>();\r\n  expandDisplayCols: { [key: string]: any } = {};\r\n\r\n  constructor() {\r\n\r\n  }\r\n\r\n  get ColumnTypes() {\r\n    return ColumnTypeEnum;\r\n  }\r\n\r\n  get IconTypes() {\r\n    return IconTypeEnum;\r\n  }\r\n\r\n  get TableService() {\r\n    return TableService;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.columns.forEach(col => {\r\n      this.expandDisplayCols[col.columnDef] = !(col.isExpandOptionColumn ? col.isExpandOptionColumn() : false);\r\n      col.isExpandOptionColumn = () => !this.expandDisplayCols[col.columnDef];\r\n    });\r\n  }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Pipe({\r\n  name: 'secure',\r\n  standalone: false,\r\n})\r\nexport class SecureImgPipe implements PipeTransform {\r\n\r\n  constructor(private http: HttpClient,\r\n              private sanitizer: DomSanitizer) {\r\n  }\r\n\r\n  transform(url: string): Observable<SafeUrl> {\r\n    return this.http\r\n      .get(url, {\r\n        headers: new HttpHeaders().set('is_image', 'true'),\r\n        responseType: 'blob',\r\n      })\r\n      .pipe(\r\n        map(value => this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(value))),\r\n      );\r\n  }\r\n\r\n}\r\n","import {\r\n  AfterViewChecked,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n} from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MultiLanguageTablePaginator } from '../../directives/multi-language-table-paginator';\r\nimport { TablePagingRequestModel } from '../../models/components/table-paging-request.model';\r\nimport { ButtonClickEvent } from '../../models/button-click.event';\r\nimport { ButtonModel } from '../../models/components/button.model';\r\nimport { ColumnModel } from '../../models/components/column.model';\r\nimport { ColumnTypeEnum } from '../../enums/column-type.enum';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../../models/nice-component-library.config';\r\nimport { AlignEnum } from '../../enums/align.enum';\r\nimport { BaseModel } from '../../models/base.model';\r\nimport { LoaderService } from '../../services/loader.service';\r\nimport { TableService } from '../../services/table.service';\r\nimport { IconTypeEnum } from '../../enums/icon-type.enum';\r\n\r\n@Component({\r\n  selector: 'cva-table',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"table-responsive\">\r\n      <ng-container *ngIf=\"!!expandHeaderButton\">\r\n        <cva-header-expand-button [moduleName]=\"moduleName\" [expandHeaderButton]=\"expandHeaderButton\"\r\n                                  [columns]=\"columns\" (onChange)=\"this.onChangeDisplayColumn.emit($event)\">\r\n        </cva-header-expand-button>\r\n      </ng-container>\r\n      <table mat-table #table [dataSource]=\"results\" class=\"mat-elevation-z8 cva-table\">\r\n        <ng-container *ngFor=\"let column of columns\" matColumnDef=\"{{column.columnDef}}\">\r\n          <ng-container *matHeaderCellDef>\r\n            <th mat-header-cell [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n                *ngIf=\"onDisplayHeaderCell(column)\"\r\n                [ngSwitch]=\"TableService.getColumnType(column, null)\">\r\n              <div fxLayout=\"row\" *ngSwitchDefault\r\n                   class=\"viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   [fxLayoutAlign]=\"column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)\">\r\n                {{ TableService.displayHeaderName(column, moduleName) | translate }}\r\n              </div>\r\n              <mat-checkbox *ngSwitchCase=\"ColumnTypes.CHECKBOX\"\r\n                            color=\"primary\" class=\"box-select-all\" [(ngModel)]=\"selectAllChecked\"\r\n                            (change)=\"toggleSelectAll($event, column)\"\r\n                            [fxLayoutAlign]=\"column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)\">\r\n              </mat-checkbox>\r\n            </th>\r\n          </ng-container>\r\n          <ng-container *matCellDef=\"let result;\">\r\n            <td mat-cell [ngClass]=\"TableService.getColumnClassName(column, result)\"\r\n                *ngIf=\"onDisplayCell(column, result)\"\r\n                [ngSwitch]=\"TableService.getColumnType(column, result)\">\r\n              <div title=\"{{column.title(result)}}\" *ngSwitchDefault\r\n                   class=\"{{TableService.getColumnClassName(column, result)}} viewData\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\">\r\n                {{ column.cell(result) }}\r\n              </div>\r\n              <ng-container *ngSwitchCase=\"ColumnTypes.BUTTON\">\r\n                <div *ngIf=\"!!column.button\"\r\n                     class=\"{{TableService.getColumnClassName(column, result)}}\"\r\n                     fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                     (click)=\"$event.stopPropagation()\">\r\n                  <button mat-icon-button color=\"{{column.button.color}}\"\r\n                          (click)=\"onClick(column.button.click, result)\"\r\n                          disabled=\"{{column.button.disabled ? column.button.disabled(result) : false}}\"\r\n                          matTooltip=\"{{(column.button.title ? column.button.title : '') | translate}}\"\r\n                          class=\"{{column.button.className}}\" [ngSwitch]=\"TableService.getIconType(column.button)\">\r\n                    <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ column.button.icon }}</mat-icon>\r\n                    <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{column.button.icon}}\"></i>\r\n                  </button>\r\n                </div>\r\n              </ng-container>\r\n              <div class=\"link viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.LINK\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <a [routerLink]=\"[column.link(result)]\">{{ column.cell(result) }}</a>\r\n              </div>\r\n\r\n              <div class=\"label-status viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.STYLE_CSS\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <span [style]=\"column.style(result)\">{{ column.cell(result) }}</span>\r\n              </div>\r\n\r\n              <div class=\"img-view viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.IMG\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"column.cell(result) | secure | async\" #imgRef\r\n                     (error)=\"TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <div class=\"img-view viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.IMG_NO_SECURE\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"column.cell(result)\" #imgRef\r\n                     (error)=\"TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <div *ngSwitchCase=\"ColumnTypes.BASE64\"\r\n                   class=\"img-view viewData\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"'data:image/png;base64,'+column.cell(result)\"\r\n                     #base64ImgRef\r\n                     (error)=\"TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <ng-container *ngSwitchCase=\"ColumnTypes.CHECKBOX\">\r\n                <mat-checkbox [(ngModel)]=\"result[column.columnDef]\" color=\"primary\"\r\n                              *ngIf=\"column.display ? column.display(result) : true\"\r\n                              [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                              (change)=\"toggleSelect($event, result, column)\"\r\n                              [fxLayoutAlign]=\"TableService.alignCellContent(column)\">\r\n                </mat-checkbox>\r\n              </ng-container>\r\n            </td>\r\n          </ng-container>\r\n        </ng-container>\r\n\r\n        <ng-container *ngFor=\"let button of buttons; let i = index\" matColumnDef=\"{{button.columnDef}}\">\r\n          <ng-container *matHeaderCellDef=\"let header\">\r\n            <!--                    [fxFlex]=\"(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' \"-->\r\n            <!--                    [fxFlex]=\"getHeaderButtonWidth(i) + 'px' \"-->\r\n            <th mat-header-cell [ngClass]=\"button.className\"\r\n                *ngIf=\"TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan\"\r\n                (click)=\"$event.stopPropagation()\"\r\n                [attr.colspan]=\"buttonColspan\"\r\n            >\r\n              <ng-container *ngIf=\"TableService.getButtonHeader(button) as btnHeader\">\r\n                <button mat-icon-button\r\n                        class=\"{{button.className}}\"\r\n                        *ngIf=\"((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) \"\r\n                        [disabled]=\"((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) \"\r\n                        color=\"{{$any(btnHeader).color}}\"\r\n                        (click)=\"onClick($any(btnHeader).click, null)\"\r\n                        matTooltip=\"{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}\"\r\n                        [ngSwitch]=\"TableService.getIconType($any(btnHeader))\">\r\n                  <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ $any(btnHeader).icon }}</mat-icon>\r\n                  <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{$any(btnHeader).icon}}\"></i>\r\n                </button>\r\n              </ng-container>\r\n              <ng-container *ngIf=\"TableService.getButtonHeaderString(button) as btnHeader\">\r\n                <div title=\"{{$any(btnHeader) | translate}}\"\r\n                     class=\"viewData\"\r\n                     fxLayout=\"row\"\r\n                     fxLayoutAlign=\"{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center\">\r\n                  {{ $any(btnHeader) | translate }}\r\n                </div>\r\n              </ng-container>\r\n            </th>\r\n\r\n          </ng-container>\r\n          <ng-container *matCellDef=\"let cell\">\r\n            <!--                     [fxFlex]=\"headerButtonWidthDefault + 'px'\"-->\r\n            <td mat-cell [ngClass]=\"button.className\"\r\n                *ngIf=\"TableService.onDisplayButtonCell(button, cell)\"\r\n                (click)=\"$event.stopPropagation()\">\r\n              <button mat-icon-button color=\"{{button.color}}\"\r\n                      (click)=\"onClick(button.click, cell)\"\r\n                      disabled=\"{{button.disabled ? button.disabled(cell) : false}}\"\r\n                      matTooltip=\"{{(button.title ? button.title : '') | translate}}\"\r\n                      class=\"{{button.className}}\" [ngSwitch]=\"TableService.getIconType(button)\">\r\n                <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n                <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{button.icon}}\"></i>\r\n              </button>\r\n            </td>\r\n          </ng-container>\r\n        </ng-container>\r\n\r\n\r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n        <tr mat-row *matRowDef=\"let result; columns: displayedColumns; let i = index\"\r\n            [ngClass]=\"result.className\"\r\n            (click)=\"onRowClick(result, i)\"></tr>\r\n      </table>\r\n      <div *ngIf=\"!(loaderService.isLoading | async)\">\r\n        <div class=\"paging\"\r\n             *ngIf=\"hasData()\"\r\n             fxLayout fxLayoutAlign=\"space-between center\">\r\n          <mat-paginator style-paginator\r\n                         [showTotalPages]=\"showTotalPages\"\r\n                         [paging]=\"varPaging\"\r\n                         (pagingChangeEvent)=\"getPage($event)\"\r\n                         [length]=\"varPaging.totalElements\"\r\n                         [pageSize]=\"varPaging.pageSize\"\r\n                         [pageSizeOptions]=\"pageSizeOptions\"\r\n                         [pageIndex]=\"varPaging.pageNumber - 1\">\r\n          </mat-paginator>\r\n          <div class=\"go-to-page\"\r\n               fxLayout fxLayoutGap=\"0.3rem\" fxLayoutAlign=\"start baseline\">\r\n            <mat-label>{{ 'common.gotopage' | translate }}</mat-label>\r\n            <cva-counter-input [(ngModel)]=\"goToPageNumber\"\r\n                               (ngModelChange)=\"onChangeGoToPageNumber($event)\"\r\n                               (onEnter)=\"goToPage()\"\r\n                               [max]=\"getTotalPage() ? getTotalPage() : 1\"\r\n                               [min]=\"1\"\r\n                               [isFloatLabel]=\"false\"\r\n                               [errorMessages]=\"errorMsg\"\r\n            ></cva-counter-input>\r\n            <mat-label style=\"white-space: nowrap\">{{ '/' + getTotalPage() }}</mat-label>\r\n            <button mat-flat-button\r\n                    [disabled]=\"goToPageNumber < 1 || goToPageNumber > getTotalPage()\"\r\n                    (click)=\"goToPage()\">{{ 'common.go' | translate }}\r\n            </button>\r\n          </div>\r\n          <h2 *ngIf=\"!hasData()\">{{ 'common.no.records.found' | translate }}</h2>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n  providers: [\r\n    { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },\r\n  ],\r\n})\r\nexport class CvaTableComponent implements OnInit, AfterViewChecked {\r\n\r\n  @Input() moduleName: string = '';\r\n  varPaging: TablePagingRequestModel;\r\n  @Input() results: MatTableDataSource<BaseModel> = new MatTableDataSource<BaseModel>([]);\r\n  @Input() columns: ColumnModel[] = [];\r\n  @Input() buttons: ButtonModel[] = [];\r\n  @Input() showTotalPages: number = 5;\r\n  @Input() expandHeaderButton?: ButtonModel;\r\n\r\n  pageSizeOptions: number[];\r\n  @Output() pagingChange = new EventEmitter<TablePagingRequestModel>(true);\r\n  @Output() clickAction = new EventEmitter<ButtonClickEvent>();\r\n  @Output() onRowClickAction = new EventEmitter<ButtonClickEvent>();\r\n  @Output() onChangeDisplayColumn = new EventEmitter<{ [key: string]: any }>();\r\n\r\n  selectAllChecked: boolean = false;\r\n  goToPageNumber: number = 1;\r\n  errorMsg = new Map<string, () => string>()\r\n    .set('min', () => '')\r\n    .set('max', () => '')\r\n    .set('pattern', () => '')\r\n    .set('required', () => '');\r\n\r\n  // display status object column in table\r\n  expandDisplayCols: { [key: string]: any } = {};\r\n\r\n  buttonColspan = 0;\r\n\r\n  constructor(@Inject(InjectTokenNextSolutionsConfig) public config: NiceComponentLibraryConfig,\r\n              /*public domSanitizer: DomSanitizer,*/\r\n              private cdRef: ChangeDetectorRef, public loaderService: LoaderService) {\r\n    this.pageSizeOptions = this.config.PAGE_SIZE_OPTIONS;\r\n    this.varPaging = new TablePagingRequestModel();\r\n    this.varPaging.pageSize = this.config.PAGE_SIZE;\r\n    this.varPaging.pageNumber = 1;\r\n    this.varPaging.totalElements = 0;\r\n  }\r\n\r\n  @Input() set paging(value: TablePagingRequestModel) {\r\n    if (value) {\r\n      this.varPaging = value;\r\n    }\r\n  }\r\n\r\n  get displayedColumns(): string[] {\r\n    let columnsDef = this.columns.map(c => c.columnDef);\r\n    if (this.buttons) {\r\n      columnsDef = columnsDef.concat(this.buttons.map(b => b.columnDef));\r\n    }\r\n    // if (!!this.expandHeaderButton) {\r\n    //     columnsDef = columnsDef.concat(this.expandHeaderButton.columnDef);\r\n    // }\r\n    return columnsDef;\r\n  }\r\n\r\n  get ColumnTypes() {\r\n    return ColumnTypeEnum;\r\n  }\r\n\r\n  get IconTypes() {\r\n    return IconTypeEnum;\r\n  }\r\n\r\n  get AlignEnum() {\r\n    return AlignEnum;\r\n  }\r\n\r\n  get TableService() {\r\n    return TableService;\r\n  }\r\n\r\n  isExpandColumn(col: ColumnModel): boolean {\r\n    return !!col.isExpandOptionColumn ? col.isExpandOptionColumn() : false;\r\n  }\r\n\r\n  getPage(pageable: any) {\r\n    this.varPaging.pageNumber = pageable.pageIndex + 1;\r\n    this.varPaging.pageSize = pageable.pageSize;\r\n    this.pagingChange.emit(this.varPaging);\r\n    this.toggleSelect(null, null);\r\n    this.goToPageNumber = this.varPaging.pageNumber;\r\n  }\r\n\r\n  onClick(action: string, result: any) {\r\n    const buttonClickEvent = new ButtonClickEvent(action, result);\r\n    this.clickAction.emit(buttonClickEvent);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.varPaging) {\r\n      this.varPaging = new TablePagingRequestModel();\r\n      this.varPaging.pageSize = this.config.PAGE_SIZE;\r\n      this.varPaging.pageNumber = 1;\r\n      this.varPaging.totalElements = 0;\r\n      this.pagingChange.emit(this.varPaging);\r\n    }\r\n\r\n    // setup binding object with column\r\n    this.columns.forEach(col => {\r\n      this.expandDisplayCols[col.columnDef] = !(col.isExpandOptionColumn ? col.isExpandOptionColumn() : false);\r\n      col.isExpandOptionColumn = () => !this.expandDisplayCols[col.columnDef];\r\n    });\r\n  }\r\n\r\n  onRowClick(result: any, index?: number) {\r\n    const buttonClickModel = new ButtonClickEvent('onRowClick', result, index);\r\n    this.onRowClickAction.emit(buttonClickModel);\r\n  }\r\n\r\n  onDisplayHeaderCell(column: ColumnModel): boolean {\r\n    return (column.isShowHeader ? column.isShowHeader : !this.hasData()) && !this.isExpandColumn(column);\r\n  }\r\n\r\n  onDisplayCell(column: ColumnModel, cell: any): boolean {\r\n    return TableService.onDisplayCell(column, cell) && !this.isExpandColumn(column);\r\n  }\r\n\r\n\r\n  toggleSelectAll(val: MatCheckboxChange, col: ColumnModel) {\r\n    this.results.data.forEach(v => {\r\n      v.checked = val.checked;\r\n    });\r\n    if (col.onHeaderCellValueChange) {\r\n      col.onHeaderCellValueChange(val.checked);\r\n    }\r\n  }\r\n\r\n  toggleSelect(val: MatCheckboxChange | null, result: any, column?: ColumnModel) {\r\n    let count = 0;\r\n    this.results.data.forEach(v => {\r\n      if (v.checked) {\r\n        count++;\r\n      }\r\n    });\r\n    this.selectAllChecked = count === this.results.data.length;\r\n    if (column && column.onCellValueChange) {\r\n      column.onCellValueChange(result);\r\n    }\r\n  }\r\n\r\n  ngAfterViewChecked() {\r\n    this.getHeaderButtonColspan();\r\n    this.cdRef.detectChanges();\r\n  }\r\n\r\n  hasData(): boolean {\r\n    return this.results && this.results.data && this.results.data.length > 0;\r\n  }\r\n\r\n  getTotalPage() {\r\n    if (!this.varPaging) {\r\n      return 0;\r\n    }\r\n    return (this.varPaging.totalElements % this.varPaging.pageSize) === 0\r\n      ? Math.floor(this.varPaging.totalElements / this.varPaging.pageSize)\r\n      : Math.floor((this.varPaging.totalElements / this.varPaging.pageSize) + 1);\r\n  }\r\n\r\n  goToPage() {\r\n    if (this.goToPageNumber) {\r\n      this.getPage({ pageIndex: this.goToPageNumber - 1, pageSize: this.varPaging.pageSize });\r\n    }\r\n  }\r\n\r\n  getHeaderButtonColspan() {\r\n    this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);\r\n    return this.buttonColspan;\r\n  }\r\n\r\n  onChangeGoToPageNumber($event: number): void {\r\n    if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event)) {\r\n      this.goToPageNumber = 1;\r\n      return;\r\n    }\r\n    if (this.goToPageNumber > this.getTotalPage()) {\r\n      this.goToPageNumber = this.getTotalPage();\r\n    }\r\n    const item: HTMLInputElement | null = window.document.querySelector('.go-to-page cva-counter-input .mat-mdc-form-field-infix input');\r\n    if (item && item.closest) {\r\n      const itemClosest: HTMLElement | null = item.closest<HTMLElement>('.mat-mdc-form-field-infix');\r\n      if (itemClosest) {\r\n        itemClosest.style.width = ($event.toString().length * 15 + 20) + 'px';\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[pattern-directive]',\r\n    standalone: false,\r\n})\r\n\r\nexport class PatternDirective {\r\n\r\n    private navigationKeys = [\r\n        'Backspace',\r\n        'Delete',\r\n        'Tab',\r\n        'Escape',\r\n        'Enter',\r\n        'Home',\r\n        'End',\r\n        'ArrowLeft',\r\n        'ArrowRight',\r\n        'Clear',\r\n        'Copy',\r\n        'Paste'\r\n    ];\r\n\r\n    @Input('regPattern')\r\n    set regPattern(reg: string) {\r\n        if (reg) {\r\n            this.$regPatternString = reg\r\n            this.$regPattern = new RegExp(reg);\r\n        }\r\n\r\n    }\r\n\r\n    $regPatternString = '';\r\n    $regPattern = new RegExp('');\r\n    inputElement: HTMLElement;\r\n\r\n    constructor(public el: ElementRef) {\r\n        this.inputElement = el.nativeElement;\r\n    }\r\n\r\n    // @Output() valueChange = new EventEmitter()\r\n    // @HostListener('input', ['$event']) onInputChange(event: any) {\r\n    //   const initalValue = this.el.nativeElement.value;\r\n    //   const newValue = initalValue.replace(/[^0-9]*/g, '');\r\n    //   this.el.nativeElement.value = newValue;\r\n    //   this.valueChange.emit(newValue);\r\n    //   if ( initalValue !== this.el.nativeElement.value) {\r\n    //     event.stopPropagation();\r\n    //   }\r\n    // }\r\n    @HostListener('keydown', ['$event'])\r\n    onKeyDown(e: KeyboardEvent) {\r\n        if (\r\n            this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.\r\n            (e.key === 'a' && e.ctrlKey === true) || // Allow: Ctrl+A\r\n            (e.key === 'c' && e.ctrlKey === true) || // Allow: Ctrl+C\r\n            (e.key === 'v' && e.ctrlKey === true) || // Allow: Ctrl+V\r\n            (e.key === 'x' && e.ctrlKey === true) || // Allow: Ctrl+X\r\n            (e.key === 'a' && e.metaKey === true) || // Allow: Cmd+A (Mac)\r\n            (e.key === 'c' && e.metaKey === true) || // Allow: Cmd+C (Mac)\r\n            (e.key === 'v' && e.metaKey === true) || // Allow: Cmd+V (Mac)\r\n            (e.key === 'x' && e.metaKey === true) // Allow: Cmd+X (Mac)\r\n        ) {\r\n            // let it happen, don't do anything\r\n            return;\r\n        }\r\n        // Ensure that it is a number and stop the keypress\r\n        // if (\r\n        //   (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) &&\r\n        //   (e.keyCode < 96 || e.keyCode > 105)\r\n        // ) {\r\n        //   e.preventDefault();\r\n        // }\r\n\r\n        if (!e.key.match(this.$regPattern)) {\r\n            e.preventDefault();\r\n            return;\r\n        }\r\n        const current: string = this.el.nativeElement.value;\r\n        // @ts-ignore\r\n        const next: string = current ? current.concat(e.key) : e.key;\r\n        // @ts-ignore\r\n      if (!next || !next.replaceAll(',', '').match(this.$regPattern)) {\r\n            e.preventDefault();\r\n        }\r\n\r\n\r\n    }\r\n\r\n    @HostListener('paste', ['$event'])\r\n    onPaste(event: ClipboardEvent) {\r\n        event.preventDefault();\r\n        let data: string | undefined = '';\r\n        const pastedInput = event.clipboardData?.getData('text/plain'); // get a digit-only string\r\n\r\n        if (this.$regPatternString !== null && this.$regPatternString !== undefined && this.$regPatternString !== '') {\r\n\r\n\r\n            for (let i = 0; pastedInput && i < pastedInput?.length; i++) {\r\n                if (pastedInput[i].match(this.$regPattern)) {\r\n                    data = data.concat(pastedInput[i])\r\n                }\r\n            }\r\n        } else {\r\n            data = pastedInput\r\n        }\r\n        document.execCommand('insertText', false, data);\r\n    }\r\n\r\n    @HostListener('drop', ['$event'])\r\n    onDrop(event: DragEvent) {\r\n        event.preventDefault();\r\n        const textData = event.dataTransfer?.getData('text').replace(/\\D/g, '');\r\n        this.inputElement.focus();\r\n        document.execCommand('insertText', false, textData);\r\n    }\r\n\r\n\r\n}\r\n","import { Directive, ElementRef, forwardRef, HostListener, Input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\r\n\r\n@Directive({\r\n    selector: '[inputDirective]',\r\n    standalone: false,\r\n    providers: [\r\n        {provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: FormatInputDirective},\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => FormatInputDirective),\r\n            multi: true\r\n        }\r\n    ]\r\n})\r\nexport class FormatInputDirective implements ControlValueAccessor {\r\n\r\n    elementInput: any;\r\n    control?: any;\r\n    @Input('inputDirective') inputDirective: any;\r\n\r\n    constructor(protected element: ElementRef<HTMLInputElement>,\r\n    ) {\r\n\r\n    }\r\n\r\n    protected _value: string | null = '';\r\n\r\n    get value(): string | null {\r\n        return this._value;\r\n    }\r\n\r\n    @Input('value')\r\n    set value(value: string | null) {\r\n        this._value = value;\r\n        this.format(value);\r\n    }\r\n\r\n    @HostListener('input', ['$event.target.value'])\r\n    input(value: any) {\r\n\r\n        // If decimal separator is last character don't update\r\n        // because it will delete . || ,\r\n        /*\r\n                if (this.isLastCharacterDecimalSeparator(value)) {\r\n                    this._value = value;\r\n                } else {\r\n                    this._value = this.unformatValue(value)\r\n                }\r\n        */\r\n\r\n        // here to notify Angular Validators\r\n        this._onChange(value);\r\n//        this.format(this._value);\r\n    }\r\n\r\n    @HostListener('focusout', ['$event.target.value'])\r\n    focusout(value: any) {\r\n        // If decimal separator is last character don't update\r\n        // because it will delete . || ,\r\n        if (this.isLastCharacterDecimalSeparator(value)) {\r\n            this._value = value;\r\n        } else {\r\n            this._value = this.unformatValue(value)\r\n        }\r\n\r\n        // here to notify Angular Validators\r\n        this._onChange(this._value);\r\n        this.format(this._value);\r\n    }\r\n\r\n/*\r\n    @HostListener('blur')\r\n    _onBlur() { \r\n        /!**\r\n         * Adding thousand separators\r\n         *!/\r\n        this.format(this._value);\r\n    }\r\n*/\r\n\r\n\r\n    _onChange(value: any): void {\r\n\r\n    }\r\n\r\n    /**\r\n     * @param value\r\n     * apply formatting on value assignment\r\n     */\r\n    writeValue(value: any) {\r\n        this._value = value;\r\n        this.format(this._value);\r\n    }\r\n\r\n    registerOnChange(fn: (value: any) => void) {\r\n        this._onChange = fn;\r\n    }\r\n\r\n    registerOnTouched() {\r\n    }\r\n\r\n    isLastCharacterDecimalSeparator(value: any) {\r\n        return isNaN(value[value.length - 1]);\r\n    }\r\n\r\n    private format(value: string | null) {\r\n        if (value === null) {\r\n            this.element.nativeElement.value = '';\r\n            return;\r\n        }\r\n\r\n        if (this.isLastCharacterDecimalSeparator(value) && this.elementInput) {\r\n            this.element.nativeElement.value = value;\r\n            return;\r\n        }\r\n\r\n        if (this.inputDirective && this.inputDirective.formatValue) {\r\n            const tmp = this.inputDirective.formatValue(value);\r\n            value = tmp === null || tmp === undefined ? value : tmp;\r\n        }\r\n        this.element.nativeElement.value = value ? value : '';\r\n\r\n    }\r\n\r\n    unformatValue(value: any) {\r\n        if (this.inputDirective && this.inputDirective.unformatValue) {\r\n            value = this.inputDirective.unformatValue(value);\r\n        }\r\n        return value;\r\n    }\r\n\r\n    formatValue(value: any) {\r\n        return value;\r\n    }\r\n\r\n    //\r\n    // private unFormatValue() {\r\n    //   const value = this.element.nativeElement.value;\r\n    //   if (this.isLastCharacterDecimalSeparator(value)) {\r\n    //     return;\r\n    //   }\r\n    //   const regExp = new RegExp(`[^\\\\d${this.decimalMarker}-]`, 'g');\r\n    //   const [integer, decimal] = value.replace(regExp, '').split(this.decimalMarker);\r\n    //\r\n    //   this._value = integer.concat('.', decimal);\r\n    //   if (value) {\r\n    //     this.element.nativeElement.value = this._value;\r\n    //   } else {\r\n    //     this.element.nativeElement.value = '';\r\n    //   }\r\n    // }\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { ValidatorService } from '../services/validator.service';\r\n\r\n@Component({\r\n  selector: 'cva-input',\r\n  standalone: false,\r\n  template: `\r\n      <!-- css labelOutside trong base.theme-->\r\n      <div class=\"cva-input\"\r\n           [ngClass]=\"{'labelOutside': !!isLabelOutside,\r\n            'float_label': !!isFloatLabel && !isLabelOutside,\r\n            'text_area': !!this.multiline}\"\r\n           fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n          <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                     fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n              <div class=\"label\">\r\n                <div>\r\n                  {{(label ? label : placeholder) | translate}}<span class=\"required-label-outside\">{{!!required ? '*' : ''}}</span>\r\n                </div>\r\n              </div>\r\n          </mat-label>\r\n          <mat-form-field appearance=\"outline\" [floatLabel]=\"!!isFloatLabel ? 'always' : 'auto'\"\r\n                          [ngClass]=\"{'cva-input-multiline': multiline}\"\r\n                          [hideRequiredMarker]=\"!isFloatLabel\"\r\n                          fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n              <mat-label *ngIf=\"!isLabelOutside && !!isFloatLabel\" [ngClass]=\"{'cva-input-multiline': multiline}\">\r\n                  {{(label ? label : placeholder) | translate}}\r\n              </mat-label>\r\n              <input matInput placeholder=\"{{placeholder|translate}}\" [type]=\"type\" [(ngModel)]=\"textValue\"\r\n                     [pattern]=\"pattern\"\r\n                     minLength=\"{{minLength ? minLength : 0}}\"\r\n                     maxLength=\"{{maxLength ? maxLength : 524288}}\"\r\n                     [required]=\"required\"\r\n                     [disabled]=\"disabled\"\r\n                     readonly=\"{{readonly}}\"\r\n                     [inputDirective]=\"formatFunc\"\r\n                     *ngIf=\"!multiline\"\r\n                     (focus)=\"onFocus()\"\r\n                     (blur)=\"onBlur()\"\r\n                     pattern-directive\r\n                     [regPattern]=\"patternFilter\"\r\n                     autocomplete=\"off\">\r\n              <textarea matInput [(ngModel)]=\"textValue\" placeholder=\"{{placeholder|translate}}\"\r\n                        [pattern]=\"pattern\"\r\n                        minLength=\"{{minLength ? minLength : 0}}\"\r\n                        maxLength=\"{{maxLength ? maxLength : 524288}}\"\r\n                        [required]=\"required\"\r\n                        [disabled]=\"disabled\"\r\n                        readonly=\"{{readonly}}\"\r\n                        (focus)=\"onFocus()\"\r\n                        (blur)=\"onBlur()\"\r\n                        *ngIf=\"multiline\"\r\n                        cdkTextareaAutosize cdkAutosizeMinRows=\"3\"\r\n                        autocomplete=\"off\"></textarea>\r\n              <i *ngIf=\"!!suffixFontAwesomeClass\" class=\"input-suffix {{suffixFontAwesomeClass}}\" matSuffix></i>\r\n              <span *ngIf=\"onFocusStatus && (!!maxLength || !!maxLengthDisplay)\" class=\"input-suffix\"\r\n                    matSuffix>{{displayLength()}}</span>\r\n              <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(control)\">{{hint | translate}}</mat-hint>\r\n              <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(control)\">\r\n                  {{NsValidator.getErrorMessageV1(control, errorMessages).msg | translate: NsValidator.getErrorMessageV1(control, errorMessages).params}}\r\n              </mat-hint>\r\n          </mat-form-field>\r\n      </div>\r\n  `,\r\n})\r\nexport class CvaInputComponent implements ControlValueAccessor, OnInit, AfterViewInit {\r\n  @Input() label: string = '';\r\n  @Input() name: string = '';\r\n  @Input() placeholder: string = '';\r\n  @Input() hint: string = '';\r\n  @Input() required = false;\r\n  @Input() disabled = false;\r\n  @Input() text = '';\r\n  @Input() type: string = 'text';\r\n  @Input() pattern: any = null;\r\n  @Input() readonly = false;\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Output() onChange = new EventEmitter<string>();\r\n  @Input() multiline = false;\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  @Input() minLength: number | undefined;\r\n  @Input() maxLength: number | undefined;\r\n  onFocusStatus = false;\r\n  /* hiển thị suffix thay maxlength */\r\n  @Input() maxLengthDisplay: number | undefined;\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n\r\n  @Input() suffixFontAwesomeClass: string = '';\r\n  @Input() patternFilter: string = '';\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl: boolean = true;\r\n  @Input() formatFunc: any;\r\n  control: AbstractControl | undefined = undefined;\r\n\r\n  get NsValidator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  constructor(private injector: Injector,\r\n              @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  // Vì không thể quất được NgControl ở constructor nên phải quất ở đây :(\r\n  ngAfterViewInit() {\r\n    //     const ngControl = this.injector.get(NgControl);\r\n    //     if (ngControl) {\r\n    //         this.control = ngControl.control;\r\n    //         this.callValidator();\r\n    //     }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.callValidator();\r\n  }\r\n\r\n  get textValue() {\r\n    return this.text;\r\n  }\r\n\r\n  set textValue(val) {\r\n    this.writeValue(val);\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.control) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.control = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.control = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.control) {\r\n        if (this.control.validator) {\r\n          this.control.setValidators([...ValidatorService.generateNsInputValidators({\r\n            required: this.required,\r\n            minLength: this.minLength,\r\n            maxLength: this.maxLength,\r\n            pattern: this.pattern,\r\n          }), this.control.validator]);\r\n        } else {\r\n          this.control.setValidators([...ValidatorService.generateNsInputValidators({\r\n            required: this.required,\r\n            minLength: this.minLength,\r\n            maxLength: this.maxLength,\r\n            pattern: this.pattern,\r\n          })]);\r\n        }\r\n      }\r\n    }\r\n    if (this.control) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.control.setValue(this.text);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      this.control.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  /**\r\n   * Write a new value to the element.\r\n   */\r\n  writeValue(obj: any): void {\r\n    this.text = obj;\r\n    this.propagateChange(this.text);\r\n    this.callValidator();\r\n    this.onChange.emit(this.text);\r\n  }\r\n\r\n  /**\r\n   * Set the function to be called\r\n   * when the formControl receives a change event.\r\n   */\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  /**\r\n   * Set the function to be called\r\n   * when the formControl receives a touch event.\r\n   */\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  displayLength() {\r\n    if (this.maxLength === null || this.maxLength === undefined) {\r\n      return this.maxLengthDisplay ? this.maxLengthDisplay : '';\r\n    }\r\n    return (this.textValue?.length ? this.textValue.length : 0) + '/' + this.getMaxLength();\r\n  }\r\n\r\n  getMaxLength() {\r\n    return this.maxLengthDisplay ? this.maxLengthDisplay : this.maxLength;\r\n\r\n  }\r\n\r\n  onFocus() {\r\n    this.onFocusStatus = true;\r\n  }\r\n\r\n  onBlur() {\r\n    if (this.onFocusStatus) {\r\n      this.onFocusStatus = false;\r\n    }\r\n  }\r\n}\r\n","import { MatDateFormats, NativeDateAdapter } from '@angular/material/core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NsDateAdapter extends NativeDateAdapter {\r\n  format(date: Date, displayFormat: any): string {\r\n    let day: string = date.getDate().toString();\r\n    day = +day < 10 ? '0' + day : day;\r\n    let month: string = (date.getMonth() + 1).toString();\r\n    month = +month < 10 ? '0' + month : month;\r\n    const year = date.getFullYear();\r\n    if (displayFormat === 'input') {\r\n      return `${day}/${month}/${year}`;\r\n    }\r\n    return `${month}/${year}`;\r\n  }\r\n}\r\n\r\nexport const APP_DATE_FORMATS: MatDateFormats = {\r\n  parse: {\r\n    dateInput: { month: 'short', year: 'numeric', day: 'numeric' },\r\n  },\r\n  display: {\r\n    dateInput: 'input',\r\n    monthYearLabel: { year: 'numeric', month: 'numeric' },\r\n    dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\r\n    monthYearA11yLabel: { year: 'numeric', month: 'long' },\r\n  },\r\n};\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DateUtilService {\r\n\r\n  config: NiceComponentLibraryConfig;\r\n\r\n  DIS_DATE_TIME_FORMAT_DEFAULT = 'dd/MM/yyyy HH:mm';\r\n\r\n  constructor(private datePipe: DatePipe, private injector: Injector) {\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n  }\r\n\r\n  getDateNow(): Date {\r\n    const now = new Date();\r\n    return new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);\r\n  }\r\n\r\n  addDays(date: Date, days: number): Date {\r\n    date.setDate(date.getDate() + days);\r\n    return date;\r\n  }\r\n\r\n  convertToStartOfDate(dateString: string): Date {\r\n    const currentDate = this.convertToDateIgnoreTimeZone(dateString);\r\n    if (currentDate) {\r\n      return new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 0, 0, 0);\r\n    }\r\n    return new Date(1900, 1, 1);\r\n  }\r\n\r\n  convertDateToStringCurrentGMT(date: Date): string | null {\r\n    return this.datePipe.transform(date, this.config.API_DATE_FORMAT);\r\n  }\r\n\r\n  convertDateToStringGMT0(date: Date | string): string | null {\r\n    return this.datePipe.transform(date, this.config.API_DATE_FORMAT, '-0');\r\n  }\r\n\r\n  convertDateToDisplayGMT0(date: string): string | null {\r\n    return this.datePipe.transform(date, this.config.DIS_DATE_FORMAT, '-0');\r\n  }\r\n\r\n  convertDateToDisplayServerTime(date: string): string | null {\r\n    return this.datePipe.transform(date ? date.replace('Z', '') : '', this.config.DIS_DATE_FORMAT);\r\n  }\r\n\r\n  convertDateTimeToDisplay(date: string): string | null {\r\n    return this.datePipe.transform(date.replace('Z', ''),\r\n      this.config.DIS_DATE_TIME_FORMAT ? this.config.DIS_DATE_TIME_FORMAT : this.DIS_DATE_TIME_FORMAT_DEFAULT);\r\n  }\r\n\r\n  convertToDateIgnoreTimeZone(dateStr: string | undefined): Date | null {\r\n    if (dateStr != null) {\r\n      return new Date(dateStr.replace('Z', ''));\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  convertStringToDate(date: string): Date {\r\n    return date ? new Date(date.replace(' ', 'T')) : new Date(1900, 1, 1);\r\n  }\r\n}\r\n","import { Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { APP_DATE_FORMATS, NsDateAdapter } from '../../directives/format-datepicker';\r\nimport { DateUtilService } from '../../services/date-util.service';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../../models/nice-component-library.config';\r\nimport { ValidatorService } from '../../services/validator.service';\r\n\r\n@Component({\r\n  selector: 'cva-date-picker',\r\n  standalone: false,\r\n  template: `\r\n    <!-- css labelOutside trong base.theme-->\r\n    <div class=\"cva-date-picker\"\r\n         [ngClass]=\"{'labelOutside': isLabelOutside, 'float_label': isFloatLabel && !isLabelOutside}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : placeholder) | translate }}<span\r\n            class=\"required-label-outside\">{{ !!required ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <mat-form-field appearance=\"outline\" [floatLabel]=\"isFloatLabel ? 'always' : 'auto'\"\r\n                      [hideRequiredMarker]=\"!isFloatLabel\"\r\n                      fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">{{ (label ? label : placeholder) | translate }}</mat-label>\r\n        <input matInput [matDatepicker]=\"xDatepicker\"\r\n               [placeholder]=\"placeholder|translate\"\r\n               [(ngModel)]=\"datepickerValue\"\r\n               [readonly]=\"true\"\r\n               [required]=\"checkRequired(required)\"\r\n               [title]=\"title ? title : ''\"\r\n               [min]=\"getMinDate()\" [max]=\"getMaxDate()\">\r\n        <mat-datepicker-toggle matPrefix [for]=\"xDatepicker\" [disabled]=\"disabled\"></mat-datepicker-toggle>\r\n        <mat-datepicker #xDatepicker></mat-datepicker>\r\n        <button mat-icon-button color=\"warn\" class=\"btnDatePicker\" matSuffix (click)=\"onClear()\"\r\n                [disabled]=\"disabled || checkRequired(required)\">\r\n          <mat-icon>clear</mat-icon>\r\n        </button>\r\n\r\n        <mat-hint style=\"color: red\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n          {{ NsValidator.getErrorMessage(formControl, errorMessages) | translate }}\r\n        </mat-hint>\r\n\r\n      </mat-form-field>\r\n    </div>\r\n  `,\r\n  providers: [\r\n    { provide: DateAdapter, useClass: NsDateAdapter },\r\n    {\r\n      provide: MAT_DATE_FORMATS,\r\n      useValue: APP_DATE_FORMATS,\r\n    },\r\n  ],\r\n})\r\nexport class CvaDatePickerComponent implements ControlValueAccessor, OnInit {\r\n  @Input() label: string = '';\r\n  @Input() placeholder: string = '';\r\n  @Input() value: any;\r\n  @Input() disabled: boolean = false;\r\n  @Input() required: boolean | (() => boolean) = false;\r\n  @Input() minDate: (() => Date) | Date = new Date(1900, 1, 1);\r\n  @Input() maxDate: (() => Date) | Date = new Date(9999, 12, 31);\r\n  @Output() onChange = new EventEmitter<string>();\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n\r\n  title: string | null = null;\r\n  config: NiceComponentLibraryConfig;\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi @@\r\n  @Input() isFormControl: boolean = true;\r\n\r\n  formControl: AbstractControl | undefined;\r\n\r\n\r\n  get NsValidator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  constructor(private dateServiceUtil: DateUtilService,\r\n              @Self() @Optional() ngControl: NgControl,\r\n              private injector: Injector) {\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n    if (ngControl) {\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.callValidator();\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.formControl) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.formControl) {\r\n        this.formControl.setValidators(ValidatorService.generateNsDatePickerValidators(\r\n          {\r\n            required: this.required,\r\n            min: this.getMinDate(),\r\n            max: this.getMaxDate(),\r\n          },\r\n        ));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      this.formControl.updateValueAndValidity();\r\n\r\n      const errorsObj: { [key: string]: any } = {};\r\n\r\n      const errors = this.formControl.errors;\r\n      if (errors) {\r\n        Object.keys(errors).forEach(key => {\r\n          errorsObj[key] = errors[key];\r\n        });\r\n      }\r\n\r\n      const minValidation = ValidatorService.customMinDateValidatorControl(this.value, this.getMinDate());\r\n      if (minValidation) {\r\n        Object.keys(minValidation).forEach(key => {\r\n          errorsObj[key] = minValidation[key];\r\n        });\r\n      }\r\n\r\n      const maxValidation = ValidatorService.customMaxDateValidatorControl(this.value, this.getMaxDate());\r\n      if (maxValidation) {\r\n        Object.keys(maxValidation).forEach(key => {\r\n          errorsObj[key] = maxValidation[key];\r\n        });\r\n      }\r\n\r\n      if (Object.keys(errorsObj).length > 0) {\r\n        this.formControl.setErrors(errorsObj);\r\n      } else {\r\n        this.formControl.setErrors(null);\r\n      }\r\n      this.formControl.markAllAsTouched();\r\n    }\r\n  }\r\n\r\n  checkRequired(isRequired: boolean | (() => boolean)) {\r\n    return isRequired ? typeof (isRequired) === 'boolean' ? isRequired : isRequired() : false;\r\n  }\r\n\r\n  get datepickerValue() {\r\n    if (this.value instanceof Date) {\r\n      return this.value;\r\n    }\r\n    if (this.isString(this.value) && this.value.indexOf('Z') >= 0) {\r\n      return this.value.replace(' ', 'T');\r\n    }\r\n    return null;\r\n  }\r\n\r\n  set datepickerValue(val) {\r\n    this.writeValue(val);\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  writeValue(obj: Date | string | null): void {\r\n    let out: string | null = '';\r\n    this.value = obj;\r\n    if (obj) {\r\n      // Nếu là dạng server trả về là string và có Z thì thuộc GMT+0 nên sẽ ép về zone -0\r\n      if (this.isString(this.value) && this.value.indexOf('Z') >= 0) {\r\n        out = this.dateServiceUtil.convertDateToStringGMT0(obj);\r\n      } else {\r\n        out = this.dateServiceUtil.convertDateToStringCurrentGMT(this.value);\r\n      }\r\n    }\r\n    if (out) {\r\n      this.title = this.dateServiceUtil.convertDateToDisplayGMT0(out);\r\n    }\r\n    this.propagateChange(out);\r\n    this.callValidator();\r\n    this.onChange.emit(out ? out : '');\r\n  }\r\n\r\n  onClear() {\r\n    this.writeValue(null);\r\n  }\r\n\r\n  getMinDate() {\r\n    if (this.minDate) {\r\n      return this.minDate instanceof Date ? this.minDate : this.minDate();\r\n    }\r\n    return new Date(1900, 1, 1);\r\n  }\r\n\r\n  getMaxDate() {\r\n    if (this.maxDate) {\r\n      return this.maxDate instanceof Date ? this.maxDate : this.maxDate();\r\n    }\r\n    return new Date(9999, 12, 31);\r\n  }\r\n\r\n  isString(inputValue: any): boolean {\r\n    return typeof inputValue === 'string' || inputValue instanceof String;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  Self,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { SelectModel } from '../models/components/select.model';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ValidatorService } from '../services/validator.service';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\nimport { MatOptionSelectionChange } from '@angular/material/core';\r\n\r\n@Component({\r\n  selector: 'cva-multi-select-autocomplete',\r\n  standalone: false,\r\n  template: `\r\n    <!-- css labelOutside trong base.theme-->\r\n    <div class=\"cva-multi-select-autocomplete\"\r\n         [ngClass]=\"{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : placeholder) | translate }}<span\r\n            class=\"required-label-outside\">{{ !!getRequired() ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <mat-form-field appearance=\"outline\" [floatLabel]=\"!!isFloatLabel ? 'always' : 'auto'\"\r\n                      [hideRequiredMarker]=\"!isFloatLabel\"\r\n                      fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-label\r\n          *ngIf=\"!isLabelOutside && !!isFloatLabel\">{{ (label ? label : placeholder) | translate }}\r\n        </mat-label>\r\n        <mat-select [disabled]=\"disabled\"\r\n                    [placeholder]=\"placeholder | translate\"\r\n                    [multiple]=\"multiple\"\r\n                    [(ngModel)]=\"selectedValue\"\r\n                    [required]=\"getRequired()\"\r\n                    (selectionChange)=\"matSelectionChange($event)\"\r\n                    (openedChange)=\"openChange($event)\">\r\n          <div class=\"box-search\">\r\n            <mat-checkbox *ngIf=\"multiple\" color=\"primary\" class=\"box-select-all\"\r\n                          [(ngModel)]=\"selectAllChecked\"\r\n                          (change)=\"toggleSelectAll($event)\"></mat-checkbox>\r\n            <input #searchInput type=\"text\" [ngClass]=\"{'pl-1': !multiple}\"\r\n                   (keydown.space)=\"$event.stopPropagation()\"\r\n                   (input)=\"filterItem(searchInput.value)\"\r\n                   placeholder=\"{{'btnSearch' | translate}}...\">\r\n            <div class=\"box-search-icon\" (click)=\"filterItem(''); searchInput.value = ''\">\r\n              <button mat-icon-button class=\"search-button\">\r\n                <mat-icon class=\"mat-24\" aria-label=\"Search icon\">clear</mat-icon>\r\n              </button>\r\n            </div>\r\n          </div>\r\n          <mat-select-trigger title=\"{{displayString|translate}}\">\r\n            {{ displayString | translate }}\r\n          </mat-select-trigger>\r\n          <cdk-virtual-scroll-viewport [itemSize]=\"getItemSize()\"\r\n                                       [style.height.px]=\"getViewPortHeight()\">\r\n            <mat-option *cdkVirtualFor=\"let option of filteredOptions; let i = index\"\r\n                        [attr.data-optionIndex]=\"i\"\r\n                        [disabled]=\"option.disabled\" [value]=\"option.value\"\r\n                        [ngClass]=\"{'tree-mat-option': isTree}\"\r\n                        title=\"{{option.displayValue|translate}}\"\r\n                        (onSelectionChange)=\"onSelectionChange($event)\">\r\n              <div *ngIf=\"!isTree\">{{ option.displayValue | translate }}</div>\r\n              <div *ngIf=\"!!isTree\" class=\"tree-multiline-mat-option\">\r\n                <div mat-line>{{ onDisplayTreeData(option.displayValue, true) }}</div>\r\n                <p mat-line>{{ onDisplayTreeData(option.displayValue, false) }}</p>\r\n              </div>\r\n            </mat-option>\r\n          </cdk-virtual-scroll-viewport>\r\n          <ng-container *ngIf=\"multiple\">\r\n            <ng-container *ngFor=\"let option of selectedValue; let i = index\">\r\n              <mat-option class=\"selected-options\" [value]=\"option\" *ngIf=\"i===0\">\r\n                {{ option }}\r\n              </mat-option>\r\n            </ng-container>\r\n          </ng-container>\r\n          <ng-container *ngIf=\"!multiple\">\r\n            <mat-option class=\"selected-options\" *ngIf=\"!!selectedValue\"\r\n                        [value]=\"selectedValue\">{{ selectedValue }}\r\n            </mat-option>\r\n          </ng-container>\r\n        </mat-select>\r\n        <mat-icon matSuffix>expand_more</mat-icon>\r\n        <mat-hint *ngIf=\"!NsValidator.invalid(formControl)\">{{ hint | translate }}</mat-hint>\r\n        <mat-hint style=\"color: red\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n          {{ NsValidator.getErrorMessage(formControl, errorMessages) | translate }}\r\n        </mat-hint>\r\n      </mat-form-field>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaMultiSelectAutocomplete implements ControlValueAccessor, OnInit, OnChanges {\r\n\r\n  @Input() placeholder: string = '';\r\n  @Input() label: string = '';\r\n  @Input() hint: string = '';\r\n  @Input() value: any[] | any = [];\r\n  @Input() options: SelectModel[] = [];\r\n  @Input() disabled = false;\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() multiple = true;\r\n  @Input() required: boolean | (() => boolean) = false;\r\n  @Input() isTree = false;\r\n  @Input() treeSymbol: string = ' >> ';\r\n  @Input() sizeOfItemsInListByPixels: number = 39;\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n\r\n  @Output() selectionChange = new EventEmitter();\r\n  @Output() selectedOptionDataChange = new EventEmitter<SelectModel[]>();\r\n  valueOptionRef: SelectModel[] = [];\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl: boolean = true;\r\n  @ViewChild('searchInput') searchInputRef: any;\r\n\r\n  // Cái này là để gắn khi nó là FormControl trong 1 FormGroup\r\n  formControl: AbstractControl | undefined;\r\n  filteredOptions: SelectModel[] = [];\r\n  selectAllChecked = false;\r\n  labelCount: number = 1;\r\n  @ViewChild(CdkVirtualScrollViewport, { static: false }) cdkVirtualScrollViewPort: CdkVirtualScrollViewport | undefined;\r\n\r\n  constructor(private translateService: TranslateService, private injector: Injector,\r\n              @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  _displayString = '';\r\n\r\n  get displayString() {\r\n    return this._displayString;\r\n  }\r\n\r\n  get NsValidator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  get selectedValue() {\r\n    return this.value;\r\n  }\r\n\r\n  set selectedValue(val: any[] | any) {\r\n    // this.writeValue(val); // Đọc comment bên dưới matSelectionChange\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.callValidator();\r\n  }\r\n\r\n  getRequired() {\r\n    return typeof this.required === 'function' ? this.required() : this.required;\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    if (ngControl && !this.formControl) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      if (this.formControl) {\r\n        this.formControl.setValidators(ValidatorService.generateNsMultiSelectValidators({\r\n          required: this.required,\r\n          multiple: this.multiple,\r\n        }));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      this.formControl.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  writeValue(obj: any[] | any): void {\r\n    if (obj != null && obj != undefined && this.value !== obj) {\r\n      this.value = obj;\r\n      this.updateSelectAll();\r\n      // this.formControl.setValue(this.value);\r\n      this.propagateChange(this.value);\r\n      this.callValidator();\r\n      this.selectionChange.emit(this.value);\r\n    }\r\n    if (obj != null && obj != undefined && !((this.multiple && this.value.length === this.valueOptionRef.length)\r\n      || (!this.multiple && this.valueOptionRef[0] && this.value === this.valueOptionRef[0].value))) {\r\n      if (this.multiple) {\r\n        this.valueOptionRef = this.options.filter(option => this.value.includes(option.value));\r\n      } else {\r\n        this.valueOptionRef = this.options.filter(option => this.value === option.value);\r\n      }\r\n      this.selectedOptionDataChange.emit(this.valueOptionRef);\r\n    }\r\n    this._displayString = this.onDisplayString();\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  ngOnChanges(simpleChanges: SimpleChanges) {\r\n    if ('options' in simpleChanges) {\r\n      this.options = simpleChanges.options.currentValue;\r\n      this.filteredOptions = this.options;\r\n    }\r\n    if (this.value != null) {\r\n      this.writeValue(this.value);\r\n    }\r\n  }\r\n\r\n  toggleSelectAll(val: MatCheckboxChange) {\r\n    if (val.checked) {\r\n      let tempChecked = this.value ? this.value : [];\r\n      this.filteredOptions.forEach((option: SelectModel) => {\r\n        if ((!this.value || (this.value && !this.value.includes(option.value))) && !option.disabled) {\r\n          tempChecked = tempChecked.concat([option.value]);\r\n        }\r\n      });\r\n      this.writeValue(tempChecked);\r\n      this.selectedOptionDataChange.emit(this.filteredOptions.filter((option: SelectModel) => !option.disabled));\r\n    } else {\r\n      const filteredValues: any[] = [];\r\n      this.filteredOptions.forEach((option: SelectModel) => {\r\n        if (!option.disabled) {\r\n          filteredValues.push(option.value);\r\n        }\r\n      });\r\n      const filteredSelectedValue = this.value.filter(\r\n        (item: any) => !filteredValues.includes(item),\r\n      );\r\n      this.writeValue(filteredSelectedValue);\r\n      this.selectedOptionDataChange.emit([]);\r\n    }\r\n    this.selectionChange.emit(this.value);\r\n  }\r\n\r\n  filterItem(value: string) {\r\n    this.filteredOptions = this.options.filter((item: SelectModel) => {\r\n        const translatedDisplayValue = this.translateService.instant(item.displayValue);\r\n        if (translatedDisplayValue) {\r\n          return translatedDisplayValue.toLowerCase().indexOf(value.toLowerCase().trim()) > -1;\r\n        } else {\r\n          return item.displayValue.toLowerCase().indexOf(value.toLowerCase().trim()) > -1;\r\n        }\r\n      },\r\n    );\r\n    this.selectAllChecked = !!this.value;\r\n    this.filteredOptions.forEach((item: SelectModel) => {\r\n      if (this.value instanceof Array && !this.value.includes(item.value)) {\r\n        this.selectAllChecked = false;\r\n      }\r\n    });\r\n  }\r\n\r\n  onDisplayString(): string {\r\n    let _displayString = '';\r\n    if (this.value !== null && this.value !== undefined && this.value !== ''\r\n      && (!this.multiple || this.value.length > 0)) {\r\n      let displayOptions = [];\r\n      if (this.multiple) {\r\n        // Multi select display\r\n        for (let i = 0; i < this.labelCount; i++) {\r\n          displayOptions[i] = this.options.filter(\r\n            option => option.value === this.value[i],\r\n          )[0];\r\n        }\r\n        if (displayOptions.length) {\r\n          for (const displayOption of displayOptions) {\r\n            _displayString += displayOption\r\n              ? ((this.isTree ? this.onDisplayTreeData(displayOption.displayValue, true) : displayOption.displayValue) + ',')\r\n              : '';\r\n          }\r\n          _displayString = _displayString.slice(0, -1);\r\n          if (this.value.length > 1) {\r\n            const strOthers = this.translateService.instant('common.others');\r\n            _displayString += ` (+${this.value.length - this.labelCount} ${strOthers})`;\r\n          }\r\n        }\r\n      } else {\r\n        // Single select display\r\n        displayOptions = this.options.filter(\r\n          option => option.value === this.value,\r\n        );\r\n        if (displayOptions.length) {\r\n          _displayString = this.isTree\r\n            ? this.onDisplayTreeData(displayOptions[0].displayValue, true)\r\n            : displayOptions[0].displayValue;\r\n        }\r\n      }\r\n    }\r\n    return _displayString;\r\n  }\r\n\r\n  /* Nếu không dùng virtual scroll thì mat-options trong mat-select được load hết\r\n   * Khi toàn bộ mat-options được load hết thì mat-select-trigger sẽ lưu trữ được các giá trị đã chọn\r\n   * Khi chọn 1 hay nhiều thì val.value sẽ là toàn bộ giá trị đã chọn\r\n   */\r\n\r\n  /* Khi dùng virtual scroll thì mình chỉ load nhẹ 1 mat-options đầu đã chọn để hack speed displayOptions\r\n   * Khi đó khi chọn lại thì những mat-option không còn trong khung nhìn sẽ bị lỗi tick chọn nên ko dùng hàm này nữa\r\n   */\r\n  matSelectionChange(val: MatSelectChange) {\r\n    // this.writeValue(val.value);\r\n    // this.emitSelectedData(val);\r\n  }\r\n\r\n  onSelectionChange(change: MatOptionSelectionChange): void {\r\n    if (!change.isUserInput) {\r\n      return;\r\n    }\r\n    const value = change.source.value;\r\n    if (!this.multiple) {\r\n      this.writeValue(value);\r\n      return;\r\n    }\r\n\r\n    const idx = this.value.indexOf(value);\r\n\r\n    let tempChecked: any[] = this.value ? this.value : [];\r\n    if (idx > -1) {\r\n      tempChecked = tempChecked.filter(x => x !== value);\r\n    } else {\r\n      tempChecked = tempChecked.concat([value]);\r\n    }\r\n\r\n    this.writeValue(tempChecked);\r\n  }\r\n\r\n  updateSelectAll() {\r\n    const filteredValues: any[] = [];\r\n    this.filteredOptions.forEach((option: SelectModel) => {\r\n      if (!option.disabled) {\r\n        filteredValues.push(option.value);\r\n      }\r\n    });\r\n    let count = 0;\r\n    if (this.multiple && this.value && this.value instanceof Array && filteredValues) {\r\n      this.value.forEach((item: any) => {\r\n        count++;\r\n      });\r\n      this.selectAllChecked = count > 0 && count === filteredValues.length;\r\n    }\r\n  }\r\n\r\n  onDisplayTreeData(displayValue: string, isFirstLine: boolean): string {\r\n    const lastIndex = displayValue.lastIndexOf(this.treeSymbol.trim());\r\n    if (lastIndex < 0) {\r\n      return displayValue;\r\n    }\r\n    if (isFirstLine) {\r\n      return this.translateService.instant(displayValue.substr(lastIndex).replace(this.treeSymbol.trim(), '').trim());\r\n    } else {\r\n      const preValue = displayValue.substr(0, lastIndex).trim();\r\n      const preValues = preValue.split(this.treeSymbol.trim());\r\n      let result = '';\r\n      for (const value of preValues) {\r\n        result += this.translateService.instant(value.trim()) + ' ' + this.treeSymbol.trim() + ' ';\r\n      }\r\n      return result ? result.substr(0, result.length - 4) : result;\r\n    }\r\n  }\r\n\r\n  openChange($event: boolean) {\r\n    if ($event) {\r\n      if (this.cdkVirtualScrollViewPort) {\r\n        this.cdkVirtualScrollViewPort.scrollToIndex(0);\r\n        this.cdkVirtualScrollViewPort.checkViewportSize();\r\n      }\r\n      setTimeout(() => {\r\n        if (this.searchInputRef?.nativeElement) {\r\n          this.searchInputRef.nativeElement.focus();\r\n        }\r\n      }, 300);\r\n    }\r\n  }\r\n\r\n  getItemSize(): number {\r\n    return this.sizeOfItemsInListByPixels;\r\n  }\r\n\r\n  getViewPortHeight(): number {\r\n    const numberOfItems = this.options.length > 10 ? 10 : this.options.length;\r\n    const height = numberOfItems * this.sizeOfItemsInListByPixels;\r\n    return height > 200 ? 200 : height;\r\n  }\r\n}\r\n","import { Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { ValidatorService } from '../services/validator.service';\r\nimport { debounceTime, distinctUntilChanged, filter, Observable, of, Subscription, switchMap, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'cva-live-searching',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-live-searching\"\r\n         [ngClass]=\"{'labelOutside': !!isLabelOutside,\r\n            'float_label': !!isFloatLabel && !isLabelOutside}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : placeholder) | translate }}<span\r\n            class=\"required-label-outside\">{{ !!required ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <mat-form-field appearance=\"outline\" [floatLabel]=\"!!isFloatLabel ? 'always' : 'auto'\"\r\n                      [hideRequiredMarker]=\"!isFloatLabel\"\r\n                      fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-label *ngIf=\"!isLabelOutside && !!isFloatLabel\">\r\n          {{ (label ? label : placeholder) | translate }}\r\n        </mat-label>\r\n        <input type=\"text\"\r\n               matInput\r\n               [required]=\"required\"\r\n               [disabled]=\"disabled\"\r\n               placeholder=\"{{placeholder|translate}}\"\r\n               [formControl]=\"textControl\"\r\n               [matAutocomplete]=\"auto\"\r\n               readonly=\"{{readonly}}\" />\r\n        <button mat-icon-button color=\"warn\" class=\"btnClear\" matSuffix (click)=\"onClear()\" *ngIf=\"!loading\">\r\n          <mat-icon>clear</mat-icon>\r\n        </button>\r\n        <mat-spinner diameter=\"20\" matSuffix *ngIf=\"loading\"></mat-spinner>\r\n        <mat-autocomplete #auto=\"matAutocomplete\" autoActiveFirstOption\r\n                          (optionSelected)=\"onOptionSelect($event.option.value)\">\r\n          <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option[displayKey]\">\r\n            {{ option[displayKey] }}\r\n          </mat-option>\r\n        </mat-autocomplete>\r\n        <i *ngIf=\"!!suffixFontAwesomeClass\" class=\"input-suffix {{suffixFontAwesomeClass}}\" matSuffix></i>\r\n        <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(control)\">{{ hint | translate }}</mat-hint>\r\n        <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(control)\">\r\n          {{ NsValidator.getErrorMessageV1(control, errorMessages).msg | translate: NsValidator.getErrorMessageV1(control, errorMessages).params }}\r\n        </mat-hint>\r\n      </mat-form-field>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaLiveSearchingComponent implements ControlValueAccessor, OnInit {\r\n  @Input() label: string = '';\r\n  @Input() placeholder: string = '';\r\n  @Input() hint: string = '';\r\n  @Input() required = false;\r\n  @Input() disabled = false;\r\n  @Input() readonly = false;\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  @Input() percentOfLabelOutside: number = 25;\r\n  @Input() suffixFontAwesomeClass: string = '';\r\n  @Input() displayKey: string = '';\r\n  @Input() mappingConfig: Record<string, string> = {};\r\n  @Input() searchFn!: (term: string) => Observable<any[]>;\r\n  @Output() onChange = new EventEmitter<any>();\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl: boolean = true;\r\n  @Input() row?: any;\r\n  @Input() columnDef?: string;\r\n  control: AbstractControl | undefined = undefined;\r\n  textControl = new FormControl('');\r\n  filteredOptions: any[] = [];\r\n  selected: any;\r\n  loading = false;\r\n  private searchSub?: Subscription;\r\n\r\n  constructor(private injector: Injector,\r\n              @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  get NsValidator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.callValidator();\r\n    this.textValueChangeSubscribe();\r\n    if (!this.isFormControl && !!this.searchFn && this.row && this.columnDef) {\r\n      this.writeValue(this.row[this.columnDef]);\r\n    }\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.control) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.control = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.control = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.control) {\r\n        if (this.control.validator) {\r\n          this.control.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n            required: this.required,\r\n          }), this.control.validator]);\r\n        } else {\r\n          this.control.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n            required: this.required,\r\n          })]);\r\n        }\r\n      }\r\n    }\r\n    if (this.control) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.control.setValue(this.selected);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      this.control.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  /**\r\n   * Set the function to be called\r\n   * when the formControl receives a change event.\r\n   */\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  /**\r\n   * Set the function to be called\r\n   * when the formControl receives a touch event.\r\n   */\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  /**\r\n   * Write a new value to the element.\r\n   */\r\n  writeValue(obj: any): void {\r\n    if (!obj || typeof obj !== 'string') {\r\n      this.selected = {};\r\n      this.filteredOptions.length = 0;\r\n      this.filteredOptions = [];\r\n      this.textControl.setValue('', { emitEvent: false });\r\n      this.updateRowOrFormGroup();\r\n      return;\r\n    }\r\n    const matched = this.filteredOptions.find(opt => {\r\n      return JSON.stringify(opt[this.displayKey] ?? '') === JSON.stringify(obj ?? '');\r\n    });\r\n    if (!matched) {\r\n      if (!this.searchFn) {\r\n        return;\r\n      }\r\n      // Khi textValueChange chưa chạy không tìm thấy\r\n      this.searchFn(obj).subscribe(values => {\r\n        if (values && values.length > 0) {\r\n          this.filteredOptions = [...values];\r\n          this.onOptionSelect(obj);\r\n        }\r\n      });\r\n      return;\r\n    }\r\n    this.selected = matched;\r\n    this.textControl.setValue(matched[this.displayKey], { emitEvent: false });\r\n    this.updateRowOrFormGroup();\r\n  }\r\n\r\n  onOptionSelect(displayValue: any): void {\r\n    this.searchSub?.unsubscribe();\r\n    this.writeValue(displayValue);\r\n    setTimeout(() => this.textValueChangeSubscribe(), 100);\r\n  }\r\n\r\n  textValueChangeSubscribe() {\r\n    this.searchSub = this.textControl.valueChanges.pipe(\r\n      debounceTime(300),\r\n      distinctUntilChanged(),\r\n      filter(text => typeof text === 'string' && text.trim().length > 0),\r\n      tap(() => this.loading = true),\r\n      switchMap((text: string | null) => {\r\n        if (typeof text !== 'string' || !text || !text.trim()) return of([]);\r\n        return this.searchFn ? this.searchFn(text) : of([]);\r\n      }),\r\n      tap(() => this.loading = false),\r\n    ).subscribe((data) => {\r\n      this.filteredOptions.length = 0;\r\n      this.filteredOptions = [];\r\n      if (!!this.selected && !!this.selected[this.displayKey]) {\r\n        this.filteredOptions.push(this.selected);\r\n        this.filteredOptions.push(...data.filter((x) => x[this.displayKey] !== this.selected[this.displayKey]));\r\n      } else {\r\n        this.filteredOptions.push(...data);\r\n      }\r\n    });\r\n  }\r\n\r\n  updateRowOrFormGroup() {\r\n    if (!this.isFormControl && this.row) {\r\n      for (const targetKey in this.mappingConfig) {\r\n        const sourceKey = this.mappingConfig[targetKey];\r\n        this.row[targetKey] = this.selected[sourceKey];\r\n      }\r\n    }\r\n    if (this.isFormControl && this.control?.parent) {\r\n      for (const targetKey in this.mappingConfig) {\r\n        const sourceKey = this.mappingConfig[targetKey];\r\n        const formControl = this.control.parent.get(targetKey);\r\n        if (formControl) formControl.setValue(this.selected[sourceKey]);\r\n      }\r\n    }\r\n    this.propagateChange(this.selected[this.displayKey]);\r\n    this.onChange.emit(this.selected[this.displayKey]);\r\n  }\r\n\r\n  onClear() {\r\n    this.writeValue(null);\r\n  }\r\n}\r\n","import {\r\n  AfterContentChecked,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Inject,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  Self,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { ColumnModel } from '../../models/components/column.model';\r\nimport { ColumnTypeEnum } from '../../enums/column-type.enum';\r\nimport { ValidatorService } from '../../services/validator.service';\r\nimport { ButtonClickEvent } from '../../models/button-click.event';\r\nimport { BaseModel } from '../../models/base.model';\r\nimport { AlignEnum } from '../../enums/align.enum';\r\nimport { ButtonModel } from '../../models/components/button.model';\r\nimport { TableService } from '../../services/table.service';\r\nimport { IconTypeEnum } from '../../enums/icon-type.enum';\r\nimport { TableFooterModel } from '../../models/components/table-footer.model';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../../models/nice-component-library.config';\r\n\r\n@Component({\r\n  selector: 'cva-smart-table',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"table-responsive\"\r\n         [ngClass]=\"{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}\">\r\n      <table mat-table [dataSource]=\"datasource\" #matTable class=\"mat-elevation-z8 cva-smart-table\">\r\n        <ng-container *ngFor=\"let column of columns\" matColumnDef=\"{{column.columnDef}}\">\r\n          <ng-container *matHeaderCellDef>\r\n            <th mat-header-cell class=\"{{TableService.getColumnHeaderClassName(column)}}\"\r\n                *ngIf=\"onDisplayHeaderCell(column)\">\r\n              <!--                        *ngIf=\"getColumnType(column, result)!==ColumnTypes.CHECKBOX\"-->\r\n              <div [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   fxLayout=\"row\"\r\n                   [fxLayoutAlign]=\"column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)\">\r\n                <mat-checkbox\r\n                  *ngIf=\"TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox\"\r\n                  color=\"primary\" class=\"box-select-all margin-right-5\" [(ngModel)]=\"selectAllChecked\"\r\n                  (change)=\"toggleSelectAll($event, column)\">\r\n                </mat-checkbox>\r\n                {{ TableService.displayHeaderName(column, moduleName) | translate }}<span\r\n                style=\"color: red\">{{ getRequired(column) ? '*' : '' }}</span>\r\n              </div>\r\n            </th>\r\n          </ng-container>\r\n          <ng-container *matCellDef=\"let result;  let i = index\">\r\n            <td mat-cell [ngClass]=\"TableService.getColumnClassName(column,result)\"\r\n                *ngIf=\"TableService.onDisplayCell(column, result)\"\r\n                [ngSwitch]=\"TableService.getColumnType(column, result)\">\r\n              <div title=\"{{column.title(result)}}\"\r\n                   *ngSwitchCase=\"ColumnTypes.VIEW\"\r\n                   class=\"viewData {{TableService.getColumnClassName(column,result)}}\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\">\r\n                {{ column.cell(result) }}\r\n              </div>\r\n              <div class=\"link viewData\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.LINK\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <a [routerLink]=\"[column.link(result)]\">{{ column.cell(result) }}</a>\r\n              </div>\r\n              <div class=\"img-view viewData {{TableService.getColumnClassName(column,result)}}\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.IMG\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"column.cell(result) | secure | async\"\r\n                     #imgRef\r\n                     (error)=\"TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <div class=\"img-view viewData {{TableService.getColumnClassName(column,result)}}\"\r\n                   [ngClass]=\"{'break-word-style-view': column.hasWordBreakStyle}\"\r\n                   *ngSwitchCase=\"ColumnTypes.IMG_NO_SECURE\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"column.cell(result)\"\r\n                     #imgRef\r\n                     (error)=\"TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <div *ngSwitchCase=\"ColumnTypes.BASE64\"\r\n                   class=\"viewData img-view base64 {{TableService.getColumnClassName(column,result)}}\"\r\n                   fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   title=\"{{column.title(result)}}\">\r\n                <img [src]=\"'data:image/png;base64,'+column.cell(result)\"\r\n                     #base64ImgRef\r\n                     (error)=\"TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)\" alt=\"\" />\r\n              </div>\r\n              <ng-container *ngSwitchCase=\"ColumnTypes.BUTTON\">\r\n                <div *ngIf=\"!!column.button\"\r\n                     class=\"{{TableService.getColumnClassName(column, result)}}\"\r\n                     fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                     (click)=\"$event.stopPropagation()\">\r\n                  <button mat-icon-button\r\n                          color=\"{{column.button.color}}\"\r\n                          [ngClass]=\"column.button.className\"\r\n                          (click)=\"onClick(column.button.click, result, i)\"\r\n                          disabled=\"{{column.button.disabled ? column.button.disabled(result) : false}}\"\r\n                          matTooltip=\"{{(column.button.title ? column.button.title : '') | translate}}\"\r\n                          [ngSwitch]=\"TableService.getIconType(column.button)\">\r\n                    <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ column.button.icon }}</mat-icon>\r\n                    <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{column.button.icon}}\"></i>\r\n                  </button>\r\n                </div>\r\n              </ng-container>\r\n              <cva-counter-input *ngSwitchCase=\"ColumnTypes.INPUT_COUNTER\"\r\n                                 class=\"inputNumber\" #nsCounterInput\r\n                                 [isFormControl]=\"false\"\r\n                                 [alignNumber]=\"getCounterImputAlign(column)\"\r\n                                 [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                                 [value]=\"result[column.columnDef]\"\r\n                                 [required]=\"getRequired(column)\"\r\n                                 [errorMessages]=\"getErrorMessageMap(column)\"\r\n                                 [isDecimal]=\"getIsDecimal(column)\"\r\n                                 [min]=\"column.min ? column.min(result) : null\"\r\n                                 [max]=\"column.max ? column.max(result) : null\"\r\n                                 (onChange)=\"onCellValueChange(result, column, $event);\">\r\n              </cva-counter-input>\r\n              <cva-input *ngSwitchCase=\"ColumnTypes.INPUT\"\r\n                         [isFormControl]=\"false\"\r\n                         [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                         [text]=\"result[column.columnDef]\"\r\n                         [minLength]=\"column.min ? column.min(result) : undefined\"\r\n                         [maxLength]=\"column.max ? column.max(result) : undefined\"\r\n                         [required]=\"getRequired(column)\"\r\n                         [errorMessages]=\"getErrorMessageMap(column)\"\r\n                         (onChange)=\"onCellValueChange(result, column, $event);\">\r\n              </cva-input>\r\n              <cva-date-picker *ngSwitchCase=\"ColumnTypes.DATE_PICKER\"\r\n                               [value]=\"result[column.columnDef]\"\r\n                               [isFormControl]=\"false\"\r\n                               [minDate]=\"column.min ? column.min(result) : null\"\r\n                               [maxDate]=\"column.max ? column.max(result) : null\"\r\n                               [required]=\"getRequired(column)\"\r\n                               [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                               [errorMessages]=\"getErrorMessageMap(column)\"\r\n                               (onChange)=\"onCellValueChange(result, column, $event);\">\r\n              </cva-date-picker>\r\n              <cva-multi-select-autocomplete [isFormControl]=\"false\"\r\n                                             *ngSwitchCase=\"ColumnTypes.MULTI_SELECT_AUTOCOMPLETE\"\r\n                                             class=\"multiSelectAutocomplete\"\r\n                                             [isTree]=\"column.isTree\"\r\n                                             [value]=\"result[column.columnDef]\"\r\n                                             [errorMessages]=\"getErrorMessageMap(column)\"\r\n                                             [required]=\"getRequired(column)\"\r\n                                             [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                                             [multiple]=\"column.isMultipleSelect\"\r\n                                             [options]=\"column.optionValues(result)\"\r\n                                             (selectionChange)=\"onCellValueChange(result, column, $event);\">\r\n              </cva-multi-select-autocomplete>\r\n              <div class=\"checkbox-cell\"\r\n                   fxLayout=\"row\"\r\n                   [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n                   *ngSwitchCase=\"ColumnTypes.CHECKBOX\">\r\n                <mat-checkbox [(ngModel)]=\"result[column.columnDef]\" color=\"primary\"\r\n                              *ngIf=\"column.display ? column.display(result) : true\"\r\n                              [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n                              (change)=\"toggleSelect($event,result, column)\">\r\n                </mat-checkbox>\r\n              </div>\r\n              <cva-live-searching *ngSwitchCase=\"ColumnTypes.LIVE_SEARCHING\"\r\n                                  [isFormControl]=\"false\" [required]=\"getRequired(column)\"\r\n                                  [row]=\"result\" [columnDef]=\"column.columnDef\"\r\n                                  [searchFn]=\"column.searchFn\"\r\n                                  [mappingConfig]=\"column.mappingConfig\"\r\n                                  [displayKey]=\"column.displayKey\"\r\n                                  [errorMessages]=\"getErrorMessageMap(column)\"\r\n                                  (onChange)=\"onCellValueChange(result, column, $event)\">\r\n              </cva-live-searching>\r\n            </td>\r\n          </ng-container>\r\n        </ng-container>\r\n        <ng-container *ngFor=\"let button of buttons; let i = index\" matColumnDef=\"{{button.columnDef}}\">\r\n          <ng-container *matHeaderCellDef=\"let header\">\r\n            <th mat-header-cell\r\n                [ngClass]=\"button.className\"\r\n                *ngIf=\"TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan\"\r\n                (click)=\"$event.stopPropagation()\"\r\n                [attr.colspan]=\"buttonColspan\">\r\n              <!--                        [fxFlex]=\"getHeaderButtonWidth(i) + 'px' \"-->\r\n              <ng-container *ngIf=\"TableService.getButtonHeader(button) as btnHeader\">\r\n                <button mat-icon-button\r\n                        class=\"{{button.className}}\"\r\n                        color=\"{{$any(btnHeader).color}}\"\r\n                        (click)=\"onClick($any(btnHeader).click, null, null)\"\r\n                        [disabled]=\"(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false\"\r\n                        *ngIf=\"(btnHeader && btnHeader.display) ? btnHeader.display(header) : false\"\r\n                        matTooltip=\"{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}\"\r\n                        [ngSwitch]=\"TableService.getIconType($any(btnHeader))\">\r\n                  <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ $any(btnHeader).icon }}</mat-icon>\r\n                  <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{$any(btnHeader).icon}}\"></i>\r\n                </button>\r\n              </ng-container>\r\n              <ng-container *ngIf=\"TableService.getButtonHeaderString(button) as btnHeader\">\r\n                <div title=\"{{$any(btnHeader) | translate}}\"\r\n                     class=\"viewData\"\r\n                     fxLayout=\"row\"\r\n                     fxLayoutAlign=\"{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center\">\r\n                  {{ $any(btnHeader) | translate }}\r\n                </div>\r\n              </ng-container>\r\n            </th>\r\n          </ng-container>\r\n          <ng-container *matCellDef=\"let cell; let i = index\">\r\n            <td mat-cell [ngClass]=\"button.className\"\r\n                *ngIf=\"TableService.onDisplayButtonCell(button, cell)\"\r\n                (click)=\"$event.stopPropagation()\">\r\n              <button mat-icon-button\r\n                      color=\"{{button.color}}\"\r\n                      [ngClass]=\"button.className\"\r\n                      (click)=\"onClick(button.click, cell, i)\"\r\n                      disabled=\"{{button.disabled ? button.disabled(cell) : false}}\"\r\n                      matTooltip=\"{{(button.title ? button.title : '') | translate}}\"\r\n                      [ngSwitch]=\"TableService.getIconType(button)\">\r\n                <mat-icon *ngSwitchCase=\"IconTypes.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n                <i *ngSwitchCase=\"IconTypes.FONT_AWESOME\" class=\"{{button.icon}}\"></i>\r\n              </button>\r\n            </td>\r\n          </ng-container>\r\n        </ng-container>\r\n        <ng-container *ngFor=\"let column of columns\">\r\n          <ng-container *ngFor=\"let footer of column.footers; let i = index\"\r\n                        matColumnDef=\"{{i}}-{{column.columnDef}}\">\r\n            <ng-container *matFooterCellDef>\r\n              <td mat-footer-cell *ngIf=\"onDisplayFooter(footer, datasource.data)\"\r\n                  [attr.colspan]=\"TableService.getColspan(footer, datasource.data)\"\r\n                  class=\"{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}\">\r\n                <div title=\"{{footer.title(datasource.data)}}\"\r\n                     class=\"viewData {{TableService.getColumnClassName(column,datasource.data)}}\"\r\n                     fxLayout=\"row\"\r\n                     [fxLayoutAlign]=\"footer.align ? footer.align : AlignEnum.LEFT\">\r\n                  {{ footer.cell(datasource.data) }}\r\n                </div>\r\n              </td>\r\n            </ng-container>\r\n          </ng-container>\r\n        </ng-container>\r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: isSticky||isStickyHeader\"></tr>\r\n        <tr mat-row *matRowDef=\"let result; columns: displayedColumns;\" class=\"{{result.className}}\"\r\n            [ngClass]=\"{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,\r\n                                   'parentRow0': !result.isChildRow  && result.parentRowClassIndex === 0,\r\n                                   'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,\r\n                                   'parentRow1': !result.isChildRow  && result.parentRowClassIndex === 1}\"\r\n        ></tr>\r\n        <ng-container *ngFor=\"let df of displayedFooters\">\r\n          <tr mat-footer-row *matFooterRowDef=\"df; sticky: isSticky||isStickyFooter\"></tr>\r\n        </ng-container>\r\n      </table>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaSmartTableComponent implements ControlValueAccessor, OnChanges, OnInit, AfterContentChecked {\r\n\r\n  @Input() moduleName: string = '';\r\n  @Input() columns: ColumnModel[] = [];\r\n  @Input() buttons: ButtonModel[] = [];\r\n  @Input() value: any[] = [];\r\n  @Input() minRow: number = 0;\r\n  @Input() maxRow: number = 9999;\r\n  @Input() errorMessages = new Map<string, () => string>();\r\n  @Input() isFormControl: boolean = true;\r\n  @Input() isSticky: boolean = false;\r\n  @Input() isStickyHeader: boolean = false;\r\n  @Input() isStickyFooter: boolean = false;\r\n\r\n  @Output() clickAction = new EventEmitter<ButtonClickEvent>();\r\n  @Output() onChange = new EventEmitter();\r\n\r\n  @ViewChild('matTable') matTable?: MatTable<any>;\r\n  @Input() isExpandRowTable = false;\r\n  @Input() expandRowProperty: string = '';\r\n\r\n\r\n  $displayedColumns: string[] = [];\r\n  $displayedFooters: string[][] = [];\r\n  datasource: MatTableDataSource<BaseModel | any> = new MatTableDataSource<BaseModel | any>([]);\r\n  formControl: AbstractControl | undefined;\r\n  selectAllChecked: boolean = false;\r\n\r\n  buttonColspan = 0;\r\n\r\n  constructor(private ref: ChangeDetectorRef,\r\n              @Inject(InjectTokenNextSolutionsConfig) public config: NiceComponentLibraryConfig,\r\n              private injector: Injector, @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  get AlignEnum() {\r\n    return AlignEnum;\r\n  }\r\n\r\n  get IconTypes() {\r\n    return IconTypeEnum;\r\n  }\r\n\r\n  get TableService() {\r\n    return TableService;\r\n  }\r\n\r\n  get displayedColumns(): string[] {\r\n    if (!this.$displayedColumns || this.$displayedColumns.length <= 0) {\r\n      this.$displayedColumns = this.columns.map((c: ColumnModel) => c.columnDef);\r\n      if (this.buttons) {\r\n        this.$displayedColumns = this.$displayedColumns.concat(this.buttons.map((b: ButtonModel) => b.columnDef));\r\n      }\r\n    }\r\n    return this.$displayedColumns;\r\n  }\r\n\r\n  get displayedFooters(): string[][] {\r\n    if (!this.$displayedFooters || this.$displayedFooters.length <= 0) {\r\n      for (const column of this.columns) {\r\n        if (!!column.footers) {\r\n          for (let i = 0; i < column.footers.length; i++) {\r\n            if (!this.$displayedFooters[i]) {\r\n              this.$displayedFooters[i] = [];\r\n            }\r\n            this.$displayedFooters[i] = this.$displayedFooters[i].concat([i + '-' + column.columnDef]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return this.$displayedFooters;\r\n  }\r\n\r\n  get ColumnTypes() {\r\n    return ColumnTypeEnum;\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  writeValue(obj: any[] | any): void {\r\n    if (obj) {\r\n      this.value = obj;\r\n      if (this.isExpandRowTable && this.datasource.data !== this.value) {\r\n        this.datasource = new MatTableDataSource<BaseModel>(this.value);\r\n        let parentRowIndex = 0;\r\n        for (let i = 0; i < this.datasource.data.length; i++) {\r\n          const row = this.datasource.data[i];\r\n          if (!row.isChildRow) {\r\n            this.expandRow(i, row, parentRowIndex);\r\n            parentRowIndex = (++parentRowIndex) % 2;\r\n          }\r\n        }\r\n      } else {\r\n        this.datasource = new MatTableDataSource<BaseModel>(this.value);\r\n      }\r\n      this.toggleSelect(null);\r\n      this.callValidator();\r\n      this.propagateChange(this.isExpandRowTable ? this.getParentRowData() : this.value);\r\n      this.onChange.emit();\r\n    }\r\n  }\r\n\r\n  getParentRowData() {\r\n    return this.value.filter((row: any) => {\r\n      return !row.isChildRow;\r\n    });\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  ngOnChanges() {\r\n    this.writeValue(this.value);\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.callValidator();\r\n  }\r\n\r\n  ngAfterContentChecked() {\r\n    this.getHeaderButtonColspan();\r\n    this.ref.detectChanges();\r\n  }\r\n\r\n  /*\r\n    Nếu sử dụng expandTableRow khi xử lý sự kiện bên ngoài component không sử dụng index bên trong base, set index lại bằng indexOf\r\n  */\r\n  onClick(action: string, result: any, index: number | null) {\r\n    const buttonClickEvent = new ButtonClickEvent(action, result, index);\r\n    this.clickAction.emit(buttonClickEvent);\r\n  }\r\n\r\n  onCellValueChange(result: any, column: ColumnModel, $event: any) {\r\n    result[column.columnDef] = $event;\r\n    if (column.onCellValueChange) {\r\n      column.onCellValueChange(result);\r\n    }\r\n    this.callValidator();\r\n    this.onChange.emit();\r\n  }\r\n\r\n  toggleSelectAll(val: MatCheckboxChange, col: ColumnModel) {\r\n    if (this.value) {\r\n      this.value.forEach(v => {\r\n        v.checked = val.checked;\r\n      });\r\n    }\r\n    if (col.onHeaderCellValueChange) {\r\n      col.onHeaderCellValueChange(val.checked);\r\n    }\r\n  }\r\n\r\n  toggleSelect(val: MatCheckboxChange | null, result?: any, column?: ColumnModel) {\r\n    let count = 0;\r\n    if (this.value && this.value.length > 0) {\r\n      this.value.forEach(v => {\r\n        if (v.checked) {\r\n          count++;\r\n        }\r\n      });\r\n      this.selectAllChecked = count === this.value.length;\r\n    } else {\r\n      this.selectAllChecked = false;\r\n    }\r\n\r\n    if (column) {\r\n      this.onCellValueChange(result, column, val?.checked);\r\n    }\r\n  }\r\n\r\n  onDisplayHeaderCell(column: ColumnModel): boolean {\r\n    return column.isShowHeader ? column.isShowHeader : false;\r\n  }\r\n\r\n\r\n  onDisplayFooter(footer: TableFooterModel, dataTable: any[]) {\r\n    return typeof (footer.display) === 'function' ? footer.display(dataTable) : !!footer.display;\r\n  }\r\n\r\n  // //Cái khúc này về sau mà có cái loại validate nào mà ngoài thì mới enable validate cột sau\r\n  // validate(control: AbstractControl): ValidationErrors | null {\r\n  //     let valid = null;\r\n  //\r\n  //     if (this.value) {\r\n  //         for (const row of this.value) {\r\n  //             for (const column of this.columns) {\r\n  //                 if (column.validate) {\r\n  //                     valid = column.validate(row);\r\n  //                     if (valid) {\r\n  //                         break;\r\n  //                     }\r\n  //                 }\r\n  //             }\r\n  //             if (valid) {\r\n  //                 break;\r\n  //             }\r\n  //         }\r\n  //     }\r\n  //     return valid;\r\n  // }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    if (ngControl && !this.formControl) {\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      if (this.formControl) {\r\n        this.formControl.setValidators(ValidatorService.generateNsSmartTableValidators({\r\n          columns: this.columns,\r\n          minRow: this.minRow,\r\n          maxRow: this.maxRow,\r\n        }));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      this.formControl.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  getRequired(column: ColumnModel) {\r\n    return typeof (column.isRequired) === 'function' ? column.isRequired() : column.isRequired;\r\n  }\r\n\r\n  getIsDecimal(column: ColumnModel) {\r\n    return column.isDecimal ? typeof (column.isDecimal) === 'boolean' ? column.isDecimal : column.isDecimal() : false;\r\n  }\r\n\r\n  getErrorMessageMap(column: ColumnModel) {\r\n    return column.errorMessage ? column.errorMessage : new Map<string, () => string>();\r\n  }\r\n\r\n  expandRow(i: number, row: any, parentRowClassIndex: number | 0 | 1) {\r\n    // do not add more rows if the click was on a child row\r\n    if (row.isChildRow) {\r\n      return;\r\n    }\r\n\r\n    // default not expand\r\n    // if (row.expanded) {\r\n    //   // remove the flag\r\n    //   row.expanded = false;\r\n    //\r\n    //   // remove the child rows\r\n    //   let childrenDetected = false;\r\n    //   const length = this.datasource.data.length;\r\n    //   for (let index = 0; index < length; index++) {\r\n    //     if (childrenDetected && !this.datasource.data[index].isChildRow) {\r\n    //       break;\r\n    //     }\r\n    //\r\n    //     if (index > i && this.datasource.data[index].isChildRow) {\r\n    //       this.datasource.data.splice(index, 1);\r\n    //       index--;\r\n    //       childrenDetected = true;\r\n    //     }\r\n    //   }\r\n    //\r\n    //   this.matTable?.renderRows();\r\n    //   return;\r\n    // }\r\n\r\n    // set expanded to true so we don't expand this row again\r\n    row.expanded = true;\r\n    row.parentRowClassIndex = parentRowClassIndex;\r\n\r\n    const itemsToAdd: any[] = row[this.expandRowProperty];\r\n\r\n    // mark as child rows\r\n    itemsToAdd.forEach(item => {\r\n      item.isChildRow = true;\r\n      item.parentRowClassIndex = parentRowClassIndex;\r\n    });\r\n\r\n    // add rows including header row\r\n    itemsToAdd.reverse();\r\n    itemsToAdd.forEach(x => {\r\n      this.datasource.data.splice(i + 1, 0, x);\r\n    });\r\n\r\n    // rerender table\r\n    this.matTable?.renderRows();\r\n  }\r\n\r\n  getCounterImputAlign(column: ColumnModel) {\r\n    return column.align ? column.align : AlignEnum.RIGHT;\r\n  }\r\n\r\n  getHeaderButtonColspan() {\r\n    this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.datasource.data);\r\n    return this.buttonColspan;\r\n  }\r\n}\r\n","import { Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, FormGroup, NgControl } from '@angular/forms';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { APP_DATE_FORMATS, NsDateAdapter } from '../../directives/format-datepicker';\r\nimport { RangeDatePickerModel } from '../../models/components/range-date-picker.model';\r\nimport { DateUtilService } from '../../services/date-util.service';\r\nimport { ValidatorService } from '../../services/validator.service';\r\nimport { MatDateRangePicker } from '@angular/material/datepicker';\r\n\r\n@Component({\r\n  selector: 'cva-range-date-picker',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-range-date-picker\"\r\n         [ngClass]=\"{'labelOutside': isLabelOutside, 'float_label': isFloatLabel && !isLabelOutside}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : '') | translate }}<span\r\n            class=\"required-label-outside\">{{ !!(requiredFromDate || requiredToDate) ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <mat-form-field appearance=\"outline\" [floatLabel]=\"isFloatLabel ? 'always' : 'auto'\"\r\n                      [hideRequiredMarker]=\"!isFloatLabel\"\r\n                      fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">{{ (label ? label : '') | translate }}</mat-label>\r\n        <mat-date-range-input [min]=\"getMinDate()\"\r\n                              [max]=\"getMaxDate()\"\r\n                              [rangePicker]=\"picker\"\r\n                              [disabled]=\"getDisabled(disabledAll)\"\r\n                              [title]=\"title\">\r\n          <input matStartDate\r\n                 [(ngModel)]=\"fromDateValue\"\r\n                 readonly=\"readonly\"\r\n                 [placeholder]=\"placeholderFromDate|translate\">\r\n          <input matEndDate\r\n                 [(ngModel)]=\"toDateValue\"\r\n                 readOnly=\"true\"\r\n                 [placeholder]=\"placeholderToDate|translate\">\r\n        </mat-date-range-input>\r\n\r\n        <mat-datepicker-toggle matPrefix [for]=\"picker\"\r\n                               [disabled]=\"getDisabled(disabledAll)\">\r\n        </mat-datepicker-toggle>\r\n        <button mat-icon-button matSuffix\r\n                color=\"warn\" class=\"btnDatePicker\"\r\n                (click)=\"clearRange($event)\"\r\n                [disabled]=\"getDisabled(disabledAll) || (checkRequired(requiredFromDate) && checkRequired(requiredToDate))\"\r\n        >\r\n          <mat-icon>clear</mat-icon>\r\n        </button>\r\n\r\n        <mat-date-range-picker #picker (opened)=\"openPicker(picker)\"></mat-date-range-picker>\r\n        <mat-hint style=\"color: red\" *ngIf=\"NsValiator.invalid(formControl)\">\r\n          {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}\r\n        </mat-hint>\r\n      </mat-form-field>\r\n    </div>\r\n  `,\r\n  providers: [\r\n    { provide: DateAdapter, useClass: NsDateAdapter },\r\n    {\r\n      provide: MAT_DATE_FORMATS,\r\n      useValue: APP_DATE_FORMATS,\r\n    },\r\n  ],\r\n})\r\n/**\r\n *  Đây chỉ là control trung gian khi chọn ngày, còn xử lý vẫn xử lý 2 control fromDate và toDate (mặc định)\r\n *  hoặc được truyền control name chỉ định trong input.\r\n *  Khi khai báo cần khai báo 2 control name con tương ứng nếu không mặc định 2 control con là fromDate và toDate\r\n */\r\nexport class CvaRangeDatePickerComponent implements ControlValueAccessor, OnInit {\r\n  @Input() label = 'common.apply.time';\r\n  @Input() placeholderFromDate = '';\r\n  @Input() placeholderToDate = '';\r\n  /**\r\n   * giá trị là true khi muốn disabled tất cả control\r\n   */\r\n  @Input() disabledAll: boolean | (() => boolean) = false;\r\n\r\n  /**\r\n   * giá trị là true khi muốn disabled control name fromDate\r\n   */\r\n  @Input() disabledFromDate: boolean | (() => boolean) = false;\r\n  @Input() value = new RangeDatePickerModel();\r\n  @Input() requiredFromDate: boolean | (() => boolean) = false;\r\n  @Input() requiredToDate: boolean | (() => boolean) = false;\r\n  @Input() minDate: (() => Date) | Date = new Date(1900, 1, 1);\r\n  @Input() maxDate: (() => Date) | Date = new Date(9999, 12, 31);\r\n  @Output() onChange = new EventEmitter<any>();\r\n  @Output() onOpenPicker = new EventEmitter<any>();\r\n\r\n  /** key: requiredFromDate, requiredToDate, min, max */\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() isLabelOutside = false;\r\n  @Input() isFloatLabel = true;\r\n  /** percent label outside css */\r\n  @Input() percentOfLabelOutside = 25;\r\n\r\n  @Input() fromDateControlName = 'fromDate';\r\n  @Input() toDateControlName = 'toDate';\r\n\r\n  title: string | null = '';\r\n  // config: NiceComponentLibraryConfig;\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi @@\r\n  @Input() isFormControl = true;\r\n\r\n  formControl: AbstractControl | undefined;\r\n\r\n  defaultFromDate: any; // lưu giá trị khởi tạo ban đầu khi truyền từ bên ngoài vào\r\n\r\n  get NsValiator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  constructor(private dateServiceUtil: DateUtilService,\r\n              @Self() @Optional() ngControl: NgControl,\r\n              private injector: Injector) {\r\n    // this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n    if (ngControl) {\r\n      // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  get fromDateValue() {\r\n    if (this.value.fromDate instanceof Date) {\r\n      return this.value.fromDate;\r\n    }\r\n    if (this.isString(this.value.fromDate) && this.value.fromDate.indexOf('Z') >= 0) {\r\n      return this.value.fromDate.replace(' ', 'T');\r\n    }\r\n    return null;\r\n  }\r\n\r\n  set fromDateValue(val) {\r\n    this.value.fromDate = val;\r\n  }\r\n\r\n  get toDateValue() {\r\n    if (this.value.toDate instanceof Date) {\r\n      return this.value.toDate;\r\n    }\r\n    if (this.isString(this.value.toDate) && this.value.toDate.indexOf('Z') >= 0) {\r\n      return this.value.toDate.replace(' ', 'T').replace('Z', '');\r\n    }\r\n    return null;\r\n  }\r\n\r\n  set toDateValue(val) {\r\n    this.value.toDate = val;\r\n    this.writeValue(this.value);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.callValidator();\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.propagateChange(fn);\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.propagateChange(fn);\r\n  }\r\n\r\n  writeValue(obj: RangeDatePickerModel): void {\r\n    if (!obj) {\r\n      obj = new RangeDatePickerModel();\r\n    }\r\n    if (!this.defaultFromDate && this.value.fromDate instanceof Date) {\r\n      this.defaultFromDate = this.prepareWriteValueData(this.value.fromDate);\r\n    }\r\n    // this.value = obj;\r\n    this.value.fromDate = this.prepareWriteValueData(obj.fromDate);\r\n    this.value.toDate = this.prepareWriteValueData(obj.toDate);\r\n\r\n    this.createTitle();\r\n\r\n    this.propagateChange(this.value);\r\n    this.callValidator();\r\n    this.onChange.emit(this.value);\r\n    if (this.defaultFromDate && this.getDisabled(this.disabledFromDate)) {\r\n      this.value.fromDate = new Date(this.defaultFromDate.replace('Z', ''));\r\n    }\r\n  }\r\n\r\n  getDisabled(disabled: boolean | (() => boolean)) {\r\n    return typeof disabled === 'function' ? disabled() : disabled;\r\n  }\r\n\r\n  createTitle() {\r\n    const titleFromDate = this.dateServiceUtil.convertDateToDisplayGMT0(this.value.fromDate);\r\n    const titleToDate = this.dateServiceUtil.convertDateToDisplayGMT0(this.value.toDate);\r\n    this.title = (titleFromDate ? titleFromDate : '') + ' - '\r\n      + (titleToDate ? titleToDate : '');\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.formControl) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n        if (this.formControl && !this.formControl.value) {\r\n          this.formControl.setValue(this.value);\r\n        }\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.formControl) {\r\n        // this.formControl.setValidators(NsValidator.generateNsDateRangePickerValidators(\r\n        //   {\r\n        //     requiredFromDate: this.requiredFromDate,\r\n        //     requiredToDate: this.requiredToDate,\r\n        //   }\r\n        // ));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      if (this.formControl?.parent && this.formControl instanceof FormControl\r\n        && this.formControl?.parent instanceof FormGroup) {\r\n        const fromDateControl = this.formControl.parent.controls[this.fromDateControlName];\r\n        if (fromDateControl) {\r\n          fromDateControl.setValue(this.value.fromDate);\r\n        }\r\n        const toDateControl = this.formControl.parent.controls[this.toDateControlName];\r\n        if (toDateControl) {\r\n          toDateControl.setValue(this.value.toDate);\r\n        }\r\n      }\r\n\r\n      this.formControl.updateValueAndValidity();\r\n\r\n      const errorsObj: { [key: string]: any } = {};\r\n\r\n      const errors = this.formControl.errors;\r\n      if (errors) {\r\n        Object.keys(errors).forEach(key => {\r\n          errorsObj[key] = errors[key];\r\n        });\r\n      }\r\n\r\n      if (this.checkRequired(this.requiredFromDate)) {\r\n        if (!this.value.fromDate) {\r\n          errorsObj['requiredFromDate'] = true;\r\n        }\r\n      }\r\n\r\n      if (this.checkRequired(this.requiredToDate)) {\r\n        if (!this.value.toDate) {\r\n          errorsObj['requiredToDate'] = true;\r\n        }\r\n      }\r\n\r\n      if (!(this.getDisabled(this.disabledFromDate) || this.getDisabled(this.disabledAll))) {\r\n        const minValidation = ValidatorService.customMinDateValidatorControl(this.value.fromDate, this.getMinDate());\r\n        if (minValidation) {\r\n          Object.keys(minValidation).forEach(key => {\r\n            errorsObj[key] = minValidation[key];\r\n          });\r\n          this.formControl.markAsDirty();\r\n        }\r\n      }\r\n\r\n      const maxValidation = ValidatorService.customMaxDateValidatorControl(this.value.toDate, this.getMaxDate());\r\n      if (maxValidation) {\r\n        Object.keys(maxValidation).forEach(key => {\r\n          errorsObj[key] = maxValidation[key];\r\n        });\r\n        this.formControl.markAsDirty();\r\n      }\r\n\r\n      if (Object.keys(errorsObj).length > 0) {\r\n        this.formControl.setErrors(errorsObj);\r\n      } else {\r\n        this.formControl.setErrors(null);\r\n      }\r\n      this.formControl.markAllAsTouched();\r\n    }\r\n  }\r\n\r\n  prepareWriteValueData(val: any) {\r\n    let out: string | null = '';\r\n    if (val) {\r\n      if (this.isString(val) && val.toString().indexOf('Z') >= 0) {\r\n        out = this.dateServiceUtil.convertDateToStringGMT0(val);\r\n      } else {\r\n        out = this.dateServiceUtil.convertDateToStringCurrentGMT(val);\r\n      }\r\n    }\r\n    return out;\r\n  }\r\n\r\n  isString(inputValue: any): boolean {\r\n    return typeof inputValue === 'string' || inputValue instanceof String;\r\n  }\r\n\r\n  getMinDate() {\r\n    if (this.minDate) {\r\n      return this.minDate instanceof Date ? this.minDate : this.minDate();\r\n    }\r\n    return new Date(1900, 1, 1);\r\n  }\r\n\r\n  getMaxDate() {\r\n    if (this.getDisabled(this.disabledAll)) {\r\n      return new Date(9999, 12, 31);\r\n    }\r\n    if (this.maxDate) {\r\n      return this.maxDate instanceof Date ? this.maxDate : this.maxDate();\r\n    }\r\n    return new Date(9999, 12, 31);\r\n  }\r\n\r\n  checkRequired(isRequired: boolean | (() => boolean)) {\r\n    return isRequired ? typeof (isRequired) === 'boolean' ? isRequired : isRequired() : false;\r\n  }\r\n\r\n  clearRange(event: Event) {\r\n    event.stopPropagation();\r\n    if (this.getDisabled(this.disabledFromDate)) {\r\n      this.value.toDate = '';\r\n    } else {\r\n      this.value = new RangeDatePickerModel();\r\n    }\r\n    this.writeValue(this.value);\r\n  }\r\n\r\n  openPicker(picker: MatDateRangePicker<any>) {\r\n    if (this.onOpenPicker) {\r\n      this.onOpenPicker.emit(picker);\r\n    }\r\n  }\r\n}\r\n","import { Directive, EventEmitter, HostBinding, HostListener, Output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[appDragDrop]',\r\n  standalone: false,\r\n})\r\nexport class DragDropDirective {\r\n\r\n  @Output() onFileDropped = new EventEmitter<any>();\r\n\r\n  @HostBinding('style.background-color') background = '#f5fcff'\r\n  @HostBinding('style.opacity') opacity = '1'\r\n\r\n  //Dragover listener\r\n  @HostListener('dragover', ['$event']) onDragOver(evt: DragEvent) {\r\n    evt.preventDefault();\r\n    evt.stopPropagation();\r\n    this.background = '#9ecbec';\r\n    this.opacity = '0.8'\r\n  }\r\n\r\n  //Dragleave listener\r\n  @HostListener('dragleave', ['$event']) public onDragLeave(evt: DragEvent) {\r\n    evt.preventDefault();\r\n    evt.stopPropagation();\r\n    this.background = '#f5fcff'\r\n    this.opacity = '1'\r\n  }\r\n\r\n  //Drop listener\r\n  @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\r\n    evt.preventDefault();\r\n    evt.stopPropagation();\r\n    this.background = '#f5fcff'\r\n    this.opacity = '1'\r\n    let files = evt?.dataTransfer?.files;\r\n    if (files && files.length > 0) {\r\n      this.onFileDropped.emit(files)\r\n    }\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { UploadModel } from '../../models/components/upload.model';\r\n\r\n@Component({\r\n  selector: 'cva-multi-upload',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-multi-upload\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"label\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">{{ (label ? label : '') | translate }}<span\r\n          class=\"required-label-outside\">{{ !!required ? '*' : '' }}</span></div>\r\n      </mat-label>\r\n      <div class=\"uploadArea\"\r\n           fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\"\r\n           appDragDrop (onFileDropped)=\"onFileDroppedAction($event)\">\r\n        <input type=\"file\" multiple #fileUpload (change)=\"onFileChangeAction($event)\"\r\n               [disabled]=\"disabled\"\r\n               accept=\"{{accept ? accept.join() : '*/*'}}\">\r\n        <mat-card>\r\n          <mat-card-actions>\r\n            <button mat-button class=\"upload-button\" color=\"warn\" (click)=\"onClick()\">\r\n              <mat-icon>add</mat-icon>\r\n              <span>{{ 'common.upload.file' | translate }}</span>\r\n            </button>\r\n          </mat-card-actions>\r\n          <mat-card-content>\r\n          </mat-card-content>\r\n        </mat-card>\r\n        <mat-error *ngIf=\"sizeError!==null\">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}</mat-error>\r\n        <mat-error *ngIf=\"typeError!==null\">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}</mat-error>\r\n      </div>\r\n    </div>\r\n  `,\r\n  providers:\r\n    [\r\n      {\r\n        provide: NG_VALUE_ACCESSOR,\r\n        useExisting: forwardRef(() => CvaMultiUploadComponent),\r\n        multi: true,\r\n      },\r\n    ],\r\n})\r\n\r\nexport class CvaMultiUploadComponent implements ControlValueAccessor {\r\n  @ViewChild('fileUpload', { static: false }) fileUpload?: ElementRef;\r\n  @Input() files: UploadModel[] = [];\r\n  @Input() multiple: boolean = false;\r\n  @Input() maxSize: number | null = null;\r\n  @Input() accept: string[] | null = null;\r\n  @Input() label: string = '';\r\n  @Input() required: string = '';\r\n  @Input() disabled: boolean = false;\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n\r\n\r\n  @Output() onFileChange = new EventEmitter();\r\n  sizeError: string | null = null;\r\n  typeError: string | null = null;\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  writeValue(obj: any): void {\r\n    if (!obj) {\r\n      return;\r\n    }\r\n    if (this.multiple) {\r\n      this.files.push(obj);\r\n    } else {\r\n      this.files = [obj];\r\n    }\r\n    this.propagateChange(this.files);\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  onClick() {\r\n    const fileUpload = this.fileUpload?.nativeElement;\r\n    fileUpload.click();\r\n  }\r\n\r\n  convertToUploadModel(fileList: FileList): void {\r\n    this.sizeError = null;\r\n    this.typeError = null;\r\n    if (fileList && fileList[0]) {\r\n      if (!this.validFile(fileList)) {\r\n        return;\r\n      }\r\n      for (let i = 0; i < fileList.length; i++) {\r\n        const file: File = fileList[i];\r\n        if (this.isContainFileName(file.name)) {\r\n          continue;\r\n        }\r\n        const reader = new FileReader();\r\n        reader.onload = (event: any) => {\r\n          this.writeValue(new UploadModel(file.name, file, (event.target as FileReader).result));\r\n          if (!this.multiple || i === fileList.length - 1) {\r\n            this.onFileChange.emit();\r\n          }\r\n        };\r\n        reader.readAsDataURL(file);\r\n        if (!this.multiple) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  isContainFileName(name: string): boolean {\r\n    for (const file of this.files) {\r\n      if (file.name === name) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onFileChangeAction(event: any) {\r\n    const target = event.target as HTMLInputElement;\r\n    if (target && target.files){\r\n      this.convertToUploadModel(target.files);\r\n    }\r\n  }\r\n\r\n  onFileDroppedAction(fileList: FileList) {\r\n    this.convertToUploadModel(fileList);\r\n  }\r\n\r\n  validFile(fileList: FileList): boolean {\r\n    const acceptStr = this.accept ? this.accept.join() : '';\r\n    for (let i = 0; i < fileList.length; i++) {\r\n      const file: File = fileList[i];\r\n      if (acceptStr.indexOf(file.type) < 0 || !file.type || file.type === '') {\r\n        this.typeError = file.name;\r\n        return false;\r\n      }\r\n      if (this.maxSize && file.size > this.maxSize) {\r\n        this.sizeError = file.name;\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","import {\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    Injector,\r\n    Input,\r\n    OnInit,\r\n    Optional,\r\n    Output,\r\n    Self,\r\n    ViewChild\r\n} from '@angular/core';\r\nimport {AbstractControl, ControlValueAccessor, FormControl, NgControl} from '@angular/forms';\r\nimport {HttpClient, HttpResponse} from '@angular/common/http';\r\nimport {FileSaverService} from \"ngx-filesaver\";\r\nimport {UploadModel} from '../../models/components/upload.model';\r\n\r\nexport class DeleteFileEventModel {\r\n    ngControl: NgControl | undefined;\r\n    file: UploadModel | undefined\r\n}\r\n\r\n@Component({\r\n    selector: 'cva-upload-file',\r\n    standalone: false,\r\n    template: `\r\n        <div class=\"cva-multi-upload labelOutside\"\r\n             fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n            <mat-label *ngIf=\"label\" class=\"label_width\"\r\n                       fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n                <div class=\"label\">{{ (label ? label : '') | translate }}<span\r\n                  class=\"required-label-outside\">{{ !!required ? '*' : '' }}</span></div>\r\n            </mat-label>\r\n            <div class=\"uploadArea\" style=\"background-color: #FFFFFF\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\"\r\n                 appDragDrop (onFileDropped)=\"onFileDroppedAction($event)\">\r\n                <input type=\"file\" #fileUpload (change)=\"onFileChangeAction($event)\"\r\n                       [disabled]=\"disabled\"\r\n                       accept=\"{{accept ? accept.join() : '*/*'}}\">\r\n                <mat-card>\r\n                    <mat-card-actions>\r\n                        <div fxLayout=\"column\">\r\n                            <button mat-button\r\n                                    class=\"{{(isImageType() && files[0])?'upload-button preview': 'upload-button'}}\"\r\n                                    color=\"warn\" (click)=\"onClick()\">\r\n                                <div class=\"preview-image\"\r\n                                     *ngIf=\"isImageType() && files[0]\">\r\n                                    <img (load)=\"onLoad(img, $event)\"\r\n                                         #img\r\n                                         style=\"display: none\"\r\n                                         [src]=\"getSrcImg()| secure | async\"\r\n                                         *ngIf=\"isImageType() && files[0]\"\r\n                                    />\r\n                                </div>\r\n                                <i [ngClass]=\"files[0]?'fa fa-file-alt':'fa fa-plus'\"\r\n                                   *ngIf=\"!isImageType()  || !files[0]\"></i>\r\n                                <span\r\n                                  *ngIf=\"!files[0]\">{{ ((placeholder ? placeholder : 'common.button.import.file')| translate) }}</span>\r\n                                <i *ngIf=\"!!files[0]?.previewValue && !isImageType()\" class=\"fa fa-eye\"\r\n                                   (click)=\"previewFiles($event, downloadId)\">\r\n                                    <a download (click)=\"downloadFile()\" #downloadId style=\"display:none;\"></a>\r\n                                </i>\r\n                                <i *ngIf=\"files[0] && !disabled\" class=\"fa fa-trash-alt\"\r\n                                   (click)=\"removeFiles($event, this)\"></i>\r\n                            </button>\r\n                        </div>\r\n                        <mat-label>{{ fileName }}</mat-label>\r\n                    </mat-card-actions>\r\n                    <mat-card-content>\r\n                    </mat-card-content>\r\n                </mat-card>\r\n                <mat-error\r\n                  *ngIf=\"sizeError!==null\">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}\r\n                </mat-error>\r\n                <mat-error\r\n                  *ngIf=\"typeError!==null\">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}\r\n                </mat-error>\r\n                <mat-error *ngIf=\"getRequiredErr()\">{{ ('common.error.required' | translate) }}</mat-error>\r\n                <mat-error *ngIf=\"widthError\">{{ ('common.error.image.width' | translate) }}</mat-error>\r\n                <mat-error *ngIf=\"heightError\">{{ ('common.error.image.height' | translate) }}</mat-error>\r\n                <mat-error *ngIf=\"isSquareError\">{{ ('common.error.image.square' | translate) }}</mat-error>\r\n                <mat-error *ngIf=\"isRectangleError\">{{ ('common.error.image.rectangle' | translate) }}</mat-error>\r\n            </div>\r\n        </div>\r\n    `,\r\n})\r\n\r\nexport class CvaUploadFileComponent implements ControlValueAccessor, OnInit {\r\n\r\n    constructor(private http: HttpClient,\r\n                private injector: Injector,\r\n                private fileSaverService: FileSaverService,\r\n                @Self() @Optional() private ngControl: NgControl,\r\n    ) {\r\n        if (ngControl) {\r\n            ngControl.valueAccessor = this;\r\n        }\r\n    }\r\n\r\n    @ViewChild('fileUpload', {static: false}) fileUpload?: ElementRef<any>;\r\n    @Input() files: UploadModel[] = [];\r\n\r\n    @Input() maxSize: number | null = null;\r\n    @Input() height: number | null = null;\r\n    @Input() width: number | null = null;\r\n    @Input() isSquareImg = false;\r\n    @Input() isRectangleImg = false;\r\n    @Input() accept: string[] | null = null;\r\n    @Input() label = '';\r\n    @Input() placeholder = '';\r\n    @Input() required = false;\r\n    @Input() disabled = false;\r\n    /* percent label outside css */\r\n    @Input() percentOfLabelOutside = 25;\r\n\r\n    @Output() onFileChange = new EventEmitter();\r\n    @Output() onFileDelete = new EventEmitter<DeleteFileEventModel>();\r\n    sizeError: string | null = null;\r\n    widthError = false;\r\n    heightError = false;\r\n    isSquareError = false;\r\n    isRectangleError = false;\r\n    typeError: string | null = null;\r\n    fileType = '';\r\n    fileName = '';\r\n    imgRef: HTMLImageElement | null = null;\r\n    default$?: string;\r\n\r\n    @Input() set value(value: any) {\r\n        this.writeValue(value)\r\n    }\r\n\r\n    formControl: AbstractControl | null | undefined;\r\n\r\n    @Input() set defaultUrl(fileInfo: { url: string, name: string, type: string }) {\r\n        this.default$ = fileInfo.url;\r\n        this.fileType = fileInfo.type;\r\n        this.fileName = fileInfo.name;\r\n        if (1 === 1) {\r\n            return;\r\n        }\r\n        const oReq = new XMLHttpRequest();\r\n        oReq.open('GET', fileInfo.url, true);\r\n        oReq.responseType = 'arraybuffer';\r\n        oReq.onload = (event: any) => {\r\n            const arrayBuffer = oReq.response; // Note: not oReq.responseText\r\n            if (arrayBuffer) {\r\n                // Create a blob from the response\r\n                const blob = new Blob([arrayBuffer]);\r\n                // onload needed since Google Chrome doesn't support addEventListener for FileReader\r\n                const fileReader = new FileReader();\r\n                const file = new File([blob], fileInfo.name, {type: fileInfo.type});\r\n                fileReader.onload = (event: any) => {\r\n                    this.writeValue(new UploadModel(fileInfo.name, file, (event.target as FileReader).result));\r\n                };\r\n                // Load blob as Data URL\r\n                fileReader.readAsDataURL(file);\r\n            }\r\n        };\r\n        oReq.send(null);\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.callValidator();\r\n    }\r\n\r\n    callValidator() {\r\n        const ngControl = this.injector.get(NgControl);\r\n        if (ngControl && !this.formControl) {\r\n            if (ngControl) {\r\n                this.formControl = ngControl.control;\r\n            } else {\r\n                this.formControl = new FormControl();\r\n            }\r\n        }\r\n        if (this.formControl) {\r\n            if (this.required && !this.files.length) {\r\n                this.formControl.setErrors({required: true});\r\n            }\r\n            this.formControl.markAllAsTouched();\r\n        }\r\n    }\r\n\r\n    isImageType() {\r\n        return this.fileType.startsWith('image');\r\n    }\r\n\r\n    getSrcImg(): any {\r\n        return this.isImageType() ? ((this.files[0]) ? this.files[0].previewValue : this.default$) : '';\r\n    }\r\n\r\n    propagateChange = (_: any) => {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    };\r\n\r\n    writeValue(obj: any): void {\r\n        if (!obj) {\r\n            return;\r\n        }\r\n        if (typeof obj === 'string') {\r\n            const obj1: any = {name: this.fileName, binary: null, previewValue: obj};\r\n            this.files = [obj1]\r\n        } else if (typeof obj === 'object') {\r\n            if (obj.binary === null || obj.binary === undefined) {\r\n                const obj1: any = {id: obj.id, name: obj.name, binary: null, previewValue: obj.previewValue};\r\n                this.files = [obj1]\r\n                this.fileName = obj.name\r\n                this.fileType = obj.type ? obj.type : '';\r\n            } else {\r\n                this.fileName = obj.name;\r\n                this.files = [obj];\r\n            }\r\n        }\r\n        this.propagateChange(this.files);\r\n        this.callValidator();\r\n    }\r\n\r\n    registerOnChange(fn: any) {\r\n        this.propagateChange = fn;\r\n    }\r\n\r\n    registerOnTouched() {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    }\r\n\r\n    onClick() {\r\n        const fileUpload = this.fileUpload?.nativeElement;\r\n        fileUpload.click();\r\n    }\r\n\r\n    convertToUploadModel(fileList: FileList): void {\r\n        this.sizeError = null;\r\n        this.typeError = null;\r\n        if (fileList && fileList[0]) {\r\n            if (!this.validFile(fileList)) {\r\n                return;\r\n            }\r\n            for (let i = 0; i < fileList.length; i++) {\r\n                const file: File = fileList[i];\r\n                if (this.isContainFileName(file.name)) {\r\n                    continue;\r\n                }\r\n                const reader = new FileReader();\r\n                reader.onload = (event: any) => {\r\n                    this.writeValue(new UploadModel(file.name, file, (event.target as FileReader).result));\r\n                    this.fileType = file.type;\r\n                    this.onFileChange.emit();\r\n                };\r\n                reader.readAsDataURL(file);\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    isContainFileName(name: string): boolean {\r\n        for (const file of this.files) {\r\n            if (file.name === name) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    onFileChangeAction(event: any) {\r\n        const target = event.target as HTMLInputElement;\r\n        if (target && target.files) {\r\n            this.convertToUploadModel(target.files);\r\n        }\r\n    }\r\n\r\n    onFileDroppedAction(fileList: FileList) {\r\n        this.convertToUploadModel(fileList);\r\n    }\r\n\r\n    validFile(fileList: FileList): boolean {\r\n        const acceptStr = this.accept ? this.accept.join() : '';\r\n        for (let i = 0; i < fileList.length; i++) {\r\n            const file: File = fileList[i];\r\n            if (acceptStr.indexOf(file.type) < 0 || !file.type || file.type === '') {\r\n                this.typeError = file.name;\r\n                return false;\r\n            }\r\n            if (this.maxSize && file.size > this.maxSize) {\r\n                this.sizeError = file.name;\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    removeFiles(event: any, control?: any) {\r\n        if (event) {\r\n            event.stopPropagation();\r\n        }\r\n        this.fileName = '';\r\n        this.fileType = '';\r\n        let deleteFile: UploadModel | undefined;\r\n        if (this.files && this.files.length > 0) {\r\n            deleteFile = this.files[0];\r\n            this.files.splice(0, 1);\r\n            this.propagateChange(this.files);\r\n        }\r\n        if (this.fileUpload) {\r\n            (this.fileUpload.nativeElement as any).value = '';\r\n        }\r\n        this.onFileDelete.emit({ngControl: this.ngControl, file: deleteFile});\r\n    }\r\n\r\n    onLoad(img: HTMLImageElement, event: any) {\r\n        if (this.isSquareImg && img.height && img.width &&\r\n            (((img.height / img.width) > 1.1) || ((img.height / img.width) < 1 / 1.1))) {\r\n            this.removeFiles(undefined);\r\n            this.isSquareError = true;\r\n            return;\r\n        } else {\r\n            this.isSquareError = false;\r\n        }\r\n        if (this.isRectangleImg && img.height && img.width &&\r\n            (((img.width / img.height) > 2.2) || ((img.width / img.height) < 2))) {\r\n            this.removeFiles(undefined);\r\n            this.isRectangleError = true;\r\n            return;\r\n        } else {\r\n            this.isRectangleError = false;\r\n        }\r\n        if (this.width && img.width !== this.width) {\r\n            this.removeFiles(undefined);\r\n            this.widthError = true;\r\n            return;\r\n        } else {\r\n            this.widthError = false;\r\n        }\r\n        if (this.height && img.height !== this.height) {\r\n            this.removeFiles(undefined);\r\n            this.heightError = true;\r\n            return;\r\n        } else {\r\n            this.heightError = false;\r\n        }\r\n        const parentElement = img.closest('.preview-image') as HTMLElement;\r\n        parentElement.setAttribute('style', 'background-image:url(\"' + img.src + '\")');\r\n    }\r\n\r\n    previewFiles(event: any, downloadId: any) {\r\n        event.stopPropagation();\r\n        downloadId.click();\r\n    }\r\n\r\n    downloadFile() {\r\n        const file = this.files[0] as UploadModel;\r\n        if (!file) {\r\n            return;\r\n        }\r\n        if (file.id) {\r\n            // copy apiService.saveFile()\r\n            this.http.post(file.previewValue + '', null, {\r\n                headers: undefined,\r\n                params: undefined,\r\n                observe: 'response',\r\n                responseType: 'blob',\r\n            }).subscribe((l: HttpResponse<Blob>) => {\r\n                let filename = '';\r\n                const disposition = l.headers.get('Content-Disposition');\r\n                if (disposition && disposition.indexOf('attachment') !== -1) {\r\n                    const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n                    const matches = filenameRegex.exec(disposition);\r\n                    if (matches != null && matches[1]) {\r\n                        filename = matches[1].replace(/['\"]/g, '');\r\n                    }\r\n                }\r\n                const blobData: Blob | null = l.body;\r\n                const contentType: string | null = l.headers.get('Content-Type');\r\n                if (blobData && contentType) {\r\n                    this.fileSaverService.save(blobData, filename, contentType);\r\n                }\r\n            });\r\n        } else {\r\n            if (file.binary) {\r\n                this.fileSaverService.save(file.binary, file.name);\r\n            }\r\n        }\r\n    }\r\n\r\n    getRequiredErr() {\r\n        return !this.files.length && this.required && !this.heightError && !this.widthError && !this.isSquareError\r\n            && !this.isRectangleError && !this.typeError && !this.sizeError\r\n    }\r\n}\r\n","import {Component, Injector, Input, Optional, Self} from '@angular/core';\r\nimport {ControlValueAccessor, FormArray, FormControl, FormGroup, NgControl} from '@angular/forms';\r\nimport {FileTypeEnum} from '../../enums/file-type.enum';\r\n\r\n\r\n@Component({\r\n    selector: 'cva-multi-upload-img',\r\n    standalone: false,\r\n    template: `\r\n        <div style=\"align-items: flex-start\" fxLayout=\"row wrap\">\r\n            <ng-container *ngFor=\"let control of getControls(); let i = index\" [formGroup]=\"control\">\r\n                <cva-upload-file style=\"margin-right: 20px\"\r\n                                formControlName=\"imageUrl\" (onFileDelete)=\"onFileDelete({control:control, index:i})\"\r\n                                (onFileChange)=\"onFileChange({control:control, index:i})\"\r\n                                [defaultUrl]=\"{url: '', name: ' ', type: 'image/png'}\"\r\n                                [accept]=\"[FileTypes.PNG, FileTypes.JPG]\"\r\n                                [disabled]=\"disabled\"\r\n                ></cva-upload-file>\r\n            </ng-container>\r\n        </div>\r\n    `,\r\n})\r\n\r\nexport class CvaMultiUploadImgComponent implements ControlValueAccessor {\r\n    files: any = [];\r\n    formArray: FormArray = new FormArray<any>([]);\r\n    @Input() isFix = false;\r\n    @Input() maxControls = -1;\r\n    @Input() disabled = false;\r\n\r\n    constructor(private injector: Injector,\r\n                @Self() @Optional() private ngControl: NgControl) {\r\n        if (ngControl) {\r\n            // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n            ngControl.valueAccessor = this;\r\n        }\r\n    }\r\n\r\n    propagateChange = (_: any) => {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    };\r\n\r\n\r\n    get FileTypes() {\r\n        return FileTypeEnum;\r\n    }\r\n\r\n    getControls(): FormGroup[] {\r\n        return this.formArray.controls as FormGroup[];\r\n    }\r\n\r\n    writeValue(value: any): void {\r\n        this.formArray.clear();\r\n        const remain = this.isFix ? (this.maxControls === -1 ? value.length : this.maxControls)\r\n            : (this.maxControls === -1 ? (value.length + 1) : this.maxControls);\r\n\r\n        for (let i = 0; i < remain; i++) {\r\n            const url = i < value.length ? value[i] : '';\r\n            this.formArray.push(new FormGroup({\r\n                imageUrl: new FormControl(url),\r\n            }))\r\n        }\r\n        this.formArray.valueChanges.subscribe(res => {\r\n            this.propagateChange(res);\r\n        });\r\n\r\n    }\r\n\r\n    registerOnChange(fn: any) {\r\n        this.propagateChange = fn;\r\n    }\r\n\r\n    registerOnTouched() {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    }\r\n\r\n    onFileDelete(event: any) {\r\n        if (this.isFix) {\r\n            return;\r\n        }\r\n        this.formArray.removeAt(event.index)\r\n        if ((this.formArray.length + 1) === this.maxControls) {\r\n            this.formArray.push(new FormGroup({\r\n                imageUrl: new FormControl(''),\r\n            }));\r\n        }\r\n    }\r\n\r\n    onFileChange(event: any) {\r\n        if ((event.index < this.formArray.length - 1) || this.isFix || (event.index === this.maxControls - 1)) {\r\n            return;\r\n        }\r\n        this.formArray.push(new FormGroup({\r\n            imageUrl: new FormControl(''),\r\n        }));\r\n    }\r\n}\r\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { BreadCrumbModel } from '../models/components/bread-crumb.model';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'cva-breadcrumb',\r\n  standalone: false,\r\n  template: `\r\n    <ul class=\"cva-breadcrumb\">\r\n      <div class=\"breadcrumbList\">\r\n        <li *ngFor=\"let item of breadcrumbList; let i = index\">\r\n          <a [routerLink]=\"'/' + item.url\" *ngIf=\"i!==breadcrumbList.length-1\">\r\n            {{ item.label | translate }}\r\n          </a>\r\n          <span class=\"separator\" *ngIf=\"i!==breadcrumbList.length-1\"> <i class=\"fa fa-angle-right\"></i> </span>\r\n          <span class=\"currentAction\" *ngIf=\"i===breadcrumbList.length-1\">{{ item.label | translate }}</span>\r\n        </li>\r\n      </div>\r\n    </ul>\r\n  `,\r\n})\r\nexport class CvaBreadcrumbComponent implements OnInit {\r\n  breadcrumbList: Array<BreadCrumbModel> = [];\r\n  @Output() updateLabel = new EventEmitter();\r\n\r\n  constructor(private activatedRoute: ActivatedRoute) {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.breadcrumbList = this.buildBreadCrumb(this.activatedRoute.root);\r\n  }\r\n\r\n  buildBreadCrumb(route: ActivatedRoute, url: string = '',\r\n                  breadcrumbs: Array<BreadCrumbModel> = []): Array<BreadCrumbModel> {\r\n\r\n    let label = route.routeConfig\r\n      ? (route.routeConfig.data ? route.routeConfig.data['breadcrumb'] : 'common.missing.router.data.breadcrumb')\r\n      : '';\r\n    if (this.updateLabel.observers.length > 0) {\r\n      const out = { label };\r\n      this.updateLabel.emit(out);\r\n      label = out.label;\r\n    }\r\n    let path = route.routeConfig && route.routeConfig.path ? route.routeConfig.path : '';\r\n    if (route.snapshot && route.snapshot.params) {\r\n      Object.keys(route.snapshot.params).forEach(key => {\r\n        label = label.replace(':' + key, route.snapshot.params[key]);\r\n        path = path.replace(':' + key, route.snapshot.params[key]);\r\n      });\r\n    }\r\n    const nextUrl = `${url}${path}/`;\r\n    if (nextUrl.endsWith('//')) {\r\n      return breadcrumbs;\r\n    }\r\n    const breadcrumb = new BreadCrumbModel(label, nextUrl);\r\n    const newBreadcrumbs = [...breadcrumbs, breadcrumb];\r\n    if (route.firstChild) {\r\n      return this.buildBreadCrumb(route.firstChild, nextUrl, newBreadcrumbs);\r\n    }\r\n    return newBreadcrumbs;\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { LoaderService } from '../services/loader.service';\r\n\r\n@Component({\r\n    selector: 'cva-loader',\r\n    standalone: false,\r\n    template: `\r\n        <div class=\"cva-loader progress-loader\" *ngIf=\"loaderService.isLoading | async\">\r\n            <div class=\"loading-spinner\">\r\n                <mat-progress-bar color=\"warn\" mode=\"indeterminate\">\r\n                </mat-progress-bar>\r\n                <mat-progress-spinner color=\"warn\" mode=\"indeterminate\" diameter=\"200\" strokeWidth=\"15\">\r\n                </mat-progress-spinner>\r\n            </div>\r\n            <img *ngIf=\"!!imgSrc\" [src]=\"imgSrc\"  alt=\"\"/>\r\n        </div>\r\n    `,\r\n})\r\nexport class CvaLoaderComponent {\r\n\r\n    @Input() imgSrc: string = '';\r\n\r\n    constructor(public loaderService: LoaderService) {\r\n    }\r\n}\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { NestedTreeControl } from '@angular/cdk/tree';\r\nimport { MatTreeNestedDataSource } from '@angular/material/tree';\r\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { SelectModel } from '../models/components/select.model';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { FlatTreeModel } from '../models/components/flat-tree.model';\r\nimport { UtilsService } from '../services/utils.service';\r\n\r\n@Component({\r\n  selector: 'cva-tree',\r\n  standalone: false,\r\n  template: `\r\n      <div class=\"cva-tree\">\r\n          <div class=\"box-search\">\r\n              <cva-multi-select-autocomplete [multiple]=\"!isHidingTree\" [placeholder]=\"placeholder|translate\"\r\n                                            [options]=\"autocompleteData\" style=\"width: 100%\"\r\n                                            [formControl]=\"autocompleteControl\" [disabled]=\"disabled\"\r\n                                            (selectionChange)=\"onSelectChange()\"\r\n                                            [isTree]=\"true\" [treeSymbol]=\"symbol\">\r\n              </cva-multi-select-autocomplete>\r\n              <div class=\"expand_collapse\" *ngIf=\"!isHidingTree\">\r\n                  <button mat-icon-button color=\"warn\" (click)=\"treeControl.collapseAll()\"\r\n                          matTooltip=\"{{'common.tree.collapseAll'|translate}}\">\r\n                      <mat-icon>unfold_less</mat-icon>\r\n                  </button>\r\n                  <button mat-icon-button color=\"warn\" (click)=\"treeControl.expandAll()\"\r\n                          matTooltip=\"{{'common.tree.expandAll'|translate}}\">\r\n                      <mat-icon>unfold_more</mat-icon>\r\n                  </button>\r\n              </div>\r\n          </div>\r\n          <div class=\"parent-mat-tree\" *ngIf=\"!isHidingTree\">\r\n              <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" class=\"example-tree\">\r\n                  <!-- This is the tree node template for leaf nodes -->\r\n                  <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle\r\n                                 [ngClass]=\"{'example-tree-invisible': !isShowLeafNextTo && !isShowNodeRecursive([node]),\r\n                                'mat-tree-node': isShowNodeRecursive([node])}\">\r\n                      <li fxLayoutAlign=\"space-between center\" fxLayout>\r\n                          <div class=\"mat-tree-node\">\r\n                              <!-- use a disabled button to provide padding for tree leaf -->\r\n                              <button mat-icon-button disabled></button>\r\n                              <label [ngClass]=\"{'item-focused': isMatchFilterInputValue(node)}\">\r\n                                  {{_treeFields.display(node)}}</label>\r\n                          </div>\r\n                          <div class=\"mat-tree-node-button\">\r\n                              <button mat-icon-button color=\"warn\" (click)=\"onChooseNode(node)\"\r\n                                      *ngIf=\"isShowButtonChoose(node)\"\r\n                                      matTooltip=\"{{'common.tree.add'|translate}}\">\r\n                                  <mat-icon>add</mat-icon>\r\n                              </button>\r\n                              <button mat-icon-button color=\"warn\" (click)=\"onRemoveNode(node)\"\r\n                                      *ngIf=\"isShowButtonRemove(node)\"\r\n                                      matTooltip=\"{{'common.tree.remove'|translate}}\">\r\n                                  <mat-icon>clear</mat-icon>\r\n                              </button>\r\n                          </div>\r\n                      </li>\r\n                  </mat-tree-node>\r\n                  <!-- This is the tree node template for expandable nodes -->\r\n                  <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\"\r\n                                        [ngClass]=\"{'example-tree-invisible': !isShowNodeRecursive([node])}\">\r\n                      <li>\r\n                          <div class=\"mat-tree-node\">\r\n                              <button mat-icon-button matTreeNodeToggle\r\n                                      [attr.aria-label]=\"'toggle ' + _treeFields.value(node)\">\r\n                                  <mat-icon class=\"mat-icon-rtl-mirror\">\r\n                                      {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n                                  </mat-icon>\r\n                              </button>\r\n                              <label [ngClass]=\"{'item-focused': isMatchFilterInputValue(node)}\">\r\n                                  {{_treeFields.display(node)}}</label>\r\n                          </div>\r\n                          <ul *ngIf=\"!treeControl.isExpanded(node)\">\r\n                              <ng-container matTreeNodeOutlet></ng-container>\r\n                          </ul>\r\n                      </li>\r\n                  </mat-nested-tree-node>\r\n              </mat-tree>\r\n          </div>\r\n      </div>\r\n  `,\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => CvaTreeComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n})\r\nexport class CvaTreeComponent implements ControlValueAccessor {\r\n\r\n  _treeFields: FlatTreeModel = new FlatTreeModel();\r\n  autocompleteData: SelectModel[] = [];\r\n\r\n  @Input() set treeData(treeFields: FlatTreeModel) {\r\n    if (treeFields && treeFields.rootData && treeFields.rootData.length > 0) {\r\n      this._treeFields = treeFields;\r\n      this.autocompleteData = UtilsService.convertTreeDataToAutocompleteData(this._treeFields, this.symbol, this.hasChild,\r\n        this._treeFields.rootData, null);\r\n      this.onSelectChange();\r\n    }\r\n  }\r\n\r\n  @Input() placeholder: string = '';\r\n  @Input() symbol: string = ' >> ';\r\n  @Input() isShowLeafNextTo: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isHidingTree: boolean = false;\r\n  @Output() selectionChange = new EventEmitter();\r\n\r\n  treeControl: NestedTreeControl<any> = new NestedTreeControl<any>(node => {\r\n    return this._treeFields && this._treeFields.children ? this._treeFields.children(node) : [];\r\n  });\r\n  dataSource = new MatTreeNestedDataSource<BaseModel>();\r\n  autocompleteControl = new FormControl();\r\n\r\n  constructor() {\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  writeValue(obj: any[]): void {\r\n    if (this._treeFields) {\r\n      this.dataSource.data = this._treeFields.rootData;\r\n      this.treeControl.dataNodes = this._treeFields.rootData;\r\n      if (obj) {\r\n        this.updateTreeChecked(this._treeFields.rootData, obj);\r\n        this.autocompleteControl.setValue(obj);\r\n        this.propagateChange(obj);\r\n        this.selectionChange.emit(obj);\r\n      }\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  hasChild = (_: number, node: any): boolean => {\r\n    if (this._treeFields && this._treeFields.children) {\r\n      const children = this._treeFields.children(node);\r\n      return children && children.length > 0;\r\n    }\r\n    return false;\r\n  };\r\n\r\n  onSelectChange() {\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    this.writeValue(selectedValues);\r\n    this.treeControl.collapseAll();\r\n  }\r\n\r\n  updateTreeChecked(nodes: BaseModel[], selectedValues: string[]) {\r\n    if (this._treeFields) {\r\n      for (const node of nodes) {\r\n        if (this.hasChild(0, node)) {\r\n          this.updateTreeChecked(this._treeFields.children(node), selectedValues);\r\n        } else {\r\n          node.checked = !selectedValues || selectedValues.length === 0; // Nếu selectedValues.length === 0 thì showAll\r\n          if (selectedValues && selectedValues.length > 0) {\r\n            const value = this._treeFields.value(node).toString().toLowerCase();\r\n            if (selectedValues instanceof Array) {\r\n              selectedValues.forEach((selectedValue: string) => {\r\n                node.checked = node.checked || value === selectedValue.toLowerCase();\r\n                if (node.checked) {\r\n                  return;\r\n                }\r\n              });\r\n            } else {\r\n              node.checked = value === (selectedValues as string).toLowerCase();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  isShowNodeRecursive(nodes: BaseModel[]): boolean {\r\n    let result = false;\r\n    if (this._treeFields) {\r\n      for (const node of nodes) {\r\n        result = result || node.checked\r\n          || (this.hasChild(0, node) && this.isShowNodeRecursive(this._treeFields.children(node)));\r\n        if (result) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  isMatchFilterInputValue(node: BaseModel): boolean {\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    if (selectedValues && selectedValues.length > 0) {\r\n      return node.checked ? node.checked : false;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  isShowButtonChoose(node: BaseModel): boolean {\r\n    if (this.disabled) {\r\n      return false;\r\n    }\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    if (!selectedValues || selectedValues.length <= 0) {\r\n      return false;\r\n    }\r\n    return !node.checked;\r\n  }\r\n\r\n  isShowButtonRemove(node: BaseModel): boolean {\r\n    if (this.disabled) {\r\n      return false;\r\n    }\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    if (!selectedValues || selectedValues.length <= 0) {\r\n      return false;\r\n    }\r\n    return node.checked ? node.checked : false;\r\n  }\r\n\r\n  onChooseNode(node: BaseModel) {\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    if (selectedValues && selectedValues.length > 0 && this._treeFields) {\r\n      let isExists = false;\r\n      for (const selectedValue of selectedValues) {\r\n        isExists = isExists || selectedValue.toLowerCase() === this._treeFields.value(node).toString().toLowerCase();\r\n      }\r\n      if (!isExists) {\r\n        selectedValues.push(this._treeFields.value(node).toString());\r\n        this.writeValue(selectedValues);\r\n      }\r\n    }\r\n  }\r\n\r\n  onRemoveNode(node: BaseModel) {\r\n    const selectedValues = this.autocompleteControl.value as string[];\r\n    if (selectedValues && selectedValues.length > 0 && this._treeFields) {\r\n      const index = selectedValues.indexOf(this._treeFields.value(node).toString());\r\n      if (index >= 0) {\r\n        selectedValues.splice(index, 1);\r\n        this.writeValue(selectedValues);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  Self,\r\n} from '@angular/core';\r\nimport {AbstractControl, ControlValueAccessor, FormControl, NgControl, Validators} from '@angular/forms';\r\nimport { SelectModel } from '../models/components/select.model';\r\nimport {ValidatorService} from \"../services/validator.service\";\r\n\r\n@Component({\r\n  selector: 'cva-radiobutton',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-radiobutton ábc {{!!placeholder ? 'labelOutside' : ''}}\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label id=\"example-radio-group-label\" *ngIf=\"!!placeholder\" class=\"label_width\"\r\n             fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{placeholder | translate}}<span class=\"required-label-outside\">{{!!required ? '*' : ''}}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <div fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <mat-radio-group\r\n            aria-labelledby=\"example-radio-group-label\"\r\n            class=\"example-radio-group\" [disabled]=\"disabled\"\r\n            [(ngModel)]=\"selectedValue\"\r\n            fxLayout=\"{{direction === 'horizontal' ? 'row' : 'column'}}\">\r\n          <mat-radio-button class=\"example-radio-button\"\r\n                            *ngFor=\"let option of options\"\r\n                            [value]=\"option.value\"\r\n                            [disabled]=\"option.disabled\">\r\n            {{option.displayValue | translate}}\r\n          </mat-radio-button>\r\n        </mat-radio-group>\r\n        <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(control) && !hint\">{{hint | translate}}</mat-hint>\r\n        <mat-hint align=\"start\" *ngIf=\"NsValidator.invalid(control)\">{{NsValidator.getErrorMessage(control, errorMessages) | translate}}</mat-hint>\r\n      </div>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaRadiobuttonComponent implements ControlValueAccessor, OnChanges, OnInit {\r\n\r\n  @Input() placeholder: string = '';\r\n  @Input() value: any;\r\n  @Input() hint = '';\r\n  @Input() options: SelectModel[] = [];\r\n  @Input() disabled: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() direction: 'vertical' | 'horizontal' = 'horizontal';\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n\r\n  @Output() onChange = new EventEmitter();\r\n\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl: boolean = true;\r\n\r\n  control: AbstractControl | undefined = undefined;\r\n\r\n  get selectedValue() {\r\n    return this.value;\r\n  }\r\n\r\n  set selectedValue(val: number) {\r\n    this.writeValue(val);\r\n  }\r\n\r\n  get NsValidator(){\r\n    return ValidatorService;\r\n  }\r\n\r\n  constructor(private injector: Injector, @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.writeValue(this.value);\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.callValidator();\r\n  }\r\n\r\n  writeValue(value: any) {\r\n    if (value !== undefined) {\r\n      this.value = value;\r\n      this.propagateChange(this.value);\r\n      this.callValidator();\r\n      this.onChange.emit(this.value);\r\n    }\r\n  }\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any) {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched() {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n    if (ngControl && !this.control) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.control = ngControl.control ? ngControl.control : undefined;\r\n      } else {\r\n        this.control = new FormControl();\r\n      }\r\n      // Hành động này gắn validator vào this.formControl\r\n      // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n      // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n      if (this.control) {\r\n        if (this.control.validator) {\r\n          if (this.required){\r\n            this.control.setValidators([Validators.required,this.control.validator]);\r\n          }else {\r\n            this.control.setValidators([this.control.validator]);\r\n          }\r\n        } else {\r\n          if (this.required){\r\n            this.control.setValidators([Validators.required]);\r\n          }\r\n\r\n        }\r\n      }\r\n    }\r\n    if (this.control) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.control.setValue(this.selectedValue);\r\n      }\r\n      // Nếu là parent FormControl rồi thì kệ\r\n      this.control.updateValueAndValidity();\r\n    }\r\n  }\r\n}\r\n","import {FlatTreeConfigModel} from \"../models/components/flat-tree-config.model\";\r\nimport {FlatTreeNodeModel} from \"../models/components/flat-tree-node.model\";\r\n\r\nexport class FlatTreeService {\r\n\r\n  static hasChild(_nodeData: FlatTreeNodeModel): boolean {\r\n    return !!_nodeData.children && Array.isArray(_nodeData.children) && _nodeData.children.length > 0;\r\n  }\r\n  static convertTreeToFlatTree(inputData: FlatTreeNodeModel[],\r\n                               config: FlatTreeConfigModel): FlatTreeNodeModel[] {\r\n    if (!inputData) {\r\n      return [];\r\n    }\r\n    inputData.forEach(node => {\r\n      this.setRequiredFlatNoteProperty(node, config);\r\n      if (node.children && node.children.length > 0) {\r\n        this.convertTreeToFlatTree(node.children, config);\r\n      }\r\n    });\r\n    return inputData;\r\n  }\r\n\r\n  private static setRequiredFlatNoteProperty(node: any | FlatTreeNodeModel, config: FlatTreeConfigModel): FlatTreeNodeModel {\r\n    node.children = (node.children && node.children.length > 0) ? node.children : null;\r\n\r\n    node._displayFuncInput = config.isDynamicConfig ? config.display : typeof (config.display) === 'function' ? config.display(node) : config.display;\r\n    node.display = typeof node._displayFuncInput === 'function' ? node._displayFuncInput(node) : node._displayFuncInput;\r\n    node._disabledFuncInput = config.isDynamicConfig ? config.disabled : typeof (config.disabled) === 'function' ? config.disabled(node) : config.disabled;\r\n    node.disabled = typeof node._disabledFuncInput === 'function' ? node._disabledFuncInput(node) : node._disabledFuncInput;\r\n    return node;\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FlatTreeNodeModel } from '../../models/components/flat-tree-node.model';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\n\r\n@Component({\r\n  selector: 'cva-flat-tree-node-left',\r\n  standalone: false,\r\n  template: `\r\n    <ng-container [ngSwitch]=\"hasChild(node)\">\r\n      <ng-container *ngSwitchCase=\"false\">\r\n        <div\r\n          class=\"label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}\"\r\n          (click)=\"onLeafNodeClick.emit()\"\r\n          fxLayoutAlign=\"space-between center\">\r\n          <button *ngIf=\"node.level > 0\" type=\"button\" mat-icon-button disabled></button>\r\n          {{ node.displayValue }}\r\n        </div>\r\n        <mat-checkbox [(ngModel)]=\"node.checked\"\r\n                      [checked]=\"node.checked\"\r\n                      (ngModelChange)=\"ngModelLeafChange.emit($event)\"\r\n                      [disabled]=\"checkDisabledNode(node)\"\r\n                      *ngIf=\"!isHideCheckbox\">\r\n        </mat-checkbox>\r\n      </ng-container>\r\n      <ng-container *ngSwitchCase=\"true\">\r\n        <div\r\n          class=\"label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}\"\r\n          fxLayoutAlign=\"space-between center\">\r\n          <button type=\"button\" mat-icon-button (click)=\"toggle.emit()\"\r\n                  [attr.aria-label]=\"'toggle ' + node.displayValue\">\r\n            <i class=\"fas {{treeControl?.isExpanded(node) ? 'fa-chevron-up' : 'fa-chevron-down'}}\"></i>\r\n          </button>\r\n          <span (click)=\"onParentNodeClick.emit()\">{{ node.displayValue }}</span>\r\n        </div>\r\n        <mat-checkbox [(ngModel)]=\"node.checked\"\r\n                      *ngIf=\"!isHideCheckbox\"\r\n                      [checked]=\"descendantsAllSelected(node)\"\r\n                      [disabled]=\"onDisabledParent(node) || getDisabledInputFunc(node)\"\r\n                      [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n                      (ngModelChange)=\"ngModelParentChange.emit($event)\">\r\n        </mat-checkbox>\r\n      </ng-container>\r\n    </ng-container>\r\n  `,\r\n})\r\nexport class CvaFlatTreeNodeLeftComponent {\r\n  @Input() treeControl: FlatTreeControl<FlatTreeNodeModel> | undefined;\r\n  @Input() isHideCheckbox: boolean = false;\r\n  @Input() node: FlatTreeNodeModel = new FlatTreeNodeModel();\r\n  @Output() toggle: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() onParentNodeClick: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() onLeafNodeClick: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() ngModelParentChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n  @Output() ngModelLeafChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n  @Input() nodeClicked: FlatTreeNodeModel | undefined;\r\n  protected readonly menubar = menubar;\r\n\r\n  hasChild = (node: FlatTreeNodeModel) => !!node.children && Array.isArray(node.children) && node.children.length > 0;\r\n\r\n  checkDisabledNode(node: FlatTreeNodeModel) {\r\n    return node.disabled || this.getDisabledInputFunc(node);\r\n  }\r\n\r\n  getDisabledInputFunc(node: FlatTreeNodeModel): boolean {\r\n    return typeof (node._disabledFuncInput) === 'function' ? node._disabledFuncInput(node) : !!node._disabledFuncInput;\r\n  }\r\n\r\n  descendantsAllSelected(node: FlatTreeNodeModel): boolean {\r\n    if (this.treeControl) {\r\n      const descendants = this.treeControl.getDescendants(node);\r\n      return descendants.length > 0 && descendants.every(child => {\r\n        return child.checked;\r\n      });\r\n    }\r\n    return false;\r\n  }\r\n\r\n  descendantsPartiallySelected(node: FlatTreeNodeModel): boolean {\r\n    if (this.treeControl) {\r\n      const descendants = this.treeControl.getDescendants(node);\r\n      const result = descendants.some(child => child.checked);\r\n      return result && !this.descendantsAllSelected(node);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onDisabledParent(parent: FlatTreeNodeModel): boolean {\r\n    if (!parent.disabled) {\r\n      return false;\r\n    } else if (this.treeControl) {\r\n      this.treeControl.getDescendants(parent).forEach(childNode => childNode.disabled = true);\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { FlatTreeNodeModel } from '../../models/components/flat-tree-node.model';\r\n\r\n@Component({\r\n  selector: 'cva-flat-tree-node-right',\r\n  standalone: false,\r\n  template: `\r\n    <ng-container [ngSwitch]=\"hasChild(node)\">\r\n      <ng-container *ngSwitchCase=\"false\">\r\n        <div style=\"width: 100%\"\r\n             fxLayout=\"row\"\r\n             fxLayoutAlign=\"space-between center\">\r\n          <div class=\"label-area\"\r\n               fxLayout=\"row\"\r\n               fxLayoutAlign=\"space-between center\">\r\n            <button *ngIf=\"node.level > 0\" type=\"button\" mat-icon-button disabled></button>\r\n            {{ node.displayValue }}\r\n          </div>\r\n          <button type=\"button\" mat-icon-button class=\"danger\"\r\n                  *ngIf=\"!(checkDisabledNode(node) || checkIsView(isView))\"\r\n                  (click)=\"deSelectLeafNode.emit()\">\r\n            <i class=\"far fa-trash-alt\"></i>\r\n          </button>\r\n        </div>\r\n      </ng-container>\r\n      <ng-container *ngSwitchCase=\"true\">\r\n        <div style=\"width: 100%\"\r\n             fxLayout=\"row\"\r\n             fxLayoutAlign=\"space-between center\">\r\n          <div class=\"label-area\"\r\n               fxLayout=\"row\"\r\n               fxLayoutAlign=\"space-between center\">\r\n            <button type=\"button\" mat-icon-button (click)=\"toggle.emit()\"\r\n                    [attr.aria-label]=\"'toggle ' + node.displayValue\">\r\n              <i class=\"fas {{treeControl?.isExpanded(node) ? 'fa-chevron-up' : 'fa-chevron-down'}}\"></i>\r\n            </button>\r\n            {{ node.displayValue }}\r\n          </div>\r\n          <button type=\"button\" mat-icon-button class=\"danger\"\r\n                  *ngIf=\"!(checkDisabledNode(node) || checkIsView(isView))\"\r\n                  (click)=\"deSelectParentNode.emit()\">\r\n            <i class=\"far fa-trash-alt\"></i>\r\n          </button>\r\n        </div>\r\n      </ng-container>\r\n    </ng-container>\r\n  `,\r\n})\r\nexport class CvaFlatTreeNodeRightComponent {\r\n  @Input() treeControl: FlatTreeControl<FlatTreeNodeModel> | undefined;\r\n  @Input() node: FlatTreeNodeModel = new FlatTreeNodeModel();\r\n  @Input() isView: (() => boolean) | boolean = false;\r\n  @Output() toggle: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() deSelectLeafNode: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() deSelectParentNode: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  hasChild = (node: FlatTreeNodeModel) => !!node.children && Array.isArray(node.children) && node.children.length > 0;\r\n\r\n  checkDisabledNode(node: FlatTreeNodeModel) {\r\n    return node.disabled || this.getDisabledInputFunc(node);\r\n  }\r\n\r\n  getDisabledInputFunc(node: FlatTreeNodeModel): boolean {\r\n    return typeof (node._disabledFuncInput) === 'function' ? node._disabledFuncInput(node) : !!node._disabledFuncInput;\r\n  }\r\n\r\n  checkIsView(isView: boolean | (() => boolean)) {\r\n    return isView ? typeof (isView) === 'boolean' ? isView : isView() : false;\r\n  }\r\n}\r\n","import { FlatTreeControl } from '@angular/cdk/tree';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  Self,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';\r\nimport { Observable, of as observableOf } from 'rxjs';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { FlatTreeConfigModel } from '../../models/components/flat-tree-config.model';\r\nimport { FlatTreeNodeModel } from '../../models/components/flat-tree-node.model';\r\nimport { FlatTreeService } from '../../services/flat.tree.service';\r\nimport { ValidatorService } from '../../services/validator.service';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\n\r\n@Component({\r\n  selector: 'cva-flat-tree',\r\n  standalone: false,\r\n  template: `\r\n    <div class=\"cva-flat-tree labelOutside\"\r\n         fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n      <mat-label *ngIf=\"label && !isSearchOutSide\" class=\"label_width\"\r\n                 fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div class=\"label\">\r\n          <div>\r\n            {{ (label ? label : '') | translate }}<span class=\"required-label-outside\">{{ required ? '*' : '' }}</span>\r\n          </div>\r\n        </div>\r\n      </mat-label>\r\n      <div class=\"tree-area\"\r\n           fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n        <div fxLayout=\"row wrap\">\r\n          <div class=\"choose-area\"\r\n               *ngIf=\"!checkIsView(isView) && !isCollapseSelected\"\r\n               fxLayout=\"column\" fxFlex=\"1 1 {{isDisplayChooseTreeOnly ? '100%' : '50%'}}\" fxFlex.lt-sm=\"100%\">\r\n            <div class=\"header-choose-area\">\r\n              <div class=\"title-choose-tree\" fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n                <mat-label fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\" class=\"label_width\"\r\n                           *ngIf=\"label && isSearchOutSide\">\r\n                  <div class=\"label\">{{ (label ? label : '') | translate }}<span\r\n                    class=\"required-label-outside\">{{ required ? '*' : '' }}</span></div>\r\n                </mat-label>\r\n                <mat-divider *ngIf=\"label && isSearchOutSide\"></mat-divider>\r\n              </div>\r\n              <mat-form-field appearance=\"outline\"\r\n                              *ngIf=\"!isSearchOutSide\"\r\n                              fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n                <input matInput\r\n                       placeholder=\"{{'common.searchText'|translate}}\"\r\n                       [(ngModel)]=\"searchText\"\r\n                       (ngModelChange)=\"onChangeSearchText()\"\r\n                       autocomplete=\"off\">\r\n              </mat-form-field>\r\n            </div>\r\n            <cdk-virtual-scroll-viewport #chooseAreaScrollViewport itemSize=\"{{itemSize}}\"\r\n                                         [ngStyle]=\"{height: viewHeight + 'px'}\">\r\n              <ng-container *cdkVirtualFor=\"let node of dataSource\">\r\n                <cva-flat-tree-node-left [style.padding-left]=\"node.level * paddingLeft + 'px'\"\r\n                                         [attr.aria-level]=\"node.level\"\r\n                                         [treeControl]=\"treeControl\"\r\n                                         [isHideCheckbox]=\"isHideCheckbox\"\r\n                                         [nodeClicked]=\"nodeClicked\"\r\n                                         [node]=\"node\"\r\n                                         (toggle)=\"toggleTreeControl(treeControl, node)\"\r\n                                         (onParentNodeClick)=\"onParentNodeClick(node)\"\r\n                                         (onLeafNodeClick)=\"onLeafNodeClick(node)\"\r\n                                         (ngModelParentChange)=\"toggleNodeCheck(node, $event)\"\r\n                                         (ngModelLeafChange)=\"toggleNodeCheck(node, $event)\">\r\n                </cva-flat-tree-node-left>\r\n              </ng-container>\r\n            </cdk-virtual-scroll-viewport>\r\n          </div>\r\n          <div class=\"selected-area {{isCollapseSelected ? 'hiddenTree' : ''}}\"\r\n               *ngIf=\"!isDisplayChooseTreeOnly\"\r\n               fxLayout=\"column\" fxFlex=\"1 1 {{checkIsView(isView) ? '100%' : '50%'}}\" fxFlex.lt-sm=\"100%\">\r\n            <div class=\"header-area\" *ngIf=\"!isView\">\r\n              <label>{{ selectedLabelTitle | translate }}{{ '(' + (value ? value.length : 0) + ')' }}</label>\r\n              <div class=\"collapse-expand-all\" (click)=\"toggleSelectedTree()\">\r\n                {{ (isCollapseSelected ? 'common.selected.tree.expandAll' : 'common.selected.tree.collapse') | translate }}\r\n                <i class=\"fa {{isCollapseSelected ? 'fa-chevron-down' : 'fa-chevron-up'}}\"></i>\r\n              </div>\r\n            </div>\r\n            <cdk-virtual-scroll-viewport #selectedScrollViewport\r\n                                         *ngIf=\"!isCollapseSelected\"\r\n                                         itemSize=\"{{itemSize}}\" [ngStyle]=\"{height: viewHeight + 'px'}\">\r\n              <ng-container *cdkVirtualFor=\"let node of selectedDataSource\">\r\n                <cva-flat-tree-node-right [style.padding-left]=\"node.level * paddingLeft + 'px'\"\r\n                                          [attr.aria-level]=\"node.level\"\r\n                                          [treeControl]=\"selectedTreeControl\"\r\n                                          [node]=\"node\"\r\n                                          [isView]=\"isView\"\r\n                                          (toggle)=\"toggleSelectedTree(node)\"\r\n                                          (deSelectLeafNode)=\"deSelect(node)\"\r\n                                          (deSelectParentNode)=\"deSelectParent(node)\">\r\n                </cva-flat-tree-node-right>\r\n              </ng-container>\r\n            </cdk-virtual-scroll-viewport>\r\n          </div>\r\n        </div>\r\n        <mat-hint *ngIf=\"NsValiator.invalid(formControl)\">\r\n          {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}\r\n        </mat-hint>\r\n      </div>\r\n    </div>\r\n  `,\r\n})\r\nexport class CvaFlatTreeComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnChanges {\r\n\r\n  @Input() label: string = '';\r\n  @Input() required = false;\r\n  @Input() value: any[] = [];\r\n  valueObjRef: Map<any, FlatTreeNodeModel> = new Map<any, FlatTreeNodeModel>();\r\n  @Input() multiple: boolean = true;\r\n  @Input() disabled: boolean | undefined;\r\n  @Input() isView: (() => boolean) | boolean = false;\r\n  @Input() isDisplayChooseTreeOnly: boolean = false;\r\n  @Input() isHideCheckbox: boolean = false;\r\n  @Input() isCollapseSelected: boolean = false;\r\n  @Input() selectedLabelTitle: string = 'common.selected.tree.label';\r\n\r\n  /** height of tree view */\r\n  @Input() viewHeight: number = 300; // px\r\n\r\n  /** height of node view */\r\n  @Input() itemSize: number = 48; // px\r\n  paddingLeft: number = 20; //px\r\n\r\n  /* percent label outside css */\r\n  @Input() percentOfLabelOutside: number = 25;\r\n  @Input() treeConfig?: FlatTreeConfigModel;\r\n  @Input() isSearchOutSide: boolean = false;\r\n  @Input() searchTextOutSide: string = '';\r\n\r\n  searchText = '';\r\n\r\n  @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n  @Input() fullDatasource: FlatTreeNodeModel[] = [];\r\n  filterDatasource: FlatTreeNodeModel[] = [];\r\n  treeControl: FlatTreeControl<FlatTreeNodeModel>;\r\n  treeFlattener: MatTreeFlattener<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n  dataSource: MatTreeFlatDataSource<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n\r\n  fullDataTreeControl: FlatTreeControl<FlatTreeNodeModel>;\r\n  fullDataTreeFlattener: MatTreeFlattener<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n  fullDataDataSource: MatTreeFlatDataSource<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n\r\n  selectedTreeControl: FlatTreeControl<FlatTreeNodeModel>;\r\n  selectedTreeFlattener: MatTreeFlattener<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n  selectedDataSource: MatTreeFlatDataSource<FlatTreeNodeModel, FlatTreeNodeModel>;\r\n  selectedFullDataSource: FlatTreeNodeModel[] = [];\r\n  selectedFullValues: Map<any, any> = new Map<any, any>();\r\n  @Output() selectionChange = new EventEmitter<any>();\r\n  @Output() onNodeClick = new EventEmitter<FlatTreeNodeModel>();\r\n  nodeClicked: FlatTreeNodeModel | undefined;\r\n  // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n  @Input() isFormControl = true;\r\n\r\n  // Cái này là để gắn khi nó là FormControl trong 1 FormGroup\r\n  formControl: AbstractControl | undefined;\r\n\r\n  mapIndexes: Map<any, any> = new Map<any, any>();\r\n\r\n  @ViewChild('chooseAreaScrollViewport', { static: false }) chooseVirtualScroll?: CdkVirtualScrollViewport;\r\n  @ViewChild('selectedScrollViewport', { static: false }) selectedVirtualScroll?: CdkVirtualScrollViewport;\r\n\r\n  constructor(private translateService: TranslateService, private injector: Injector,\r\n              private cdr: ChangeDetectorRef,\r\n              @Self() @Optional() ngControl: NgControl) {\r\n    if (ngControl) {\r\n      ngControl.valueAccessor = this;\r\n    }\r\n\r\n\r\n    this.fullDataTreeFlattener = new MatTreeFlattener(this.transformer, this._getLevel,\r\n      this._isExpandable, this._getChildren);\r\n    this.fullDataTreeControl = new FlatTreeControl<FlatTreeNodeModel>(this._getLevel, this._isExpandable);\r\n    this.fullDataDataSource = new MatTreeFlatDataSource(this.fullDataTreeControl, this.fullDataTreeFlattener);\r\n    this.fullDataDataSource.data = this.fullDatasource;\r\n\r\n    this.treeFlattener = new MatTreeFlattener(this.transformer, this._getLevel,\r\n      this._isExpandable, this._getChildren);\r\n    this.treeControl = new FlatTreeControl<FlatTreeNodeModel>(this._getLevel, this._isExpandable);\r\n    this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\r\n    this.setDataSourceOrigin();\r\n\r\n    this.selectedTreeFlattener = new MatTreeFlattener(this.transformer, this._getLevel,\r\n      this._isExpandable, this._getChildren);\r\n    this.selectedTreeControl = new FlatTreeControl<FlatTreeNodeModel>(this._getLevel, this._isExpandable);\r\n    this.selectedDataSource = new MatTreeFlatDataSource(this.selectedTreeControl, this.selectedTreeFlattener);\r\n    this.setSelectedNode();\r\n\r\n  }\r\n\r\n  get NsValiator() {\r\n    return ValidatorService;\r\n  }\r\n\r\n  setSelectedNode() {\r\n    this.selectedDataSource.data = this.selectedFullDataSource;\r\n    if (this.selectedVirtualScroll) {\r\n      this.selectedVirtualScroll.checkViewportSize();\r\n    }\r\n  }\r\n\r\n  setDataSourceOrigin() {\r\n    this.fullDataDataSource.data = this.fullDatasource;\r\n    this.dataSource.data = this.filterDatasource;\r\n    if (this.chooseVirtualScroll) {\r\n      this.chooseVirtualScroll.checkViewportSize();\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.callValidator();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // this.onChangeSearchText();\r\n  }\r\n\r\n  getDisplayInputFunc(node: FlatTreeNodeModel): boolean {\r\n    return typeof (node._displayFuncInput) === 'function' ? node._displayFuncInput(node) : !!node._displayFuncInput;\r\n  }\r\n\r\n  getDisabledInputFunc(node: FlatTreeNodeModel): boolean {\r\n    return typeof (node._disabledFuncInput) === 'function' ? node._disabledFuncInput(node) : !!node._disabledFuncInput;\r\n  }\r\n\r\n  checkDisabledNode(node: FlatTreeNodeModel) {\r\n    return node.disabled || this.getDisabledInputFunc(node);\r\n  }\r\n\r\n  callValidator() {\r\n    const ngControl = this.injector.get(NgControl);\r\n    if (ngControl && !this.formControl) {\r\n      // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n      if (this.isFormControl) {\r\n        this.formControl = ngControl.control ? ngControl.control : undefined;\r\n        if (this.formControl && !this.formControl.value) {\r\n          this.formControl.setValue(this.value);\r\n        }\r\n      } else {\r\n        this.formControl = new FormControl();\r\n      }\r\n      if (this.formControl) {\r\n        // this.formControl.setValidators(NsValidator.generateNsMultiSelectValidators({\r\n        //   required: this.required,\r\n        // }));\r\n      }\r\n    }\r\n    if (this.formControl) {\r\n      // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n      if (!this.isFormControl) {\r\n        this.formControl.setValue(this.value);\r\n      }\r\n      this.formControl.updateValueAndValidity();\r\n\r\n      const errorsObj: { [key: string]: any } = {};\r\n\r\n      const errors = this.formControl.errors;\r\n      if (errors) {\r\n        Object.keys(errors).forEach(key => {\r\n          errorsObj[key] = errors[key];\r\n        });\r\n      }\r\n\r\n      if (this.checkRequired(this.required)) {\r\n        if (Array.isArray(this.value) && this.value.length === 0) {\r\n          errorsObj['required'] = true;\r\n        }\r\n      }\r\n\r\n      if (Object.keys(errorsObj).length > 0) {\r\n        this.formControl.setErrors(errorsObj);\r\n      } else {\r\n        this.formControl.setErrors(null);\r\n      }\r\n      this.formControl.markAllAsTouched();\r\n    }\r\n  }\r\n\r\n  checkRequired(isRequired: boolean | (() => boolean)) {\r\n    return isRequired ? typeof (isRequired) === 'boolean' ? isRequired : isRequired() : false;\r\n  }\r\n\r\n  checkIsView(isView: boolean | (() => boolean)) {\r\n    return isView ? typeof (isView) === 'boolean' ? isView : isView() : false;\r\n  }\r\n\r\n  ngOnChanges(simpleChanges: SimpleChanges) {\r\n    if ('fullDatasource' in simpleChanges) {\r\n      // this.fullDatasource = simpleChanges.fullDatasource.currentValue;\r\n      if (!this.treeConfig) {\r\n        this.treeConfig = new FlatTreeConfigModel();\r\n      }\r\n      const currentSource = simpleChanges.fullDatasource.currentValue ? simpleChanges.fullDatasource.currentValue : [];\r\n      this.fullDatasource = FlatTreeService.convertTreeToFlatTree(currentSource, this.treeConfig);\r\n      this.filterDatasource = this.fullDatasource;\r\n      this.setDataSourceOrigin();\r\n    }\r\n\r\n    if ('treeConfig' in simpleChanges) {\r\n      this.treeConfig = simpleChanges.treeConfig.currentValue;\r\n      if (this.treeConfig) {\r\n        this.fullDatasource = FlatTreeService.convertTreeToFlatTree(this.fullDatasource, this.treeConfig);\r\n        this.filterDatasource = this.fullDatasource;\r\n        this.setDataSourceOrigin();\r\n      }\r\n    }\r\n\r\n    if ('multiple' in simpleChanges) {\r\n      this.multiple = simpleChanges.multiple.currentValue;\r\n      if (!this.multiple) {\r\n        this.isHideCheckbox = true;\r\n      }\r\n    }\r\n    if ('disabled' in simpleChanges) {\r\n      this.disabled = simpleChanges.disabled.currentValue;\r\n      if (this.disabled !== undefined && this.disabled !== null) {\r\n        if (!this.treeConfig) {\r\n          this.treeConfig = new FlatTreeConfigModel();\r\n        }\r\n        this.treeConfig.disabled = this.disabled;\r\n        this.fullDatasource = FlatTreeService.convertTreeToFlatTree(this.fullDatasource, this.treeConfig);\r\n        this.filterDatasource = this.fullDatasource;\r\n        this.setDataSourceOrigin();\r\n      }\r\n    }\r\n\r\n    if ('searchTextOutSide' in simpleChanges) {\r\n      this.searchText = simpleChanges.searchTextOutSide.currentValue ? simpleChanges.searchTextOutSide.currentValue : '';\r\n      this.onChangeSearchText();\r\n    }\r\n\r\n    if (this.value) {\r\n      this.writeValue(this.value);\r\n    }\r\n  }\r\n\r\n  transformer = (node: FlatTreeNodeModel, level: number) => {\r\n    node.expandable = FlatTreeService.hasChild(node);\r\n    node.level = level;\r\n    node.checked = !!node.checked;\r\n    return node;\r\n  };\r\n\r\n  propagateChange = (_: any) => {\r\n    /*NON-EMPTY FOR COMPILE*/\r\n  };\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.propagateChange(fn);\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.propagateChange(fn);\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    // if (this.multiple && !obj) {\r\n    //   obj = [];\r\n    // }\r\n    if (obj) {\r\n      // if (this.multiple) {\r\n      this.value = obj;\r\n      // }\r\n      this.mapIndexes = new Map<any, any>();\r\n      for (let i = 0; i < this.fullDataTreeControl.dataNodes.length; i++) {\r\n        this.mapIndexes.set(this.fullDataTreeControl.dataNodes[i].value, i);\r\n      }\r\n      this.checkedDefaultValue();\r\n      this.updateSelectAll();\r\n      this.updateSelectedTree();\r\n      this.callValidator();\r\n      if (this.isView) {\r\n        this.selectedTreeControl.expandAll();\r\n      }\r\n      this.selectionChange.emit(Array.from(this.valueObjRef.values()));\r\n    }\r\n  }\r\n\r\n  updateSelectedTree() {\r\n    this.selectedFullDataSource = [];\r\n    this.getCheckedSelectedTreeDataSource(this.fullDataDataSource.data, this.selectedFullDataSource);\r\n    this.setSelectedNode();\r\n    this.expandTreeDataSource(this.selectedTreeControl, 'isExpanded');\r\n  }\r\n\r\n  checkedDefaultValue() {\r\n    this.valueObjRef.clear();\r\n    const valueSet = new Set(this.value);\r\n\r\n    for (const node of this.fullDataTreeControl.dataNodes) {\r\n      const isLeaf = !FlatTreeService.hasChild(node);\r\n\r\n      node.checked = isLeaf && valueSet.has(node.value);\r\n\r\n      if (isLeaf && node.checked) {\r\n        this.valueObjRef.set(node.value, node);\r\n      }\r\n      const orgNodeIndex = this.mapIndexes.get(node.value);\r\n      if (orgNodeIndex !== undefined) {\r\n        this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = node.checked;\r\n      }\r\n    }\r\n  }\r\n\r\n  getAllChildNode(treeControl: FlatTreeControl<FlatTreeNodeModel>, node: FlatTreeNodeModel) {\r\n    const index = this.mapIndexes.get(node.value);\r\n    let sameLevelNextIndex = -1;\r\n    for (let i = index + 1; i < treeControl.dataNodes.length; i++) {\r\n      if (node.level >= treeControl.dataNodes[i].level) {\r\n        sameLevelNextIndex = i;\r\n        break;\r\n      }\r\n    }\r\n    return treeControl.dataNodes.slice(index + 1, sameLevelNextIndex < 0 ? treeControl.dataNodes.length : sameLevelNextIndex);\r\n  }\r\n\r\n  updateSelectAll(childrenNode?: FlatTreeNodeModel[]) {\r\n    const data = childrenNode ? childrenNode : this.dataSource.data;\r\n    data.forEach(node => {\r\n      if (FlatTreeService.hasChild(node)) {\r\n        this.updateSelectAll(node.children);\r\n        node.checked = !!node.children && node.children.reduce((checkAll: boolean, curChildNode: FlatTreeNodeModel) => {\r\n          return checkAll && !!curChildNode.checked;\r\n        }, true);\r\n      }\r\n    });\r\n  }\r\n\r\n  checkParentNode(checked: boolean, node: FlatTreeNodeModel, isSelectedChange?: boolean) {\r\n    node.checked = checked;\r\n    let indexLeaf = -1;\r\n    // update origin node\r\n    let orgNodeIndex = this.mapIndexes.get(node.value);\r\n    /*this.getNodeInFullDataSource(child)*/\r\n    this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;\r\n    if (orgNodeIndex > -1 && !checked) {\r\n      this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;\r\n    }\r\n    const allChild = this.getAllChildNode(this.fullDataTreeControl, node);/*this.treeControl.getDescendants(node);*/\r\n    allChild.reverse();\r\n    allChild.forEach(child => {\r\n      if (!FlatTreeService.hasChild(child)) {\r\n        indexLeaf = this.value.indexOf(child.value);\r\n        if (checked) {\r\n          if (indexLeaf < 0 && !child.disabled && child.display) {\r\n            child.checked = checked;\r\n            this.value.push(child.value);\r\n            this.valueObjRef.set(child.value, child);\r\n          }\r\n        } else {\r\n          if ((indexLeaf >= 0 && !child.disabled && child.display) || !!isSelectedChange) {\r\n            child.checked = checked;\r\n            this.value.splice(indexLeaf, 1);\r\n            this.valueObjRef.delete(child.value);\r\n          }\r\n        }\r\n      } else {\r\n        orgNodeIndex = this.mapIndexes.get(child.value);\r\n        if (orgNodeIndex > -1) {\r\n          this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;\r\n          this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = this.fullDataTreeControl.dataNodes[orgNodeIndex].children?.every(n => n.checked);\r\n        }\r\n      }\r\n    });\r\n\r\n    if (Array.isArray(this.value) && this.value.length === 0) {\r\n      this.selectedTreeChange(node);\r\n    }\r\n    this.writeValue(this.value);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  selectedTreeChange(node: FlatTreeNodeModel) {\r\n    let checkExistSelected;\r\n    if (node.level < 1) {\r\n      checkExistSelected = this.selectedFullValues.has(node.value);\r\n      if (node.checked) {\r\n        this.selectedFullValues.set(node.value, node.value);\r\n      } else if (!node.checked && checkExistSelected) {\r\n        this.selectedFullValues.delete(node.value);\r\n      }\r\n      if (node.checked) {\r\n        this.selectedTreeControl.expandDescendants(node);\r\n      }\r\n    } else {\r\n      const rootNode = this.getRootNode(node);\r\n      if (rootNode) {\r\n        checkExistSelected = this.selectedFullValues.has(rootNode.value);\r\n        if (node.checked) {\r\n          this.selectedFullValues.set(rootNode.value, rootNode.value);\r\n        } else if (!node.checked && checkExistSelected) {\r\n          if (!this.getAllChildNode(this.fullDataTreeControl, rootNode)/*this.treeControl.getDescendants(rootNode)*/.some(child => child.checked)) {\r\n            this.selectedFullValues.delete(node.value);\r\n          }\r\n        }\r\n        if (rootNode.checked) {\r\n          this.selectedTreeControl.expandDescendants(rootNode);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  checkLeafNode(checked: boolean, node: FlatTreeNodeModel, isSelectedChange?: boolean) {\r\n    if ((node.display && !this.checkDisabledNode(node)) || !!isSelectedChange) {\r\n      node.checked = checked;\r\n\r\n      // update origin node\r\n      const orgNodeIndex = this.mapIndexes.get(node.value);\r\n      this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;\r\n\r\n      if (checked) {\r\n        if (this.multiple) {\r\n          if (!this.value.includes(node.value)) {\r\n            this.value.push(node.value);\r\n            this.valueObjRef.set(node.value, node);\r\n          }\r\n        } else {\r\n          this.value = [node.value];\r\n          this.valueObjRef = new Map<any, FlatTreeNodeModel>().set(node.value, node);\r\n        }\r\n\r\n      } else {\r\n        this.value.splice(this.value.indexOf(node.value), 1);\r\n        this.valueObjRef.delete(node.value);\r\n      }\r\n      if (Array.isArray(this.value) && this.value.length === 0) {\r\n        this.selectedTreeChange(node);\r\n      }\r\n      this.writeValue(this.value);\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  /* Get the parent node of a node */\r\n  getRootNode(node: FlatTreeNodeModel): FlatTreeNodeModel | null {\r\n    const currentLevel = this._getLevel(node);\r\n\r\n    if (currentLevel < 1) {\r\n      return node;\r\n    }\r\n\r\n    const startIndex = this.treeControl.dataNodes.indexOf(node) - 1;\r\n\r\n    for (let i = startIndex; i >= 0; i--) {\r\n      const currentNode = this.treeControl.dataNodes[i];\r\n\r\n      if (this._getLevel(currentNode) < currentLevel) {\r\n        return this.getRootNode(currentNode);\r\n      }\r\n    }\r\n    return node;\r\n  }\r\n\r\n  deSelect(node: FlatTreeNodeModel) {\r\n    this.checkLeafNode(false, node, true);\r\n  }\r\n\r\n  deSelectParent(node: FlatTreeNodeModel) {\r\n    this.checkParentNode(false, node, true);\r\n  }\r\n\r\n  toggleTreeControl(treeControl: FlatTreeControl<FlatTreeNodeModel>, node: FlatTreeNodeModel) {\r\n    treeControl.toggle(node);\r\n    const orgNode = this.fullDataTreeControl.dataNodes.find(n => n.value === node.value);\r\n    if (orgNode) {\r\n      orgNode.isFilterExpanded = treeControl.isExpanded(node);\r\n    }\r\n    if (this.chooseVirtualScroll) {\r\n      this.chooseVirtualScroll.checkViewportSize();\r\n    }\r\n  }\r\n\r\n  toggleSelectedTree(node?: FlatTreeNodeModel) {\r\n    if (node) {\r\n      this.selectedTreeControl.toggle(node);\r\n      const orgNode = this.fullDataTreeControl.dataNodes.find(n => n.value === node.value);\r\n      if (orgNode) {\r\n        orgNode.isExpanded = this.selectedTreeControl.isExpanded(node);\r\n      }\r\n      if (this.selectedVirtualScroll) {\r\n        this.selectedVirtualScroll.checkViewportSize();\r\n      }\r\n    } else {\r\n      this.isCollapseSelected = !this.isCollapseSelected;\r\n    }\r\n\r\n  }\r\n\r\n  onChangeSearchText() {\r\n    this.filterDatasource = [];\r\n    this.getDisplayTreeDataSource(this.fullDataDataSource.data, this.filterDatasource);\r\n    this.setDataSourceOrigin();\r\n    this.expandTreeDataSource(this.treeControl, 'isFilterExpanded');\r\n    if (this.chooseVirtualScroll) {\r\n      this.chooseVirtualScroll.scrollToIndex(0);\r\n    }\r\n  }\r\n\r\n  getDisplayTreeDataSource(dataOrigin: FlatTreeNodeModel[], copiedData: FlatTreeNodeModel[]) {\r\n    if (!Array.isArray(dataOrigin)) {\r\n      return [];\r\n    }\r\n    let copiedNode: FlatTreeNodeModel;\r\n    for (const node of dataOrigin) {\r\n      copiedNode = {\r\n        ...node,\r\n        children: [],\r\n      } as FlatTreeNodeModel;\r\n      if (!node.children || !FlatTreeService.hasChild(node)) {\r\n        node.display = node.displayValue.toLowerCase().includes(this.searchText.toLowerCase())\r\n          && this.getDisplayInputFunc(node);\r\n        if (node.display) {\r\n          copiedData.push(node);\r\n        }\r\n      } else {\r\n        this.getDisplayTreeDataSource(node.children, copiedNode.children ? copiedNode.children : []);\r\n        // parent display\r\n        node.display = (node.displayValue.toLowerCase().includes(this.searchText.toLowerCase())\r\n          || node.children?.some(childNode => childNode.display)) && this.getDisplayInputFunc(node);\r\n        node.checked = node.children.filter(child => child.display).length > 0 &&\r\n          node.children.filter(child => child.display).every(childNode => childNode.checked);\r\n        copiedNode.display = node.display;\r\n        copiedNode.checked = node.checked;\r\n        if (node.display) {\r\n          if (!this.getAllChildNode(this.fullDataTreeControl, node).some(childNode => childNode.display)) {\r\n            this.getAllChildNode(this.fullDataTreeControl, node).forEach(childNode => childNode.display = true);\r\n            copiedData.push(node);\r\n          } else {\r\n            copiedData.push(copiedNode);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getCheckedSelectedTreeDataSource(dataOrigin: FlatTreeNodeModel[], copiedData: FlatTreeNodeModel[]) {\r\n    if (!Array.isArray(dataOrigin)) {\r\n      return [];\r\n    }\r\n    let copiedNode: FlatTreeNodeModel;\r\n    for (const node of dataOrigin) {\r\n      copiedNode = {\r\n        ...node,\r\n        children: [],\r\n      } as FlatTreeNodeModel;\r\n      if (!node.children || (Array.isArray(node.children) && node.children.length === 0)) {\r\n        if (node.checked) {\r\n          copiedData.push(node);\r\n        }\r\n      } else {\r\n        this.getCheckedSelectedTreeDataSource(node.children, copiedNode.children ? copiedNode.children : []);\r\n        // parent checked\r\n        node.checked = this.getAllChildNode(this.fullDataTreeControl, node).every(childNode => childNode.checked);\r\n        node.checkedDisplay = node.checked || this.getAllChildNode(this.fullDataTreeControl, node).some(childNode => childNode.checked);\r\n        copiedNode.checkedDisplay = node.checkedDisplay;\r\n\r\n        if (node.checkedDisplay) {\r\n          if (!this.getAllChildNode(this.fullDataTreeControl, node).some(childNode => childNode.checked)) {\r\n            this.getAllChildNode(this.fullDataTreeControl, node).forEach(childNode => childNode.checked = true);\r\n            copiedData.push(node);\r\n          } else {\r\n            copiedData.push(copiedNode);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  expandTreeDataSource(treeControl: FlatTreeControl<FlatTreeNodeModel>, expandProperty: 'isExpanded' | 'isFilterExpanded') {\r\n    treeControl.dataNodes.filter(n => treeControl.isExpandable(n))\r\n      .forEach(child => {\r\n        if (child[expandProperty]) {\r\n          treeControl.expand(child);\r\n        } else {\r\n          treeControl.collapse(child);\r\n        }\r\n      });\r\n  }\r\n\r\n  onLeafNodeClick(node: FlatTreeNodeModel) {\r\n    this.nodeClicked = node;\r\n    this.onNodeClick.emit(node);\r\n    if (this.isHideCheckbox) {\r\n      this.value = [];\r\n      this.valueObjRef.clear();\r\n      this.checkLeafNode(true, node);\r\n    }\r\n  }\r\n\r\n  onParentNodeClick(node: FlatTreeNodeModel) {\r\n    this.nodeClicked = node;\r\n    this.onNodeClick.emit(node);\r\n    if (this.isHideCheckbox) {\r\n      this.value = [];\r\n      this.valueObjRef.clear();\r\n      this.checkParentNode(true, node);\r\n    }\r\n  }\r\n\r\n  toggleNodeCheck(node: FlatTreeNodeModel, checked: boolean): void {\r\n    const isLeaf = !FlatTreeService.hasChild(node);\r\n\r\n    // Gọi 1 lần duy nhất nếu là parent\r\n    const descendants = isLeaf ? [] : this.fullDataTreeControl.getDescendants(node);\r\n    const affectedNodes = isLeaf ? [node] : descendants.filter(n => !FlatTreeService.hasChild(n));\r\n    for (const leaf of affectedNodes) {\r\n      if (!leaf.display || this.checkDisabledNode(leaf)) continue;\r\n\r\n      const index = this.value.indexOf(leaf.value);\r\n\r\n      if (checked && index < 0) {\r\n        this.value.push(leaf.value);\r\n        this.valueObjRef.set(leaf.value, leaf);\r\n        leaf.checked = true;\r\n      }\r\n\r\n      if (!checked && index >= 0) {\r\n        this.value.splice(index, 1);\r\n        this.valueObjRef.delete(leaf.value);\r\n        leaf.checked = false;\r\n      }\r\n\r\n      const orgNodeIndex = this.mapIndexes.get(leaf.value);\r\n      if (orgNodeIndex !== undefined) {\r\n        this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = leaf.checked;\r\n      }\r\n    }\r\n    // Nếu node là cha → cập nhật isExpanded\r\n    if (!isLeaf) {\r\n      node.checked = checked;\r\n      const orgNodeIndex = this.mapIndexes.get(node.value);\r\n      if (orgNodeIndex !== undefined) {\r\n        this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;\r\n        this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;\r\n      }\r\n    } else {\r\n      node.checked = checked;\r\n    }\r\n    this.writeValue(this.value);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  private _getLevel = (node: FlatTreeNodeModel) => node.level;\r\n\r\n  private _isExpandable = (node: FlatTreeNodeModel) => FlatTreeService.hasChild(node);\r\n\r\n  private _getChildren = (node: FlatTreeNodeModel): Observable<FlatTreeNodeModel[]> => observableOf(node.children ? node.children : []);\r\n}\r\n","import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {UtilsService} from '../../services/utils.service';\r\nimport {ApiService} from '../../services/api.service';\r\nimport {DialogImportFileConfigModel} from '../../models/components/dialog-import-file-config.model';\r\nimport {TranslateService} from \"@ngx-translate/core\";\r\n\r\n@Component({\r\n    selector: 'cva-dialog-import-file',\r\n    standalone: false,\r\n    template: `\r\n        <div>\r\n            <h2>{{'common.import.excel.' | translate}}</h2>\r\n            <div appDragDrop class=\"areaImportFile\" (onFileDropped)=\"onDropped($event)\"\r\n                 (click)=\"onClickChooseFile(inputFile)\">\r\n                <input class=\"d-zone\" type=\"file\"\r\n                       #inputFile\r\n                       (change)=\"onFileChange($event, inputFile)\">\r\n                <span>\r\n          <i class=\"fal fa-plus mr-2\"></i> {{'common.import.excel.drag.drop' | translate}}\r\n        </span>\r\n            </div>\r\n            <h4 style=\"width: 26rem\">\r\n                {{file?.name}}\r\n            </h4>\r\n            <div class=\"but\">\r\n                <button mat-button (click)=\"close()\" type=\"button\" class=\"primary outline\">\r\n                    {{'btnCancel' | translate}}\r\n                </button>\r\n                <button mat-button type=\"button\" (click)=\"onImport()\" class=\"primary\">\r\n                    {{'btnImport' | translate}}\r\n                </button>\r\n                <button mat-button *ngIf=\"errorImportExcelUrl\" (click)=\"downloadErrorFile()\" type=\"button\"\r\n                        class=\"danger\">\r\n                    {{'common.import.excel.download.error.file' | translate}}\r\n                </button>\r\n            </div>\r\n\r\n            <div class=\"download-template\"><p>{{'common.import.excel.not.have.template' | translate}}</p><span\r\n                    (click)=\"downloadTemplate()\">{{'common.import.excel.download.template' | translate}}</span></div>\r\n        </div>    `,\r\n    styles: [`\r\n        :host {\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            align-items: center;\r\n            padding: 0 !important;\r\n        }\r\n\r\n        h2, h4 {\r\n            margin: 2rem;\r\n            text-align: center;\r\n        }\r\n\r\n        p {\r\n            display: inline;\r\n            text-align: center;\r\n        }\r\n\r\n        span {\r\n            color: #3366FF;\r\n            cursor: pointer;\r\n            text-align: center;\r\n        }\r\n\r\n        .d-zone {\r\n            display: none;\r\n        }\r\n\r\n        .areaImportFile {\r\n            width: 26rem;\r\n            height: 10rem;\r\n            border: 1px dashed #3366FF;\r\n            background: white !important;\r\n            box-sizing: border-box;\r\n            border-radius: 10px;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            margin: 2rem;\r\n            cursor: pointer;\r\n        }\r\n\r\n        .but {\r\n            margin: 2rem;\r\n            display: flex;\r\n            justify-content: center;\r\n        }\r\n\r\n        .download-template {\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n        }\r\n    `]\r\n})\r\nexport class CvaDialogImportFileComponent implements OnInit {\r\n    file?: File;\r\n    errorImportExcelUrl = '';\r\n    @ViewChild('inputFile', {static: false}) inputFileRef?: ElementRef<any>;\r\n\r\n    constructor(private matDialogRef: MatDialogRef<CvaDialogImportFileComponent>,\r\n                private apiService: ApiService,\r\n                private utilsService: UtilsService,\r\n                private translateService: TranslateService,\r\n                @Inject(MAT_DIALOG_DATA) public data: DialogImportFileConfigModel) {\r\n    }\r\n\r\n    ngOnInit(): void {\r\n    }\r\n\r\n    onDropped(fileList: FileList) {\r\n        this.handleFile(fileList);\r\n    }\r\n\r\n    onFileChange(event: any, inputRef: HTMLInputElement) {\r\n        const files = event.target.files;\r\n        this.handleFile(files);\r\n    }\r\n\r\n    downloadTemplate() {\r\n        if (this.data.downloadTemplateFunc)\r\n            this.data.downloadTemplateFunc();\r\n    }\r\n\r\n    onClickChooseFile(inputFile: HTMLInputElement) {\r\n        inputFile.click();\r\n    }\r\n\r\n    close() {\r\n        this.matDialogRef.close();\r\n    }\r\n\r\n    onImport() {\r\n        this.utilsService.showConfirmDialog(this.data.confirmMsgKey, [])\r\n            .afterClosed().subscribe((value: any) => {\r\n            if (value.value) {\r\n                if (this.data.importFunc) {\r\n                    this.data.importFunc(this.file).subscribe((data: any) => {\r\n                            if (data) {\r\n                                this.utilsService.onSuccessFunc(this.data.successMsgKey);\r\n                                this.matDialogRef.close({done: true, kpis: data});\r\n                            }\r\n                        },\r\n                        errorExcelUrl => {\r\n                            this.utilsService.showErrorToarst(this.data.errorMsgKey);\r\n                            this.errorImportExcelUrl = errorExcelUrl;\r\n                            if (this.inputFileRef) {\r\n                                (this.inputFileRef.nativeElement as any).value = '';\r\n                            }\r\n                            this.file = undefined;\r\n                        });\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    downloadErrorFile() {\r\n        if (this.data.downloadErrorFile) {\r\n            this.data.downloadErrorFile(this.errorImportExcelUrl);\r\n        } else {\r\n            this.onDownloadErrorFile();\r\n        }\r\n    }\r\n\r\n    onDownloadErrorFile() {\r\n        this.apiService.saveFile('/files/' + this.errorImportExcelUrl, null, {});\r\n    }\r\n\r\n    private handleFile(files: FileList) {\r\n        if (files && files.length) {\r\n            const file = files[0];\r\n            const af = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel'];\r\n            if (file.type === af[0]) {\r\n                this.file = file;\r\n            } else {\r\n                this.translateService.get(\"common.only.allow.excel\")\r\n                    .subscribe(msg => {\r\n                        this.utilsService.showWarningToarst(msg);\r\n                    });\r\n            }\r\n        }\r\n    }\r\n}\r\n","import {\r\n    Component,\r\n    EventEmitter,\r\n    Injector,\r\n    Input,\r\n    OnInit,\r\n    Optional,\r\n    Output,\r\n    Self,\r\n    ViewEncapsulation\r\n} from '@angular/core';\r\nimport {AbstractControl, ControlValueAccessor, FormControl, NgControl, ValidationErrors} from '@angular/forms';\r\nimport {QuillEditorComponent, QuillModules} from 'ngx-quill';\r\nimport {ValidatorService} from '../services/validator.service';\r\n\r\n@Component({\r\n    selector: 'cva-quill-editor',\r\n    standalone: false,\r\n    template: `\r\n        <!-- css labelOutside trong base.theme-->\r\n        <div class=\"cva-quill-editor\"\r\n             [ngClass]=\"{'labelOutside': !!isLabelOutside,\r\n            'float_label': !!isFloatLabel && !isLabelOutside,\r\n            'text_area': !!this.multiline}\"\r\n             fxLayout=\"row\" fxLayout.lt-sm=\"row wrap\">\r\n            <mat-label *ngIf=\"isLabelOutside\" class=\"label_width\"\r\n                       fxLayout=\"column\" fxFlex=\"auto\" fxFlex.lt-md=\"100%\">\r\n                <div class=\"label\">\r\n                    <div>\r\n                        {{(label ? label : '') | translate}}<span\r\n                            class=\"required-label-outside\">{{!!required ? '*' : ''}}</span>\r\n                    </div>\r\n                </div>\r\n            </mat-label>\r\n            <div class=\"editor\" fxLayout=\"column\" fxFlex=\"100%\">\r\n                <quill-editor [(ngModel)]=\"textValue\"\r\n                              [modules]=\"quillModule\"\r\n                              [disabled]=\"disabled\"\r\n                              [readOnly]=\"readonly\"\r\n                              [maxLength]=\"maxLength\"\r\n                              [minLength]=\"minLength\"\r\n                              [placeholder]=\"placeholder | translate\"\r\n                              [format]=\"format\"\r\n                              (onFocus)=\"onFocus($event)\"\r\n                              (onBlur)=\"onBlur($event)\"\r\n                              #quill [ngStyle]=\"quillStyle\"\r\n                              (onContentChanged)=\"onChangeContent(quill, $event)\"\r\n                              fxFlex=\"100%\" fxFlex.lt-md=\"100%\"\r\n                ></quill-editor>\r\n                <div id=\"counter\"\r\n                     *ngIf=\"!(disabled || readonly) && onFocusStatus && !!maxLength\">{{textCounter + '/' + maxLength}}</div>\r\n                <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(control)\">{{hint | translate}}</mat-hint>\r\n                <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(control)\">\r\n                    {{NsValidator.getErrorMessageV1(control, errorMessages).msg | translate: NsValidator.getErrorMessageV1(control, errorMessages).params}}\r\n                </mat-hint>\r\n            </div>\r\n        </div>\r\n    `,\r\n    styles: [`\r\n        .cva-quill-editor {\r\n            margin-bottom: 1rem;\r\n        }\r\n\r\n        .cva-quill-editor .required-label-outside {\r\n            color: red;\r\n        }\r\n\r\n        .cva-quill-editor .ql-container.ql-snow {\r\n            height: 100px;\r\n            overflow-y: auto;\r\n        }\r\n\r\n        .cva-quill-editor #counter {\r\n            border: 1px solid #ccc;\r\n            border-width: 0px 1px 1px 1px;\r\n            color: #aaa;\r\n            padding: 5px 15px;\r\n            text-align: right;\r\n        }\r\n\r\n        .cva-quill-editor quill-editor {\r\n            margin-bottom: 0 !important;\r\n            word-break: break-word;\r\n        }\r\n    `],\r\n    encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CvaQuillEditorComponent implements ControlValueAccessor, OnInit {\r\n    @Input() label = '';\r\n    @Input() name = '';\r\n    @Input() placeholder = '';\r\n    @Input() hint = '';\r\n    @Input() required = false;\r\n    @Input() disabled = false;\r\n    @Input() text = '';\r\n    textCounter = 0;\r\n    @Input() quillStyle: any;\r\n    // nếu cho vào base thì define rõ ràng, default check valid only text\r\n    @Input() quillModule: QuillModules | undefined = undefined;\r\n    @Input() onlyCheckTextValidation = true;\r\n\r\n    @Input() format?: 'object' | 'html' | 'text' | 'json' = 'html';\r\n    @Input() pattern: any = null;\r\n    @Input() readonly = false;\r\n    @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n    @Output() onChange = new EventEmitter<string>();\r\n    @Input() multiline = false;\r\n    @Input() isLabelOutside = false;\r\n    @Input() isFloatLabel = true;\r\n    @Input() minLength: number | undefined;\r\n    @Input() maxLength: number | undefined;\r\n    @Input() maxSize: number | undefined; // don vi byte\r\n    @Input() minSize: number | undefined; // don vi byte\r\n    onFocusStatus = false;\r\n    /* hiển thị suffix thay maxlength */\r\n    @Input() maxLengthDisplay: number | undefined;\r\n\r\n    // Chỉ bằng false khi trong NsSmartTable thôi nhé @@\r\n    @Input() isFormControl = true;\r\n    @Input() formatFunc: any;\r\n    control: AbstractControl | undefined = undefined;\r\n\r\n    get NsValidator() {\r\n        return ValidatorService;\r\n    }\r\n\r\n    constructor(private injector: Injector,\r\n                @Self() @Optional() ngControl: NgControl) {\r\n        if (ngControl) {\r\n            // Hành động này thay cho provide: NG_VALUE_ACCESSOR và gắn ControlValueAccessor này vào parent FormControl\r\n            ngControl.valueAccessor = this;\r\n        }\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.callValidator();\r\n    }\r\n\r\n    get textValue() {\r\n        return this.text;\r\n    }\r\n\r\n    set textValue(val) {\r\n        this.writeValue(val);\r\n    }\r\n\r\n    customLengthValidator = (control: AbstractControl): ValidationErrors | null => {\r\n        let length = 0;\r\n        if (!this.onlyCheckTextValidation) {\r\n            const description = control?.value ? control?.value : '';\r\n            length = new Blob([description]).size;\r\n        } else {\r\n            length = this.textCounter;\r\n        }\r\n\r\n        if (!!this.minLength && length < this.minLength) {\r\n            return {\r\n                minlength: {\r\n                    min: this.minLength,\r\n                    actual: length\r\n                }\r\n            }\r\n        }\r\n        if (!!this.maxLength && length > this.maxLength) {\r\n            return {\r\n                maxlength: {\r\n                    max: this.maxLength,\r\n                    actual: length\r\n                }\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n\r\n    customSizeValidator = (control: AbstractControl): ValidationErrors | null => {\r\n        let size = 0;\r\n        const description = control?.value ? control?.value : '';\r\n        size = new Blob([description]).size;\r\n\r\n        if (!!this.minSize && size < this.minSize) {\r\n            return {\r\n                minsize: {\r\n                    min: this.minSize,\r\n                    actual: size\r\n                }\r\n            }\r\n        }\r\n        if (!!this.maxSize && size > this.maxSize) {\r\n            return {\r\n                maxsize: {\r\n                    max: this.maxSize,\r\n                    actual: size\r\n                }\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n\r\n    callValidator() {\r\n        const ngControl = this.injector.get(NgControl);\r\n        // Nếu parent FormControl khởi tạo xong và formControl chưa có giá trị lưu\r\n        if (ngControl && !this.control) {\r\n            // Nếu là NsSmartTable thì phải tự new FormControl còn không thì cứ hóng parent FormControl về ^^\r\n            if (this.isFormControl) {\r\n                this.control = ngControl.control ? ngControl.control : undefined;\r\n            } else {\r\n                this.control = new FormControl();\r\n            }\r\n            // Hành động này gắn validator vào this.formControl\r\n            // - Nếu this.formControl là parent FormControl thì sẽ show error lên FormGroup\r\n            // - Nếu this.formControl là new FormControl thì sẽ quét QueryList để check {errors}\r\n            if (this.control) {\r\n                if (this.control.validator) {\r\n                    this.control.setValidators([...ValidatorService.generateNsInputValidators({\r\n                        required: this.required,\r\n                        minLength: undefined,\r\n                        maxLength: undefined,\r\n                        pattern: this.pattern,\r\n                    }), this.control.validator, this.customLengthValidator, this.customSizeValidator]);\r\n                } else {\r\n                    this.control.setValidators([...ValidatorService.generateNsInputValidators({\r\n                        required: this.required,\r\n                        minLength: undefined,\r\n                        maxLength: undefined,\r\n                        pattern: this.pattern,\r\n                    }), this.customLengthValidator, this.customSizeValidator]);\r\n                }\r\n            }\r\n        }\r\n        if (this.control) {\r\n            // Nếu this.formControl thuộc NsSmartTable thì setValue lại\r\n            if (!this.isFormControl) {\r\n                this.control.setValue(this.text);\r\n            }\r\n            // Nếu là parent FormControl rồi thì kệ\r\n            this.control.updateValueAndValidity();\r\n\r\n\r\n        }\r\n    }\r\n\r\n    propagateChange = (_: any) => {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    };\r\n\r\n    /**\r\n     * Write a new value to the element.\r\n     */\r\n    writeValue(obj: any): void {\r\n        this.text = obj;\r\n        this.propagateChange(this.text);\r\n        this.callValidator();\r\n        this.onChange.emit(this.text);\r\n    }\r\n\r\n    /**\r\n     * Set the function to be called\r\n     * when the formControl receives a change event.\r\n     */\r\n    registerOnChange(fn: any) {\r\n        this.propagateChange = fn;\r\n    }\r\n\r\n    /**\r\n     * Set the function to be called\r\n     * when the formControl receives a touch event.\r\n     */\r\n    registerOnTouched() {\r\n        /*NON-EMPTY FOR COMPILE*/\r\n    }\r\n\r\n    displayLength() {\r\n        if (this.maxLength === null || this.maxLength === undefined) {\r\n            return this.maxLengthDisplay ? this.maxLengthDisplay : '';\r\n        }\r\n        return (this.textValue?.length ? this.textValue.length : 0) + '/' + this.getMaxLength();\r\n    }\r\n\r\n    getMaxLength() {\r\n        return this.maxLengthDisplay ? this.maxLengthDisplay : this.maxLength;\r\n\r\n    }\r\n\r\n    onFocus(event: any) {\r\n        this.onFocusStatus = true;\r\n    }\r\n\r\n    onBlur(event: any) {\r\n        if (this.onFocusStatus) {\r\n            this.onFocusStatus = false;\r\n        }\r\n    }\r\n\r\n    onChangeContent(quill: QuillEditorComponent | any, text: any) {\r\n        if (!text.html) {\r\n            this.textCounter = 0;\r\n        } else {\r\n            this.textCounter = quill.editorElem.innerText.length;\r\n        }\r\n        this.writeValue(this.text);\r\n    }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  HttpEvent,\r\n  HttpHandler,\r\n  HttpInterceptor,\r\n  HttpRequest,\r\n  HttpResponse,\r\n  HttpResponseBase,\r\n} from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { JsogService } from 'jsog-typescript';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JsogHttpInterceptor implements HttpInterceptor {\r\n\r\n  constructor(private jSog: JsogService) {\r\n  }\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    if (request.body && !(request.body instanceof FormData)) {\r\n      request = request.clone({ body: this.jSog.serialize(request.body) });\r\n    }\r\n    return next.handle(request).pipe(\r\n      map((event: HttpEvent<any>) => {\r\n        if (!(event instanceof HttpResponse || HttpResponseBase.prototype.isPrototypeOf(event))) {\r\n          return event;\r\n        }\r\n        let response = event as HttpResponse<any>;\r\n        if (!response.body || typeof (response.body) !== 'object' || (response.body instanceof Blob)) {\r\n          return response;\r\n        }\r\n        response = response.clone({ body: this.jSog.deserializeArray(response.body, BaseModel) });\r\n        return response;\r\n      }),\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { LoaderService } from './loader.service';\r\nimport { catchError, finalize, map } from 'rxjs/operators';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n\r\n  private requests: HttpRequest<any>[] = [];\r\n\r\n  constructor(public loaderService: LoaderService) {\r\n  }\r\n\r\n  removeRequest(req: HttpRequest<any>) {\r\n    const i = this.requests.indexOf(req);\r\n    if (i >= 0) {\r\n      this.requests.splice(i, 1);\r\n    }\r\n    this.loaderService.isLoading.next(this.requests.length > 0);\r\n  }\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    if (!request.headers.get('is_image') && !request.headers.get('is_live_searching')) {\r\n      this.requests.push(request);\r\n      this.loaderService.isLoading.next(true);\r\n    } else {\r\n      request = request.clone({\r\n        headers: request.headers.delete('is_image').delete('is_live_searching'),\r\n      });\r\n    }\r\n    return next.handle(request).pipe(\r\n      map((event: HttpEvent<any>) => {\r\n        if (event instanceof HttpResponse) {\r\n          this.removeRequest(request);\r\n        }\r\n        return event;\r\n      }),\r\n      catchError(err => {\r\n        console.error('Error: ', err);\r\n        this.removeRequest(request);\r\n        return throwError(err);\r\n      }),\r\n      finalize(() => {\r\n        this.removeRequest(request);\r\n      }),\r\n    );\r\n  }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\nimport { OAuth2AuthenticationDto } from '../models/oauth/oAuth2AuthenticationDto';\r\nimport { AuthoritiesService } from './authorities.service';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { ApiService } from './api.service';\r\nimport { HttpParams } from '@angular/common/http';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthoritiesResolverService implements Resolve<Observable<OAuth2AuthenticationDto>> {\r\n\r\n  config: NiceComponentLibraryConfig;\r\n\r\n  constructor(protected authoritiesService: AuthoritiesService,\r\n              protected injector: Injector,\r\n              protected apiService: ApiService) {\r\n    this.config = injector.get(InjectTokenNextSolutionsConfig);\r\n  }\r\n\r\n  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):\r\n    Observable<OAuth2AuthenticationDto>\r\n    | Observable<Observable<OAuth2AuthenticationDto>>\r\n    | Promise<Observable<OAuth2AuthenticationDto>> {\r\n    return !!this.authoritiesService.me && !!this.authoritiesService.me.userAuthentication ? of(this.authoritiesService.me)\r\n      : this.apiService.get<OAuth2AuthenticationDto>('/user/me', new HttpParams(), this.config.BASE_AUTHORIZATION_URL);\r\n  }\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SingletonTranslateService {\r\n  currentLanguage = new BehaviorSubject<string>('');\r\n  currentLanguage$ = this.currentLanguage.asObservable();\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { BidiModule } from '@angular/cdk/bidi';\r\nimport { ObserversModule } from '@angular/cdk/observers';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { MatCommonModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { ScrollingModule as ExperimentalScrollingModule } from '@angular/cdk-experimental/scrolling';\r\nimport { CdkTree, CdkTreeModule, CdkTreeNode } from '@angular/cdk/tree';\r\n\r\nconst MATERIAL_MODULES = [\r\n  MatAutocompleteModule,\r\n  MatButtonModule,\r\n  MatButtonToggleModule,\r\n  MatCardModule,\r\n  MatChipsModule,\r\n  MatCheckboxModule,\r\n  MatDatepickerModule,\r\n  MatTableModule,\r\n  MatDialogModule,\r\n  MatFormFieldModule,\r\n  MatGridListModule,\r\n  MatIconModule,\r\n  MatInputModule,\r\n  MatListModule,\r\n  MatMenuModule,\r\n  MatPaginatorModule,\r\n  MatProgressBarModule,\r\n  MatProgressSpinnerModule,\r\n  MatRippleModule,\r\n  MatSelectModule,\r\n  MatSidenavModule,\r\n  MatSliderModule,\r\n  MatSlideToggleModule,\r\n  MatSnackBarModule,\r\n  MatSortModule,\r\n  MatStepperModule,\r\n  MatTabsModule,\r\n  MatToolbarModule,\r\n  MatTooltipModule,\r\n  MatTreeModule,\r\n  OverlayModule,\r\n  PortalModule,\r\n  BidiModule,\r\n  A11yModule,\r\n  MatCommonModule,\r\n  ObserversModule,\r\n  MatRadioModule,\r\n  ScrollingModule,\r\n  ExperimentalScrollingModule,\r\n  CdkTreeModule,\r\n];\r\n\r\n@NgModule({\r\n  imports: MATERIAL_MODULES,\r\n  exports: MATERIAL_MODULES,\r\n  providers: [\r\n    CdkTree,\r\n    CdkTreeNode,\r\n  ],\r\n})\r\nexport class AngularMaterialModule {\r\n}\r\n","import { CUSTOM_ELEMENTS_SCHEMA, ModuleWithProviders, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CvaTableComponent } from '../components/table/cva-table.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AngularMaterialModule } from './angular-material.module';\r\nimport { CvaMultiSelectAutocomplete } from '../components/cva-multi-select-autocomplete';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CvaInputComponent } from '../components/cva-input.component';\r\nimport { CvaCounterInputComponent } from '../components/cva-counter-input.component';\r\nimport { CvaDatePickerComponent } from '../components/datepicker/cva-date-picker.component';\r\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { ApiService } from '../services/api.service';\r\nimport { DateUtilService } from '../services/date-util.service';\r\nimport { FormStateService } from '../services/form-state.service';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CvaMultiUploadComponent } from '../components/upload/cva-multi-upload.component';\r\nimport { DragDropDirective } from '../directives/drag-drop.directive';\r\nimport { CvaBreadcrumbComponent } from '../components/cva-breadcrumb.component';\r\nimport { LoaderService } from '../services/loader.service';\r\nimport { CvaLoaderComponent } from '../components/cva-loader.component';\r\nimport { ValidatorService } from '../services/validator.service';\r\nimport { CvaSmartTableComponent } from '../components/table/cva-smart-table.component';\r\nimport { CvaTreeComponent } from '../components/cva-tree.component';\r\nimport { CvaCustomDialogComponent } from '../components/cva-custom-dialog.component';\r\nimport { CvaRadiobuttonComponent } from '../components/cva-radiobutton.component';\r\nimport { AuthoritiesService } from '../services/authorities.service';\r\nimport { AuthoritiesResolverService } from '../services/authorities.resolver.service';\r\nimport { StylePaginatorDirective } from '../directives/style-paginator.directive';\r\nimport { SingletonTranslateService } from '../services/singleton.translate.service';\r\nimport { CvaRangeDatePickerComponent } from '../components/datepicker/cva-range-date-picker.component';\r\nimport { SecureImgPipe } from '../pipes/secure.pipe';\r\nimport { CvaFlatTreeComponent } from '../components/tree/cva-flat-tree.component';\r\nimport { CvaHeaderExpandButtonComponent } from '../components/table/cva-header-expand-button.component';\r\nimport { PatternDirective } from '../directives/pattern.directive';\r\nimport { FormatInputDirective } from '../directives/format-input.directive';\r\nimport { CvaUploadFileComponent } from '../components/upload/cva-upload-file.component';\r\nimport { CvaMultiUploadImgComponent } from '../components/upload/cva-multi-upload-img.component';\r\nimport { BaseAddEditComponent } from '../components/base/base-add-edit.component';\r\nimport { CvaDialogImportFileComponent } from '../components/upload/cva-dialog-import-file.component';\r\nimport { CvaFlatTreeNodeRightComponent } from '../components/tree/cva-flat-tree-node-right.component';\r\nimport { CvaFlatTreeNodeLeftComponent } from '../components/tree/cva-flat-tree-node-left.component';\r\nimport { BaseSearchComponent } from '../components/base/base-search.component';\r\nimport { CvaQuillEditorComponent } from '../components/cva-quill-editor.component';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { CvaLiveSearchingComponent } from '../components/cva-live-searching.component';\r\n\r\n// @dynamic\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n    AngularMaterialModule,\r\n    RouterModule.forChild([]),\r\n    TranslateModule.forChild(),\r\n    QuillModule.forRoot(),\r\n    FlexLayoutModule,\r\n  ],\r\n  declarations: [\r\n    CvaTableComponent,\r\n    CvaSmartTableComponent,\r\n    CvaInputComponent,\r\n    CvaCounterInputComponent,\r\n    CvaDatePickerComponent,\r\n    CvaRangeDatePickerComponent,\r\n    CvaMultiSelectAutocomplete,\r\n    DragDropDirective,\r\n    CvaMultiUploadComponent,\r\n    CvaUploadFileComponent,\r\n    CvaMultiUploadImgComponent,\r\n    CvaBreadcrumbComponent,\r\n    CvaLoaderComponent,\r\n    CvaTreeComponent,\r\n    CvaCustomDialogComponent,\r\n    CvaRadiobuttonComponent,\r\n    StylePaginatorDirective,\r\n    SecureImgPipe,\r\n    CvaFlatTreeComponent,\r\n    CvaFlatTreeNodeLeftComponent,\r\n    CvaFlatTreeNodeRightComponent,\r\n    CvaHeaderExpandButtonComponent,\r\n    PatternDirective,\r\n    FormatInputDirective,\r\n    CvaDialogImportFileComponent,\r\n    BaseSearchComponent,\r\n    BaseAddEditComponent,\r\n    CvaQuillEditorComponent,\r\n    CvaLiveSearchingComponent,\r\n  ],\r\n  exports: [\r\n    CvaTableComponent,\r\n    CvaSmartTableComponent,\r\n    CvaInputComponent,\r\n    CvaCounterInputComponent,\r\n    CvaDatePickerComponent,\r\n    CvaRangeDatePickerComponent,\r\n    CvaMultiSelectAutocomplete,\r\n    DragDropDirective,\r\n    CvaMultiUploadComponent,\r\n    CvaUploadFileComponent,\r\n    CvaMultiUploadImgComponent,\r\n    CvaBreadcrumbComponent,\r\n    CvaLoaderComponent,\r\n    CvaTreeComponent,\r\n    CvaCustomDialogComponent,\r\n    CvaRadiobuttonComponent,\r\n    StylePaginatorDirective,\r\n    CvaFlatTreeComponent,\r\n    SecureImgPipe,\r\n    PatternDirective,\r\n    FormatInputDirective,\r\n    CvaFlatTreeNodeLeftComponent,\r\n    CvaFlatTreeNodeRightComponent,\r\n    CvaDialogImportFileComponent,\r\n    BaseSearchComponent,\r\n    BaseAddEditComponent,\r\n    CvaQuillEditorComponent,\r\n    CvaLiveSearchingComponent,\r\n  ],\r\n  schemas: [\r\n    NO_ERRORS_SCHEMA,\r\n    CUSTOM_ELEMENTS_SCHEMA,\r\n  ],\r\n})\r\nexport class NiceComponentLibraryModule {\r\n  static forRoot(config?: { data: NiceComponentLibraryConfig }): ModuleWithProviders<NiceComponentLibraryModule> {\r\n    return {\r\n      ngModule: NiceComponentLibraryModule,\r\n      providers: [\r\n        ApiService, DateUtilService, FormStateService, UtilsService, LoaderService, ValidatorService,\r\n        AuthoritiesService, AuthoritiesResolverService, SingletonTranslateService,\r\n        { provide: InjectTokenNextSolutionsConfig, useValue: config ? config.data : {} }],\r\n    };\r\n  }\r\n}\r\n","/*\r\n* Các cháu này là base class\r\n* */\r\nimport { NavigatorModel } from './models/navigator.model';\r\nimport { ButtonClickEvent } from './models/button-click.event';\r\nimport { ButtonModel } from './models/components/button.model';\r\nimport { CheckboxModel } from './models/components/checkbox.model';\r\nimport { ColumnModel } from './models/components/column.model';\r\nimport { ColumnTypeEnum } from './enums/column-type.enum';\r\nimport { AlignEnum } from './enums/align.enum';\r\nimport { IconTypeEnum } from './enums/icon-type.enum';\r\nimport { MenuModel } from './models/menu.model';\r\nimport { OAuth2AuthenticationDto } from './models/oauth/oAuth2AuthenticationDto';\r\nimport { Authority } from './models/oauth/authority';\r\nimport { TablePagingResponseModel } from './models/components/table-paging-response.model';\r\nimport { TablePagingRequestModel } from './models/components/table-paging-request.model';\r\nimport { RoleModel } from './models/role.model';\r\nimport { SelectModel } from './models/components/select.model';\r\nimport { UIState } from './models/ui.state';\r\nimport { BaseModel } from './models/base.model';\r\nimport { FileTypeEnum } from './enums/file-type.enum';\r\nimport { UploadModel } from './models/components/upload.model';\r\nimport { BreadCrumbModel } from './models/components/bread-crumb.model';\r\nimport { FlatTreeModel } from './models/components/flat-tree.model';\r\nimport { TableFooterModel } from './models/components/table-footer.model';\r\nimport { RangeDatePickerModel } from './models/components/range-date-picker.model';\r\nimport { FlatTreeConfigModel } from './models/components/flat-tree-config.model';\r\nimport { FlatTreeNodeModel } from './models/components/flat-tree-node.model';\r\nimport { DialogTypeEnum } from './enums/dialog-type.enum';\r\nimport { CustomDialogDataConfigModel } from './models/components/custom-dialog-data-config.model';\r\nimport { Principal } from './models/oauth/principal';\r\nimport { CvaUploadFileComponent } from './components/upload/cva-upload-file.component';\r\nimport { CvaMultiUploadImgComponent } from './components/upload/cva-multi-upload-img.component';\r\nimport { DialogImportFileConfigModel } from './models/components/dialog-import-file-config.model';\r\nimport { PermissionModel } from './models/permission.model';\r\nimport { ActionTypeEnum } from './enums/action-type.enum';\r\nimport { BaseStatusEnum } from './enums/base-status.enum';\r\n\r\nexport {\r\n  NavigatorModel,\r\n  ButtonClickEvent,\r\n  ButtonModel,\r\n  CheckboxModel,\r\n  ColumnModel,\r\n  ColumnTypeEnum,\r\n  TableFooterModel,\r\n  MenuModel,\r\n  OAuth2AuthenticationDto,\r\n  Principal,\r\n  Authority,\r\n  TablePagingResponseModel,\r\n  TablePagingRequestModel,\r\n  RoleModel,\r\n  SelectModel,\r\n  UIState,\r\n  BaseModel,\r\n  AlignEnum,\r\n  FileTypeEnum,\r\n  UploadModel,\r\n  BreadCrumbModel,\r\n  FlatTreeModel,\r\n  IconTypeEnum,\r\n  RangeDatePickerModel,\r\n  FlatTreeNodeModel,\r\n  FlatTreeConfigModel,\r\n  CustomDialogDataConfigModel,\r\n  DialogTypeEnum,\r\n  DialogImportFileConfigModel,\r\n  PermissionModel,\r\n  ActionTypeEnum,\r\n  BaseStatusEnum,\r\n};\r\n\r\n/*\r\n* Các cháu này là dạng Injectable vs Component vs extend class for Component\r\n* Khai báo providedIn: 'root' nên có thể dùng luôn ko cần khai báo Provides trong NgModule\r\n* */\r\nexport { BaseTableComponent } from './components/base/base-table.component';\r\nexport { BaseSearchComponent } from './components/base/base-search.component';\r\nexport { BaseAddEditComponent } from './components/base/base-add-edit.component';\r\n\r\nexport { MultiTranslateHttpLoader } from './services/MultiTranslateHttpLoader';\r\n\r\nexport { CvaTableComponent } from './components/table/cva-table.component';\r\nexport { CvaSmartTableComponent } from './components/table/cva-smart-table.component';\r\nexport { CvaInputComponent } from './components/cva-input.component';\r\nexport { CvaCounterInputComponent } from './components/cva-counter-input.component';\r\nexport { CvaDatePickerComponent } from './components/datepicker/cva-date-picker.component';\r\nexport { CvaRangeDatePickerComponent } from './components/datepicker/cva-range-date-picker.component';\r\nexport { CvaMultiSelectAutocomplete } from './components/cva-multi-select-autocomplete';\r\nexport { CvaMultiUploadComponent } from './components/upload/cva-multi-upload.component';\r\nexport { CvaUploadFileComponent } from './components/upload/cva-upload-file.component';\r\nexport { CvaMultiUploadImgComponent } from './components/upload/cva-multi-upload-img.component';\r\nexport { CvaBreadcrumbComponent } from './components/cva-breadcrumb.component';\r\nexport { CvaLoaderComponent } from './components/cva-loader.component';\r\nexport { CvaTreeComponent } from './components/cva-tree.component';\r\nexport { CvaCustomDialogComponent } from './components/cva-custom-dialog.component';\r\nexport { CvaRadiobuttonComponent } from './components/cva-radiobutton.component';\r\nexport { CvaFlatTreeComponent } from './components/tree/cva-flat-tree.component';\r\nexport { CvaFlatTreeNodeLeftComponent } from './components/tree/cva-flat-tree-node-left.component';\r\nexport { CvaFlatTreeNodeRightComponent } from './components/tree/cva-flat-tree-node-right.component';\r\nexport { CvaDialogImportFileComponent } from './components/upload/cva-dialog-import-file.component';\r\nexport { CvaQuillEditorComponent } from './components/cva-quill-editor.component';\r\nexport { CvaLiveSearchingComponent } from './components/cva-live-searching.component';\r\n\r\nexport * from './services/api.service';\r\nexport * from './services/date-util.service';\r\nexport * from './services/form-state.service';\r\nexport * from './services/utils.service';\r\nexport * from './services/jsog.http.interceptor';\r\nexport * from './services/loader.service';\r\nexport * from './services/loader.interceptor';\r\nexport * from './services/validator.service';\r\nexport * from './services/authorities.service';\r\nexport * from './services/authorities.resolver.service';\r\nexport * from './services/singleton.translate.service';\r\nexport * from './services/table.service';\r\n\r\nexport * from './directives/drag-drop.directive';\r\nexport * from './directives/format-input.directive';\r\nexport * from './directives/pattern.directive';\r\nexport * from './directives/style-paginator.directive';\r\n\r\nexport * from './pipes/secure.pipe';\r\n\r\nexport * from './modules/nice-component-library.module';\r\nexport * from './models/nice-component-library.config';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i3","i5","i7","i1","i2","i2.ApiService","i3.UtilsService","i4.FormStateService","i6.AuthoritiesService","i4.UtilsService","i5.AuthoritiesService","i6","i8","i9","i10","i1.LoaderService","i11","i12","i13","i14.CvaCounterInputComponent","i15.StylePaginatorDirective","i16.CvaHeaderExpandButtonComponent","i17","i18.SecureImgPipe","i8.PatternDirective","i9.FormatInputDirective","i1.DateUtilService","i11.CvaInputComponent","i12.CvaCounterInputComponent","i13.CvaDatePickerComponent","i14.CvaMultiSelectAutocomplete","i15.CvaLiveSearchingComponent","i16","i17.SecureImgPipe","i7.DragDropDirective","i10.DragDropDirective","i12.SecureImgPipe","i4.CvaUploadFileComponent","i9.CvaMultiSelectAutocomplete","observableOf","i10.CvaFlatTreeNodeLeftComponent","i11.CvaFlatTreeNodeRightComponent","i1.AuthoritiesService","ExperimentalScrollingModule"],"mappings":"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"}