@c10t/nice-component-library 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/components/table/cva-table-header-cell.component.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/pipes/safe.html.pipe.ts","../../NiceComponentLibrary/src/components/table/cva-table.component.ts","../../NiceComponentLibrary/src/directives/numeric-input-format.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 mouseEvent?: MouseEvent;\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 INPUT_CURRENCY = 'INPUT_CURRENCY',\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 title: (e: any) => string = (e) => `${e}`;\r\n cell: (e: any) => string = (e) => `${e}`;\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 rowSpan?: number = 1;\r\n colSpan?: number = 1;\r\n pattern?: string;\r\n patternFilter?: string;\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 iconClass?: string = '';\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, event.mouseEvent);\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 STYLE_DISABLE: 'TEXT' | 'CONTROL';\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 }\r\n if (error1 === '0') {\r\n this.showErrorToarst('error.serverNotResponse');\r\n } else {\r\n this.showError(error1);\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\nimport {MatCheckboxChange} from \"@angular/material/checkbox\";\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 getRequired(column: ColumnModel): boolean {\r\n return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);\r\n }\r\n\r\n static getHeaderColumns(row: ColumnModel[], index: number, buttons: ButtonModel[]) {\r\n let displayColumn = row.map(c => c.columnDef);\r\n if (index === 0 && buttons && buttons.length > 0) {\r\n displayColumn = displayColumn.concat(buttons.map(b => b.columnDef));\r\n }\r\n return displayColumn;\r\n }\r\n\r\n static toggleSelectAll(values: any[],$event: { $event: MatCheckboxChange, columnChange: ColumnModel }): boolean {\r\n const checked = $event.$event.checked;\r\n values.forEach(v => {\r\n v.checked = checked;\r\n });\r\n if ($event.columnChange.onHeaderCellValueChange) {\r\n $event.columnChange.onHeaderCellValueChange(checked);\r\n }\r\n return checked;\r\n }\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 | undefined, 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 {\r\n AfterViewChecked,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input, OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\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-header-cell',\r\n standalone: false,\r\n template: `\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 <div class=\"header-text-area\">\r\n {{ TableService.displayHeaderName(column, moduleName) | translate }}\r\n <span style=\"color: red\">{{ TableService.getRequired(column) ? '*' : '' }}</span>\r\n </div>\r\n <mat-checkbox\r\n *ngIf=\"TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox\"\r\n color=\"primary\" class=\"box-select-all margin-right-5\"\r\n [(ngModel)]=\"selectAllChecked\"\r\n (change)=\"onSelectAllChange($event)\">\r\n </mat-checkbox>\r\n </div>\r\n `,\r\n})\r\nexport class CvaTableHeaderCellComponent implements OnChanges {\r\n protected readonly TableService = TableService;\r\n protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n\r\n @Input() moduleName: string = '';\r\n @Input() column: ColumnModel = new ColumnModel();\r\n @Input() selectAllChecked: boolean = false;\r\n @Output() changeSelectAll = new EventEmitter<{$event: MatCheckboxChange, columnChange: ColumnModel}>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if('selectAllChecked' in changes) {\r\n this.selectAllChecked = changes['selectAllChecked'].currentValue;\r\n }\r\n }\r\n\r\n onSelectAllChange($event: MatCheckboxChange){\r\n this.changeSelectAll.emit({$event, columnChange: this.column});\r\n }\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 | null): boolean {\r\n if (!control || !control.dirty) {\r\n return false;\r\n }\r\n return control.invalid || !!control.errors;\r\n }\r\n\r\n static getErrorMessage(control: AbstractControl | undefined | null, 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 | null, 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) {\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) {\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 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 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 return validationFns;\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 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 return (control: AbstractControl): ValidationErrors | null => {\r\n let errors: any = null;\r\n if (!control) {\r\n return errors;\r\n }\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 const columnType: ColumnTypeEnum = TableService.getColumnType(column, row);\r\n if (columnType === ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE) {\r\n if (ValidatorService.getRequired(column)) {\r\n tempControl.setValidators(Validators.required);\r\n }\r\n } else if (columnType === 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 (columnType === ColumnTypeEnum.INPUT_CURRENCY) {\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 (columnType === 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 (columnType === 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: column.pattern ? column.pattern : undefined,\r\n }));\r\n } else if (columnType === ColumnTypeEnum.LIVE_SEARCHING) {\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 (columnType === 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 (columnType === ColumnTypeEnum.INPUT_COUNTER || columnType === ColumnTypeEnum.INPUT_CURRENCY) {\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 return errors;\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 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\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { CvaFormControl } from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"counterValue\">\r\n {{ counterValue }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaCounterInputComponent implements ControlValueAccessor, CvaFormControl, 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 | null = null;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private injector: Injector, @Self() @Optional() ngControl: NgControl) {\r\n this.config = injector.get(InjectTokenNextSolutionsConfig);\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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\r\n *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 && col.columnType!==ColumnTypes.BUTTON\">\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 {Pipe, PipeTransform, SecurityContext} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: false,\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n constructor(private readonly sanitizer: DomSanitizer) {\r\n }\r\n\r\n transform(value: unknown): SafeHtml {\r\n const html = typeof value === 'string' ? value : '';\r\n\r\n // 1) Strip/neutralize dangerous content (scripts, event handlers, javascript: urls, etc.)\r\n const sanitized = this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\r\n\r\n // 2) Convert sanitized string into SafeHtml for binding to [innerHTML]\r\n return this.sanitizer.bypassSecurityTrustHtml(sanitized);\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 [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\"\r\n *ngIf=\"onDisplayHeaderCell(column)\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)\">\r\n </cva-table-header-cell>\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 <div title=\"{{column.title(result)}}\" *ngSwitchCase=\"ColumnTypeEnum.HTML\"\r\n class=\"{{TableService.getColumnClassName(column, result)}} viewData\"\r\n fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n [innerHTML]=\"column.cell(result) | safeHtml\">\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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, $event)\"\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}}\"\r\n [ngSwitch]=\"TableService.getIconType(column.button)\">\r\n <mat-icon *ngSwitchCase=\"IconTypeEnum.MATERIAL_ICON\">{{ column.button.icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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)\"\r\n alt=\"\"/>\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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 <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\" [attr.rowspan]=\"superHeaders.length + 1\">\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=\"IconTypeEnum.MATERIAL_ICON\">{{ $any(btnHeader).icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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\">\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=\"IconTypeEnum.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.FONT_AWESOME\" class=\"{{button.icon}}\"></i>\r\n </button>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders\">\r\n <ng-container *ngFor=\"let column of row\" matColumnDef=\"{{column.columnDef}}\">\r\n <ng-container *ngIf=\"onDisplayHeaderCell(column)\">\r\n <th mat-header-cell *matHeaderCellDef\r\n [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)\">\r\n </cva-table-header-cell>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders; let rowIndex = index\">\r\n <tr mat-header-row *matHeaderRowDef=\"TableService.getHeaderColumns(row, rowIndex, buttons)\"></tr>\r\n </ng-container>\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(columns, superHeaders.length, buttons)\"></tr>\r\n <tr mat-row\r\n *matRowDef=\"let result; columns: TableService.getHeaderColumns(columns, 0, buttons); 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 protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n protected readonly AlignEnum = AlignEnum;\r\n protected readonly IconTypeEnum = IconTypeEnum;\r\n protected readonly TableService = TableService;\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 @Input() superHeaders: ColumnModel[][] = [];\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 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, mouseEvent?: MouseEvent) {\r\n const buttonClickEvent = new ButtonClickEvent(action, result);\r\n buttonClickEvent.mouseEvent = mouseEvent;\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 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.updateHeaderButtonColspan();\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 updateHeaderButtonColspan() {\r\n this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);\r\n }\r\n\r\n onChangeGoToPageNumber($event: number): void {\r\n if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event) || this.goToPageNumber < 1) {\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 { formatNumber } from '@angular/common';\r\n\r\n\r\nexport class NumericInputFormat {\r\n locale = 'en';\r\n decimalMarker = '.';\r\n\r\n constructor() {\r\n }\r\n\r\n unformatValue(value: any) {\r\n const regExp = new RegExp(`[^\\\\d${this.decimalMarker}-]`, 'g');\r\n // Separate value on before and after decimal marker\r\n const [integer, decimal] = value.replace(regExp, '').split(this.decimalMarker);\r\n\r\n // Send non localized value, with dot as decimalMarker to API\r\n return decimal ? integer.concat('.', decimal) : integer;\r\n }\r\n\r\n formatValue(value: string | number | null | undefined): string {\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n const raw: string = value.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 10, useGrouping: false });\r\n const [thousandSeparator, decimalMarker] = formatNumber(1000.99, this.locale).replace(/\\d/g, '');\r\n this.decimalMarker = decimalMarker;\r\n\r\n // Here value should always come with . as decimal marker thus any other behavior is bug\r\n const [integer, decimal] = raw.split('.');\r\n // Group every three elements, and add thousandSeparator after them\r\n const v = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\r\n return typeof decimal !== 'undefined' ? v + '.' + decimal : v;\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 $regPatternString = '';\r\n $regPattern = new RegExp('');\r\n inputElement: HTMLElement;\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 constructor(public el: ElementRef) {\r\n this.inputElement = el.nativeElement;\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 // @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 // }\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 { 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 { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { AlignEnum } from '../enums/align.enum';\r\nimport { CvaFormControl } from './cva-form-control';\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\r\n class=\"required-label-outside\">{{ required ? '*' : '' }}</span>\r\n </div>\r\n </div>\r\n </mat-label>\r\n <mat-form-field *ngIf=\"isShowControl()\"\r\n 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 [style.text-align]=\"alignText\"\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=\"{{disabled}}\"\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 [style.text-align]=\"alignText\"\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=\"{{disabled}}\"\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 <button mat-icon-button color=\"warn\" class=\"btnTextClear\" matSuffix (click)=\"onClear()\" [disabled]=\"disabled\"\r\n type=\"button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(formControl)\">{{ hint | translate }}</mat-hint>\r\n <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"text ? text : ''\">\r\n {{ text ? text : '' }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaInputComponent implements ControlValueAccessor, CvaFormControl, OnInit {\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() 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() alignText: AlignEnum = AlignEnum.LEFT;\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 formControl: AbstractControl | null = null;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\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 NsValidator() {\r\n return ValidatorService;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 if (this.formControl.validator) {\r\n this.formControl.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.formControl.validator]);\r\n } else {\r\n this.formControl.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.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.text);\r\n }\r\n // Nếu là parent FormControl rồi thì kệ\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 /**\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\r\n }\r\n\r\n onClear() {\r\n this.writeValue(null);\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, ViewChild } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { MatDatepicker } from '@angular/material/datepicker';\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\nimport { CvaFormControl } from '../cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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 }}\r\n </mat-label>\r\n <input matInput [matDatepicker]=\"xDatepicker\"\r\n [placeholder]=\"placeholder|translate\"\r\n [(ngModel)]=\"datepickerValue\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"true\"\r\n [required]=\"checkRequired(required)\"\r\n [title]=\"title ? title : ''\"\r\n [min]=\"getMinDate()\" [max]=\"getMaxDate()\"\r\n (click)=\"openDatepicker($event)\">\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\" type=\"button\">\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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"title ? title : ''\">\r\n {{ title ? title : '' }}\r\n </div>\r\n </div>\r\n </ng-container>\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, CvaFormControl, 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 | null = null;\r\n @ViewChild('xDatepicker') datepicker: MatDatepicker<any> | undefined;\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 NsValidator() {\r\n return ValidatorService;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isShowControl()) {\r\n this.callValidator();\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 : null;\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 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 if (this.isShowControl()) {\r\n this.propagateChange(out);\r\n this.callValidator();\r\n this.onChange.emit(out ? out : '');\r\n }\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\r\n }\r\n\r\n openDatepicker(event: MouseEvent) {\r\n if (!this.disabled && this.datepicker) {\r\n event.stopPropagation();\r\n this.datepicker.open();\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 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\nimport {InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig} from '../models/nice-component-library.config';\r\nimport {CvaFormControl} from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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=\"{{titleString|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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"titleString | translate\">\r\n {{ displayString | translate }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaMultiSelectAutocomplete implements ControlValueAccessor, CvaFormControl, 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 | null = null;\r\n filteredOptions: SelectModel[] = [];\r\n selectAllChecked = false;\r\n labelCount: number = 1;\r\n @ViewChild(CdkVirtualScrollViewport, {static: false}) cdkVirtualScrollViewPort: CdkVirtualScrollViewport | undefined;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private translateService: TranslateService, private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\r\n this.config = injector.get(InjectTokenNextSolutionsConfig);\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 _titleString = '';\r\n\r\n get titleString() {\r\n return this._titleString;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 const {_displayString, _titleString} = this.onDisplayString();\r\n this._displayString = _displayString;\r\n this._titleString = _titleString;\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(): { _displayString: string, _titleString: string } {\r\n let _displayString = '';\r\n const titles: string[] = [];\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 for (let i = 0; i < this.value.length; i++) {\r\n const displayOption = this.options.filter(\r\n option => option.value === this.value[i],\r\n )[0];\r\n if (displayOption) {\r\n titles.push(this.isTree ? this.onDisplayTreeData(displayOption.displayValue, true) : displayOption.displayValue);\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 titles.push(_displayString);\r\n }\r\n }\r\n const _titleString = titles.join(', ');\r\n return {_displayString, _titleString};\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 } else {\r\n // Khi đóng mat-select thì clear searchInput\r\n if (this.searchInputRef?.nativeElement) {\r\n this.searchInputRef.nativeElement.value = '';\r\n this.filterItem('');\r\n }\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { CvaFormControl } from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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=\"{{disabled}}\" />\r\n <button mat-icon-button color=\"warn\" class=\"btnClear\" matSuffix (click)=\"onClear()\"\r\n *ngIf=\"!loading && !disabled\">\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(formControl)\">{{ hint | translate }}</mat-hint>\r\n <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"textControl.value\">\r\n {{ textControl.value }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaLiveSearchingComponent implements ControlValueAccessor, CvaFormControl, 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() 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 formControl: AbstractControl | null = null;\r\n textControl = new FormControl('');\r\n filteredOptions: any[] = [];\r\n selected: any;\r\n loading = false;\r\n config: NiceComponentLibraryConfig;\r\n private searchSub?: Subscription;\r\n\r\n constructor(private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\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 NsValidator() {\r\n return ValidatorService;\r\n }\r\n\r\n getFormControl(): AbstractControl | null {\r\n return this.formControl;\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.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 : null;\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 if (this.formControl.validator) {\r\n this.formControl.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n required: this.required,\r\n }), this.formControl.validator]);\r\n } else {\r\n this.formControl.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n required: this.required,\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.selected);\r\n }\r\n // Nếu là parent FormControl rồi thì kệ\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 /**\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.filteredOptions.length = 0;\r\n this.filteredOptions = [];\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 && this.searchFn && !!obj) {\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 ?? null;\r\n this.textControl.setValue(matched ? matched[this.displayKey] : '', { emitEvent: false });\r\n this.callValidator();\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 ? this.selected[sourceKey] : '';\r\n }\r\n }\r\n if (this.isFormControl && this.formControl?.parent) {\r\n for (const targetKey in this.mappingConfig) {\r\n const sourceKey = this.mappingConfig[targetKey];\r\n const formControl = this.formControl.parent.get(targetKey);\r\n if (formControl) formControl.setValue(!!this.selected ? this.selected[sourceKey] : '');\r\n }\r\n }\r\n this.propagateChange(!!this.selected ? this.selected[this.displayKey] : '');\r\n this.onChange.emit(!!this.selected ? this.selected[this.displayKey] : '');\r\n }\r\n\r\n onClear() {\r\n this.writeValue('');\r\n }\r\n\r\n isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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 QueryList,\r\n Self,\r\n ViewChild,\r\n ViewChildren,\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\nimport {NumericInputFormat} from '../../directives/numeric-input-format';\r\nimport {CvaFormControl} from '../cva-form-control';\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 [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\"\r\n *ngIf=\"onDisplayHeaderCell(column)\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(value, $event)\">\r\n </cva-table-header-cell>\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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.LINK\"\r\n fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n title=\"{{column.title(result)}}\">\r\n <a [routerLink]=\"[column.link ? 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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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)\"\r\n alt=\"\"/>\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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 type=\"button\"\r\n color=\"{{column.button.color}}\"\r\n [ngClass]=\"column.button.className\"\r\n (click)=\"onClick(column.button.click, result, i, $event)\"\r\n disabled=\"{{column.button && 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=\"IconTypeEnum.MATERIAL_ICON\">{{ column.button.icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.FONT_AWESOME\" class=\"{{column.button.icon}}\"></i>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <cva-counter-input *ngSwitchCase=\"ColumnTypeEnum.INPUT_COUNTER\"\r\n #cellComponentRef\r\n class=\"inputNumber\" #nsCounterInput\r\n [placeholder]=\"moduleName + '.table.placeholder.input.counter'\"\r\n [isFormControl]=\"false\"\r\n [alignNumber]=\"getAlign(column)\"\r\n [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n [value]=\"result[column.columnDef]\"\r\n [required]=\"TableService.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=\"ColumnTypeEnum.INPUT\"\r\n #cellComponentRef\r\n [placeholder]=\"moduleName + '.table.placeholder.input'\"\r\n [isFormControl]=\"false\"\r\n [alignText]=\"getAlign(column)\"\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]=\"TableService.getRequired(column)\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n (onChange)=\"onCellValueChange(result, column, $event);\"\r\n [pattern]=\"column.pattern ? column.pattern : undefined\"\r\n [patternFilter]=\"column.patternFilter ? column.patternFilter : ''\">\r\n </cva-input>\r\n <cva-input *ngSwitchCase=\"ColumnTypeEnum.INPUT_CURRENCY\"\r\n #cellComponentRef\r\n [placeholder]=\"moduleName + '.table.placeholder.input.currency'\"\r\n [isFormControl]=\"false\"\r\n [alignText]=\"getAlign(column)\"\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]=\"TableService.getRequired(column)\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n (onChange)=\"onCellValueChange(result, column, $event);\"\r\n [pattern]=\"column.pattern ? column.pattern : (getIsDecimal(column) ? '^\\\\d{0,15}(\\\\.\\\\d*)?$' : '^\\\\d{0,15}$')\"\r\n [patternFilter]=\"column.patternFilter ? column.patternFilter : ''\"\r\n [formatFunc]=\"formatFunc\">\r\n </cva-input>\r\n <cva-date-picker *ngSwitchCase=\"ColumnTypeEnum.DATE_PICKER\"\r\n #cellComponentRef\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]=\"TableService.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 #cellComponentRef\r\n *ngSwitchCase=\"ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE\"\r\n class=\"multiSelectAutocomplete\"\r\n [placeholder]=\"moduleName + '.table.placeholder.multi.select.autocomplete'\"\r\n [isTree]=\"column.isTree??false\"\r\n [value]=\"result[column.columnDef]\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n [required]=\"TableService.getRequired(column)\"\r\n [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n [multiple]=\"column.isMultipleSelect??false\"\r\n [options]=\"column.optionValues ? 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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.LIVE_SEARCHING\"\r\n #cellComponentRef\r\n [isFormControl]=\"false\" [required]=\"TableService.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\" [attr.rowspan]=\"superHeaders.length + 1\">\r\n <ng-container *ngIf=\"TableService.getButtonHeader(button) as btnHeader\">\r\n <button mat-icon-button type=\"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=\"IconTypeEnum.MATERIAL_ICON\">{{ $any(btnHeader).icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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 type=\"button\"\r\n color=\"{{button.color}}\"\r\n [ngClass]=\"button.className\"\r\n (click)=\"onClick(button.click, cell, i)\"\r\n disabled=\"{{button && 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=\"IconTypeEnum.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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\r\n <ng-container *ngFor=\"let row of superHeaders\">\r\n <ng-container *ngFor=\"let column of row\" matColumnDef=\"{{column.columnDef}}\">\r\n <ng-container *ngIf=\"onDisplayHeaderCell(column)\">\r\n <th mat-header-cell *matHeaderCellDef\r\n [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(value, $event)\">\r\n </cva-table-header-cell>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders; let rowIndex = index\">\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader\"></tr>\r\n </ng-container>\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader\"></tr>\r\n <tr mat-row *matRowDef=\"let result; columns: TableService.getHeaderColumns(columns, 0, buttons);\"\r\n 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 protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n protected readonly IconTypeEnum = IconTypeEnum;\r\n protected readonly AlignEnum = AlignEnum;\r\n protected readonly TableService = TableService;\r\n\r\n @ViewChildren('cellComponentRef') cellComponents!: QueryList<CvaFormControl>;\r\n @Input() moduleName: string = '';\r\n @Input() columns: ColumnModel[] = [];\r\n @Input() buttons: ButtonModel[] = [];\r\n @Input() superHeaders: ColumnModel[][] = [];\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 formatFunc: NumericInputFormat = new NumericInputFormat();\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 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 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, mouseEvent?: MouseEvent) {\r\n const buttonClickEvent = new ButtonClickEvent(action, result, index);\r\n buttonClickEvent.mouseEvent = mouseEvent;\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 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 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 this.formControl.statusChanges.subscribe(status => {\r\n if (this.formControl?.touched && this.formControl?.dirty) {\r\n this.markAllControlsAsDirty();\r\n }\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 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 // 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 getAlign(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 markAllControlsAsDirty() {\r\n if (this.cellComponents) {\r\n this.cellComponents.forEach(cell => {\r\n const control = cell.getFormControl();\r\n if (control) {\r\n control.markAsDirty();\r\n control.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self, ViewChild } 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\nimport { CvaFormControl } from '../cva-form-control';\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 (click)=\"openRangePicker($event)\">\r\n <input matEndDate\r\n [(ngModel)]=\"toDateValue\"\r\n readOnly=\"true\"\r\n [placeholder]=\"placeholderToDate|translate\"\r\n (click)=\"openRangePicker($event)\">\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 type=\"button\">\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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValiator.getErrorMessageV1(formControl, errorMessages).params }}\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, CvaFormControl, 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 | null = null;\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 @ViewChild('picker') picker: MatDateRangePicker<any> | undefined;\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 NsValiator() {\r\n return ValidatorService;\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 this.value.toDate = '';\r\n this.writeValue(this.value);\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 console.log('writeValue', obj);\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.fromDate = this.prepareWriteValueData(obj.fromDate);\r\n this.value.toDate = this.prepareWriteValueData(obj.toDate);\r\n\r\n this.createTitle();\r\n if (this.defaultFromDate && this.getDisabled(this.disabledFromDate)) {\r\n this.value.fromDate = new Date(this.defaultFromDate.replace('Z', ''));\r\n }\r\n this.propagateChange(this.value);\r\n this.callValidator();\r\n this.onChange.emit(this.value);\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 : null;\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 openRangePicker(event: MouseEvent) {\r\n if (!this.getDisabled(this.disabledAll) && this.picker) {\r\n event.stopPropagation();\r\n this.picker.open();\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]=\"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>{{ !!placeholder ? placeholder : '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) }}\r\n </mat-error>\r\n <mat-error *ngIf=\"typeError!==null\">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}\r\n </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() placeholder: 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 && this.files.length === 1){\r\n this.files.length = 0;\r\n }\r\n this.files.push(obj);\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 target.value = '';\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 <i *ngIf=\"node.iconClass\" class=\"{{ node.iconClass }} icon-left\"></i>\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 && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}\"></i>\r\n </button>\r\n <span (click)=\"onParentNodeClick.emit()\">\r\n <i *ngIf=\"node.iconClass\" class=\"{{ node.iconClass }} icon-left\"></i>\r\n {{ node.displayValue }}\r\n </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 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\r\n 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%'}}\"\r\n 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\r\n [ngStyle]=\"{height: itemSize + 'px', padding: '0px 0px 0px '+ (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 }}{{ '(' + getTotalSelected(fullDataDataSource.data) + ')' }}</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\r\n [ngStyle]=\"{height: itemSize + 'px', padding: '0px 0px 0px '+ (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)=\"toggleNodeCheck(node, false)\"\r\n (deSelectParentNode)=\"toggleNodeCheck(node, false)\">\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, 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 /** height of tree view */\r\n @Input() viewHeight: number = 300; // px\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 @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n @Input() fullDatasource: FlatTreeNodeModel[] = [];\r\n searchText = '';\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 @Input() 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 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 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 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 (obj) {\r\n this.value = obj;\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.expandTreeDataSource(this.treeControl, 'isExpanded');\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 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.isExpanded = treeControl.isExpanded(node);\r\n orgNode.isFilterExpanded = treeControl.isExpanded(node);\r\n }\r\n this.setDataSourceOrigin();\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().trim())\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().trim())\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 // Lấy danh sách node đang hiển thị (filtered)\r\n const visibleNodes = isLeaf\r\n ? [node]\r\n : [...this.getAllChildNode(this.treeControl, node).filter(n => n.display), node];\r\n for (const leaf of visibleNodes) {\r\n if (!leaf.display || this.checkDisabledNode(leaf)) continue;\r\n const index = this.value.indexOf(leaf.value);\r\n if (checked && index < 0) {\r\n this.value.push(leaf.value);\r\n }\r\n if (!checked && index >= 0) {\r\n this.value.splice(index, 1);\r\n }\r\n }\r\n if (isLeaf) {\r\n const parentNode = this.getRootNode(node);\r\n if (parentNode && FlatTreeService.hasChild(parentNode)) {\r\n const allChild = this.getAllChildNode(this.fullDataTreeControl, parentNode);\r\n // Kiểm tra còn node con nào trong value không\r\n const hasChildInValue = allChild.some(child => this.value.includes(child.value));\r\n if (!hasChildInValue) {\r\n const parentIndex = this.value.indexOf(parentNode.value);\r\n if (parentIndex >= 0) {\r\n this.value.splice(parentIndex, 1);\r\n }\r\n }\r\n }\r\n }\r\n // Gọi writeValue để cập nhật cho FormControl\r\n this.writeValue(this.value);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n getTotalSelected(nodes: FlatTreeNodeModel[]): number {\r\n let count = 0;\r\n for (const node of nodes) {\r\n const isLeaf = !FlatTreeService.hasChild(node);\r\n if (isLeaf) {\r\n if (this.value.includes(node.value)) {\r\n count += 1;\r\n }\r\n } else if (node.children && node.children.length > 0) {\r\n const childChecked = this.getTotalSelected(node.children);\r\n // Nếu tất cả các con được checked đồng nghĩa cha được checked thì mới cộng\r\n if (childChecked === node.children.length) {\r\n count += 1;\r\n }\r\n count += childChecked;\r\n }\r\n }\r\n return count;\r\n }\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]=\"disabled\"\r\n [maxLength]=\"maxLength??999999999\"\r\n [minLength]=\"minLength??0\"\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 && onFocusStatus && !!maxLength\">{{ textCounter + '/' + maxLength }}\r\n </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() 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 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 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 ngOnInit(): void {\r\n this.callValidator();\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\nimport {CvaTableHeaderCellComponent} from \"../components/table/cva-table-header-cell.component\";\r\nimport {SafeHtmlPipe} from \"../pipes/safe.html.pipe\";\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 CvaTableHeaderCellComponent,\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 SafeHtmlPipe,\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 SafeHtmlPipe,\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\nexport * from './directives/numeric-input-format';\r\n\r\nexport * from './pipes/secure.pipe';\r\nexport * from './pipes/safe.html.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","i8","i1","i2","i2.ApiService","i3.UtilsService","i4.FormStateService","i6.AuthoritiesService","i4.UtilsService","i5.AuthoritiesService","i6","i9","i10","i1.LoaderService","i11","i12","i13","i14.CvaTableHeaderCellComponent","i15.CvaCounterInputComponent","i16.StylePaginatorDirective","i17.CvaHeaderExpandButtonComponent","i18","i19.SecureImgPipe","i20.SafeHtmlPipe","i10.PatternDirective","i11.FormatInputDirective","i1.DateUtilService","i11.CvaTableHeaderCellComponent","i12.CvaInputComponent","i13.CvaCounterInputComponent","i14.CvaDatePickerComponent","i15.CvaMultiSelectAutocomplete","i16.CvaLiveSearchingComponent","i17","i18.SecureImgPipe","i7.DragDropDirective","i10.DragDropDirective","i12.SecureImgPipe","i4.CvaUploadFileComponent","i9.CvaMultiSelectAutocomplete","observableOf","i10.CvaFlatTreeNodeLeftComponent","i11.CvaFlatTreeNodeRightComponent","i1.AuthoritiesService","ExperimentalScrollingModule"],"mappings":"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"}
|
|
1
|
+
{"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/components/table/cva-table-header-cell.component.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/pipes/safe.html.pipe.ts","../../NiceComponentLibrary/src/components/table/cva-table.component.ts","../../NiceComponentLibrary/src/directives/numeric-input-format.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 mouseEvent?: MouseEvent;\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 INPUT_CURRENCY = 'INPUT_CURRENCY',\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 title: (e: any) => string = (e) => `${e}`;\r\n cell: (e: any) => string = (e) => `${e}`;\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 rowSpan?: number = 1;\r\n colSpan?: number = 1;\r\n pattern?: string;\r\n patternFilter?: string;\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 iconClass?: string = '';\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, event.mouseEvent);\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 STYLE_DISABLE: 'TEXT' | 'CONTROL';\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 }\r\n if (error1 === '0') {\r\n this.showErrorToarst('error.serverNotResponse');\r\n } else {\r\n this.showError(error1);\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\nimport {MatCheckboxChange} from \"@angular/material/checkbox\";\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 getRequired(column: ColumnModel): boolean {\r\n return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);\r\n }\r\n\r\n static getHeaderColumns(row: ColumnModel[], index: number, buttons: ButtonModel[]) {\r\n let displayColumn = row.map(c => c.columnDef);\r\n if (index === 0 && buttons && buttons.length > 0) {\r\n displayColumn = displayColumn.concat(buttons.map(b => b.columnDef));\r\n }\r\n return displayColumn;\r\n }\r\n\r\n static toggleSelectAll(values: any[],$event: { $event: MatCheckboxChange, columnChange: ColumnModel }): boolean {\r\n const checked = $event.$event.checked;\r\n values.forEach(v => {\r\n v.checked = checked;\r\n });\r\n if ($event.columnChange.onHeaderCellValueChange) {\r\n $event.columnChange.onHeaderCellValueChange(checked);\r\n }\r\n return checked;\r\n }\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 | undefined, 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 {\r\n AfterViewChecked,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input, OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\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-header-cell',\r\n standalone: false,\r\n template: `\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 <div class=\"header-text-area\">\r\n {{ TableService.displayHeaderName(column, moduleName) | translate }}\r\n <span style=\"color: red\">{{ TableService.getRequired(column) ? '*' : '' }}</span>\r\n </div>\r\n <mat-checkbox\r\n *ngIf=\"TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox\"\r\n color=\"primary\" class=\"box-select-all margin-right-5\"\r\n [(ngModel)]=\"selectAllChecked\"\r\n (change)=\"onSelectAllChange($event)\">\r\n </mat-checkbox>\r\n </div>\r\n `,\r\n})\r\nexport class CvaTableHeaderCellComponent implements OnChanges {\r\n protected readonly TableService = TableService;\r\n protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n\r\n @Input() moduleName: string = '';\r\n @Input() column: ColumnModel = new ColumnModel();\r\n @Input() selectAllChecked: boolean = false;\r\n @Output() changeSelectAll = new EventEmitter<{$event: MatCheckboxChange, columnChange: ColumnModel}>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if('selectAllChecked' in changes) {\r\n this.selectAllChecked = changes['selectAllChecked'].currentValue;\r\n }\r\n }\r\n\r\n onSelectAllChange($event: MatCheckboxChange){\r\n this.changeSelectAll.emit({$event, columnChange: this.column});\r\n }\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 | null): boolean {\r\n if (!control || !control.dirty) {\r\n return false;\r\n }\r\n return control.invalid || !!control.errors;\r\n }\r\n\r\n static getErrorMessage(control: AbstractControl | undefined | null, 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 | null, 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) {\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) {\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 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 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 return validationFns;\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 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 return (control: AbstractControl): ValidationErrors | null => {\r\n let errors: any = null;\r\n if (!control) {\r\n return errors;\r\n }\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 const columnType: ColumnTypeEnum = TableService.getColumnType(column, row);\r\n if (columnType === ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE) {\r\n if (ValidatorService.getRequired(column)) {\r\n tempControl.setValidators(Validators.required);\r\n }\r\n } else if (columnType === 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 (columnType === ColumnTypeEnum.INPUT_CURRENCY) {\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 (columnType === 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 (columnType === 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: column.pattern ? column.pattern : undefined,\r\n }));\r\n } else if (columnType === ColumnTypeEnum.LIVE_SEARCHING) {\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 (columnType === 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 (columnType === ColumnTypeEnum.INPUT_COUNTER || columnType === ColumnTypeEnum.INPUT_CURRENCY) {\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 return errors;\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 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\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { CvaFormControl } from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"counterValue\">\r\n {{ counterValue }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaCounterInputComponent implements ControlValueAccessor, CvaFormControl, 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 | null = null;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private injector: Injector, @Self() @Optional() ngControl: NgControl) {\r\n this.config = injector.get(InjectTokenNextSolutionsConfig);\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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\r\n *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 && col.columnType!==ColumnTypes.BUTTON\">\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 {Pipe, PipeTransform, SecurityContext} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: false,\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n constructor(private readonly sanitizer: DomSanitizer) {\r\n }\r\n\r\n transform(value: unknown): SafeHtml {\r\n const html = typeof value === 'string' ? value : '';\r\n\r\n // 1) Strip/neutralize dangerous content (scripts, event handlers, javascript: urls, etc.)\r\n const sanitized = this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\r\n\r\n // 2) Convert sanitized string into SafeHtml for binding to [innerHTML]\r\n return this.sanitizer.bypassSecurityTrustHtml(sanitized);\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 [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\"\r\n *ngIf=\"onDisplayHeaderCell(column)\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)\">\r\n </cva-table-header-cell>\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 <div title=\"{{column.title(result)}}\" *ngSwitchCase=\"ColumnTypeEnum.HTML\"\r\n class=\"{{TableService.getColumnClassName(column, result)}} viewData\"\r\n fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n [innerHTML]=\"column.cell(result) | safeHtml\">\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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, $event)\"\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}}\"\r\n [ngSwitch]=\"TableService.getIconType(column.button)\">\r\n <mat-icon *ngSwitchCase=\"IconTypeEnum.MATERIAL_ICON\">{{ column.button.icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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)\"\r\n alt=\"\"/>\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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 <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\" [attr.rowspan]=\"superHeaders.length + 1\">\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=\"IconTypeEnum.MATERIAL_ICON\">{{ $any(btnHeader).icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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\">\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=\"IconTypeEnum.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.FONT_AWESOME\" class=\"{{button.icon}}\"></i>\r\n </button>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders\">\r\n <ng-container *ngFor=\"let column of row\" matColumnDef=\"{{column.columnDef}}\">\r\n <ng-container *ngIf=\"onDisplayHeaderCell(column)\">\r\n <th mat-header-cell *matHeaderCellDef\r\n [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)\">\r\n </cva-table-header-cell>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders; let rowIndex = index\">\r\n <tr mat-header-row *matHeaderRowDef=\"TableService.getHeaderColumns(row, rowIndex, buttons)\"></tr>\r\n </ng-container>\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(columns, superHeaders.length, buttons)\"></tr>\r\n <tr mat-row\r\n *matRowDef=\"let result; columns: TableService.getHeaderColumns(columns, 0, buttons); 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 protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n protected readonly AlignEnum = AlignEnum;\r\n protected readonly IconTypeEnum = IconTypeEnum;\r\n protected readonly TableService = TableService;\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 @Input() superHeaders: ColumnModel[][] = [];\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 this.goToPageNumber = this.varPaging.pageNumber;\r\n }\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, mouseEvent?: MouseEvent) {\r\n const buttonClickEvent = new ButtonClickEvent(action, result);\r\n buttonClickEvent.mouseEvent = mouseEvent;\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 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.updateHeaderButtonColspan();\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 updateHeaderButtonColspan() {\r\n this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);\r\n }\r\n\r\n onChangeGoToPageNumber($event: number): void {\r\n if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event) || this.goToPageNumber < 1) {\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 { formatNumber } from '@angular/common';\r\n\r\n\r\nexport class NumericInputFormat {\r\n locale = 'en';\r\n decimalMarker = '.';\r\n\r\n constructor() {\r\n }\r\n\r\n unformatValue(value: any) {\r\n const regExp = new RegExp(`[^\\\\d${this.decimalMarker}-]`, 'g');\r\n // Separate value on before and after decimal marker\r\n const [integer, decimal] = value.replace(regExp, '').split(this.decimalMarker);\r\n\r\n // Send non localized value, with dot as decimalMarker to API\r\n return decimal ? integer.concat('.', decimal) : integer;\r\n }\r\n\r\n formatValue(value: string | number | null | undefined): string {\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n const raw: string = value.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 10, useGrouping: false });\r\n const [thousandSeparator, decimalMarker] = formatNumber(1000.99, this.locale).replace(/\\d/g, '');\r\n this.decimalMarker = decimalMarker;\r\n\r\n // Here value should always come with . as decimal marker thus any other behavior is bug\r\n const [integer, decimal] = raw.split('.');\r\n // Group every three elements, and add thousandSeparator after them\r\n const v = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\r\n return typeof decimal !== 'undefined' ? v + '.' + decimal : v;\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 $regPatternString = '';\r\n $regPattern = new RegExp('');\r\n inputElement: HTMLElement;\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 constructor(public el: ElementRef) {\r\n this.inputElement = el.nativeElement;\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 // @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 // }\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 { 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 { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { AlignEnum } from '../enums/align.enum';\r\nimport { CvaFormControl } from './cva-form-control';\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\r\n class=\"required-label-outside\">{{ required ? '*' : '' }}</span>\r\n </div>\r\n </div>\r\n </mat-label>\r\n <mat-form-field *ngIf=\"isShowControl()\"\r\n 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 [style.text-align]=\"alignText\"\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=\"{{disabled}}\"\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 [style.text-align]=\"alignText\"\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=\"{{disabled}}\"\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 <button mat-icon-button color=\"warn\" class=\"btnTextClear\" matSuffix (click)=\"onClear()\" [disabled]=\"disabled\"\r\n type=\"button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <mat-hint align=\"start\" *ngIf=\"!NsValidator.invalid(formControl)\">{{ hint | translate }}</mat-hint>\r\n <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"text ? text : ''\">\r\n {{ text ? text : '' }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaInputComponent implements ControlValueAccessor, CvaFormControl, OnInit {\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() 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() alignText: AlignEnum = AlignEnum.LEFT;\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 formControl: AbstractControl | null = null;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\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 NsValidator() {\r\n return ValidatorService;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 if (this.formControl.validator) {\r\n this.formControl.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.formControl.validator]);\r\n } else {\r\n this.formControl.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.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.text);\r\n }\r\n // Nếu là parent FormControl rồi thì kệ\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 /**\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\r\n }\r\n\r\n onClear() {\r\n this.writeValue(null);\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, ViewChild } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { MatDatepicker } from '@angular/material/datepicker';\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\nimport { CvaFormControl } from '../cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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 }}\r\n </mat-label>\r\n <input matInput [matDatepicker]=\"xDatepicker\"\r\n [placeholder]=\"placeholder|translate\"\r\n [(ngModel)]=\"datepickerValue\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"true\"\r\n [required]=\"checkRequired(required)\"\r\n [title]=\"title ? title : ''\"\r\n [min]=\"getMinDate()\" [max]=\"getMaxDate()\"\r\n (click)=\"openDatepicker($event)\">\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\" type=\"button\">\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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"title ? title : ''\">\r\n {{ title ? title : '' }}\r\n </div>\r\n </div>\r\n </ng-container>\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, CvaFormControl, 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 | null = null;\r\n @ViewChild('xDatepicker') datepicker: MatDatepicker<any> | undefined;\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 NsValidator() {\r\n return ValidatorService;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isShowControl()) {\r\n this.callValidator();\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 : null;\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 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 if (this.isShowControl()) {\r\n this.propagateChange(out);\r\n this.callValidator();\r\n this.onChange.emit(out ? out : '');\r\n }\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\r\n }\r\n\r\n openDatepicker(event: MouseEvent) {\r\n if (!this.disabled && this.datepicker) {\r\n event.stopPropagation();\r\n this.datepicker.open();\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 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\nimport {InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig} from '../models/nice-component-library.config';\r\nimport {CvaFormControl} from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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=\"{{titleString|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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"titleString | translate\">\r\n {{ displayString | translate }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaMultiSelectAutocomplete implements ControlValueAccessor, CvaFormControl, 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 | null = null;\r\n filteredOptions: SelectModel[] = [];\r\n selectAllChecked = false;\r\n labelCount: number = 1;\r\n @ViewChild(CdkVirtualScrollViewport, {static: false}) cdkVirtualScrollViewPort: CdkVirtualScrollViewport | undefined;\r\n config: NiceComponentLibraryConfig;\r\n\r\n constructor(private translateService: TranslateService, private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\r\n this.config = injector.get(InjectTokenNextSolutionsConfig);\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 _titleString = '';\r\n\r\n get titleString() {\r\n return this._titleString;\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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 : null;\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 const {_displayString, _titleString} = this.onDisplayString();\r\n this._displayString = _displayString;\r\n this._titleString = _titleString;\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(): { _displayString: string, _titleString: string } {\r\n let _displayString = '';\r\n const titles: string[] = [];\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 for (let i = 0; i < this.value.length; i++) {\r\n const displayOption = this.options.filter(\r\n option => option.value === this.value[i],\r\n )[0];\r\n if (displayOption) {\r\n titles.push(this.isTree ? this.onDisplayTreeData(displayOption.displayValue, true) : displayOption.displayValue);\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 titles.push(_displayString);\r\n }\r\n }\r\n const _titleString = titles.join(', ');\r\n return {_displayString, _titleString};\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 } else {\r\n // Khi đóng mat-select thì clear searchInput\r\n if (this.searchInputRef?.nativeElement) {\r\n this.searchInputRef.nativeElement.value = '';\r\n this.filterItem('');\r\n }\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 isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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\nimport { InjectTokenNextSolutionsConfig, NiceComponentLibraryConfig } from '../models/nice-component-library.config';\r\nimport { CvaFormControl } from './cva-form-control';\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 *ngIf=\"isShowControl()\"\r\n 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=\"{{disabled}}\" />\r\n <button mat-icon-button color=\"warn\" class=\"btnClear\" matSuffix (click)=\"onClear()\"\r\n *ngIf=\"!loading && !disabled\">\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(formControl)\">{{ hint | translate }}</mat-hint>\r\n <mat-hint style=\"color: red\" align=\"start\" *ngIf=\"NsValidator.invalid(formControl)\">\r\n {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}\r\n </mat-hint>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"!isShowControl()\">\r\n <div class=\"cva-style-disable-text\">\r\n <mat-label *ngIf=\"!isLabelOutside && isFloatLabel\">\r\n {{ (label ? label : placeholder) | translate }}\r\n </mat-label>\r\n <div [title]=\"textControl.value\">\r\n {{ textControl.value }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `,\r\n})\r\nexport class CvaLiveSearchingComponent implements ControlValueAccessor, CvaFormControl, 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() 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 formControl: AbstractControl | null = null;\r\n textControl = new FormControl('');\r\n filteredOptions: any[] = [];\r\n selected: any;\r\n loading = false;\r\n config: NiceComponentLibraryConfig;\r\n private searchSub?: Subscription;\r\n\r\n constructor(private injector: Injector,\r\n @Self() @Optional() ngControl: NgControl) {\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 NsValidator() {\r\n return ValidatorService;\r\n }\r\n\r\n getFormControl(): AbstractControl | null {\r\n return this.formControl;\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.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 : null;\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 if (this.formControl.validator) {\r\n this.formControl.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n required: this.required,\r\n }), this.formControl.validator]);\r\n } else {\r\n this.formControl.setValidators([...ValidatorService.generateNsAutocompleteValidators({\r\n required: this.required,\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.selected);\r\n }\r\n // Nếu là parent FormControl rồi thì kệ\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 /**\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.filteredOptions.length = 0;\r\n this.filteredOptions = [];\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 && this.searchFn && !!obj) {\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 ?? null;\r\n this.textControl.setValue(matched ? matched[this.displayKey] : '', { emitEvent: false });\r\n this.callValidator();\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 ? this.selected[sourceKey] : '';\r\n }\r\n }\r\n if (this.isFormControl && this.formControl?.parent) {\r\n for (const targetKey in this.mappingConfig) {\r\n const sourceKey = this.mappingConfig[targetKey];\r\n const formControl = this.formControl.parent.get(targetKey);\r\n if (formControl) formControl.setValue(!!this.selected ? this.selected[sourceKey] : '');\r\n }\r\n }\r\n this.propagateChange(!!this.selected ? this.selected[this.displayKey] : '');\r\n this.onChange.emit(!!this.selected ? this.selected[this.displayKey] : '');\r\n }\r\n\r\n onClear() {\r\n this.writeValue('');\r\n }\r\n\r\n isShowControl(): boolean {\r\n return !this.disabled || (this.disabled && this.config && this.config.STYLE_DISABLE === 'CONTROL');\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 QueryList,\r\n Self,\r\n ViewChild,\r\n ViewChildren,\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\nimport {NumericInputFormat} from '../../directives/numeric-input-format';\r\nimport {CvaFormControl} from '../cva-form-control';\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 [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\"\r\n *ngIf=\"onDisplayHeaderCell(column)\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(value, $event)\">\r\n </cva-table-header-cell>\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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.LINK\"\r\n fxLayout=\"row\" [fxLayoutAlign]=\"TableService.alignCellContent(column)\"\r\n title=\"{{column.title(result)}}\">\r\n <a [routerLink]=\"[column.link ? 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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.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)\"\r\n alt=\"\"/>\r\n </div>\r\n <ng-container *ngSwitchCase=\"ColumnTypeEnum.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 type=\"button\"\r\n color=\"{{column.button.color}}\"\r\n [ngClass]=\"column.button.className\"\r\n (click)=\"onClick(column.button.click, result, i, $event)\"\r\n disabled=\"{{column.button && 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=\"IconTypeEnum.MATERIAL_ICON\">{{ column.button.icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.FONT_AWESOME\" class=\"{{column.button.icon}}\"></i>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <cva-counter-input *ngSwitchCase=\"ColumnTypeEnum.INPUT_COUNTER\"\r\n #cellComponentRef\r\n class=\"inputNumber\" #nsCounterInput\r\n [placeholder]=\"moduleName + '.table.placeholder.input.counter'\"\r\n [isFormControl]=\"false\"\r\n [alignNumber]=\"getAlign(column)\"\r\n [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n [value]=\"result[column.columnDef]\"\r\n [required]=\"TableService.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=\"ColumnTypeEnum.INPUT\"\r\n #cellComponentRef\r\n [placeholder]=\"moduleName + '.table.placeholder.input'\"\r\n [isFormControl]=\"false\"\r\n [alignText]=\"getAlign(column)\"\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]=\"TableService.getRequired(column)\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n (onChange)=\"onCellValueChange(result, column, $event);\"\r\n [pattern]=\"column.pattern ? column.pattern : undefined\"\r\n [patternFilter]=\"column.patternFilter ? column.patternFilter : ''\">\r\n </cva-input>\r\n <cva-input *ngSwitchCase=\"ColumnTypeEnum.INPUT_CURRENCY\"\r\n #cellComponentRef\r\n [placeholder]=\"moduleName + '.table.placeholder.input.currency'\"\r\n [isFormControl]=\"false\"\r\n [alignText]=\"getAlign(column)\"\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]=\"TableService.getRequired(column)\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n (onChange)=\"onCellValueChange(result, column, $event);\"\r\n [pattern]=\"column.pattern ? column.pattern : (getIsDecimal(column) ? '^\\\\d{0,15}(\\\\.\\\\d*)?$' : '^\\\\d{0,15}$')\"\r\n [patternFilter]=\"column.patternFilter ? column.patternFilter : ''\"\r\n [formatFunc]=\"formatFunc\">\r\n </cva-input>\r\n <cva-date-picker *ngSwitchCase=\"ColumnTypeEnum.DATE_PICKER\"\r\n #cellComponentRef\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]=\"TableService.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 #cellComponentRef\r\n *ngSwitchCase=\"ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE\"\r\n class=\"multiSelectAutocomplete\"\r\n [placeholder]=\"moduleName + '.table.placeholder.multi.select.autocomplete'\"\r\n [isTree]=\"column.isTree??false\"\r\n [value]=\"result[column.columnDef]\"\r\n [errorMessages]=\"getErrorMessageMap(column)\"\r\n [required]=\"TableService.getRequired(column)\"\r\n [disabled]=\"column.disabled ? column.disabled(result) : false\"\r\n [multiple]=\"column.isMultipleSelect??false\"\r\n [options]=\"column.optionValues ? 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=\"ColumnTypeEnum.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=\"ColumnTypeEnum.LIVE_SEARCHING\"\r\n #cellComponentRef\r\n [isFormControl]=\"false\" [required]=\"TableService.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\" [attr.rowspan]=\"superHeaders.length + 1\">\r\n <ng-container *ngIf=\"TableService.getButtonHeader(button) as btnHeader\">\r\n <button mat-icon-button type=\"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=\"IconTypeEnum.MATERIAL_ICON\">{{ $any(btnHeader).icon }}\r\n </mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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 type=\"button\"\r\n color=\"{{button.color}}\"\r\n [ngClass]=\"button.className\"\r\n (click)=\"onClick(button.click, cell, i)\"\r\n disabled=\"{{button && 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=\"IconTypeEnum.MATERIAL_ICON\">{{ button.icon }}</mat-icon>\r\n <i *ngSwitchCase=\"IconTypeEnum.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\r\n <ng-container *ngFor=\"let row of superHeaders\">\r\n <ng-container *ngFor=\"let column of row\" matColumnDef=\"{{column.columnDef}}\">\r\n <ng-container *ngIf=\"onDisplayHeaderCell(column)\">\r\n <th mat-header-cell *matHeaderCellDef\r\n [ngClass]=\"TableService.getColumnHeaderClassName(column)\"\r\n [attr.colspan]=\"column?.colSpan\" [attr.rowspan]=\"column?.rowSpan\">\r\n <cva-table-header-cell [moduleName]=\"moduleName\" [column]=\"column\"\r\n [selectAllChecked]=\"selectAllChecked\"\r\n (changeSelectAll)=\"selectAllChecked = TableService.toggleSelectAll(value, $event)\">\r\n </cva-table-header-cell>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let row of superHeaders; let rowIndex = index\">\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader\"></tr>\r\n </ng-container>\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader\"></tr>\r\n <tr mat-row *matRowDef=\"let result; columns: TableService.getHeaderColumns(columns, 0, buttons);\"\r\n 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 protected readonly ColumnTypeEnum = ColumnTypeEnum;\r\n protected readonly IconTypeEnum = IconTypeEnum;\r\n protected readonly AlignEnum = AlignEnum;\r\n protected readonly TableService = TableService;\r\n\r\n @ViewChildren('cellComponentRef') cellComponents!: QueryList<CvaFormControl>;\r\n @Input() moduleName: string = '';\r\n @Input() columns: ColumnModel[] = [];\r\n @Input() buttons: ButtonModel[] = [];\r\n @Input() superHeaders: ColumnModel[][] = [];\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 formatFunc: NumericInputFormat = new NumericInputFormat();\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 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 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, mouseEvent?: MouseEvent) {\r\n const buttonClickEvent = new ButtonClickEvent(action, result, index);\r\n buttonClickEvent.mouseEvent = mouseEvent;\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 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 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 this.formControl.statusChanges.subscribe(status => {\r\n if (this.formControl?.touched && this.formControl?.dirty) {\r\n this.markAllControlsAsDirty();\r\n }\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 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 // 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 getAlign(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 markAllControlsAsDirty() {\r\n if (this.cellComponents) {\r\n this.cellComponents.forEach(cell => {\r\n const control = cell.getFormControl();\r\n if (control) {\r\n control.markAsDirty();\r\n control.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Injector, Input, OnInit, Optional, Output, Self, ViewChild} 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\nimport {CvaFormControl} from '../cva-form-control';\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 (click)=\"openRangePicker($event)\">\r\n <input matEndDate\r\n [(ngModel)]=\"toDateValue\"\r\n readOnly=\"true\"\r\n [placeholder]=\"placeholderToDate|translate\"\r\n (click)=\"openRangePicker($event)\">\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 type=\"button\">\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.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValiator.getErrorMessageV1(formControl, errorMessages).params }}\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, CvaFormControl, 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 | null = null;\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 @ViewChild('picker') picker: MatDateRangePicker<any> | undefined;\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 NsValiator() {\r\n return ValidatorService;\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 this.value.toDate = '';\r\n this.writeValue(this.value);\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 getFormControl(): AbstractControl | null {\r\n return this.formControl;\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.fromDate = this.prepareWriteValueData(obj.fromDate);\r\n this.value.toDate = this.prepareWriteValueData(obj.toDate);\r\n\r\n this.createTitle();\r\n if (this.defaultFromDate && this.getDisabled(this.disabledFromDate)) {\r\n this.value.fromDate = new Date(this.defaultFromDate.replace('Z', ''));\r\n }\r\n this.propagateChange(this.value);\r\n this.callValidator();\r\n this.onChange.emit(this.value);\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 : null;\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 openRangePicker(event: MouseEvent) {\r\n if (!this.getDisabled(this.disabledAll) && this.picker) {\r\n event.stopPropagation();\r\n this.picker.open();\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]=\"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>{{ !!placeholder ? placeholder : '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) }}\r\n </mat-error>\r\n <mat-error *ngIf=\"typeError!==null\">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}\r\n </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() placeholder: 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 && this.files.length === 1){\r\n this.files.length = 0;\r\n }\r\n this.files.push(obj);\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 target.value = '';\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 <i *ngIf=\"node.iconClass\" class=\"{{ node.iconClass }} icon-left\"></i>\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 && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}\"></i>\r\n </button>\r\n <span (click)=\"onParentNodeClick.emit()\">\r\n <i *ngIf=\"node.iconClass\" class=\"{{ node.iconClass }} icon-left\"></i>\r\n {{ node.displayValue }}\r\n </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 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\r\n 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%'}}\"\r\n 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\r\n [ngStyle]=\"{height: itemSize + 'px', padding: '0px 0px 0px '+ (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 }}{{ '(' + getTotalSelected(fullDataDataSource.data) + ')' }}</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\r\n [ngStyle]=\"{height: itemSize + 'px', padding: '0px 0px 0px '+ (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)=\"toggleNodeCheck(node, false)\"\r\n (deSelectParentNode)=\"toggleNodeCheck(node, false)\">\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, 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 /** height of tree view */\r\n @Input() viewHeight: number = 300; // px\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 @Input() errorMessages = new Map<string, (e?: any) => string>();\r\n @Input() fullDatasource: FlatTreeNodeModel[] = [];\r\n searchText = '';\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 @Input() 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 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 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 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 (obj) {\r\n this.value = obj;\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.expandTreeDataSource(this.treeControl, 'isExpanded');\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 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.isExpanded = treeControl.isExpanded(node);\r\n orgNode.isFilterExpanded = treeControl.isExpanded(node);\r\n }\r\n this.setDataSourceOrigin();\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().trim())\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().trim())\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 // Lấy danh sách node đang hiển thị (filtered)\r\n const visibleNodes = isLeaf\r\n ? [node]\r\n : [...this.getAllChildNode(this.treeControl, node).filter(n => n.display), node];\r\n for (const leaf of visibleNodes) {\r\n if (!leaf.display || this.checkDisabledNode(leaf)) continue;\r\n const index = this.value.indexOf(leaf.value);\r\n if (checked && index < 0) {\r\n this.value.push(leaf.value);\r\n }\r\n if (!checked && index >= 0) {\r\n this.value.splice(index, 1);\r\n }\r\n }\r\n if (isLeaf) {\r\n const parentNode = this.getRootNode(node);\r\n if (parentNode && FlatTreeService.hasChild(parentNode)) {\r\n const allChild = this.getAllChildNode(this.fullDataTreeControl, parentNode);\r\n // Kiểm tra còn node con nào trong value không\r\n const hasChildInValue = allChild.some(child => this.value.includes(child.value));\r\n if (!hasChildInValue) {\r\n const parentIndex = this.value.indexOf(parentNode.value);\r\n if (parentIndex >= 0) {\r\n this.value.splice(parentIndex, 1);\r\n }\r\n }\r\n }\r\n }\r\n // Gọi writeValue để cập nhật cho FormControl\r\n this.writeValue(this.value);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n getTotalSelected(nodes: FlatTreeNodeModel[]): number {\r\n let count = 0;\r\n for (const node of nodes) {\r\n const isLeaf = !FlatTreeService.hasChild(node);\r\n if (isLeaf) {\r\n if (this.value.includes(node.value)) {\r\n count += 1;\r\n }\r\n } else if (node.children && node.children.length > 0) {\r\n const childChecked = this.getTotalSelected(node.children);\r\n // Nếu tất cả các con được checked đồng nghĩa cha được checked thì mới cộng\r\n if (childChecked === node.children.length) {\r\n count += 1;\r\n }\r\n count += childChecked;\r\n }\r\n }\r\n return count;\r\n }\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]=\"disabled\"\r\n [maxLength]=\"maxLength??999999999\"\r\n [minLength]=\"minLength??0\"\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 && onFocusStatus && !!maxLength\">{{ textCounter + '/' + maxLength }}\r\n </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() 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 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 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 ngOnInit(): void {\r\n this.callValidator();\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\nimport {CvaTableHeaderCellComponent} from \"../components/table/cva-table-header-cell.component\";\r\nimport {SafeHtmlPipe} from \"../pipes/safe.html.pipe\";\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 CvaTableHeaderCellComponent,\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 SafeHtmlPipe,\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 SafeHtmlPipe,\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\nexport * from './directives/numeric-input-format';\r\n\r\nexport * from './pipes/secure.pipe';\r\nexport * from './pipes/safe.html.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","i8","i1","i2","i2.ApiService","i3.UtilsService","i4.FormStateService","i6.AuthoritiesService","i4.UtilsService","i5.AuthoritiesService","i6","i9","i10","i1.LoaderService","i11","i12","i13","i14.CvaTableHeaderCellComponent","i15.CvaCounterInputComponent","i16.StylePaginatorDirective","i17.CvaHeaderExpandButtonComponent","i18","i19.SecureImgPipe","i20.SafeHtmlPipe","i10.PatternDirective","i11.FormatInputDirective","i1.DateUtilService","i11.CvaTableHeaderCellComponent","i12.CvaInputComponent","i13.CvaCounterInputComponent","i14.CvaDatePickerComponent","i15.CvaMultiSelectAutocomplete","i16.CvaLiveSearchingComponent","i17","i18.SecureImgPipe","i7.DragDropDirective","i10.DragDropDirective","i12.SecureImgPipe","i4.CvaUploadFileComponent","i9.CvaMultiSelectAutocomplete","observableOf","i10.CvaFlatTreeNodeLeftComponent","i11.CvaFlatTreeNodeRightComponent","i1.AuthoritiesService","ExperimentalScrollingModule"],"mappings":"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"}
|