@brggroup/share-lib 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/brggroup-share-lib.mjs +1624 -3
- package/fesm2022/brggroup-share-lib.mjs.map +1 -1
- package/lib/components/extend-select/extend-select.d.ts.map +1 -1
- package/lib/components/wf-editor/workflow-editor.component.d.ts +352 -0
- package/lib/components/wf-editor/workflow-editor.component.d.ts.map +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brggroup-share-lib.mjs","sources":["../../../projects/share/src/lib/a-translate-key.ts","../../../projects/share/src/lib/app-global.ts","../../../projects/share/src/lib/app-storeage.ts","../../../projects/share/src/lib/services/api-service/http.service.ts","../../../projects/share/src/lib/services/noti.service.ts","../../../projects/share/src/lib/services/api-service/common.service.ts","../../../projects/share/src/lib/auth/token.storage.ts","../../../projects/share/src/lib/auth/auth.service.ts","../../../projects/share/src/lib/auth/auth.guard.ts","../../../projects/share/src/lib/services/loading.service.ts","../../../projects/share/src/lib/auth/auth.interceptor.ts","../../../projects/share/src/lib/auth/unsaved-changes.guard.ts","../../../projects/share/src/lib/services/custom-modal.service.ts","../../../projects/share/src/lib/components/base.component.ts","../../../projects/share/src/lib/components/base.guard-change.ts","../../../projects/share/src/lib/components/base.overlay.component.ts","../../../projects/share/src/lib/components/breadcrumb/breadcrumb.ts","../../../projects/share/src/lib/components/breadcrumb/breadcrumb.html","../../../projects/share/src/lib/components/dashboard-widget/animated/animated-digit.component.ts","../../../projects/share/src/lib/components/dashboard-widget/animated/animated-digit.component.html","../../../projects/share/src/lib/components/dashboard-widget/bar-graph/bar-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/bar-graph/bar-graph.component.html","../../../projects/share/src/lib/components/dashboard-widget/dashcard/dashcard.component.ts","../../../projects/share/src/lib/components/dashboard-widget/dashcard/dashcard.component.html","../../../projects/share/src/lib/components/dashboard-widget/doughnut-graph/doughnut-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/doughnut-graph/doughnut-graph.component.html","../../../projects/share/src/lib/components/dashboard-widget/line-graph/line-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/line-graph/line-graph.component.html","../../../projects/share/src/lib/components/extend-checkbox/extend-checkbox.ts","../../../projects/share/src/lib/components/extend-checkbox/extend-checkbox.html","../../../projects/share/src/lib/helper/date.helper.ts","../../../projects/share/src/lib/directive/date-input-parser.directive.ts","../../../projects/share/src/lib/components/extend-date-picker/extend-date-picker.ts","../../../projects/share/src/lib/components/extend-date-picker/extend-date-picker.html","../../../projects/share/src/lib/components/extend-date-range-picker/extend-date-range-picker.ts","../../../projects/share/src/lib/components/extend-date-range-picker/extend-date-range-picker.html","../../../projects/share/src/lib/components/extend-input-number/extend-input-number.ts","../../../projects/share/src/lib/components/extend-input-number/extend-input-number.html","../../../projects/share/src/lib/components/extend-input/extend-input.ts","../../../projects/share/src/lib/components/extend-input/extend-input.html","../../../projects/share/src/lib/components/extend-select/extend-select.ts","../../../projects/share/src/lib/components/extend-select/extend-select.html","../../../projects/share/src/lib/components/extend-textarea/extend-textarea.ts","../../../projects/share/src/lib/components/extend-textarea/extend-textarea.html","../../../projects/share/src/lib/components/no-permission/no-permission.ts","../../../projects/share/src/lib/components/pdf-viewer/pdf-viewer.ts","../../../projects/share/src/lib/components/pdf-viewer/pdf-viewer.html","../../../projects/share/src/lib/components/spinner/spinner.ts","../../../projects/share/src/lib/components/height.ts","../../../projects/share/src/lib/components/width.ts","../../../projects/share/src/lib/components/box.ts","../../../projects/share/src/lib/directive/auto-focus.directive.ts","../../../projects/share/src/lib/directive/null-if-empty.directive.ts","../../../projects/share/src/lib/directive/number-only.directive.ts","../../../projects/share/src/lib/directive/uppercase-each-word.directive.ts","../../../projects/share/src/lib/directive/uppercase-first-letter.directive.ts","../../../projects/share/src/lib/directive/uppercase.directive.ts","../../../projects/share/src/lib/pipe/limit-words.pipe.ts","../../../projects/share/src/lib/helper/download.helper.ts","../../../projects/share/src/lib/helper/xlsx.helper.ts","../../../projects/share/src/lib/model.ts","../../../projects/share/src/lib/services/router-monitor.service.ts","../../../projects/share/src/lib/services/theme.service.ts","../../../projects/share/src/lib/services/vsc.service.ts","../../../projects/share/src/brggroup-share-lib.ts"],"sourcesContent":["export enum TranslateKey {\n ACTION = 'ACTION',\n ADD = 'ADD',\n AGREE = 'AGREE',\n BACK = 'BACK',\n CANCEL = 'CANCEL',\n CLOSE = 'CLOSE',\n CONFIRM = 'CONFIRM',\n CONFIRM_DELETE = 'CONFIRM_DELETE',\n COMPLETE = 'COMPLETE',\n DELETE = 'DELETE',\n DELETE_SUCCESS = 'DELETE_SUCCESS',\n EDIT = 'EDIT',\n ERROR = 'ERROR',\n EXPORT = 'EXPORT',\n HIDDEN = 'HIDDEN',\n IMPORT = 'IMPORT',\n INFO = 'INFO',\n LOGIN = 'LOGIN',\n LOGOUT = 'LOGOUT',\n NO_CONNECT_TO_SERVER = 'NO_CONNECT_TO_SERVER',\n OK = 'OK',\n PASSWORD = 'PASSWORD',\n REQUIRED = 'REQUIRED',\n REQUIRED_FIELD = 'REQUIRED_FIELD',\n REFEESH = 'REFEESH',\n RESET = 'RESET',\n RESET_PASSWORD = 'RESET_PASSWORD',\n SAVE = 'SAVE',\n SEARCH = 'SEARCH',\n SHOW = 'SHOW',\n SUCCESS = 'SUCCESS',\n SAVE_SUCCESS = 'SAVE_SUCCESS',\n SETTING = 'SETTING',\n PROFILE = 'PROFILE',\n USERNAME = 'USERNAME',\n UPDATE = 'UPDATE',\n WARNING = 'WARNING',\n YES = 'YES',\n DOWNLOAD_TEMPLATE = 'DOWNLOAD_TEMPLATE',\n WARNING_CHECK_DATA = 'WARNING_CHECK_DATA',\n}\n","export class AppGlobals {\n public static apiEndpoint: string;\n public static versionCheck: string;\n\n public static MENU_TYPE: 'side-menu' | 'toolbar-menu' = 'toolbar-menu';\n public static pageSizeOptions = [10, 20, 50, 100];\n\n public static filterSet: any = {};\n public static selectedIdSet: any = {};\n\n public static clearFillter() {\n this.filterSet = {};\n }\n\n public static getFilter(key: any) {\n return this.filterSet[key];\n }\n\n public static setFilter(key: any, filter: any) {\n this.filterSet[key] = filter;\n }\n\n public static getSelectedId(key: any) {\n return this.selectedIdSet[key];\n }\n\n public static setSelectedId(key: any, value: any) {\n this.selectedIdSet[key] = value;\n }\n\n public static setLang(lang: string) {\n localStorage.setItem('LANGUAGE', lang);\n }\n\n public static getLang(): string {\n if (!localStorage.getItem('LANGUAGE')) {\n localStorage.setItem('LANGUAGE', 'vn');\n }\n return localStorage.getItem('LANGUAGE') || '';\n }\n\n public static getOrgId() {\n return localStorage.getItem('orgid');\n }\n\n public static getOrgCode() {\n return localStorage.getItem('orgcode');\n }\n\n public static getOrgName() {\n return localStorage.getItem('orgname');\n }\n\n public static getUserName() {\n return localStorage.getItem('username');\n }\n\n public static getUserFullName() {\n return localStorage.getItem('fullname');\n }\n}\n","import { inject } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\nexport class AppStorage {\n \n static get tokenStorage() {\n return localStorage;\n // return sessionStorage;\n }\n\n static get localStoreage() {\n return localStorage;\n }\n\n static get sessionStoreage() {\n return sessionStorage;\n }\n\n static getLang(): string {\n return AppStorage.localStoreage.getItem('LANGUAGE') || 'vn';\n }\n\n static setLang(lang: string) {\n AppStorage.localStoreage.setItem('LANGUAGE', lang || 'vn');\n }\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RespondData } from '../../model';\n\nexport class HTTPService {\n httpClient = inject(HttpClient);\n\n get(url: string, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.get<RespondData>(url, options));\n }\n\n getParams(url: string, params: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.get<RespondData>(url, options));\n }\n\n post(url: string, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, null, options));\n }\n\n postParams(url: string, params: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, null, options));\n }\n\n postData(url: string, body: any, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, body, options));\n }\n\n postDataWithParams(url: string, body: any, params?: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, body, options));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NzNotificationService } from 'ng-zorro-antd/notification';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\nimport { firstValueFrom } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TranslateKey } from '../a-translate-key';\n\nfunction escapeHtml(str: string) {\n return str.replace(/</g, '<').replace(/>/g, '>');\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotiService {\n modal = inject(NzModalService);\n notification = inject(NzNotificationService);\n translate = inject(TranslateService);\n\n async success(title?: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.success({\n nzTitle: title ?? this.translate.instant(TranslateKey.SUCCESS),\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.success(title ?? this.translate.instant(TranslateKey.SUCCESS), content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n async warning(title: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.warning({\n nzTitle: title,\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.warning(title, content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n async error(title: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.error({\n nzTitle: title,\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.error(title, content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n handleError(err: any): void {\n if (err?.status == 0) {\n // this.notification.error('', this.translate.instant('NO_CONNECT_TO_SERVER'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('NO_CONNECT_TO_SERVER'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n\n return;\n }\n\n let _data: any = null;\n\n if (err?.error instanceof ArrayBuffer) {\n const message = new TextDecoder('utf-8').decode(new Uint8Array(err.error));\n try {\n _data = JSON.parse(message);\n } catch (error) {}\n } else if (err?.error instanceof Blob) {\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const text = reader.result as string;\n _data = JSON.parse(text);\n this.handleError(_data);\n } catch (e) {\n // this.notification.error('', this.translate.instant('UNKNOWN_ERROR'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('UNKNOWN_ERROR'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n }\n };\n\n reader.onerror = () => {\n // this.notification.error('', this.translate.instant('UNKNOWN_ERROR'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('UNKNOWN_ERROR'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n };\n reader.readAsText(err.error);\n return;\n } else if (err?.error && typeof err.error === 'object') {\n _data = err.error;\n } else {\n _data = err;\n }\n\n let errorMsg = err?.message || 'An unexpected error occurred.';\n\n if (err?.name == 'EmptyError' && err?.message == 'no elements in sequence') {\n return;\n }\n\n if (_data?.ErrorMessage) {\n let hasMsgTag = false;\n let isMatchFirstMsg = false;\n\n let isMatch = _data.ErrorMessage?.match(/System.Data.SqlClient.SqlException \\(0x80131904\\): <msg>(.*?)<\\/msg>/);\n isMatchFirstMsg = isMatch ? true : false;\n\n if (isMatchFirstMsg) {\n const matches = [..._data.ErrorMessage?.matchAll(/<msg>(.*?)<\\/msg>/g)];\n const messages = matches.map((m) => m[1]);\n if (messages.length > 0) {\n errorMsg = messages.join('\\n');\n hasMsgTag = true;\n } else {\n errorMsg = _data.ErrorMessage;\n }\n } else {\n errorMsg = _data.ErrorMessage;\n }\n }\n\n const modalRef = this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: errorMsg,\n nzWidth: '40vw',\n nzClosable: false,\n nzCancelText: 'Đóng',\n nzOkText: 'Chi tiết',\n nzOnOk: () => {\n modalRef.destroy();\n\n this.modal.error({\n nzTitle: 'Chi tiết lỗi',\n nzContent: escapeHtml(JSON.stringify(_data, null, 2)),\n nzWidth: '60vw',\n nzDraggable: true,\n nzCentered: true,\n nzOkText: 'Đóng',\n });\n },\n });\n }\n}\n","import { ESPModel, ExportExcelModel } from '../../model';\nimport { AppGlobals } from '../../app-global';\nimport { HTTPService } from './http.service';\nimport { firstValueFrom } from 'rxjs';\nimport { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nexport enum ENUM_ResponseType {\n ARRAYBUFFER = 'arraybuffer',\n BLOB = 'blob',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CommonService extends HTTPService {\n ESP(obj: ESPModel) {\n const params = new HttpParams().append('SPN', obj.SPN);\n return this.postDataWithParams(AppGlobals.apiEndpoint + '/api/Common/ESP', obj, params);\n }\n\n ExportExcel(data: ExportExcelModel) {\n return firstValueFrom(\n this.httpClient.post(AppGlobals.apiEndpoint + '/api/Common/ExportExcel', data, {\n responseType: ENUM_ResponseType.BLOB,\n observe: 'response',\n }),\n );\n }\n}\n","import { jwtDecode } from 'jwt-decode';\nimport { RespondData } from '../model';\nimport { AppStorage } from '../app-storeage';\n\nexport class TokenStorage {\n public static readonly JWT_TOKEN = 'JWT_TOKEN';\n public static readonly JWT_RFT_TOKEN = 'JWT_RFT_TOKEN';\n public static readonly USER_NAME = 'username';\n public static readonly FULL_NAME = 'fullname';\n public static readonly USER_MENU = 'usermenu';\n public static readonly ORG_ID = 'orgid';\n public static readonly ORG_CODE = 'orgcode';\n public static readonly ORG_NAME = 'orgname';\n\n public static saveToken(tokenRes: RespondData) {\n AppStorage.tokenStorage.setItem(this.JWT_TOKEN, tokenRes.Data.Token);\n AppStorage.tokenStorage.setItem(this.JWT_RFT_TOKEN, tokenRes.Data.RefreshToken);\n TokenStorage.saveTokenInfo(tokenRes.Data.Token);\n }\n\n public static saveTokenRft(token: string) {\n AppStorage.tokenStorage.setItem(this.JWT_TOKEN, token);\n TokenStorage.saveTokenInfo(token);\n }\n\n private static saveTokenInfo(token: string) {\n const userInfo: any = jwtDecode(token);\n\n AppStorage.tokenStorage.setItem(this.USER_NAME, userInfo[this.USER_NAME]);\n AppStorage.tokenStorage.setItem(this.FULL_NAME, userInfo[this.FULL_NAME]);\n AppStorage.tokenStorage.setItem(this.ORG_ID, userInfo[this.ORG_ID]);\n AppStorage.tokenStorage.setItem(this.ORG_CODE, userInfo[this.ORG_CODE]);\n AppStorage.tokenStorage.setItem(this.ORG_NAME, userInfo[this.ORG_NAME]);\n }\n\n public static saveUserMenu(menus: any[]) {\n AppStorage.tokenStorage.setItem(this.USER_MENU, JSON.stringify(menus));\n }\n\n public static getUserMenu(): any[] {\n return JSON.parse(AppStorage.tokenStorage.getItem(this.USER_MENU) || '[]');\n }\n\n public static getUsername() {\n return AppStorage.tokenStorage.getItem(this.USER_NAME);\n }\n\n public static getUserFullname() {\n return AppStorage.tokenStorage.getItem(this.FULL_NAME);\n }\n\n public static getOrgId() {\n return AppStorage.tokenStorage.getItem(this.ORG_ID);\n }\n\n public static getOrgCode() {\n return AppStorage.tokenStorage.getItem(this.ORG_CODE);\n }\n\n public static getOrgName() {\n return AppStorage.tokenStorage.getItem(this.ORG_NAME);\n }\n\n public static getToken() {\n return AppStorage.tokenStorage.getItem(this.JWT_TOKEN);\n }\n\n public static getRftToken() {\n return AppStorage.tokenStorage.getItem(this.JWT_RFT_TOKEN);\n }\n\n public static isLoggedIn() {\n return AppStorage.tokenStorage.getItem(this.JWT_TOKEN) != null;\n }\n\n public static clearToken() {\n console.log('-- clearToken --');\n AppStorage.tokenStorage.removeItem(this.JWT_TOKEN);\n AppStorage.tokenStorage.removeItem(this.USER_NAME);\n AppStorage.tokenStorage.removeItem(this.FULL_NAME);\n AppStorage.tokenStorage.removeItem(this.USER_MENU);\n AppStorage.tokenStorage.removeItem(this.ORG_ID);\n AppStorage.tokenStorage.removeItem(this.ORG_CODE);\n AppStorage.tokenStorage.removeItem(this.ORG_NAME);\n }\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AppGlobals } from '../app-global';\nimport { HTTPService } from '../services/api-service/http.service';\nimport { NotiService } from '../services/noti.service';\nimport { CommonService } from '../services/api-service/common.service';\nimport { TokenStorage } from './token.storage';\nimport { ESPModel, RespondData } from '../model';\n\nexport const URLs = {\n login: '/api/Auth/Login',\n register: '/api/Auth/Register',\n pingAuth: '/api/Auth/PingAuth',\n changePassword: '/api/Auth/ChangePassword',\n setPass: '/api/Auth/SetPass',\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService extends HTTPService {\n notiService = inject(NotiService);\n commonService = inject(CommonService);\n\n ngZone = inject(NgZone);\n router = inject(Router);\n translate = inject(TranslateService);\n\n async refreshToken(): Promise<RespondData | null> {\n const refreshToken = TokenStorage.getRftToken();\n\n if (!refreshToken) return null;\n\n const body = { rft: refreshToken };\n\n try {\n const res = await this.sendRftToken(body);\n\n if (res?.IsSuccess) {\n TokenStorage.saveTokenRft(res.Data);\n return res;\n } else {\n return null;\n }\n } catch (err) {\n console.log(err);\n }\n\n return null;\n }\n\n async pingAuth(): Promise<boolean> {\n try {\n const res = await this.get(AppGlobals.apiEndpoint + URLs.pingAuth, true);\n return res?.IsSuccess;\n } catch {\n return false;\n }\n }\n\n async signIn(username: string, password: string, orgid: string, returnUrl: string): Promise<boolean> {\n try {\n const body = {\n UserName: username,\n Password: password,\n OrgId: orgid,\n };\n\n const res = await this.sendSignIn(body);\n\n if (!res.IsSuccess) {\n this.notiService.error(this.translate.instant(res.ErrorMessage));\n return false;\n }\n\n this.notiService.success('Đăng nhập thành công');\n TokenStorage.saveToken(res);\n this.startWatching();\n\n if (returnUrl) {\n this.router.navigateByUrl(returnUrl);\n }\n } catch (err) {\n this.notiService.handleError(err);\n return false;\n }\n\n return true;\n }\n\n async sendSignIn(body: any): Promise<RespondData> {\n return firstValueFrom(\n this.httpClient.post<RespondData>(AppGlobals.apiEndpoint + URLs.login, body, {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n }),\n );\n }\n\n async sendRftToken(body: any): Promise<RespondData> {\n return firstValueFrom(\n this.httpClient.post<RespondData>(AppGlobals.apiEndpoint + '/api/Auth/RefreshToken', body, {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n }),\n );\n }\n\n signOut() {\n TokenStorage.clearToken();\n this.stopWatching();\n const currentUrl = this.router.routerState.snapshot.url;\n this.router.navigate(['/login'], {\n queryParams: { returnUrl: currentUrl || '/' },\n });\n }\n\n getUserMenu() {\n let data: ESPModel = {\n SPN: `App_User_getUserMenu`,\n };\n return this.commonService.ESP(data);\n }\n\n async checkUserMenu(url: string): Promise<boolean> {\n try {\n const ret = await this.commonService.ESP({\n SPN: `App_User_checkUserMenu`,\n Params: [url],\n });\n\n return ret.IsSuccess && ret.Data == '1';\n } catch (error) {\n this.notiService.handleError(error);\n return true;\n }\n }\n\n changePassword(data: any) {\n return this.postData(AppGlobals.apiEndpoint + URLs.changePassword, data);\n }\n\n setPass(data: any) {\n return this.postData(AppGlobals.apiEndpoint + URLs.setPass, data);\n }\n\n async signUp(d: any) {\n try {\n const res = await this.sendSignUp(d);\n\n if (!res.IsSuccess) {\n this.notiService.error(res.ErrorMessage);\n return;\n }\n this.notiService.success('Đăng ký thành công');\n this.router.navigateByUrl('/login');\n } catch (err) {\n console.log(err);\n this.notiService.handleError(err);\n }\n }\n\n async sendSignUp(d: any): Promise<RespondData> {\n return this.postData(AppGlobals.apiEndpoint + URLs.register, d);\n }\n\n private idleTimer: any;\n private idleTimeInMinutes = 15; // phút\n private idleTime = this.idleTimeInMinutes * 60 * 1000;\n\n startWatching() {\n console.log(\n `-- start watching idle (${this.idleTimeInMinutes} ${this.idleTimeInMinutes == 1 ? 'min' : 'mins'}) --`,\n );\n\n this.resetTimer();\n\n window.addEventListener('mousemove', () => this.resetTimer());\n window.addEventListener('keydown', () => this.resetTimer());\n window.addEventListener('click', () => this.resetTimer());\n }\n\n private resetTimer() {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.idleTimer = setTimeout(() => {\n this.ngZone.run(() => {\n console.log('-- idle logout --');\n\n this.signOut(); // auto logout\n });\n }, this.idleTime);\n });\n }\n\n stopWatching() {\n console.log('-- stop watching idle --');\n clearTimeout(this.idleTimer);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { TokenStorage } from './token.storage';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n router = inject(Router);\n authService = inject(AuthService);\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // return true;\n\n if (await this.authService.pingAuth()) {\n return true;\n }\n\n TokenStorage.clearToken();\n\n if (state.url != '/') {\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\n } else {\n this.router.navigate(['/login']);\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay, switchMap, distinctUntilChanged } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingService {\n private static loadingStack: any[] = [];\n private loadingSubject = new BehaviorSubject<boolean>(false);\n\n private update() {\n const isLoading = LoadingService.loadingStack.length > 0;\n this.loadingSubject.next(isLoading);\n }\n\n loadingUp() {\n LoadingService.loadingStack.push(1);\n this.update();\n }\n\n loadingDown() {\n LoadingService.loadingStack.pop();\n this.update();\n }\n\n /** Trả về observable loading có delay khi bật để tránh chớp nháy */\n get loading$(): Observable<boolean> {\n return this.loadingSubject.asObservable().pipe(\n switchMap((loading) => {\n return loading\n ? of(true).pipe(delay(200)) // delay khi bật\n : of(false); // tắt thì không delay\n }),\n distinctUntilChanged(),\n );\n }\n\n /** Nếu chỉ cần giá trị hiện tại boolean (ít dùng hơn) */\n get isLoading(): boolean {\n return LoadingService.loadingStack.length > 0;\n }\n}\n","import { HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TokenStorage } from './token.storage';\nimport { BehaviorSubject, catchError, filter, finalize, from, of, switchMap, take, throwError } from 'rxjs';\nimport { LoadingService } from '../services/loading.service';\nimport { AuthService } from './auth.service';\nimport { RespondData } from '../model';\n\nlet initialReturnUrl: string | null = null;\nlet isRefreshing = false;\nconst refreshTokenSubject = new BehaviorSubject<string | null>(null);\n\nexport function authInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn) {\n const router = inject(Router);\n const loadingService = inject(LoadingService);\n const authService = inject(AuthService);\n\n const authToken = TokenStorage.getToken();\n const noLoadingMark = req.headers.get('No-Loading-Mark');\n\n if (noLoadingMark !== '1') loadingService.loadingUp();\n\n // Convert dates\n if (!(req.body instanceof FormData)) {\n const newBody = convertDatesInBody(req.body);\n if (req.body !== newBody) {\n req = req.clone({ body: newBody });\n }\n }\n\n // Add token\n if (authToken) {\n req = req.clone({\n setHeaders: { Authorization: `Bearer ${authToken}` },\n });\n }\n\n return next(req).pipe(\n catchError((error) => {\n if (error.status === 401) {\n return handle401(req, next, router, authService);\n }\n return throwError(() => error);\n }),\n finalize(() => {\n if (noLoadingMark !== '1') loadingService.loadingDown();\n }),\n );\n}\n\n//\n// ⭐ REFRESH TOKEN HANDLER\n//\nfunction handle401(req: HttpRequest<any>, next: HttpHandlerFn, router: Router, authService: AuthService) {\n if (!isRefreshing) {\n isRefreshing = true;\n refreshTokenSubject.next(null);\n\n return from(authService.refreshToken()).pipe(\n switchMap((resAny: any) => {\n const res = resAny as RespondData;\n isRefreshing = false;\n\n if (!res?.IsSuccess) {\n const currentUrl = router.routerState.snapshot.url;\n\n if (!initialReturnUrl && !currentUrl.startsWith('/login')) {\n initialReturnUrl = currentUrl;\n }\n\n router.navigate(['/login'], {\n queryParams: { returnUrl: initialReturnUrl || '/' },\n });\n\n refreshTokenSubject.error('Refresh token failed');\n\n return throwError(() => new Error('Refresh token failed'));\n }\n\n // Phát token mới cho các request đang chờ\n refreshTokenSubject.next(TokenStorage.getToken());\n\n // Retry request\n return next(\n req.clone({\n setHeaders: { Authorization: `Bearer ${TokenStorage.getToken()}` },\n }),\n );\n }),\n catchError((err) => {\n isRefreshing = false;\n TokenStorage.clearToken();\n const currentUrl = router.routerState.snapshot.url;\n\n if (!initialReturnUrl && !currentUrl.startsWith('/login')) {\n initialReturnUrl = currentUrl;\n }\n\n router.navigate(['/login'], {\n queryParams: { returnUrl: initialReturnUrl || '/' },\n });\n\n return throwError(() => err);\n }),\n );\n } else {\n // Nếu đang refresh → chờ token mới rồi retry\n return refreshTokenSubject.pipe(\n take(1),\n switchMap((token) =>\n next(\n req.clone({\n setHeaders: { Authorization: `Bearer ${token}` },\n }),\n ),\n ),\n catchError((err) => throwError(() => err)),\n );\n }\n}\n\nfunction convertDatesInBody(obj: any): any {\n if (obj instanceof Date) {\n return formatDate(obj);\n }\n\n if (Array.isArray(obj)) {\n return obj.map(convertDatesInBody);\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const newObj: any = {};\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n\n if (value instanceof Date) {\n newObj[key] = formatDate(value);\n } else if (typeof value === 'string' && isIsoDate(value)) {\n newObj[key] = formatDate(new Date(value));\n } else if (typeof value === 'object') {\n newObj[key] = convertDatesInBody(value);\n } else {\n newObj[key] = value;\n }\n }\n return newObj;\n }\n\n return obj;\n}\n\nfunction isIsoDate(str: string): boolean {\n // ISO string with optional time and timezone\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[\\+\\-]\\d{2}:\\d{2})?$/.test(str);\n}\n\nfunction formatDate(date: Date): string {\n const pad = (n: number) => n.toString().padStart(2, '0');\n return (\n `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` +\n `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`\n );\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => boolean | Promise<boolean>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnsavedChangesGuard implements CanDeactivate<CanComponentDeactivate> {\n canDeactivate(component: CanComponentDeactivate): boolean | Promise<boolean> {\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NzModalService, NzModalRef, ModalOptions } from 'ng-zorro-antd/modal';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomModalService {\n constructor(private modal: NzModalService) {}\n\n create<T, D = any>(options: ModalOptions<T, D>): NzModalRef<T, D> {\n const defaultOptions: Partial<ModalOptions<T, D>> = {\n nzMaskClosable: false,\n nzCentered: true,\n nzBodyStyle: {\n 'max-height': 'calc(100vh - 180px)',\n overflow: 'auto',\n },\n };\n\n const mergedOptions: ModalOptions<T, D> = {\n ...defaultOptions,\n ...options,\n nzStyle: {\n ...defaultOptions.nzStyle,\n ...options.nzStyle,\n },\n };\n\n return this.modal.create(mergedOptions);\n }\n\n confirm(options: ModalOptions): NzModalRef {\n return this.modal.confirm(options);\n }\n\n info(options: ModalOptions): NzModalRef {\n return this.modal.info(options);\n }\n\n success(options: ModalOptions): NzModalRef {\n return this.modal.success(options);\n }\n\n warning(options: ModalOptions): NzModalRef {\n return this.modal.warning(options);\n }\n\n error(options: ModalOptions): NzModalRef {\n return this.modal.error(options);\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { NotiService } from '../services/noti.service';\nimport { AppGlobals } from '../app-global';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormGroup } from '@angular/forms';\nimport { TranslateKey } from '../a-translate-key';\nimport { filter, Subscription } from 'rxjs';\nimport { CustomModalService } from '../services/custom-modal.service';\nimport { Location } from '@angular/common';\n\n@Component({ template: '' })\nexport class BaseComponent {\n protected AppGlobals = AppGlobals;\n\n protected TranslateKey = TranslateKey;\n\n protected route = inject(ActivatedRoute);\n protected router = inject(Router);\n protected location = inject(Location);\n\n protected notiService = inject(NotiService);\n protected translate = inject(TranslateService);\n protected modal = inject(CustomModalService);\n\n private routeSub?: Subscription;\n\n /**\n * Khi dùng onRouteChange nhớ dùng unSubRouteChange\n */\n protected onRouteChange(callback: (url: string) => void): void {\n this.routeSub = this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n callback(e.urlAfterRedirects);\n });\n }\n\n protected unSubRouteChange(): void {\n this.routeSub?.unsubscribe();\n }\n\n protected goback() {\n this.location.back();\n }\n\n protected goto(url?: string) {\n if (url) {\n if (url.startsWith('/')) {\n this.router.navigateByUrl(url);\n } else {\n this.router.navigate([url], { relativeTo: this.route });\n }\n }\n }\n\n /**\n * /:id\n */\n protected getUrlParam(paramName: string) {\n const paramValue = this.route.snapshot.params[paramName];\n\n // bằng 0 thì trả về null vì chuyển primary key từ bigint sang string, code cũ đang truyền vào 0\n if (paramValue == '0' || paramValue == 'new' || paramValue == 'them-moi') {\n return null;\n }\n return paramValue;\n }\n\n /**\n * ?id=xxx\n */\n protected getUrlQueryParam(queryParamName: string) {\n const queryParamValue = this.route.snapshot.queryParamMap.get(queryParamName);\n return queryParamValue;\n }\n\n /**\n * Routes data\n */\n protected getUrlData(key: string) {\n return this.route.snapshot.data[key];\n }\n\n protected setQueryParam(name: string, value: string) {\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n [name]: value,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n protected get url() {\n return this.router.url;\n }\n\n protected get urlPath() {\n return this.router.url.split('?')[0];\n }\n\n protected handleError(err: any) {\n this.notiService.handleError(err);\n }\n\n protected touchControls(formData: FormGroup) {\n Object.values(formData.controls).forEach((control) => {\n if (control.invalid) {\n control.markAsDirty();\n control.updateValueAndValidity({ onlySelf: true });\n }\n });\n\n this.logFormErrors(formData);\n }\n\n protected untouchControls(formData: FormGroup) {\n formData.markAsPristine();\n formData.markAsUntouched();\n formData.updateValueAndValidity();\n }\n\n private logFormErrors(form: FormGroup, parentKey: string = '') {\n Object.keys(form.controls).forEach((key) => {\n const control = form.get(key);\n const fieldPath = parentKey ? `${parentKey}.${key}` : key;\n\n if (control instanceof FormGroup) {\n this.logFormErrors(control, fieldPath);\n } else {\n if (control?.errors) {\n console.log(`Control: ${fieldPath}`, control.errors);\n }\n }\n });\n }\n\n protected confirm(title: string, content: string = ''): Promise<boolean> {\n return new Promise((resolve) => {\n this.modal.confirm({\n // nzCentered: true,\n nzTitle: title,\n nzContent: content,\n nzOkText: this.translate.instant(this.TranslateKey.AGREE),\n nzOkType: 'primary',\n nzOkDanger: true,\n nzClosable: false,\n nzOnOk: () => resolve(true),\n nzAutofocus: 'ok',\n nzCancelText: this.translate.instant(this.TranslateKey.CANCEL),\n nzOnCancel: () => resolve(false),\n });\n });\n }\n\n protected backToTop() {\n // go to top\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n\n const content = document.querySelector('nz-content');\n if (content) {\n content.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n}\n","import { Component, HostListener } from '@angular/core';\nimport { BaseComponent } from './base.component';\nimport { CanComponentDeactivate } from '../auth/unsaved-changes.guard';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n template: '',\n})\nexport class BaseGuardChangeComponent extends BaseComponent implements CanComponentDeactivate {\n formData?: FormGroup;\n\n @HostListener('window:beforeunload', ['$event'])\n unloadNotification($event: any) {\n if (this.formData?.dirty) {\n $event.preventDefault();\n $event.returnValue = true; // Chrome requires this line\n }\n }\n\n async canDeactivate(): Promise<boolean> {\n if (this.formData?.dirty) {\n return await this.confirm('Dữ liệu chưa được lưu. Bạn có chắc chắn muốn rời khỏi trang?');\n }\n return true;\n }\n\n clearChange() {\n // bỏ dirty để không hỏi khi rời trang\n this.formData?.markAsPristine();\n this.formData?.markAsUntouched();\n this.formData?.updateValueAndValidity();\n }\n}\n","import { ElementRef, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BaseComponent } from './base.component';\nimport { NzButtonComponent } from 'ng-zorro-antd/button';\n\nexport class BaseOverlayComponent extends BaseComponent {\n // custom dropdow\n inputWidth: number = 0;\n triggerSpan = 500;\n private overlayRef!: OverlayRef;\n\n overlay = inject(Overlay);\n vcr = inject(ViewContainerRef);\n\n openOverlay(originEl: any, target: TemplateRef<any>, width = 0) {\n const origin: HTMLElement = originEl?.elementRef?.nativeElement ?? originEl?.nativeElement ?? originEl;\n\n this.updateInputWidth(origin);\n\n if (this.overlayRef) {\n this.overlayRef.detach(); // Đóng nếu đã mở\n }\n\n width = width > origin.offsetWidth ? width : origin.offsetWidth; // 👈 Lấy chiều rộng của input\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 5,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -5,\n },\n ])\n .withDefaultOffsetY(5);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width, // 👈 Gán chiều rộng cho overlay\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n });\n\n const portal = new TemplatePortal(target, this.vcr);\n this.overlayRef.attach(portal);\n\n const overlayElement = this.overlayRef.overlayElement;\n\n // hasBackdrop: false, thêm cái này để đóng khi click ra ngoài\n fromEvent<MouseEvent>(document, 'click')\n .pipe(\n filter((event) => {\n const clickTarget = event.target as HTMLElement;\n\n return (\n this.overlayRef &&\n !overlayElement.contains(clickTarget) && // click không nằm trong overlay\n !origin.contains(clickTarget) && // và cũng không phải click vào input gốc\n !clickTarget.closest('.ant-select-dropdown') &&\n !clickTarget.closest('.ant-select-item') &&\n !clickTarget.closest('.ant-select-item-option-content') &&\n !clickTarget.closest('.no-close-custom-dropdow')\n );\n }),\n takeUntil(this.overlayRef.detachments()), // tự huỷ khi overlay bị đóng\n )\n .subscribe(() => {\n this.overlayRef?.detach();\n });\n }\n\n updateInputWidth(inputEl: HTMLElement) {\n this.inputWidth = inputEl?.offsetWidth || 0;\n }\n // END custom dropdow\n}\n","import { Component } from '@angular/core';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { BaseComponent } from '../base.component';\n\ninterface IBreadcrumb {\n Name: string;\n URL?: string;\n Click?: Function;\n}\n\n@Component({\n selector: 'app-breadcrumb',\n templateUrl: './breadcrumb.html',\n imports: [NzBreadCrumbModule, NzIconModule],\n})\nexport class Breadcrumb extends BaseComponent {\n Breadcrumb = Breadcrumb;\n\n private static _lstBreadcrumb: IBreadcrumb[] = [];\n public static get lstBreadcrumb() {\n return Breadcrumb._lstBreadcrumb;\n }\n public static set lstBreadcrumb(val: IBreadcrumb[]) {\n setTimeout(() => {\n Breadcrumb._lstBreadcrumb = val;\n }, 0);\n }\n\n public static clear() {\n Breadcrumb.lstBreadcrumb = [];\n }\n\n gohome() {\n this.goto('');\n }\n\n onclick(item: IBreadcrumb) {\n if (item.URL) {\n this.goto(item.URL);\n } else if (item.Click) {\n item.Click();\n }\n }\n}\n","<nz-breadcrumb>\n <nz-breadcrumb-item (click)=\"gohome()\">\n <nz-icon nzType=\"home\" nzTheme=\"outline\" />\n </nz-breadcrumb-item>\n @for (item of Breadcrumb.lstBreadcrumb; track $index) {\n <nz-breadcrumb-item (click)=\"onclick(item)\">{{ item.Name }}</nz-breadcrumb-item>\n }\n</nz-breadcrumb>\n","import { Component, ElementRef, Input, AfterViewInit, ViewChild, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'animated-digit',\n templateUrl: 'animated-digit.component.html',\n styleUrls: ['animated-digit.component.scss'],\n})\nexport class AnimatedDigitComponent implements AfterViewInit, OnChanges {\n @Input() duration: number = 0;\n @Input() digit: number = 0;\n @Input() steps: number = 0;\n @ViewChild('animatedDigit') animatedDigit!: ElementRef;\n\n private currentValue: number = 0;\n\n animateCount() {\n if (!this.duration) {\n this.duration = 1000;\n }\n\n if (typeof this.digit === 'number') {\n this.counterFunc(this.currentValue, this.digit, this.duration, this.animatedDigit);\n }\n }\n\n counterFunc(startValue: number, endValue: number, durationMs: number, element: ElementRef) {\n if (!this.steps) {\n this.steps = 12;\n }\n\n const stepCount = Math.abs(durationMs / this.steps);\n const valueIncrement = (endValue - startValue) / stepCount;\n const sinValueIncrement = Math.PI / stepCount;\n\n let currentSinValue = 0;\n\n function step() {\n currentSinValue += sinValueIncrement;\n startValue += valueIncrement * Math.sin(currentSinValue) ** 2 * 2;\n if (element) element.nativeElement.textContent = Math.abs(Math.floor(startValue));\n\n if (currentSinValue < Math.PI) {\n window.requestAnimationFrame(step);\n }\n }\n\n step();\n }\n\n ngAfterViewInit() {\n if (this.digit) {\n this.animateCount();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['digit']) {\n this.animateCount();\n setTimeout(() => {\n this.currentValue = this.digit;\n }, this.duration);\n }\n }\n}\n","<span #animatedDigit class=\"animated-digit\">\n <span>{{digit}}</span>\n</span>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-bar-graph',\n templateUrl: './bar-graph.component.html',\n styleUrls: ['./bar-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class BarGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createBarGraph();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n createBarGraph() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'bar',\n data: {\n labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],\n datasets: [\n {\n backgroundColor: 'rgba(92, 107, 192, .7)',\n borderColor: 'rgba(92, 107, 192, .7)',\n data: [70, 88, 77, 93, 82, 100, 70, 67, 78, 99],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(66, 165, 245, .7)',\n borderColor: 'rgba(69, 39, 160, .7)',\n data: [80, 88, 67, 95, 76, 60, 67, 95, 95, 66],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(38, 166, 154, .7)',\n borderColor: 'rgba(69, 39, 160, .7)',\n data: [60, 88, 70, 67, 27, 83, 78, 88, 95, 60],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(102, 187, 106, .7)',\n borderColor: 'rgba(255, 99, 132)',\n data: [75, 55, 55, 95, 66, 88, 70, 78, 77, 100],\n label: 'Dataset',\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n maintainAspectRatio: false,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"dash-bar-graph-holder mat-elevation-z4\" [ngStyle]=\"{ height: height + 'px' }\">\n <canvas [id]=\"id\"></canvas>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { AnimatedDigitComponent } from '../animated/animated-digit.component';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzGridModule } from 'ng-zorro-antd/grid';\n\n@Component({\n selector: 'cdk-dashcard',\n templateUrl: './dashcard.component.html',\n styleUrls: ['./dashcard.component.scss'],\n imports: [NzGridModule, NzIconModule, AnimatedDigitComponent],\n})\nexport class DashcardComponent implements OnInit {\n @Input() dashData: any;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","<div nz-row class=\"dashcard mat-elevation-z2\" style=\"height: 100%\">\n <div nz-col [nzSpan]=\"8\" class=\"text-center\" [style.background]=\"dashData?.colorLight\">\n <nz-icon class=\"mat-icon\" style=\"padding-top: 50px\" [nzType]=\"dashData?.icon\" nzTheme=\"outline\" />\n </div>\n <div nz-col [nzSpan]=\"16\" [style.background]=\"dashData?.colorDark\">\n <div class=\"text-center animated-digit\">\n <animated-digit [digit]=\"dashData?.number\"></animated-digit>\n </div>\n <p\n class=\"text-center mat-body-1 border-top text-bold\"\n style=\"font-size: 16px; margin-bottom: 8px; padding-top: 3px\"\n >\n {{ dashData?.title }}\n </p>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-doughnut-graph',\n templateUrl: './doughnut-graph.component.html',\n styleUrls: ['./doughnut-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class DoughnutGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createDoughnutGraph();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n randomNumber(min = 0, max = 0) {\n if (min == 0 || max == 0) return Math.round(Math.random() * 100);\n else return Math.random() * (max - min) + min;\n }\n\n createDoughnutGraph() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'doughnut',\n data: {\n labels: ['Data '],\n datasets: [\n {\n data: [this.randomNumber(), this.randomNumber(), this.randomNumber(), this.randomNumber()],\n backgroundColor: [\n 'rgba(255, 99, 132,.7)',\n 'rgba(92, 107, 192,.7)',\n 'rgba(66, 165, 245,.7)',\n 'rgba(38, 166, 154,.7)',\n 'rgba(102, 187, 106,.7)',\n ],\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n\n maintainAspectRatio: false,\n responsive: true,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"doughnut-graph-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-line-graph',\n templateUrl: './line-graph.component.html',\n styleUrls: ['./line-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class LineGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createLineChart();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n createLineChart() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'line',\n data: {\n labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n datasets: [\n {\n backgroundColor: 'rgba(92, 107, 192, 0.36)',\n borderColor: 'rgba(92, 107, 192,.5)',\n data: [76.97, 88.91, 99.31, 122.19, 130.85, 140.91, 150.36, 142.66, 150.36, 142.66],\n label: 'Dataset',\n fill: 'start',\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n\n maintainAspectRatio: false,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"line-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\nimport { NzFormModule } from 'ng-zorro-antd/form';\n\n@Component({\n selector: 'extend-checkbox',\n templateUrl: './extend-checkbox.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NzFormModule, NzCheckboxModule],\n})\nexport class ExtendCheckbox implements OnInit {\n @Input() label = '';\n @Input() labelSpan = 8;\n @Input() disabled = false;\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n /**\n * default: boolean\n */\n @Input() valueType: 'boolean' | 'number' | 'string' = 'boolean';\n\n @Input()\n get _ngModel() {\n if (this.valueType == 'boolean') {\n return this.checked;\n }\n if (this.valueType == 'number') {\n return this.checked ? 1 : 0;\n }\n if (this.valueType == 'string') {\n return this.checked ? 'Y' : 'N';\n }\n }\n set _ngModel(val: any) {\n if (this.controlName) {\n if (this.valueType == 'boolean') {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x;\n });\n } else if (this.valueType == 'number') {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x == 1;\n });\n } else {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x == 'Y';\n });\n }\n } else {\n this.checked = val ? true : false;\n }\n }\n @Output() _ngModelChange = new EventEmitter();\n\n checked = false;\n\n ngOnInit(): void {\n if (this.controlName && this.formData?.controls[this.controlName]) {\n if (this.valueType === 'boolean') {\n this.checked = this.formData.controls[this.controlName].getRawValue();\n console.log(this.checked);\n } else if (this.valueType === 'number') {\n this.checked = this.formData.controls[this.controlName].getRawValue() === 1;\n } else {\n this.checked = this.formData.controls[this.controlName].getRawValue() === 'Y';\n }\n\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n if (this.valueType === 'boolean') {\n this.checked = x;\n } else if (this.valueType === 'number') {\n this.checked = x === 1;\n } else {\n this.checked = x === 'Y';\n }\n });\n }\n }\n\n onCheckChange(event: boolean) {\n if (this.controlName) {\n if (this.valueType == 'boolean') {\n this.formData.controls[this.controlName].setValue(event);\n } else if (this.valueType == 'number') {\n this.formData.controls[this.controlName].setValue(event ? 1 : 0);\n } else if (this.valueType == 'string') {\n this.formData.controls[this.controlName].setValue(event ? 'Y' : 'N');\n }\n } else {\n if (this.valueType == 'boolean') {\n this._ngModelChange.emit(event);\n } else if (this.valueType == 'number') {\n this._ngModelChange.emit(event ? 1 : 0);\n } else if (this.valueType == 'string') {\n this._ngModelChange.emit(event ? 'Y' : 'N');\n }\n }\n }\n}\n","@if (label) {\n <div nz-row>\n <div nz-col [nzSpan]=\"labelSpan\"></div>\n <div nz-col nzFlex=\"auto\">\n <label\n style=\"position: relative; top: 5px\"\n nz-checkbox\n [nzDisabled]=\"disabled\"\n [(nzChecked)]=\"checked\"\n (nzCheckedChange)=\"onCheckChange($event)\"\n >\n {{ label }}\n </label>\n </div>\n </div>\n} @else {\n <label\n nz-checkbox\n [nzDisabled]=\"disabled\"\n [(nzChecked)]=\"checked\"\n (nzCheckedChange)=\"onCheckChange($event)\"\n style=\"width: 16px\"\n >\n {{ label }}\n </label>\n}\n","export class DateTimeHelper {\n static lstDay = Array.from({ length: 31 }, (_, i) => i + 1);\n static lstMonth = Array.from({ length: 12 }, (_, i) => i + 1);\n\n private static fromYear = new Date().getFullYear() - 10;\n private static toYear = new Date().getFullYear();\n static lstYear = Array.from(\n { length: DateTimeHelper.toYear - DateTimeHelper.fromYear },\n (_, i) => DateTimeHelper.toYear - i,\n );\n\n /**\n * Lấy ngày giờ hiện tại dưới dạng chuỗi \"YYYY-MM-DD HH:mm:ss\"\n * @return {string}\n */\n static now(): string {\n const now = new Date();\n return `${now.getFullYear()}-${this.pad(now.getMonth() + 1)}-${this.pad(now.getDate())} ${this.pad(now.getHours())}:${this.pad(now.getMinutes())}:${this.pad(now.getSeconds())}`;\n }\n\n /**\n * Lấy ngày hôm nay dưới dạng chuỗi \"YYYY-MM-DD HH:mm:ss\"\n * @return {string}\n */\n static today(): string {\n const now = new Date();\n return `${now.getFullYear()}-${this.pad(now.getMonth() + 1)}-${this.pad(now.getDate())} 00:00:00`;\n }\n\n /**\n * Tạo ngày từ năm, tháng, ngày (có kiểm tra hợp lệ, không bị lệch múi giờ).\n * @param {number} year Năm\n * @param {number} month Tháng (1-12)\n * @param {number} day Ngày (1-31)\n * @param {boolean} isEndOfDay Nếu true, trả về 23:59:59, ngược lại 00:00:00\n * @return {string | null} Chuỗi ngày định dạng \"YYYY-MM-DD HH:mm:ss\" hoặc null nếu ngày không hợp lệ\n */\n static createDate(year: number, month: number, day: number, isEndOfDay: boolean = false): string | null {\n if (!this.isValidDate(year, month, day)) {\n return null;\n }\n\n const hour = isEndOfDay ? 23 : 0;\n const minute = isEndOfDay ? 59 : 0;\n const second = isEndOfDay ? 59 : 0;\n return `${year}-${this.pad(month)}-${this.pad(day)} ${this.pad(hour)}:${this.pad(minute)}:${this.pad(second)}`;\n }\n\n /**\n * Kiểm tra xem ngày có hợp lệ không.\n * @param {number} year Năm\n * @param {number} month Tháng (1-12)\n * @param {number} day Ngày (1-31)\n * @return {boolean} True nếu ngày hợp lệ, ngược lại False.\n */\n public static isValidDate(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const lastDay = new Date(year, month, 0).getDate(); // Lấy ngày cuối tháng\n return day <= lastDay;\n }\n\n /**\n * Hàm hỗ trợ: Định dạng số thành 2 chữ số (01, 02, ..., 09)\n * @param {number} n The second number.\n * @return {string} The sum of the two numbers.\n */\n private static pad(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n public static parser(dateStr: string) {\n if (!dateStr.includes('/')) {\n dateStr = this.formatNumberToDate(dateStr);\n }\n\n const parts = dateStr.split('/');\n const current = new Date();\n\n let normalizedValue = '';\n\n if (parts.length === 1 && /^\\d{1,2}$/.test(parts[0])) {\n // Chỉ có ngày -> ghép tháng/năm hiện tại\n normalizedValue = `${parts[0].padStart(2, '0')}/${(current.getMonth() + 1).toString().padStart(2, '0')}/${current.getFullYear()}`;\n } else if (parts.length === 2 && /^\\d{1,2}$/.test(parts[0]) && /^\\d{1,2}$/.test(parts[1])) {\n // Có ngày + tháng -> ghép năm hiện tại\n normalizedValue = `${parts[0].padStart(2, '0')}/${parts[1].padStart(2, '0')}/${current.getFullYear()}`;\n } else {\n // Đã đủ 3 phần\n normalizedValue = dateStr;\n }\n\n if (normalizedValue) {\n const parts = normalizedValue.split('/');\n const day = +parts[0];\n const month = +parts[1];\n const year = +parts[2];\n\n if (DateTimeHelper.isValidDate(year, month, day)) {\n return DateTimeHelper.createDate(year, month, day);\n }\n }\n\n return '';\n }\n\n private static formatNumberToDate(input: string): string {\n // Lấy tối đa 8 ký tự\n input = input.replace(/\\D/g, '').substring(0, 8);\n\n const day = input.substring(0, 2);\n const month = input.substring(2, 4);\n const year = input.substring(4, 8);\n\n let result = '';\n\n if (day) {\n result += day;\n if (month) result += '/';\n }\n\n if (month) {\n result += month;\n if (year) result += '/';\n }\n\n if (year) {\n result += year;\n }\n\n return result;\n }\n}\n","import { Directive, HostListener, Input, AfterViewInit, ElementRef, Optional, Self } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { parse, isValid } from 'date-fns';\nimport { DateTimeHelper } from '../helper/date.helper';\n\n/**\n * Dùng cho nz-date-picker\n */\n@Directive({\n selector: 'nz-date-picker',\n})\nexport class DateInputParserDirective implements AfterViewInit {\n @Input('format') format = 'dd/MM/yyyy';\n private inputElement: HTMLInputElement | null = null;\n private blurHandler = this.tryParseAndSet.bind(this);\n\n constructor(\n private el: ElementRef<HTMLElement>,\n @Optional() @Self() private ngControl: NgControl,\n ) {}\n\n ngAfterViewInit() {\n // Tìm thẻ input bên trong nz-date-picker\n this.inputElement = this.el.nativeElement.querySelector('input');\n\n // Gắn listener blur vào input\n if (this.inputElement) {\n this.inputElement.addEventListener('blur', this.blurHandler);\n }\n }\n\n ngOnDestroy() {\n // Cleanup blur listener để tránh memory leak\n if (this.inputElement) {\n this.inputElement.removeEventListener('blur', this.blurHandler);\n }\n }\n\n @HostListener('keyup.enter')\n onEnter() {\n this.tryParseAndSet();\n this.inputElement?.blur(); // Blur sau khi enter nếu muốn trigger binding ngoài\n }\n\n private tryParseAndSet() {\n if (!this.inputElement) return;\n\n const rawValue = this.inputElement.value.trim();\n const parsed = DateTimeHelper.parser(rawValue);\n\n if (parsed) {\n this.ngControl?.control?.setValue(parsed);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { DateInputParserDirective } from '../../directive/date-input-parser.directive';\n\n@Component({\n selector: 'extend-date-picker',\n templateUrl: './extend-date-picker.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NzFormModule,\n NzDatePickerModule,\n TranslateModule,\n DateInputParserDirective,\n ],\n})\nexport class ExtendDatePicker {\n @Input() dateFormat = 'dd/MM/yyyy';\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(obj: any): void {\n this._ngModel = obj;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {}\n\n onNgModelChange(val: any) {\n this._ngModel = val;\n this.onChange(val); // Gửi ngược ra form\n this.onTouched();\n this._ngModelChange.emit(val);\n }\n\n disabledDate = (current: Date): boolean => {\n if (!current) return false;\n\n const min = this.minDate ? new Date(this.minDate) : null;\n const max = this.maxDate ? new Date(this.maxDate) : null;\n\n if (min && current < new Date(min.setHours(0, 0, 0, 0))) return true;\n if (max && current > new Date(max.setHours(23, 59, 59, 999))) return true;\n\n return false;\n };\n\n get errorMessage(): string {\n const value = this._ngModel ? new Date(this._ngModel) : null;\n\n if (!this.isTouched && !value) {\n return '';\n }\n\n if (this.required && !value) {\n return 'Trường yêu cầu nhập';\n }\n\n if (this.minDate && value && new Date(value) < new Date(this.minDate)) {\n return `Ngày không được nhỏ hơn ${this.formatDate(this.minDate)}`;\n }\n\n if (this.maxDate && value && new Date(value) > new Date(this.maxDate)) {\n return `Ngày không được lớn hơn ${this.formatDate(this.maxDate)}`;\n }\n return '';\n }\n\n private formatDate(date: Date): string {\n const d = new Date(date);\n const day = String(d.getDate()).padStart(2, '0');\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const year = d.getFullYear();\n\n switch (this.dateFormat) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'MM/dd/yyyy':\n return `${month}/${day}/${year}`;\n default:\n return d.toLocaleDateString();\n }\n }\n\n isTouched = false;\n\n onBlur() {\n this.isTouched = true;\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"errorMessage\"\n [nzValidateStatus]=\"errorMessage ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-date-picker\n class=\"full-width\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n ></nz-date-picker>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { endOfMonth, endOfWeek, startOfMonth, startOfWeek, subMonths, subWeeks } from 'date-fns';\n\n@Component({\n selector: 'extend-date-range-picker',\n templateUrl: './extend-date-range-picker.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NzFormModule, NzDatePickerModule, TranslateModule],\n})\nexport class ExtendDateRangePicker implements OnInit {\n @Input() dateFormat = 'dd/MM/yyyy';\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() date1: Date | null = null;\n @Output() date1Change = new EventEmitter();\n\n @Input() date2: Date | null = null;\n @Output() date2Change = new EventEmitter();\n\n _ngModel: Date[] | undefined;\n\n today = new Date();\n\n ranges = {\n 'Tuần này': [startOfWeek(this.today, { weekStartsOn: 1 }), endOfWeek(this.today, { weekStartsOn: 1 })],\n 'Tuần trước': [\n startOfWeek(subWeeks(this.today, 1), { weekStartsOn: 1 }),\n endOfWeek(subWeeks(this.today, 1), { weekStartsOn: 1 }),\n ],\n 'Tháng này': [startOfMonth(this.today), endOfMonth(this.today)],\n 'Tháng trước': [startOfMonth(subMonths(this.today, 1)), endOfMonth(subMonths(this.today, 1))],\n };\n\n ngOnInit(): void {\n this._ngModel = this.date1 && this.date2 ? [this.date1, this.date2] : undefined;\n }\n\n ngModelChange(value: Date[] | undefined) {\n this._ngModel = value;\n\n if (value && value.length === 2) {\n this.date1 = value[0];\n this.date2 = value[1];\n } else {\n this.date1 = null;\n this.date2 = null;\n }\n\n this.date1Change.emit(this.date1);\n this.date2Change.emit(this.date2);\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <!-- <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div> -->\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['Từ ngày', 'đến ngày']\"\n [nzRanges]=\"ranges\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n </nz-form-item>\n } @else {\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['Từ ngày', 'đến ngày']\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzInputNumberComponent, NzInputNumberModule } from 'ng-zorro-antd/input-number';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-input-number',\n templateUrl: './extend-input-number.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputNumberModule],\n})\nexport class ExtendInputNumber {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal'; // horizontal: ngang, vertical dọc\n @Input() label = '';\n @Input() placeHolder: 'off' | '' = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() min: number | null = null;\n @Input() max: number | null = null;\n @Input() precision: number = 0;\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n\n /** separatorType: 'comma' (,) | 'dot' (.) */\n @Input() separatorType?: 'comma' | 'dot' | 'blank';\n /** defaultSeparatorType: 'comma' (,) | 'dot' (.) */\n static defaultSeparatorType: 'comma' | 'dot' = 'dot';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @ViewChild('inputnumber') inputnumber!: NzInputNumberComponent;\n\n ngOnInit(): void {}\n\n _onNgModelChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n\n @ViewChild('inputElement') inputElement!: ElementRef;\n\n focus(): void {\n this.inputElement?.nativeElement?.focus();\n }\n\n formatterNumber = (value: number): string => {\n if (value == null || isNaN(value)) return '';\n\n if (!this.getSeparatorType()) {\n return value.toString();\n }\n const parts = `${value}`.split('.');\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.getSeparatorType() === 'comma' ? ',' : '.');\n return parts.length > 1\n ? `${integerPart}${this.getSeparatorType() === 'comma' ? '.' : ','}${parts[1]}`\n : integerPart;\n };\n\n parserNumber = (value: string): number => {\n if (!value) return 0;\n\n if (!this.getSeparatorType()) {\n return parseFloat(value);\n }\n\n // Bỏ ký tự phân cách hàng nghìn\n const cleaned = value\n .replace(new RegExp(`\\\\${this.getSeparatorType() === 'comma' ? ',' : '.'}`, 'g'), '')\n .replace(this.getSeparatorType() === 'comma' ? '.' : ',', '.');\n\n // Kiểm tra toàn bộ chuỗi có phải là số hợp lệ hay không\n if (!/^-?\\d+(\\.\\d+)?$/.test(cleaned)) return NaN;\n\n const parsed = parseFloat(cleaned);\n\n // Ép chạy formatter lại\n setTimeout(() => {\n this.inputnumber.writeValue(parsed);\n this._ngModelChange.emit(parsed);\n if (this.formData && this.controlName) {\n this.formData.controls[this.controlName].setValue(parsed);\n }\n });\n\n return parsed;\n };\n\n getSeparatorType() {\n if (this.separatorType == 'blank') {\n return '';\n }\n if (this.separatorType) {\n return this.separatorType;\n }\n return ExtendInputNumber.defaultSeparatorType;\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-input',\n templateUrl: './extend-input.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputModule, NzIconModule],\n})\nexport class ExtendInput {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal'; // horizontal: ngang, vertical dọc\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() inputClass = '';\n\n /**\n * default = 8\n */\n @Input() labelSpan = 8;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() readOnly = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n @Input() autocomplete: 'off' | '' = '';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n\n /**\n * Dùng trong word page\n */\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @Output() onclickClearIcon = new EventEmitter();\n\n @Output() onenter = new EventEmitter();\n\n ngOnInit(): void {}\n\n _onNgModelChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n\n @ViewChild('inputElement') inputElement!: ElementRef;\n\n focus(): void {\n this.inputElement?.nativeElement?.select();\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { NzSelectModule, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { FormGroup, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzFormModule } from 'ng-zorro-antd/form';\n\n@Component({\n selector: 'extend-select',\n templateUrl: './extend-select.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzSelectModule],\n styles: `\n :host ::ng-deep .ant-select-selector {\n height: var(--custom-select-height) !important;\n line-height: var(--custom-select-height) !important;\n }\n `,\n})\nexport class ExtendSelectComponent {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n\n /**\n * default = 8\n */\n @Input() labelSpan = 8;\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(val: boolean) {\n this._disabled = val;\n\n if (this.formData && this.controlName) {\n const control = this.formData.controls[this.controlName];\n\n if (this._disabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false }); // <-- bỏ disable\n }\n }\n }\n @Input() required = false;\n @Input() noBottom = false;\n @Input() multiple = false;\n @Input() showSelectAll = false;\n @Input() maxTagCount = 10;\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n\n /**\n *\n */\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() displayFields: string[] = [];\n\n /**\n * Không có thì value sẽ là cả object\n */\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @Output() itemChange = new EventEmitter();\n\n @Output() onFocus = new EventEmitter();\n\n @HostBinding('style.--custom-select-height')\n get cssHeight() {\n return this.inputHeight ? +this.inputHeight.replaceAll('px', '') - 1 + 'px' : null;\n }\n\n private _disabled = false;\n\n ngOnInit(): void {\n if (this.formData && this.controlName) {\n this.formData.controls[this.controlName].valueChanges.subscribe((val) => {\n this._ngModelChange.emit(val);\n this.itemChange.emit(this.lstItem.find((x) => x[this.valueField] == val));\n });\n }\n }\n\n getDisplay(item: any): string {\n if (this.displayField) {\n return item[this.displayField];\n }\n\n if (this.displayFields?.length) {\n const display = this.displayFields.map((field) => item[field]).join(' - ');\n return display;\n }\n\n return item;\n }\n\n onSelectChange(val: any) {\n if (val instanceof Array && val.find((x) => x == '__all__')) {\n const allIds = this.lstItem.map((x) => (this.valueField ? x[this.valueField] : x));\n val = allIds;\n }\n\n this._ngModel = val;\n this._ngModelChange.emit(val);\n\n if (this.valueField) {\n this.itemChange.emit(this.lstItem.find((x) => x[this.valueField] == val));\n }\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzSelectModeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-textarea',\n templateUrl: './extend-textarea.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NzFormModule,\n NzDatePickerModule,\n TranslateModule,\n NzInputModule,\n ],\n})\nexport class ExtendTextArea implements AfterViewInit {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n @Input() inputClass = '';\n\n @Input() minRows = 3;\n @Input() maxRows = 5;\n @Input() autoSize = false;\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n ngAfterViewInit(): void {}\n\n onChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n}\n","@if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n </div>\n} @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n ></textarea>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n template: `\n <h2>Không có quyền truy cập</h2>\n <p *ngIf=\"message\">{{ message }}</p>\n <p *ngIf=\"deniedUrl\">\n Bạn đã cố gắng truy cập: <strong>{{ deniedUrl }}</strong>\n </p>\n `,\n imports: [CommonModule],\n})\nexport class NoPermission {\n deniedUrl: string | null = null;\n message: string | null = null;\n\n constructor(private router: Router) {}\n\n ngOnInit(): void {\n const state = history.state;\n\n this.deniedUrl = state?.deniedUrl || null;\n this.message = state?.message || null;\n\n console.log('Lấy từ history.state:', state);\n }\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { NZ_MODAL_DATA } from 'ng-zorro-antd/modal';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\n\n@Component({\n selector: 'pdf-viewer',\n templateUrl: './pdf-viewer.html',\n imports: [NgxExtendedPdfViewerModule],\n})\nexport class PdfViewerComponent implements OnInit {\n // data = inject(NZ_MODAL_DATA);\n\n @Input() dataType: 'base64' | 'bytes' | null = null;\n @Input() pdfData: any;\n\n ngOnInit(): void {\n // this.dataType = this.data.dataType;\n // this.pdfData = this.data.pdfData;\n // this.showPrintButton = this.data.showPrintButton;\n }\n\n print() {\n if (this.dataType == 'base64') {\n const byteCharacters = atob(this.pdfData);\n const byteNumbers = new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i));\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n\n const blobUrl = window.URL.createObjectURL(blob);\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = blobUrl;\n document.body.appendChild(iframe);\n iframe.contentWindow?.print();\n } else if (this.dataType == 'bytes') {\n const blob = new Blob([this.pdfData], { type: 'application/pdf' });\n\n const blobUrl = window.URL.createObjectURL(blob);\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = blobUrl;\n document.body.appendChild(iframe);\n iframe.contentWindow?.print();\n }\n }\n}\n","@if (dataType == \"base64\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [base64Src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n\n@if (dataType == \"bytes\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { Subscription } from 'rxjs';\nimport { LoadingService } from '../../services/loading.service';\n\n// global-spinner.component.ts\n@Component({\n selector: 'app-global-spinner',\n template: `\n @if (visible) {\n <div class=\"global-spinner\" [@fadeInOut]>\n <nz-spin [nzSpinning]=\"true\" style=\"position: relative; bottom: 50px;\"></nz-spin>\n </div>\n }\n `,\n styles: [\n `\n .global-spinner {\n position: fixed;\n z-index: 1200; /* Lớn hơn z-index của modal (usually ~1000) */\n top: 50px;\n left: 0px;\n width: 100vw;\n height: 100vh;\n background-color: rgba(255, 255, 255, 0.8); /* Optional overlay */\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `,\n ],\n animations: [\n trigger('fadeInOut', [\n // transition(':enter', [style({ opacity: 0 }), animate('250ms ease-in', style({ opacity: 1 }))]),\n transition(':leave', [animate('250ms ease-out', style({ opacity: 0 }))]),\n ]),\n ],\n\n imports: [NzSpinModule],\n})\nexport class GlobalSpinnerComponent implements OnInit, OnDestroy {\n visible = false;\n private sub!: Subscription;\n\n constructor(public loadingService: LoadingService) {}\n\n ngOnInit() {\n this.sub = this.loadingService.loading$.subscribe((v) => {\n this.visible = v;\n });\n }\n\n ngOnDestroy() {\n this.sub.unsubscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'height',\n template: `<div [ngStyle]=\"{ height: height + 'px' }\"></div>`,\n imports: [CommonModule],\n})\nexport class Height {\n @Input() height: number = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'width',\n template: `<div style=\"display: inline\" [ngStyle]=\"{ 'padding-left': width + 'px' }\"></div>`,\n imports: [CommonModule],\n})\nexport class Width {\n @Input() width: number = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'box',\n template: `<div\n [ngStyle]=\"{\n height: height + 'px',\n 'padding-left': width + 'px',\n display: display ? display : width && height ? 'block' : height ? 'block' : width ? 'inline' : display,\n }\"\n ></div>`,\n imports: [CommonModule],\n})\nexport class Box {\n @Input() display: 'block' | 'inline' | '' = '';\n @Input() width: number = 0;\n @Input() height: number = 0;\n}\n","import { Directive, ElementRef, Input, Renderer2, OnChanges, SimpleChanges, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[appAutoFocus]'\n})\nexport class AutoFocusDirective implements OnChanges {\n\n @Input() appAutoFocus: boolean = false;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['appAutoFocus'] && this.appAutoFocus) {\n setTimeout(() => this.el.nativeElement.focus(), 0);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'input',\n})\nexport class NullIfEmptyDirective {\n constructor(\n private el: ElementRef,\n @Optional() private ngControl: NgControl,\n ) {}\n\n @HostListener('input')\n onInput() {\n // const value = this.el.nativeElement.value;\n // const newValue = value.trim() === '' ? null : value;\n // this.ngControl?.control?.setValue(newValue, { emitEvent: false });\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[numberOnly]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberOnlyDirective),\n multi: true,\n },\n ],\n})\nexport class NumberOnlyDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n return value.replace(/\\D/g, '');\n }\n}\n","import { Directive, forwardRef, ElementRef, Renderer2 } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\n@Directive({\n selector: '[uppercaseFirstLetterEachWord]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UpperCaseFirsLetterEachWordDirective),\n multi: true,\n },\n ],\n})\nexport class UpperCaseFirsLetterEachWordDirective implements ControlValueAccessor {\n private inputElement: HTMLInputElement | null = null;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n ngAfterViewInit() {\n setTimeout(() => {\n // Nếu gắn vào <input>, thì chính nó là input\n if (this.el.nativeElement.tagName.toLowerCase() === 'input') {\n this.inputElement = this.el.nativeElement;\n } else {\n // Nếu không, tìm input con bên trong\n this.inputElement = this.el.nativeElement.querySelector('input');\n }\n\n if (this.inputElement) {\n this.renderer.listen(this.inputElement, 'input', (event: any) => {\n const formatted = this.formatValue(event.target.value);\n this.renderer.setProperty(this.inputElement, 'value', formatted);\n this.onChange(formatted);\n });\n }\n\n if (this.pendingValue !== null) {\n this.renderer.setProperty(this.inputElement, 'value', this.pendingValue);\n this.pendingValue = null;\n }\n }, 0);\n }\n\n private pendingValue: any = null;\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n if (this.inputElement) {\n this.renderer.setProperty(this.inputElement, 'value', formattedValue);\n } else {\n this.pendingValue = formattedValue;\n }\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.inputElement) {\n this.renderer.setProperty(this.inputElement, 'disabled', isDisabled);\n }\n }\n\n private formatValue(value: string): string {\n return value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[uppercaseFirstLetter]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UppercaseFirstLetterDirective),\n multi: true,\n },\n ],\n})\nexport class UppercaseFirstLetterDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n const ls = value.split('');\n ls[0] = ls[0].toUpperCase();\n return ls.join('');\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[uppercase]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UppercaseDirective),\n multi: true,\n },\n ],\n})\nexport class UppercaseDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n return value.toUpperCase();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'limitWords',\n})\nexport class LimitWordsPipe implements PipeTransform {\n transform(value: string, limit: number = 3): string {\n if (!value) return '';\n const words = value.split(' ');\n return words.length <= limit ? value : words.slice(0, limit).join(' ') + '...';\n }\n}\n","export class DownloadHelper {\n public static downloadFileBlop(response: any) {\n const contentDisposition = response.headers.get('Content-Disposition');\n let filename = 'downloaded-file';\n\n if (contentDisposition) {\n const filenameStarMatch = contentDisposition.match(/filename\\*\\=UTF-8''(.+?)(;|$)/);\n const filenameMatch = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n\n if (filenameStarMatch?.[1]) {\n filename = decodeURIComponent(filenameStarMatch[1]);\n } else if (filenameMatch?.[1]) {\n filename = filenameMatch[1];\n }\n }\n\n const blob = new Blob([response.body!], { type: 'application/octet-stream' });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n\n alert('Không có dữ liệu file');\n return;\n }\n\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n }\n\n public static downloadFile(data: any, filename: string) {\n const contentType = 'application/octet-stream';\n const blob = new Blob([data], { type: contentType });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n alert('Không có dữ liệu file');\n return;\n }\n\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n }\n\n public static downloadFileBase64(base64Data: string, fileName: string) {\n // Chuyển đổi Base64 thành dữ liệu nhị phân\n const binaryString = window.atob(base64Data);\n const binaryLen = binaryString.length;\n const bytes = new Uint8Array(binaryLen);\n\n for (let i = 0; i < binaryLen; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Tạo một Blob từ dữ liệu nhị phân\n const blob = new Blob([bytes], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n alert('Không có dữ liệu file');\n return;\n }\n\n // Tạo một liên kết tạm thời để tải tệp về\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = fileName;\n\n // Kích hoạt việc tải tệp\n document.body.appendChild(link);\n link.click();\n\n // Xóa liên kết sau khi tải\n document.body.removeChild(link);\n }\n}\n","import * as XLSX from 'xlsx';\n\nexport class XLSXHelper {\n public static readExcelFileToObjects(file: File, columnCount?: number, readAllSheets?: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent<FileReader>) => {\n const data = new Uint8Array(e.target?.result as ArrayBuffer);\n const workbook = XLSX.read(data, { type: 'array' });\n\n const sheetNames = workbook.SheetNames;\n\n // Trả về nhiều sheet\n if (readAllSheets) {\n const sheetsdata: Record<string, any[]> = {};\n\n for (const sheetName of sheetNames) {\n const worksheet = workbook.Sheets[sheetName];\n const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {\n header: 1,\n defval: '',\n });\n\n let rows = rawData.slice(1);\n\n while (rows.length > 0 && rows[rows.length - 1].every((cell) => cell === '' || cell == null)) {\n rows.pop();\n }\n\n const result = rows.map((row, index) => {\n const obj: any = {};\n const limit = columnCount ?? row.length;\n for (let i = 0; i < limit; i++) {\n obj[`col${i + 1}`] = row[i] ?? '';\n }\n obj.rowIndex = index + 2;\n return obj;\n });\n\n sheetsdata[sheetName] = result;\n }\n\n postMessage({\n sheets: sheetNames,\n sheetsdata,\n });\n\n resolve({\n sheets: sheetNames,\n sheetsdata,\n });\n }\n\n // Trả về sheet đầu tiên\n else {\n const sheetName = sheetNames[0];\n const worksheet = workbook.Sheets[sheetName];\n const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {\n header: 1,\n defval: '',\n });\n\n let rows = rawData.slice(1);\n\n while (rows.length > 0 && rows[rows.length - 1].every((cell) => cell === '' || cell == null)) {\n rows.pop();\n }\n\n const result = rows.map((row, index) => {\n const obj: any = {};\n const limit = columnCount ?? row.length;\n for (let i = 0; i < limit; i++) {\n obj[`col${i + 1}`] = row[i] ?? '';\n }\n obj.rowIndex = index + 2;\n return obj;\n });\n\n resolve(result);\n }\n };\n\n reader.onerror = (error) => reject(error);\n reader.readAsArrayBuffer(file);\n });\n }\n}\n","import { AppGlobals } from './app-global';\n\nexport interface ApiEndpoint {\n apiEndpoint: string;\n versionCheck: string;\n}\n\nexport interface RespondData {\n IsSuccess: boolean;\n ErrorMessage: string;\n Data: any;\n}\n\nexport interface ESPModel {\n SPN: string;\n Params?: any[];\n}\n\nexport interface ExportExcelModel extends ESPModel {\n FileCode?: string;\n TemplateName?: string;\n OpenXML?: boolean;\n}\n\nexport class PagingModel {\n PageIndex: number = 0;\n PageSize: number = AppGlobals.pageSizeOptions[1];\n}\n\nexport class GridFilter extends PagingModel {\n Keyword: string | null = null;\n OrderOption: OrderOption | null = null;\n}\n\nexport class OrderOption {\n FieldName: string | null = null;\n Direction: string | null = null;\n}\n\nexport class PagingData<T = any> {\n LstHeader: TableHeader[] = [];\n LstItem: T[] = [];\n TotalCount = 0;\n\n constructor(\n obj?: any,\n private TypeConstructor?: new (data?: any) => T,\n ) {\n obj = obj ?? {};\n\n this.LstHeader = obj.LstHeader || [];\n this.TotalCount = obj.TotalCount || 0;\n\n if (Array.isArray(obj.LstItem) && this.TypeConstructor) {\n this.LstItem = obj.LstItem.map((item: any) => new this.TypeConstructor!(item));\n } else {\n this.LstItem = obj.LstItem || [];\n }\n }\n}\n\nexport class TableHeader {\n Code: string = '';\n Name: string = '';\n Class: string = '';\n Type: string = '';\n Width: string = '';\n MinWidth: string = '';\n}\n\nexport class CheckModel {\n ConfirmMessage: string = '';\n ConfirmContent: string = '';\n ErrorMessage: string = '';\n ErrorContent: string = '';\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { AuthService } from '../auth/auth.service';\nimport { NotiService } from './noti.service';\n\n@Injectable({ providedIn: 'root' })\nexport class RouteMonitorService {\n constructor(\n private router: Router,\n private authService: AuthService,\n private notiService: NotiService,\n ) {\n this.router.events.subscribe(async (event) => {\n if (event instanceof NavigationEnd) {\n const url = event.urlAfterRedirects;\n\n if (url.startsWith('/') || url.startsWith('/login') || url == '/no-permission') {\n return;\n }\n\n const hasMenu = await this.authService.checkUserMenu(url);\n if (!hasMenu) {\n this.notiService.error(`Không có quyền truy cập: ${url}`);\n this.router.navigate(['/no-permission'], {\n state: {\n deniedUrl: url,\n message: `Bạn không có quyền truy cập vào đường dẫn ${url}`,\n },\n });\n }\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n setHighContrast(enabled: boolean) {\n document.body.classList.toggle('high-contrast', enabled);\n localStorage.setItem('high-contrast', enabled ? '1' : '0');\n }\n\n isHighContrast(): boolean {\n return localStorage.getItem('high-contrast') == '1';\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { HTTPService } from './api-service/http.service';\nimport { NotiService } from './noti.service';\nimport { AppGlobals } from '../app-global';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class VscService extends HTTPService {\n // private readonly currentVersion = '{{POST_BUILD_ENTERS_VERSION_HERE}}';\n public static feClientVersion = '{{POST_BUILD_ENTERS_VERSION_HERE}}';\n public static feServerVersion: string;\n public static beVersion: {};\n public static dbVersion: string;\n public static jsReportTemplateVersion: string;\n\n private modal = inject(NzModalService);\n private notiService = inject(NotiService);\n private interval: any;\n private isShowingPopup = false;\n\n // 10 phút\n public initVersionCheck(frequency = 1000 * 60 * 10) {\n this.interval = setInterval(() => {\n if (!this.isShowingPopup) {\n this.checkVersion();\n }\n }, frequency);\n this.checkVersion();\n }\n\n public checkVersion(all = false) {\n console.log('Check version');\n this.checkFrontendVersion();\n if (all) {\n this.checkBackendVersion();\n // this.checkDatabaseVersion();\n // this.checkJSReportTemplateVersion();\n }\n }\n\n public checkFrontendVersion() {\n if (this.isShowingPopup) {\n return;\n }\n console.log('Check version');\n console.log('current version: ', VscService.feClientVersion);\n this.get(AppGlobals.versionCheck + '?t=' + new Date().getTime()).then(\n async (response: any) => {\n VscService.feServerVersion = response.version;\n console.log('version check: ', VscService.feServerVersion);\n const hashChanged = this.hasVersionChanged(VscService.feClientVersion, VscService.feServerVersion);\n if (hashChanged) {\n // window.location.reload();\n // window.location.href = window.location.href;\n this.isShowingPopup = true;\n // await this.notiService.warning('Có phiên bản mới', 'Vui lòng ấn \"Ctrl + F5\" để cập nhật');\n // this.isShowingPopup = false;\n const modalRef = this.modal.warning({\n nzTitle: 'Có phiên bản mới',\n nzContent: 'Vui lòng ấn \"Ctrl + F5\" để cập nhật',\n });\n }\n },\n (err) => {\n console.error(err, 'Could not get version');\n },\n );\n }\n\n private hasVersionChanged(currentVersion: string, newVersion: string) {\n if (!currentVersion || newVersion === currentVersion) {\n return false;\n }\n return currentVersion !== newVersion;\n }\n\n public clearInterval() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n private checkBackendVersion() {\n this.httpClient.get(AppGlobals.apiEndpoint + '/version').subscribe(\n async (response: any) => {\n VscService.beVersion = response;\n },\n (err) => {\n console.error(err, 'Could not get backend version');\n VscService.beVersion = 'Could not get backend version';\n },\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","filter","i1","i2","i3","i4","i5","i7","i6","i1.LoadingService","i2.AuthService","i3.NotiService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brggroup-share-lib.mjs","sources":["../../../projects/share/src/lib/a-translate-key.ts","../../../projects/share/src/lib/app-global.ts","../../../projects/share/src/lib/app-storeage.ts","../../../projects/share/src/lib/services/api-service/http.service.ts","../../../projects/share/src/lib/services/noti.service.ts","../../../projects/share/src/lib/services/api-service/common.service.ts","../../../projects/share/src/lib/auth/token.storage.ts","../../../projects/share/src/lib/auth/auth.service.ts","../../../projects/share/src/lib/auth/auth.guard.ts","../../../projects/share/src/lib/services/loading.service.ts","../../../projects/share/src/lib/auth/auth.interceptor.ts","../../../projects/share/src/lib/auth/unsaved-changes.guard.ts","../../../projects/share/src/lib/services/custom-modal.service.ts","../../../projects/share/src/lib/components/base.component.ts","../../../projects/share/src/lib/components/base.guard-change.ts","../../../projects/share/src/lib/components/base.overlay.component.ts","../../../projects/share/src/lib/components/breadcrumb/breadcrumb.ts","../../../projects/share/src/lib/components/breadcrumb/breadcrumb.html","../../../projects/share/src/lib/components/dashboard-widget/animated/animated-digit.component.ts","../../../projects/share/src/lib/components/dashboard-widget/animated/animated-digit.component.html","../../../projects/share/src/lib/components/dashboard-widget/bar-graph/bar-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/bar-graph/bar-graph.component.html","../../../projects/share/src/lib/components/dashboard-widget/dashcard/dashcard.component.ts","../../../projects/share/src/lib/components/dashboard-widget/dashcard/dashcard.component.html","../../../projects/share/src/lib/components/dashboard-widget/doughnut-graph/doughnut-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/doughnut-graph/doughnut-graph.component.html","../../../projects/share/src/lib/components/dashboard-widget/line-graph/line-graph.component.ts","../../../projects/share/src/lib/components/dashboard-widget/line-graph/line-graph.component.html","../../../projects/share/src/lib/components/extend-checkbox/extend-checkbox.ts","../../../projects/share/src/lib/components/extend-checkbox/extend-checkbox.html","../../../projects/share/src/lib/helper/date.helper.ts","../../../projects/share/src/lib/directive/date-input-parser.directive.ts","../../../projects/share/src/lib/components/extend-date-picker/extend-date-picker.ts","../../../projects/share/src/lib/components/extend-date-picker/extend-date-picker.html","../../../projects/share/src/lib/components/extend-date-range-picker/extend-date-range-picker.ts","../../../projects/share/src/lib/components/extend-date-range-picker/extend-date-range-picker.html","../../../projects/share/src/lib/components/extend-input-number/extend-input-number.ts","../../../projects/share/src/lib/components/extend-input-number/extend-input-number.html","../../../projects/share/src/lib/components/extend-input/extend-input.ts","../../../projects/share/src/lib/components/extend-input/extend-input.html","../../../projects/share/src/lib/components/extend-select/extend-select.ts","../../../projects/share/src/lib/components/extend-select/extend-select.html","../../../projects/share/src/lib/components/extend-textarea/extend-textarea.ts","../../../projects/share/src/lib/components/extend-textarea/extend-textarea.html","../../../projects/share/src/lib/components/no-permission/no-permission.ts","../../../projects/share/src/lib/components/pdf-viewer/pdf-viewer.ts","../../../projects/share/src/lib/components/pdf-viewer/pdf-viewer.html","../../../projects/share/src/lib/components/spinner/spinner.ts","../../../projects/share/src/lib/components/height.ts","../../../projects/share/src/lib/components/width.ts","../../../projects/share/src/lib/components/box.ts","../../../projects/share/src/lib/components/wf-editor/workflow-editor.component.ts","../../../projects/share/src/lib/components/wf-editor/workflow-editor.component.html","../../../projects/share/src/lib/directive/auto-focus.directive.ts","../../../projects/share/src/lib/directive/null-if-empty.directive.ts","../../../projects/share/src/lib/directive/number-only.directive.ts","../../../projects/share/src/lib/directive/uppercase-each-word.directive.ts","../../../projects/share/src/lib/directive/uppercase-first-letter.directive.ts","../../../projects/share/src/lib/directive/uppercase.directive.ts","../../../projects/share/src/lib/pipe/limit-words.pipe.ts","../../../projects/share/src/lib/helper/download.helper.ts","../../../projects/share/src/lib/helper/xlsx.helper.ts","../../../projects/share/src/lib/model.ts","../../../projects/share/src/lib/services/router-monitor.service.ts","../../../projects/share/src/lib/services/theme.service.ts","../../../projects/share/src/lib/services/vsc.service.ts","../../../projects/share/src/brggroup-share-lib.ts"],"sourcesContent":["export enum TranslateKey {\n ACTION = 'ACTION',\n ADD = 'ADD',\n AGREE = 'AGREE',\n BACK = 'BACK',\n CANCEL = 'CANCEL',\n CLOSE = 'CLOSE',\n CONFIRM = 'CONFIRM',\n CONFIRM_DELETE = 'CONFIRM_DELETE',\n COMPLETE = 'COMPLETE',\n DELETE = 'DELETE',\n DELETE_SUCCESS = 'DELETE_SUCCESS',\n EDIT = 'EDIT',\n ERROR = 'ERROR',\n EXPORT = 'EXPORT',\n HIDDEN = 'HIDDEN',\n IMPORT = 'IMPORT',\n INFO = 'INFO',\n LOGIN = 'LOGIN',\n LOGOUT = 'LOGOUT',\n NO_CONNECT_TO_SERVER = 'NO_CONNECT_TO_SERVER',\n OK = 'OK',\n PASSWORD = 'PASSWORD',\n REQUIRED = 'REQUIRED',\n REQUIRED_FIELD = 'REQUIRED_FIELD',\n REFEESH = 'REFEESH',\n RESET = 'RESET',\n RESET_PASSWORD = 'RESET_PASSWORD',\n SAVE = 'SAVE',\n SEARCH = 'SEARCH',\n SHOW = 'SHOW',\n SUCCESS = 'SUCCESS',\n SAVE_SUCCESS = 'SAVE_SUCCESS',\n SETTING = 'SETTING',\n PROFILE = 'PROFILE',\n USERNAME = 'USERNAME',\n UPDATE = 'UPDATE',\n WARNING = 'WARNING',\n YES = 'YES',\n DOWNLOAD_TEMPLATE = 'DOWNLOAD_TEMPLATE',\n WARNING_CHECK_DATA = 'WARNING_CHECK_DATA',\n}\n","export class AppGlobals {\n public static apiEndpoint: string;\n public static versionCheck: string;\n\n public static MENU_TYPE: 'side-menu' | 'toolbar-menu' = 'toolbar-menu';\n public static pageSizeOptions = [10, 20, 50, 100];\n\n public static filterSet: any = {};\n public static selectedIdSet: any = {};\n\n public static clearFillter() {\n this.filterSet = {};\n }\n\n public static getFilter(key: any) {\n return this.filterSet[key];\n }\n\n public static setFilter(key: any, filter: any) {\n this.filterSet[key] = filter;\n }\n\n public static getSelectedId(key: any) {\n return this.selectedIdSet[key];\n }\n\n public static setSelectedId(key: any, value: any) {\n this.selectedIdSet[key] = value;\n }\n\n public static setLang(lang: string) {\n localStorage.setItem('LANGUAGE', lang);\n }\n\n public static getLang(): string {\n if (!localStorage.getItem('LANGUAGE')) {\n localStorage.setItem('LANGUAGE', 'vn');\n }\n return localStorage.getItem('LANGUAGE') || '';\n }\n\n public static getOrgId() {\n return localStorage.getItem('orgid');\n }\n\n public static getOrgCode() {\n return localStorage.getItem('orgcode');\n }\n\n public static getOrgName() {\n return localStorage.getItem('orgname');\n }\n\n public static getUserName() {\n return localStorage.getItem('username');\n }\n\n public static getUserFullName() {\n return localStorage.getItem('fullname');\n }\n}\n","import { inject } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\nexport class AppStorage {\n \n static get tokenStorage() {\n return localStorage;\n // return sessionStorage;\n }\n\n static get localStoreage() {\n return localStorage;\n }\n\n static get sessionStoreage() {\n return sessionStorage;\n }\n\n static getLang(): string {\n return AppStorage.localStoreage.getItem('LANGUAGE') || 'vn';\n }\n\n static setLang(lang: string) {\n AppStorage.localStoreage.setItem('LANGUAGE', lang || 'vn');\n }\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RespondData } from '../../model';\n\nexport class HTTPService {\n httpClient = inject(HttpClient);\n\n get(url: string, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.get<RespondData>(url, options));\n }\n\n getParams(url: string, params: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.get<RespondData>(url, options));\n }\n\n post(url: string, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, null, options));\n }\n\n postParams(url: string, params: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, null, options));\n }\n\n postData(url: string, body: any, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, body, options));\n }\n\n postDataWithParams(url: string, body: any, params?: HttpParams, noLoadingMark?: boolean): Promise<RespondData> {\n const options = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json; charset=utf-8',\n 'No-Loading-Mark': noLoadingMark ? '1' : '0',\n }),\n params: params,\n };\n\n return firstValueFrom(this.httpClient.post<RespondData>(url, body, options));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NzNotificationService } from 'ng-zorro-antd/notification';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\nimport { firstValueFrom } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TranslateKey } from '../a-translate-key';\n\nfunction escapeHtml(str: string) {\n return str.replace(/</g, '<').replace(/>/g, '>');\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotiService {\n modal = inject(NzModalService);\n notification = inject(NzNotificationService);\n translate = inject(TranslateService);\n\n async success(title?: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.success({\n nzTitle: title ?? this.translate.instant(TranslateKey.SUCCESS),\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.success(title ?? this.translate.instant(TranslateKey.SUCCESS), content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n async warning(title: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.warning({\n nzTitle: title,\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.warning(title, content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n async error(title: string, content: string = '', showPopup: boolean = false): Promise<void> {\n if (showPopup) {\n return new Promise<void>((resolve) => {\n const modalRef = this.modal.error({\n nzTitle: title,\n nzContent: content,\n nzOnOk: () => resolve(),\n });\n });\n } else {\n const notiRef = this.notification.error(title, content);\n if (notiRef?.onClose) {\n await firstValueFrom(notiRef.onClose);\n }\n }\n }\n\n handleError(err: any): void {\n if (err?.status == 0) {\n // this.notification.error('', this.translate.instant('NO_CONNECT_TO_SERVER'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('NO_CONNECT_TO_SERVER'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n\n return;\n }\n\n let _data: any = null;\n\n if (err?.error instanceof ArrayBuffer) {\n const message = new TextDecoder('utf-8').decode(new Uint8Array(err.error));\n try {\n _data = JSON.parse(message);\n } catch (error) {}\n } else if (err?.error instanceof Blob) {\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const text = reader.result as string;\n _data = JSON.parse(text);\n this.handleError(_data);\n } catch (e) {\n // this.notification.error('', this.translate.instant('UNKNOWN_ERROR'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('UNKNOWN_ERROR'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n }\n };\n\n reader.onerror = () => {\n // this.notification.error('', this.translate.instant('UNKNOWN_ERROR'), { nzDuration: 0 });\n\n this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: this.translate.instant('UNKNOWN_ERROR'),\n nzWidth: '40vw',\n nzOkText: 'Đóng',\n });\n };\n reader.readAsText(err.error);\n return;\n } else if (err?.error && typeof err.error === 'object') {\n _data = err.error;\n } else {\n _data = err;\n }\n\n let errorMsg = err?.message || 'An unexpected error occurred.';\n\n if (err?.name == 'EmptyError' && err?.message == 'no elements in sequence') {\n return;\n }\n\n if (_data?.ErrorMessage) {\n let hasMsgTag = false;\n let isMatchFirstMsg = false;\n\n let isMatch = _data.ErrorMessage?.match(/System.Data.SqlClient.SqlException \\(0x80131904\\): <msg>(.*?)<\\/msg>/);\n isMatchFirstMsg = isMatch ? true : false;\n\n if (isMatchFirstMsg) {\n const matches = [..._data.ErrorMessage?.matchAll(/<msg>(.*?)<\\/msg>/g)];\n const messages = matches.map((m) => m[1]);\n if (messages.length > 0) {\n errorMsg = messages.join('\\n');\n hasMsgTag = true;\n } else {\n errorMsg = _data.ErrorMessage;\n }\n } else {\n errorMsg = _data.ErrorMessage;\n }\n }\n\n const modalRef = this.modal.error({\n nzTitle: 'Lỗi phát sinh',\n nzContent: errorMsg,\n nzWidth: '40vw',\n nzClosable: false,\n nzCancelText: 'Đóng',\n nzOkText: 'Chi tiết',\n nzOnOk: () => {\n modalRef.destroy();\n\n this.modal.error({\n nzTitle: 'Chi tiết lỗi',\n nzContent: escapeHtml(JSON.stringify(_data, null, 2)),\n nzWidth: '60vw',\n nzDraggable: true,\n nzCentered: true,\n nzOkText: 'Đóng',\n });\n },\n });\n }\n}\n","import { ESPModel, ExportExcelModel } from '../../model';\nimport { AppGlobals } from '../../app-global';\nimport { HTTPService } from './http.service';\nimport { firstValueFrom } from 'rxjs';\nimport { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nexport enum ENUM_ResponseType {\n ARRAYBUFFER = 'arraybuffer',\n BLOB = 'blob',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CommonService extends HTTPService {\n ESP(obj: ESPModel) {\n const params = new HttpParams().append('SPN', obj.SPN);\n return this.postDataWithParams(AppGlobals.apiEndpoint + '/api/Common/ESP', obj, params);\n }\n\n ExportExcel(data: ExportExcelModel) {\n return firstValueFrom(\n this.httpClient.post(AppGlobals.apiEndpoint + '/api/Common/ExportExcel', data, {\n responseType: ENUM_ResponseType.BLOB,\n observe: 'response',\n }),\n );\n }\n}\n","import { jwtDecode } from 'jwt-decode';\nimport { RespondData } from '../model';\nimport { AppStorage } from '../app-storeage';\n\nexport class TokenStorage {\n public static readonly JWT_TOKEN = 'JWT_TOKEN';\n public static readonly JWT_RFT_TOKEN = 'JWT_RFT_TOKEN';\n public static readonly USER_NAME = 'username';\n public static readonly FULL_NAME = 'fullname';\n public static readonly USER_MENU = 'usermenu';\n public static readonly ORG_ID = 'orgid';\n public static readonly ORG_CODE = 'orgcode';\n public static readonly ORG_NAME = 'orgname';\n\n public static saveToken(tokenRes: RespondData) {\n AppStorage.tokenStorage.setItem(this.JWT_TOKEN, tokenRes.Data.Token);\n AppStorage.tokenStorage.setItem(this.JWT_RFT_TOKEN, tokenRes.Data.RefreshToken);\n TokenStorage.saveTokenInfo(tokenRes.Data.Token);\n }\n\n public static saveTokenRft(token: string) {\n AppStorage.tokenStorage.setItem(this.JWT_TOKEN, token);\n TokenStorage.saveTokenInfo(token);\n }\n\n private static saveTokenInfo(token: string) {\n const userInfo: any = jwtDecode(token);\n\n AppStorage.tokenStorage.setItem(this.USER_NAME, userInfo[this.USER_NAME]);\n AppStorage.tokenStorage.setItem(this.FULL_NAME, userInfo[this.FULL_NAME]);\n AppStorage.tokenStorage.setItem(this.ORG_ID, userInfo[this.ORG_ID]);\n AppStorage.tokenStorage.setItem(this.ORG_CODE, userInfo[this.ORG_CODE]);\n AppStorage.tokenStorage.setItem(this.ORG_NAME, userInfo[this.ORG_NAME]);\n }\n\n public static saveUserMenu(menus: any[]) {\n AppStorage.tokenStorage.setItem(this.USER_MENU, JSON.stringify(menus));\n }\n\n public static getUserMenu(): any[] {\n return JSON.parse(AppStorage.tokenStorage.getItem(this.USER_MENU) || '[]');\n }\n\n public static getUsername() {\n return AppStorage.tokenStorage.getItem(this.USER_NAME);\n }\n\n public static getUserFullname() {\n return AppStorage.tokenStorage.getItem(this.FULL_NAME);\n }\n\n public static getOrgId() {\n return AppStorage.tokenStorage.getItem(this.ORG_ID);\n }\n\n public static getOrgCode() {\n return AppStorage.tokenStorage.getItem(this.ORG_CODE);\n }\n\n public static getOrgName() {\n return AppStorage.tokenStorage.getItem(this.ORG_NAME);\n }\n\n public static getToken() {\n return AppStorage.tokenStorage.getItem(this.JWT_TOKEN);\n }\n\n public static getRftToken() {\n return AppStorage.tokenStorage.getItem(this.JWT_RFT_TOKEN);\n }\n\n public static isLoggedIn() {\n return AppStorage.tokenStorage.getItem(this.JWT_TOKEN) != null;\n }\n\n public static clearToken() {\n console.log('-- clearToken --');\n AppStorage.tokenStorage.removeItem(this.JWT_TOKEN);\n AppStorage.tokenStorage.removeItem(this.USER_NAME);\n AppStorage.tokenStorage.removeItem(this.FULL_NAME);\n AppStorage.tokenStorage.removeItem(this.USER_MENU);\n AppStorage.tokenStorage.removeItem(this.ORG_ID);\n AppStorage.tokenStorage.removeItem(this.ORG_CODE);\n AppStorage.tokenStorage.removeItem(this.ORG_NAME);\n }\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AppGlobals } from '../app-global';\nimport { HTTPService } from '../services/api-service/http.service';\nimport { NotiService } from '../services/noti.service';\nimport { CommonService } from '../services/api-service/common.service';\nimport { TokenStorage } from './token.storage';\nimport { ESPModel, RespondData } from '../model';\n\nexport const URLs = {\n login: '/api/Auth/Login',\n register: '/api/Auth/Register',\n pingAuth: '/api/Auth/PingAuth',\n changePassword: '/api/Auth/ChangePassword',\n setPass: '/api/Auth/SetPass',\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService extends HTTPService {\n notiService = inject(NotiService);\n commonService = inject(CommonService);\n\n ngZone = inject(NgZone);\n router = inject(Router);\n translate = inject(TranslateService);\n\n async refreshToken(): Promise<RespondData | null> {\n const refreshToken = TokenStorage.getRftToken();\n\n if (!refreshToken) return null;\n\n const body = { rft: refreshToken };\n\n try {\n const res = await this.sendRftToken(body);\n\n if (res?.IsSuccess) {\n TokenStorage.saveTokenRft(res.Data);\n return res;\n } else {\n return null;\n }\n } catch (err) {\n console.log(err);\n }\n\n return null;\n }\n\n async pingAuth(): Promise<boolean> {\n try {\n const res = await this.get(AppGlobals.apiEndpoint + URLs.pingAuth, true);\n return res?.IsSuccess;\n } catch {\n return false;\n }\n }\n\n async signIn(username: string, password: string, orgid: string, returnUrl: string): Promise<boolean> {\n try {\n const body = {\n UserName: username,\n Password: password,\n OrgId: orgid,\n };\n\n const res = await this.sendSignIn(body);\n\n if (!res.IsSuccess) {\n this.notiService.error(this.translate.instant(res.ErrorMessage));\n return false;\n }\n\n this.notiService.success('Đăng nhập thành công');\n TokenStorage.saveToken(res);\n this.startWatching();\n\n if (returnUrl) {\n this.router.navigateByUrl(returnUrl);\n }\n } catch (err) {\n this.notiService.handleError(err);\n return false;\n }\n\n return true;\n }\n\n async sendSignIn(body: any): Promise<RespondData> {\n return firstValueFrom(\n this.httpClient.post<RespondData>(AppGlobals.apiEndpoint + URLs.login, body, {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n }),\n );\n }\n\n async sendRftToken(body: any): Promise<RespondData> {\n return firstValueFrom(\n this.httpClient.post<RespondData>(AppGlobals.apiEndpoint + '/api/Auth/RefreshToken', body, {\n headers: new HttpHeaders().set('Content-Type', 'application/json'),\n }),\n );\n }\n\n signOut() {\n TokenStorage.clearToken();\n this.stopWatching();\n const currentUrl = this.router.routerState.snapshot.url;\n this.router.navigate(['/login'], {\n queryParams: { returnUrl: currentUrl || '/' },\n });\n }\n\n getUserMenu() {\n let data: ESPModel = {\n SPN: `App_User_getUserMenu`,\n };\n return this.commonService.ESP(data);\n }\n\n async checkUserMenu(url: string): Promise<boolean> {\n try {\n const ret = await this.commonService.ESP({\n SPN: `App_User_checkUserMenu`,\n Params: [url],\n });\n\n return ret.IsSuccess && ret.Data == '1';\n } catch (error) {\n this.notiService.handleError(error);\n return true;\n }\n }\n\n changePassword(data: any) {\n return this.postData(AppGlobals.apiEndpoint + URLs.changePassword, data);\n }\n\n setPass(data: any) {\n return this.postData(AppGlobals.apiEndpoint + URLs.setPass, data);\n }\n\n async signUp(d: any) {\n try {\n const res = await this.sendSignUp(d);\n\n if (!res.IsSuccess) {\n this.notiService.error(res.ErrorMessage);\n return;\n }\n this.notiService.success('Đăng ký thành công');\n this.router.navigateByUrl('/login');\n } catch (err) {\n console.log(err);\n this.notiService.handleError(err);\n }\n }\n\n async sendSignUp(d: any): Promise<RespondData> {\n return this.postData(AppGlobals.apiEndpoint + URLs.register, d);\n }\n\n private idleTimer: any;\n private idleTimeInMinutes = 15; // phút\n private idleTime = this.idleTimeInMinutes * 60 * 1000;\n\n startWatching() {\n console.log(\n `-- start watching idle (${this.idleTimeInMinutes} ${this.idleTimeInMinutes == 1 ? 'min' : 'mins'}) --`,\n );\n\n this.resetTimer();\n\n window.addEventListener('mousemove', () => this.resetTimer());\n window.addEventListener('keydown', () => this.resetTimer());\n window.addEventListener('click', () => this.resetTimer());\n }\n\n private resetTimer() {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.idleTimer = setTimeout(() => {\n this.ngZone.run(() => {\n console.log('-- idle logout --');\n\n this.signOut(); // auto logout\n });\n }, this.idleTime);\n });\n }\n\n stopWatching() {\n console.log('-- stop watching idle --');\n clearTimeout(this.idleTimer);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { TokenStorage } from './token.storage';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n router = inject(Router);\n authService = inject(AuthService);\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // return true;\n\n if (await this.authService.pingAuth()) {\n return true;\n }\n\n TokenStorage.clearToken();\n\n if (state.url != '/') {\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\n } else {\n this.router.navigate(['/login']);\n }\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay, switchMap, distinctUntilChanged } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingService {\n private static loadingStack: any[] = [];\n private loadingSubject = new BehaviorSubject<boolean>(false);\n\n private update() {\n const isLoading = LoadingService.loadingStack.length > 0;\n this.loadingSubject.next(isLoading);\n }\n\n loadingUp() {\n LoadingService.loadingStack.push(1);\n this.update();\n }\n\n loadingDown() {\n LoadingService.loadingStack.pop();\n this.update();\n }\n\n /** Trả về observable loading có delay khi bật để tránh chớp nháy */\n get loading$(): Observable<boolean> {\n return this.loadingSubject.asObservable().pipe(\n switchMap((loading) => {\n return loading\n ? of(true).pipe(delay(200)) // delay khi bật\n : of(false); // tắt thì không delay\n }),\n distinctUntilChanged(),\n );\n }\n\n /** Nếu chỉ cần giá trị hiện tại boolean (ít dùng hơn) */\n get isLoading(): boolean {\n return LoadingService.loadingStack.length > 0;\n }\n}\n","import { HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TokenStorage } from './token.storage';\nimport { BehaviorSubject, catchError, filter, finalize, from, of, switchMap, take, throwError } from 'rxjs';\nimport { LoadingService } from '../services/loading.service';\nimport { AuthService } from './auth.service';\nimport { RespondData } from '../model';\n\nlet initialReturnUrl: string | null = null;\nlet isRefreshing = false;\nconst refreshTokenSubject = new BehaviorSubject<string | null>(null);\n\nexport function authInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn) {\n const router = inject(Router);\n const loadingService = inject(LoadingService);\n const authService = inject(AuthService);\n\n const authToken = TokenStorage.getToken();\n const noLoadingMark = req.headers.get('No-Loading-Mark');\n\n if (noLoadingMark !== '1') loadingService.loadingUp();\n\n // Convert dates\n if (!(req.body instanceof FormData)) {\n const newBody = convertDatesInBody(req.body);\n if (req.body !== newBody) {\n req = req.clone({ body: newBody });\n }\n }\n\n // Add token\n if (authToken) {\n req = req.clone({\n setHeaders: { Authorization: `Bearer ${authToken}` },\n });\n }\n\n return next(req).pipe(\n catchError((error) => {\n if (error.status === 401) {\n return handle401(req, next, router, authService);\n }\n return throwError(() => error);\n }),\n finalize(() => {\n if (noLoadingMark !== '1') loadingService.loadingDown();\n }),\n );\n}\n\n//\n// ⭐ REFRESH TOKEN HANDLER\n//\nfunction handle401(req: HttpRequest<any>, next: HttpHandlerFn, router: Router, authService: AuthService) {\n if (!isRefreshing) {\n isRefreshing = true;\n refreshTokenSubject.next(null);\n\n return from(authService.refreshToken()).pipe(\n switchMap((resAny: any) => {\n const res = resAny as RespondData;\n isRefreshing = false;\n\n if (!res?.IsSuccess) {\n const currentUrl = router.routerState.snapshot.url;\n\n if (!initialReturnUrl && !currentUrl.startsWith('/login')) {\n initialReturnUrl = currentUrl;\n }\n\n router.navigate(['/login'], {\n queryParams: { returnUrl: initialReturnUrl || '/' },\n });\n\n refreshTokenSubject.error('Refresh token failed');\n\n return throwError(() => new Error('Refresh token failed'));\n }\n\n // Phát token mới cho các request đang chờ\n refreshTokenSubject.next(TokenStorage.getToken());\n\n // Retry request\n return next(\n req.clone({\n setHeaders: { Authorization: `Bearer ${TokenStorage.getToken()}` },\n }),\n );\n }),\n catchError((err) => {\n isRefreshing = false;\n TokenStorage.clearToken();\n const currentUrl = router.routerState.snapshot.url;\n\n if (!initialReturnUrl && !currentUrl.startsWith('/login')) {\n initialReturnUrl = currentUrl;\n }\n\n router.navigate(['/login'], {\n queryParams: { returnUrl: initialReturnUrl || '/' },\n });\n\n return throwError(() => err);\n }),\n );\n } else {\n // Nếu đang refresh → chờ token mới rồi retry\n return refreshTokenSubject.pipe(\n take(1),\n switchMap((token) =>\n next(\n req.clone({\n setHeaders: { Authorization: `Bearer ${token}` },\n }),\n ),\n ),\n catchError((err) => throwError(() => err)),\n );\n }\n}\n\nfunction convertDatesInBody(obj: any): any {\n if (obj instanceof Date) {\n return formatDate(obj);\n }\n\n if (Array.isArray(obj)) {\n return obj.map(convertDatesInBody);\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const newObj: any = {};\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n\n if (value instanceof Date) {\n newObj[key] = formatDate(value);\n } else if (typeof value === 'string' && isIsoDate(value)) {\n newObj[key] = formatDate(new Date(value));\n } else if (typeof value === 'object') {\n newObj[key] = convertDatesInBody(value);\n } else {\n newObj[key] = value;\n }\n }\n return newObj;\n }\n\n return obj;\n}\n\nfunction isIsoDate(str: string): boolean {\n // ISO string with optional time and timezone\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[\\+\\-]\\d{2}:\\d{2})?$/.test(str);\n}\n\nfunction formatDate(date: Date): string {\n const pad = (n: number) => n.toString().padStart(2, '0');\n return (\n `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` +\n `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`\n );\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => boolean | Promise<boolean>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnsavedChangesGuard implements CanDeactivate<CanComponentDeactivate> {\n canDeactivate(component: CanComponentDeactivate): boolean | Promise<boolean> {\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NzModalService, NzModalRef, ModalOptions } from 'ng-zorro-antd/modal';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomModalService {\n constructor(private modal: NzModalService) {}\n\n create<T, D = any>(options: ModalOptions<T, D>): NzModalRef<T, D> {\n const defaultOptions: Partial<ModalOptions<T, D>> = {\n nzMaskClosable: false,\n nzCentered: true,\n nzBodyStyle: {\n 'max-height': 'calc(100vh - 180px)',\n overflow: 'auto',\n },\n };\n\n const mergedOptions: ModalOptions<T, D> = {\n ...defaultOptions,\n ...options,\n nzStyle: {\n ...defaultOptions.nzStyle,\n ...options.nzStyle,\n },\n };\n\n return this.modal.create(mergedOptions);\n }\n\n confirm(options: ModalOptions): NzModalRef {\n return this.modal.confirm(options);\n }\n\n info(options: ModalOptions): NzModalRef {\n return this.modal.info(options);\n }\n\n success(options: ModalOptions): NzModalRef {\n return this.modal.success(options);\n }\n\n warning(options: ModalOptions): NzModalRef {\n return this.modal.warning(options);\n }\n\n error(options: ModalOptions): NzModalRef {\n return this.modal.error(options);\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { NotiService } from '../services/noti.service';\nimport { AppGlobals } from '../app-global';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormGroup } from '@angular/forms';\nimport { TranslateKey } from '../a-translate-key';\nimport { filter, Subscription } from 'rxjs';\nimport { CustomModalService } from '../services/custom-modal.service';\nimport { Location } from '@angular/common';\n\n@Component({ template: '' })\nexport class BaseComponent {\n protected AppGlobals = AppGlobals;\n\n protected TranslateKey = TranslateKey;\n\n protected route = inject(ActivatedRoute);\n protected router = inject(Router);\n protected location = inject(Location);\n\n protected notiService = inject(NotiService);\n protected translate = inject(TranslateService);\n protected modal = inject(CustomModalService);\n\n private routeSub?: Subscription;\n\n /**\n * Khi dùng onRouteChange nhớ dùng unSubRouteChange\n */\n protected onRouteChange(callback: (url: string) => void): void {\n this.routeSub = this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n callback(e.urlAfterRedirects);\n });\n }\n\n protected unSubRouteChange(): void {\n this.routeSub?.unsubscribe();\n }\n\n protected goback() {\n this.location.back();\n }\n\n protected goto(url?: string) {\n if (url) {\n if (url.startsWith('/')) {\n this.router.navigateByUrl(url);\n } else {\n this.router.navigate([url], { relativeTo: this.route });\n }\n }\n }\n\n /**\n * /:id\n */\n protected getUrlParam(paramName: string) {\n const paramValue = this.route.snapshot.params[paramName];\n\n // bằng 0 thì trả về null vì chuyển primary key từ bigint sang string, code cũ đang truyền vào 0\n if (paramValue == '0' || paramValue == 'new' || paramValue == 'them-moi') {\n return null;\n }\n return paramValue;\n }\n\n /**\n * ?id=xxx\n */\n protected getUrlQueryParam(queryParamName: string) {\n const queryParamValue = this.route.snapshot.queryParamMap.get(queryParamName);\n return queryParamValue;\n }\n\n /**\n * Routes data\n */\n protected getUrlData(key: string) {\n return this.route.snapshot.data[key];\n }\n\n protected setQueryParam(name: string, value: string) {\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n [name]: value,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n protected get url() {\n return this.router.url;\n }\n\n protected get urlPath() {\n return this.router.url.split('?')[0];\n }\n\n protected handleError(err: any) {\n this.notiService.handleError(err);\n }\n\n protected touchControls(formData: FormGroup) {\n Object.values(formData.controls).forEach((control) => {\n if (control.invalid) {\n control.markAsDirty();\n control.updateValueAndValidity({ onlySelf: true });\n }\n });\n\n this.logFormErrors(formData);\n }\n\n protected untouchControls(formData: FormGroup) {\n formData.markAsPristine();\n formData.markAsUntouched();\n formData.updateValueAndValidity();\n }\n\n private logFormErrors(form: FormGroup, parentKey: string = '') {\n Object.keys(form.controls).forEach((key) => {\n const control = form.get(key);\n const fieldPath = parentKey ? `${parentKey}.${key}` : key;\n\n if (control instanceof FormGroup) {\n this.logFormErrors(control, fieldPath);\n } else {\n if (control?.errors) {\n console.log(`Control: ${fieldPath}`, control.errors);\n }\n }\n });\n }\n\n protected confirm(title: string, content: string = ''): Promise<boolean> {\n return new Promise((resolve) => {\n this.modal.confirm({\n // nzCentered: true,\n nzTitle: title,\n nzContent: content,\n nzOkText: this.translate.instant(this.TranslateKey.AGREE),\n nzOkType: 'primary',\n nzOkDanger: true,\n nzClosable: false,\n nzOnOk: () => resolve(true),\n nzAutofocus: 'ok',\n nzCancelText: this.translate.instant(this.TranslateKey.CANCEL),\n nzOnCancel: () => resolve(false),\n });\n });\n }\n\n protected backToTop() {\n // go to top\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n\n const content = document.querySelector('nz-content');\n if (content) {\n content.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n}\n","import { Component, HostListener } from '@angular/core';\nimport { BaseComponent } from './base.component';\nimport { CanComponentDeactivate } from '../auth/unsaved-changes.guard';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n template: '',\n})\nexport class BaseGuardChangeComponent extends BaseComponent implements CanComponentDeactivate {\n formData?: FormGroup;\n\n @HostListener('window:beforeunload', ['$event'])\n unloadNotification($event: any) {\n if (this.formData?.dirty) {\n $event.preventDefault();\n $event.returnValue = true; // Chrome requires this line\n }\n }\n\n async canDeactivate(): Promise<boolean> {\n if (this.formData?.dirty) {\n return await this.confirm('Dữ liệu chưa được lưu. Bạn có chắc chắn muốn rời khỏi trang?');\n }\n return true;\n }\n\n clearChange() {\n // bỏ dirty để không hỏi khi rời trang\n this.formData?.markAsPristine();\n this.formData?.markAsUntouched();\n this.formData?.updateValueAndValidity();\n }\n}\n","import { ElementRef, inject, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BaseComponent } from './base.component';\nimport { NzButtonComponent } from 'ng-zorro-antd/button';\n\nexport class BaseOverlayComponent extends BaseComponent {\n // custom dropdow\n inputWidth: number = 0;\n triggerSpan = 500;\n private overlayRef!: OverlayRef;\n\n overlay = inject(Overlay);\n vcr = inject(ViewContainerRef);\n\n openOverlay(originEl: any, target: TemplateRef<any>, width = 0) {\n const origin: HTMLElement = originEl?.elementRef?.nativeElement ?? originEl?.nativeElement ?? originEl;\n\n this.updateInputWidth(origin);\n\n if (this.overlayRef) {\n this.overlayRef.detach(); // Đóng nếu đã mở\n }\n\n width = width > origin.offsetWidth ? width : origin.offsetWidth; // 👈 Lấy chiều rộng của input\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 5,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -5,\n },\n ])\n .withDefaultOffsetY(5);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width, // 👈 Gán chiều rộng cho overlay\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n });\n\n const portal = new TemplatePortal(target, this.vcr);\n this.overlayRef.attach(portal);\n\n const overlayElement = this.overlayRef.overlayElement;\n\n // hasBackdrop: false, thêm cái này để đóng khi click ra ngoài\n fromEvent<MouseEvent>(document, 'click')\n .pipe(\n filter((event) => {\n const clickTarget = event.target as HTMLElement;\n\n return (\n this.overlayRef &&\n !overlayElement.contains(clickTarget) && // click không nằm trong overlay\n !origin.contains(clickTarget) && // và cũng không phải click vào input gốc\n !clickTarget.closest('.ant-select-dropdown') &&\n !clickTarget.closest('.ant-select-item') &&\n !clickTarget.closest('.ant-select-item-option-content') &&\n !clickTarget.closest('.no-close-custom-dropdow')\n );\n }),\n takeUntil(this.overlayRef.detachments()), // tự huỷ khi overlay bị đóng\n )\n .subscribe(() => {\n this.overlayRef?.detach();\n });\n }\n\n updateInputWidth(inputEl: HTMLElement) {\n this.inputWidth = inputEl?.offsetWidth || 0;\n }\n // END custom dropdow\n}\n","import { Component } from '@angular/core';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { BaseComponent } from '../base.component';\n\ninterface IBreadcrumb {\n Name: string;\n URL?: string;\n Click?: Function;\n}\n\n@Component({\n selector: 'app-breadcrumb',\n templateUrl: './breadcrumb.html',\n imports: [NzBreadCrumbModule, NzIconModule],\n})\nexport class Breadcrumb extends BaseComponent {\n Breadcrumb = Breadcrumb;\n\n private static _lstBreadcrumb: IBreadcrumb[] = [];\n public static get lstBreadcrumb() {\n return Breadcrumb._lstBreadcrumb;\n }\n public static set lstBreadcrumb(val: IBreadcrumb[]) {\n setTimeout(() => {\n Breadcrumb._lstBreadcrumb = val;\n }, 0);\n }\n\n public static clear() {\n Breadcrumb.lstBreadcrumb = [];\n }\n\n gohome() {\n this.goto('');\n }\n\n onclick(item: IBreadcrumb) {\n if (item.URL) {\n this.goto(item.URL);\n } else if (item.Click) {\n item.Click();\n }\n }\n}\n","<nz-breadcrumb>\n <nz-breadcrumb-item (click)=\"gohome()\">\n <nz-icon nzType=\"home\" nzTheme=\"outline\" />\n </nz-breadcrumb-item>\n @for (item of Breadcrumb.lstBreadcrumb; track $index) {\n <nz-breadcrumb-item (click)=\"onclick(item)\">{{ item.Name }}</nz-breadcrumb-item>\n }\n</nz-breadcrumb>\n","import { Component, ElementRef, Input, AfterViewInit, ViewChild, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'animated-digit',\n templateUrl: 'animated-digit.component.html',\n styleUrls: ['animated-digit.component.scss'],\n})\nexport class AnimatedDigitComponent implements AfterViewInit, OnChanges {\n @Input() duration: number = 0;\n @Input() digit: number = 0;\n @Input() steps: number = 0;\n @ViewChild('animatedDigit') animatedDigit!: ElementRef;\n\n private currentValue: number = 0;\n\n animateCount() {\n if (!this.duration) {\n this.duration = 1000;\n }\n\n if (typeof this.digit === 'number') {\n this.counterFunc(this.currentValue, this.digit, this.duration, this.animatedDigit);\n }\n }\n\n counterFunc(startValue: number, endValue: number, durationMs: number, element: ElementRef) {\n if (!this.steps) {\n this.steps = 12;\n }\n\n const stepCount = Math.abs(durationMs / this.steps);\n const valueIncrement = (endValue - startValue) / stepCount;\n const sinValueIncrement = Math.PI / stepCount;\n\n let currentSinValue = 0;\n\n function step() {\n currentSinValue += sinValueIncrement;\n startValue += valueIncrement * Math.sin(currentSinValue) ** 2 * 2;\n if (element) element.nativeElement.textContent = Math.abs(Math.floor(startValue));\n\n if (currentSinValue < Math.PI) {\n window.requestAnimationFrame(step);\n }\n }\n\n step();\n }\n\n ngAfterViewInit() {\n if (this.digit) {\n this.animateCount();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['digit']) {\n this.animateCount();\n setTimeout(() => {\n this.currentValue = this.digit;\n }, this.duration);\n }\n }\n}\n","<span #animatedDigit class=\"animated-digit\">\n <span>{{digit}}</span>\n</span>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-bar-graph',\n templateUrl: './bar-graph.component.html',\n styleUrls: ['./bar-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class BarGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createBarGraph();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n createBarGraph() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'bar',\n data: {\n labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],\n datasets: [\n {\n backgroundColor: 'rgba(92, 107, 192, .7)',\n borderColor: 'rgba(92, 107, 192, .7)',\n data: [70, 88, 77, 93, 82, 100, 70, 67, 78, 99],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(66, 165, 245, .7)',\n borderColor: 'rgba(69, 39, 160, .7)',\n data: [80, 88, 67, 95, 76, 60, 67, 95, 95, 66],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(38, 166, 154, .7)',\n borderColor: 'rgba(69, 39, 160, .7)',\n data: [60, 88, 70, 67, 27, 83, 78, 88, 95, 60],\n label: 'Dataset',\n },\n {\n backgroundColor: 'rgba(102, 187, 106, .7)',\n borderColor: 'rgba(255, 99, 132)',\n data: [75, 55, 55, 95, 66, 88, 70, 78, 77, 100],\n label: 'Dataset',\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n maintainAspectRatio: false,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"dash-bar-graph-holder mat-elevation-z4\" [ngStyle]=\"{ height: height + 'px' }\">\n <canvas [id]=\"id\"></canvas>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { AnimatedDigitComponent } from '../animated/animated-digit.component';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzGridModule } from 'ng-zorro-antd/grid';\n\n@Component({\n selector: 'cdk-dashcard',\n templateUrl: './dashcard.component.html',\n styleUrls: ['./dashcard.component.scss'],\n imports: [NzGridModule, NzIconModule, AnimatedDigitComponent],\n})\nexport class DashcardComponent implements OnInit {\n @Input() dashData: any;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","<div nz-row class=\"dashcard mat-elevation-z2\" style=\"height: 100%\">\n <div nz-col [nzSpan]=\"8\" class=\"text-center\" [style.background]=\"dashData?.colorLight\">\n <nz-icon class=\"mat-icon\" style=\"padding-top: 50px\" [nzType]=\"dashData?.icon\" nzTheme=\"outline\" />\n </div>\n <div nz-col [nzSpan]=\"16\" [style.background]=\"dashData?.colorDark\">\n <div class=\"text-center animated-digit\">\n <animated-digit [digit]=\"dashData?.number\"></animated-digit>\n </div>\n <p\n class=\"text-center mat-body-1 border-top text-bold\"\n style=\"font-size: 16px; margin-bottom: 8px; padding-top: 3px\"\n >\n {{ dashData?.title }}\n </p>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-doughnut-graph',\n templateUrl: './doughnut-graph.component.html',\n styleUrls: ['./doughnut-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class DoughnutGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createDoughnutGraph();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n randomNumber(min = 0, max = 0) {\n if (min == 0 || max == 0) return Math.round(Math.random() * 100);\n else return Math.random() * (max - min) + min;\n }\n\n createDoughnutGraph() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'doughnut',\n data: {\n labels: ['Data '],\n datasets: [\n {\n data: [this.randomNumber(), this.randomNumber(), this.randomNumber(), this.randomNumber()],\n backgroundColor: [\n 'rgba(255, 99, 132,.7)',\n 'rgba(92, 107, 192,.7)',\n 'rgba(66, 165, 245,.7)',\n 'rgba(38, 166, 154,.7)',\n 'rgba(102, 187, 106,.7)',\n ],\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n\n maintainAspectRatio: false,\n responsive: true,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"doughnut-graph-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'cdk-line-graph',\n templateUrl: './line-graph.component.html',\n styleUrls: ['./line-graph.component.scss'],\n imports: [CommonModule],\n})\nexport class LineGraphComponent implements OnInit, OnDestroy {\n @Input() height: number = 0;\n @Input() id: string = '';\n\n chart?: Chart;\n\n constructor() {\n Chart.register(...registerables);\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.createLineChart();\n }, 500);\n }\n\n ngOnDestroy(): void {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n createLineChart() {\n if (!this.id) {\n return;\n }\n\n this.chart = new Chart(this.id, {\n type: 'line',\n data: {\n labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n datasets: [\n {\n backgroundColor: 'rgba(92, 107, 192, 0.36)',\n borderColor: 'rgba(92, 107, 192,.5)',\n data: [76.97, 88.91, 99.31, 122.19, 130.85, 140.91, 150.36, 142.66, 150.36, 142.66],\n label: 'Dataset',\n fill: 'start',\n },\n ],\n },\n options: {\n elements: {\n line: {\n tension: 0.000001,\n },\n },\n\n maintainAspectRatio: false,\n plugins: {\n filler: {\n propagate: false,\n },\n },\n },\n });\n }\n}\n","<div class=\"line-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\nimport { NzFormModule } from 'ng-zorro-antd/form';\n\n@Component({\n selector: 'extend-checkbox',\n templateUrl: './extend-checkbox.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NzFormModule, NzCheckboxModule],\n})\nexport class ExtendCheckbox implements OnInit {\n @Input() label = '';\n @Input() labelSpan = 8;\n @Input() disabled = false;\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n /**\n * default: boolean\n */\n @Input() valueType: 'boolean' | 'number' | 'string' = 'boolean';\n\n @Input()\n get _ngModel() {\n if (this.valueType == 'boolean') {\n return this.checked;\n }\n if (this.valueType == 'number') {\n return this.checked ? 1 : 0;\n }\n if (this.valueType == 'string') {\n return this.checked ? 'Y' : 'N';\n }\n }\n set _ngModel(val: any) {\n if (this.controlName) {\n if (this.valueType == 'boolean') {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x;\n });\n } else if (this.valueType == 'number') {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x == 1;\n });\n } else {\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n this.checked = x == 'Y';\n });\n }\n } else {\n this.checked = val ? true : false;\n }\n }\n @Output() _ngModelChange = new EventEmitter();\n\n checked = false;\n\n ngOnInit(): void {\n if (this.controlName && this.formData?.controls[this.controlName]) {\n if (this.valueType === 'boolean') {\n this.checked = this.formData.controls[this.controlName].getRawValue();\n console.log(this.checked);\n } else if (this.valueType === 'number') {\n this.checked = this.formData.controls[this.controlName].getRawValue() === 1;\n } else {\n this.checked = this.formData.controls[this.controlName].getRawValue() === 'Y';\n }\n\n this.formData.controls[this.controlName].valueChanges.subscribe((x) => {\n if (this.valueType === 'boolean') {\n this.checked = x;\n } else if (this.valueType === 'number') {\n this.checked = x === 1;\n } else {\n this.checked = x === 'Y';\n }\n });\n }\n }\n\n onCheckChange(event: boolean) {\n if (this.controlName) {\n if (this.valueType == 'boolean') {\n this.formData.controls[this.controlName].setValue(event);\n } else if (this.valueType == 'number') {\n this.formData.controls[this.controlName].setValue(event ? 1 : 0);\n } else if (this.valueType == 'string') {\n this.formData.controls[this.controlName].setValue(event ? 'Y' : 'N');\n }\n } else {\n if (this.valueType == 'boolean') {\n this._ngModelChange.emit(event);\n } else if (this.valueType == 'number') {\n this._ngModelChange.emit(event ? 1 : 0);\n } else if (this.valueType == 'string') {\n this._ngModelChange.emit(event ? 'Y' : 'N');\n }\n }\n }\n}\n","@if (label) {\n <div nz-row>\n <div nz-col [nzSpan]=\"labelSpan\"></div>\n <div nz-col nzFlex=\"auto\">\n <label\n style=\"position: relative; top: 5px\"\n nz-checkbox\n [nzDisabled]=\"disabled\"\n [(nzChecked)]=\"checked\"\n (nzCheckedChange)=\"onCheckChange($event)\"\n >\n {{ label }}\n </label>\n </div>\n </div>\n} @else {\n <label\n nz-checkbox\n [nzDisabled]=\"disabled\"\n [(nzChecked)]=\"checked\"\n (nzCheckedChange)=\"onCheckChange($event)\"\n style=\"width: 16px\"\n >\n {{ label }}\n </label>\n}\n","export class DateTimeHelper {\n static lstDay = Array.from({ length: 31 }, (_, i) => i + 1);\n static lstMonth = Array.from({ length: 12 }, (_, i) => i + 1);\n\n private static fromYear = new Date().getFullYear() - 10;\n private static toYear = new Date().getFullYear();\n static lstYear = Array.from(\n { length: DateTimeHelper.toYear - DateTimeHelper.fromYear },\n (_, i) => DateTimeHelper.toYear - i,\n );\n\n /**\n * Lấy ngày giờ hiện tại dưới dạng chuỗi \"YYYY-MM-DD HH:mm:ss\"\n * @return {string}\n */\n static now(): string {\n const now = new Date();\n return `${now.getFullYear()}-${this.pad(now.getMonth() + 1)}-${this.pad(now.getDate())} ${this.pad(now.getHours())}:${this.pad(now.getMinutes())}:${this.pad(now.getSeconds())}`;\n }\n\n /**\n * Lấy ngày hôm nay dưới dạng chuỗi \"YYYY-MM-DD HH:mm:ss\"\n * @return {string}\n */\n static today(): string {\n const now = new Date();\n return `${now.getFullYear()}-${this.pad(now.getMonth() + 1)}-${this.pad(now.getDate())} 00:00:00`;\n }\n\n /**\n * Tạo ngày từ năm, tháng, ngày (có kiểm tra hợp lệ, không bị lệch múi giờ).\n * @param {number} year Năm\n * @param {number} month Tháng (1-12)\n * @param {number} day Ngày (1-31)\n * @param {boolean} isEndOfDay Nếu true, trả về 23:59:59, ngược lại 00:00:00\n * @return {string | null} Chuỗi ngày định dạng \"YYYY-MM-DD HH:mm:ss\" hoặc null nếu ngày không hợp lệ\n */\n static createDate(year: number, month: number, day: number, isEndOfDay: boolean = false): string | null {\n if (!this.isValidDate(year, month, day)) {\n return null;\n }\n\n const hour = isEndOfDay ? 23 : 0;\n const minute = isEndOfDay ? 59 : 0;\n const second = isEndOfDay ? 59 : 0;\n return `${year}-${this.pad(month)}-${this.pad(day)} ${this.pad(hour)}:${this.pad(minute)}:${this.pad(second)}`;\n }\n\n /**\n * Kiểm tra xem ngày có hợp lệ không.\n * @param {number} year Năm\n * @param {number} month Tháng (1-12)\n * @param {number} day Ngày (1-31)\n * @return {boolean} True nếu ngày hợp lệ, ngược lại False.\n */\n public static isValidDate(year: number, month: number, day: number): boolean {\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const lastDay = new Date(year, month, 0).getDate(); // Lấy ngày cuối tháng\n return day <= lastDay;\n }\n\n /**\n * Hàm hỗ trợ: Định dạng số thành 2 chữ số (01, 02, ..., 09)\n * @param {number} n The second number.\n * @return {string} The sum of the two numbers.\n */\n private static pad(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n public static parser(dateStr: string) {\n if (!dateStr.includes('/')) {\n dateStr = this.formatNumberToDate(dateStr);\n }\n\n const parts = dateStr.split('/');\n const current = new Date();\n\n let normalizedValue = '';\n\n if (parts.length === 1 && /^\\d{1,2}$/.test(parts[0])) {\n // Chỉ có ngày -> ghép tháng/năm hiện tại\n normalizedValue = `${parts[0].padStart(2, '0')}/${(current.getMonth() + 1).toString().padStart(2, '0')}/${current.getFullYear()}`;\n } else if (parts.length === 2 && /^\\d{1,2}$/.test(parts[0]) && /^\\d{1,2}$/.test(parts[1])) {\n // Có ngày + tháng -> ghép năm hiện tại\n normalizedValue = `${parts[0].padStart(2, '0')}/${parts[1].padStart(2, '0')}/${current.getFullYear()}`;\n } else {\n // Đã đủ 3 phần\n normalizedValue = dateStr;\n }\n\n if (normalizedValue) {\n const parts = normalizedValue.split('/');\n const day = +parts[0];\n const month = +parts[1];\n const year = +parts[2];\n\n if (DateTimeHelper.isValidDate(year, month, day)) {\n return DateTimeHelper.createDate(year, month, day);\n }\n }\n\n return '';\n }\n\n private static formatNumberToDate(input: string): string {\n // Lấy tối đa 8 ký tự\n input = input.replace(/\\D/g, '').substring(0, 8);\n\n const day = input.substring(0, 2);\n const month = input.substring(2, 4);\n const year = input.substring(4, 8);\n\n let result = '';\n\n if (day) {\n result += day;\n if (month) result += '/';\n }\n\n if (month) {\n result += month;\n if (year) result += '/';\n }\n\n if (year) {\n result += year;\n }\n\n return result;\n }\n}\n","import { Directive, HostListener, Input, AfterViewInit, ElementRef, Optional, Self } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { parse, isValid } from 'date-fns';\nimport { DateTimeHelper } from '../helper/date.helper';\n\n/**\n * Dùng cho nz-date-picker\n */\n@Directive({\n selector: 'nz-date-picker',\n})\nexport class DateInputParserDirective implements AfterViewInit {\n @Input('format') format = 'dd/MM/yyyy';\n private inputElement: HTMLInputElement | null = null;\n private blurHandler = this.tryParseAndSet.bind(this);\n\n constructor(\n private el: ElementRef<HTMLElement>,\n @Optional() @Self() private ngControl: NgControl,\n ) {}\n\n ngAfterViewInit() {\n // Tìm thẻ input bên trong nz-date-picker\n this.inputElement = this.el.nativeElement.querySelector('input');\n\n // Gắn listener blur vào input\n if (this.inputElement) {\n this.inputElement.addEventListener('blur', this.blurHandler);\n }\n }\n\n ngOnDestroy() {\n // Cleanup blur listener để tránh memory leak\n if (this.inputElement) {\n this.inputElement.removeEventListener('blur', this.blurHandler);\n }\n }\n\n @HostListener('keyup.enter')\n onEnter() {\n this.tryParseAndSet();\n this.inputElement?.blur(); // Blur sau khi enter nếu muốn trigger binding ngoài\n }\n\n private tryParseAndSet() {\n if (!this.inputElement) return;\n\n const rawValue = this.inputElement.value.trim();\n const parsed = DateTimeHelper.parser(rawValue);\n\n if (parsed) {\n this.ngControl?.control?.setValue(parsed);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { DateInputParserDirective } from '../../directive/date-input-parser.directive';\n\n@Component({\n selector: 'extend-date-picker',\n templateUrl: './extend-date-picker.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NzFormModule,\n NzDatePickerModule,\n TranslateModule,\n DateInputParserDirective,\n ],\n})\nexport class ExtendDatePicker {\n @Input() dateFormat = 'dd/MM/yyyy';\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n writeValue(obj: any): void {\n this._ngModel = obj;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {}\n\n onNgModelChange(val: any) {\n this._ngModel = val;\n this.onChange(val); // Gửi ngược ra form\n this.onTouched();\n this._ngModelChange.emit(val);\n }\n\n disabledDate = (current: Date): boolean => {\n if (!current) return false;\n\n const min = this.minDate ? new Date(this.minDate) : null;\n const max = this.maxDate ? new Date(this.maxDate) : null;\n\n if (min && current < new Date(min.setHours(0, 0, 0, 0))) return true;\n if (max && current > new Date(max.setHours(23, 59, 59, 999))) return true;\n\n return false;\n };\n\n get errorMessage(): string {\n const value = this._ngModel ? new Date(this._ngModel) : null;\n\n if (!this.isTouched && !value) {\n return '';\n }\n\n if (this.required && !value) {\n return 'Trường yêu cầu nhập';\n }\n\n if (this.minDate && value && new Date(value) < new Date(this.minDate)) {\n return `Ngày không được nhỏ hơn ${this.formatDate(this.minDate)}`;\n }\n\n if (this.maxDate && value && new Date(value) > new Date(this.maxDate)) {\n return `Ngày không được lớn hơn ${this.formatDate(this.maxDate)}`;\n }\n return '';\n }\n\n private formatDate(date: Date): string {\n const d = new Date(date);\n const day = String(d.getDate()).padStart(2, '0');\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const year = d.getFullYear();\n\n switch (this.dateFormat) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'MM/dd/yyyy':\n return `${month}/${day}/${year}`;\n default:\n return d.toLocaleDateString();\n }\n }\n\n isTouched = false;\n\n onBlur() {\n this.isTouched = true;\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"errorMessage\"\n [nzValidateStatus]=\"errorMessage ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-date-picker\n class=\"full-width\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n ></nz-date-picker>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { endOfMonth, endOfWeek, startOfMonth, startOfWeek, subMonths, subWeeks } from 'date-fns';\n\n@Component({\n selector: 'extend-date-range-picker',\n templateUrl: './extend-date-range-picker.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NzFormModule, NzDatePickerModule, TranslateModule],\n})\nexport class ExtendDateRangePicker implements OnInit {\n @Input() dateFormat = 'dd/MM/yyyy';\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() date1: Date | null = null;\n @Output() date1Change = new EventEmitter();\n\n @Input() date2: Date | null = null;\n @Output() date2Change = new EventEmitter();\n\n _ngModel: Date[] | undefined;\n\n today = new Date();\n\n ranges = {\n 'Tuần này': [startOfWeek(this.today, { weekStartsOn: 1 }), endOfWeek(this.today, { weekStartsOn: 1 })],\n 'Tuần trước': [\n startOfWeek(subWeeks(this.today, 1), { weekStartsOn: 1 }),\n endOfWeek(subWeeks(this.today, 1), { weekStartsOn: 1 }),\n ],\n 'Tháng này': [startOfMonth(this.today), endOfMonth(this.today)],\n 'Tháng trước': [startOfMonth(subMonths(this.today, 1)), endOfMonth(subMonths(this.today, 1))],\n };\n\n ngOnInit(): void {\n this._ngModel = this.date1 && this.date2 ? [this.date1, this.date2] : undefined;\n }\n\n ngModelChange(value: Date[] | undefined) {\n this._ngModel = value;\n\n if (value && value.length === 2) {\n this.date1 = value[0];\n this.date2 = value[1];\n } else {\n this.date1 = null;\n this.date2 = null;\n }\n\n this.date1Change.emit(this.date1);\n this.date2Change.emit(this.date2);\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <!-- <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div> -->\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['Từ ngày', 'đến ngày']\"\n [nzRanges]=\"ranges\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n </nz-form-item>\n } @else {\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['Từ ngày', 'đến ngày']\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzInputNumberComponent, NzInputNumberModule } from 'ng-zorro-antd/input-number';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-input-number',\n templateUrl: './extend-input-number.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputNumberModule],\n})\nexport class ExtendInputNumber {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal'; // horizontal: ngang, vertical dọc\n @Input() label = '';\n @Input() placeHolder: 'off' | '' = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() min: number | null = null;\n @Input() max: number | null = null;\n @Input() precision: number = 0;\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n\n /** separatorType: 'comma' (,) | 'dot' (.) */\n @Input() separatorType?: 'comma' | 'dot' | 'blank';\n /** defaultSeparatorType: 'comma' (,) | 'dot' (.) */\n static defaultSeparatorType: 'comma' | 'dot' = 'dot';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @ViewChild('inputnumber') inputnumber!: NzInputNumberComponent;\n\n ngOnInit(): void {}\n\n _onNgModelChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n\n @ViewChild('inputElement') inputElement!: ElementRef;\n\n focus(): void {\n this.inputElement?.nativeElement?.focus();\n }\n\n formatterNumber = (value: number): string => {\n if (value == null || isNaN(value)) return '';\n\n if (!this.getSeparatorType()) {\n return value.toString();\n }\n const parts = `${value}`.split('.');\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.getSeparatorType() === 'comma' ? ',' : '.');\n return parts.length > 1\n ? `${integerPart}${this.getSeparatorType() === 'comma' ? '.' : ','}${parts[1]}`\n : integerPart;\n };\n\n parserNumber = (value: string): number => {\n if (!value) return 0;\n\n if (!this.getSeparatorType()) {\n return parseFloat(value);\n }\n\n // Bỏ ký tự phân cách hàng nghìn\n const cleaned = value\n .replace(new RegExp(`\\\\${this.getSeparatorType() === 'comma' ? ',' : '.'}`, 'g'), '')\n .replace(this.getSeparatorType() === 'comma' ? '.' : ',', '.');\n\n // Kiểm tra toàn bộ chuỗi có phải là số hợp lệ hay không\n if (!/^-?\\d+(\\.\\d+)?$/.test(cleaned)) return NaN;\n\n const parsed = parseFloat(cleaned);\n\n // Ép chạy formatter lại\n setTimeout(() => {\n this.inputnumber.writeValue(parsed);\n this._ngModelChange.emit(parsed);\n if (this.formData && this.controlName) {\n this.formData.controls[this.controlName].setValue(parsed);\n }\n });\n\n return parsed;\n };\n\n getSeparatorType() {\n if (this.separatorType == 'blank') {\n return '';\n }\n if (this.separatorType) {\n return this.separatorType;\n }\n return ExtendInputNumber.defaultSeparatorType;\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzSelectModeType, NzSelectSizeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-input',\n templateUrl: './extend-input.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputModule, NzIconModule],\n})\nexport class ExtendInput {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal'; // horizontal: ngang, vertical dọc\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() inputClass = '';\n\n /**\n * default = 8\n */\n @Input() labelSpan = 8;\n\n @Input() allowClear = false;\n @Input() disabled = false;\n @Input() readOnly = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n @Input() autocomplete: 'off' | '' = '';\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n\n /**\n * Dùng trong word page\n */\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @Output() onclickClearIcon = new EventEmitter();\n\n @Output() onenter = new EventEmitter();\n\n ngOnInit(): void {}\n\n _onNgModelChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n\n @ViewChild('inputElement') inputElement!: ElementRef;\n\n focus(): void {\n this.inputElement?.nativeElement?.select();\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { NzSelectModule, NzSelectSizeType } from 'ng-zorro-antd/select';\nimport { FormGroup, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzFormModule } from 'ng-zorro-antd/form';\n\n@Component({\n selector: 'extend-select',\n templateUrl: './extend-select.html',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzSelectModule],\n styles: `\n :host ::ng-deep .ant-select-selector {\n height: var(--custom-select-height) !important;\n line-height: var(--custom-select-height) !important;\n }\n `,\n})\nexport class ExtendSelectComponent {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n\n /**\n * default = 8\n */\n @Input() labelSpan = 8;\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(val: boolean) {\n this._disabled = val;\n\n if (this.formData && this.controlName) {\n const control = this.formData.controls[this.controlName];\n\n if (this._disabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false }); // <-- bỏ disable\n }\n }\n }\n @Input() required = false;\n @Input() noBottom = false;\n @Input() multiple = false;\n @Input() showSelectAll = false;\n @Input() maxTagCount = 10;\n\n @Input() inputWidth = '';\n @Input() inputHeight = '';\n @Input() borderBottomOnly = false;\n\n /**\n *\n */\n @Input() displayInline = false;\n @Input() size: NzSelectSizeType = 'default';\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() displayFields: string[] = [];\n\n /**\n * Không có thì value sẽ là cả object\n */\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n @Output() itemChange = new EventEmitter();\n\n @Output() onFocus = new EventEmitter();\n\n @HostBinding('style.--custom-select-height')\n get cssHeight() {\n return this.inputHeight ? +this.inputHeight.replaceAll('px', '') - 1 + 'px' : null;\n }\n\n private _disabled = false;\n\n ngOnInit(): void {\n if (this.formData && this.controlName) {\n this.formData.controls[this.controlName].valueChanges.subscribe((val) => {\n this._ngModelChange.emit(val);\n this.itemChange.emit(this.lstItem.find((x) => x[this.valueField] == val));\n });\n }\n }\n\n getDisplay(item: any): string {\n if (this.displayField) {\n return item[this.displayField];\n }\n\n if (this.displayFields?.length) {\n const display = this.displayFields\n .map((field) => item[field])\n .filter((x) => x)\n .join(' - ');\n return display;\n }\n\n return item;\n }\n\n onSelectChange(val: any) {\n if (val instanceof Array && val.find((x) => x == '__all__')) {\n const allIds = this.lstItem.map((x) => (this.valueField ? x[this.valueField] : x));\n val = allIds;\n }\n\n this._ngModel = val;\n this._ngModelChange.emit(val);\n\n if (this.valueField) {\n this.itemChange.emit(this.lstItem.find((x) => x[this.valueField] == val));\n }\n }\n}\n","<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? 24 - labelSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Chọn tất cả --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzSelectModeType } from 'ng-zorro-antd/select';\n\n@Component({\n selector: 'extend-textarea',\n templateUrl: './extend-textarea.html',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NzFormModule,\n NzDatePickerModule,\n TranslateModule,\n NzInputModule,\n ],\n})\nexport class ExtendTextArea implements AfterViewInit {\n @Input() layOutType: 'horizontal' | 'vertical' = 'horizontal';\n @Input() label = '';\n @Input() placeHolder = '';\n @Input() labelAlign: 'left' | 'right' = 'left';\n @Input() labelSpan = 8;\n @Input() inputSpan = 16;\n @Input() disabled = false;\n @Input() required = false;\n @Input() noBottom = false;\n @Input() selectModeType: NzSelectModeType = 'default';\n @Input() inputClass = '';\n\n @Input() minRows = 3;\n @Input() maxRows = 5;\n @Input() autoSize = false;\n\n @Input() lstItem: any[] = [];\n @Input() displayField: string = '';\n @Input() valueField: string = '';\n\n @Input() formData!: FormGroup;\n @Input() controlName!: string;\n\n @Input() _ngModel: any = null;\n @Output() _ngModelChange = new EventEmitter();\n\n ngAfterViewInit(): void {}\n\n onChange() {\n this._ngModelChange.emit(this._ngModel);\n }\n}\n","@if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n </div>\n} @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <textarea\n nz-input\n [nzAutosize]=\"autoSize || { minRows: minRows, maxRows: maxRows }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n ></textarea>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n template: `\n <h2>Không có quyền truy cập</h2>\n <p *ngIf=\"message\">{{ message }}</p>\n <p *ngIf=\"deniedUrl\">\n Bạn đã cố gắng truy cập: <strong>{{ deniedUrl }}</strong>\n </p>\n `,\n imports: [CommonModule],\n})\nexport class NoPermission {\n deniedUrl: string | null = null;\n message: string | null = null;\n\n constructor(private router: Router) {}\n\n ngOnInit(): void {\n const state = history.state;\n\n this.deniedUrl = state?.deniedUrl || null;\n this.message = state?.message || null;\n\n console.log('Lấy từ history.state:', state);\n }\n}\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { NZ_MODAL_DATA } from 'ng-zorro-antd/modal';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\n\n@Component({\n selector: 'pdf-viewer',\n templateUrl: './pdf-viewer.html',\n imports: [NgxExtendedPdfViewerModule],\n})\nexport class PdfViewerComponent implements OnInit {\n // data = inject(NZ_MODAL_DATA);\n\n @Input() dataType: 'base64' | 'bytes' | null = null;\n @Input() pdfData: any;\n\n ngOnInit(): void {\n // this.dataType = this.data.dataType;\n // this.pdfData = this.data.pdfData;\n // this.showPrintButton = this.data.showPrintButton;\n }\n\n print() {\n if (this.dataType == 'base64') {\n const byteCharacters = atob(this.pdfData);\n const byteNumbers = new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i));\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n\n const blobUrl = window.URL.createObjectURL(blob);\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = blobUrl;\n document.body.appendChild(iframe);\n iframe.contentWindow?.print();\n } else if (this.dataType == 'bytes') {\n const blob = new Blob([this.pdfData], { type: 'application/pdf' });\n\n const blobUrl = window.URL.createObjectURL(blob);\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = blobUrl;\n document.body.appendChild(iframe);\n iframe.contentWindow?.print();\n }\n }\n}\n","@if (dataType == \"base64\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [base64Src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n\n@if (dataType == \"bytes\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { Subscription } from 'rxjs';\nimport { LoadingService } from '../../services/loading.service';\n\n// global-spinner.component.ts\n@Component({\n selector: 'app-global-spinner',\n template: `\n @if (visible) {\n <div class=\"global-spinner\" [@fadeInOut]>\n <nz-spin [nzSpinning]=\"true\" style=\"position: relative; bottom: 50px;\"></nz-spin>\n </div>\n }\n `,\n styles: [\n `\n .global-spinner {\n position: fixed;\n z-index: 1200; /* Lớn hơn z-index của modal (usually ~1000) */\n top: 50px;\n left: 0px;\n width: 100vw;\n height: 100vh;\n background-color: rgba(255, 255, 255, 0.8); /* Optional overlay */\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `,\n ],\n animations: [\n trigger('fadeInOut', [\n // transition(':enter', [style({ opacity: 0 }), animate('250ms ease-in', style({ opacity: 1 }))]),\n transition(':leave', [animate('250ms ease-out', style({ opacity: 0 }))]),\n ]),\n ],\n\n imports: [NzSpinModule],\n})\nexport class GlobalSpinnerComponent implements OnInit, OnDestroy {\n visible = false;\n private sub!: Subscription;\n\n constructor(public loadingService: LoadingService) {}\n\n ngOnInit() {\n this.sub = this.loadingService.loading$.subscribe((v) => {\n this.visible = v;\n });\n }\n\n ngOnDestroy() {\n this.sub.unsubscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'height',\n template: `<div [ngStyle]=\"{ height: height + 'px' }\"></div>`,\n imports: [CommonModule],\n})\nexport class Height {\n @Input() height: number = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'width',\n template: `<div style=\"display: inline\" [ngStyle]=\"{ 'padding-left': width + 'px' }\"></div>`,\n imports: [CommonModule],\n})\nexport class Width {\n @Input() width: number = 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'box',\n template: `<div\n [ngStyle]=\"{\n height: height + 'px',\n 'padding-left': width + 'px',\n display: display ? display : width && height ? 'block' : height ? 'block' : width ? 'inline' : display,\n }\"\n ></div>`,\n imports: [CommonModule],\n})\nexport class Box {\n @Input() display: 'block' | 'inline' | '' = '';\n @Input() width: number = 0;\n @Input() height: number = 0;\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { NzCardModule } from 'ng-zorro-antd/card';\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\nimport { NzTagModule } from 'ng-zorro-antd/tag';\nimport { NzRadioModule } from 'ng-zorro-antd/radio';\nimport { BaseComponent } from '../base.component';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { Box } from '../box';\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { CommonModule } from '@angular/common';\nimport { ExtendInput } from '../extend-input/extend-input';\nimport { ExtendSelectComponent } from '../extend-select/extend-select';\nimport { ExtendCheckbox } from '../extend-checkbox/extend-checkbox';\nimport { ExtendTextArea } from '../extend-textarea/extend-textarea';\nimport { FormsModule } from '@angular/forms';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzGridModule } from 'ng-zorro-antd/grid';\nimport { NzFlexModule } from 'ng-zorro-antd/flex';\nimport { ExtendInputNumber } from '../extend-input-number/extend-input-number';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzDividerModule } from 'ng-zorro-antd/divider';\n\nclass WF_Template {\n // #region properties\n WF_Template_Id: number;\n App_Org_Id: string;\n CreatedDate: Date;\n CreatedUser: string;\n UpdatedDate: Date;\n UpdatedUser: string;\n IsActive: boolean;\n Code: string;\n Name: string;\n DocType: string;\n Description: string;\n TemplatePrint: string;\n // #endregion properties\n\n constructor(obj?: any) {\n obj = obj || {};\n\n this.WF_Template_Id = obj.WF_Template_Id || null;\n this.App_Org_Id = obj.App_Org_Id || '';\n this.CreatedDate = obj.CreatedDate || null;\n this.CreatedUser = obj.CreatedUser || '';\n this.UpdatedDate = obj.UpdatedDate || null;\n this.UpdatedUser = obj.UpdatedUser || '';\n this.IsActive = obj.IsActive || null;\n this.Code = obj.Code || '';\n this.Name = obj.Name || '';\n this.DocType = obj.DocType || '';\n this.Description = obj.Description || '';\n this.TemplatePrint = obj.TemplatePrint || '';\n }\n}\n\nclass WF_TemplateStage {\n // #region properties\n WF_TemplateStage_Id: number;\n App_Org_Id: string;\n CreatedDate: Date;\n CreatedUser: string;\n UpdatedDate: Date;\n UpdatedUser: string;\n IsActive: boolean;\n WF_Template_Id: number;\n Code: string;\n Name: string;\n StageType: 'START' | 'NODE' | 'END';\n SeqValue: number;\n LimitValue: number;\n IsRequireUser: boolean;\n // #endregion properties\n\n constructor(obj?: any) {\n obj = obj || {};\n\n this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;\n this.App_Org_Id = obj.App_Org_Id || '';\n this.CreatedDate = obj.CreatedDate || null;\n this.CreatedUser = obj.CreatedUser || '';\n this.UpdatedDate = obj.UpdatedDate || null;\n this.UpdatedUser = obj.UpdatedUser || '';\n this.IsActive = obj.IsActive || null;\n this.WF_Template_Id = obj.WF_Template_Id || null;\n this.Code = obj.Code || '';\n this.Name = obj.Name || '';\n this.StageType = obj.StageType || '';\n this.SeqValue = obj.SeqValue || null;\n this.LimitValue = obj.LimitValue || null;\n this.IsRequireUser = obj.IsRequireUser || null;\n }\n}\n\nclass WF_TemplateStageAction {\n // #region properties\n WF_TemplateStageAction_Id: number;\n App_Org_Id: string;\n CreatedDate: Date;\n CreatedUser: string;\n UpdatedDate: Date;\n UpdatedUser: string;\n IsActive: boolean;\n WF_Template_Id: number;\n WF_TemplateStage_Id: number;\n ActionType: string;\n ActionStatus: string;\n ActionText: string;\n StageStatus: string;\n AllowNote: boolean;\n AllowEmail: boolean;\n WF_EmailTemplate: string;\n To_WF_TemplateStage_Id: number;\n To_StageStatus: string;\n WF_TransitionsRule_Id: number;\n // #endregion properties\n\n constructor(obj?: any) {\n obj = obj || {};\n\n this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;\n this.App_Org_Id = obj.App_Org_Id || '';\n this.CreatedDate = obj.CreatedDate || null;\n this.CreatedUser = obj.CreatedUser || '';\n this.UpdatedDate = obj.UpdatedDate || null;\n this.UpdatedUser = obj.UpdatedUser || '';\n this.IsActive = obj.IsActive || null;\n this.WF_Template_Id = obj.WF_Template_Id || null;\n this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;\n this.ActionType = obj.ActionType || '';\n this.ActionStatus = obj.ActionStatus || '';\n this.ActionText = obj.ActionText || '';\n this.StageStatus = obj.StageStatus || '';\n this.AllowNote = obj.AllowNote || null;\n this.AllowEmail = obj.AllowEmail || null;\n this.WF_EmailTemplate = obj.WF_EmailTemplate || '';\n this.To_WF_TemplateStage_Id = obj.To_WF_TemplateStage_Id || null;\n this.To_StageStatus = obj.To_StageStatus || '';\n this.WF_TransitionsRule_Id = obj.WF_TransitionsRule_Id || null;\n }\n}\n\nclass Workflow extends WF_Template {\n lstStageStatus: { Code: string; Name?: string }[] = [];\n lstActionType: { Code: string; Name?: string }[] = [];\n lstActionStatus: { Code: string; Name?: string }[] = [];\n}\n\n/**\n * STAGE\n */\nclass WorkflowStage extends WF_TemplateStage {\n x: number = 0;\n y: number = 0;\n isReverse?: boolean;\n isReverseLabel?: boolean;\n lstAction?: WorkflowAction[];\n drawerPosition: any;\n\n constructor(obj?: any) {\n obj = obj || {};\n\n super(obj);\n\n this.x = obj.x;\n this.y = obj.y;\n this.isReverse = obj.isReverse;\n this.isReverseLabel = obj.isReverseLabel;\n this.lstAction = obj.lstAction;\n this.drawerPosition = obj.drawerPosition;\n }\n}\n\n/**\n * Action\n */\nclass WorkflowAction extends WF_TemplateStageAction {\n NextStageStatus?: any; // string\n FromStage?: string;\n FromSide?: 'left' | 'right';\n ToStage?: string;\n ToSide?: 'left' | 'right';\n allowBack?: boolean; // true = 2 đầu, false/undefined = 1 đầu\n labelBack?: string;\n points?: Point[];\n isBackAction?: boolean;\n}\n\ninterface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface DeleteNodeAction {\n type: 'delete-node';\n node: WorkflowStage;\n nodeIndex: number;\n edges: WorkflowAction[];\n}\n\n@Component({\n selector: 'app-workflow-editor',\n templateUrl: './workflow-editor.component.html',\n styleUrls: ['./workflow-editor.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n NzCardModule,\n NzDrawerModule,\n NzTagModule,\n NzRadioModule,\n NzIconModule,\n Box,\n NzButtonModule,\n NzToolTipModule,\n ExtendInput,\n ExtendSelectComponent,\n ExtendCheckbox,\n ExtendTextArea,\n NzInputModule,\n NzGridModule,\n NzFlexModule,\n ExtendInputNumber,\n NzTableModule,\n NzDividerModule,\n ],\n})\nexport class WorkflowEditorComponent extends BaseComponent implements OnInit, AfterViewInit {\n //#region NGHIỆP VỤ\n @Input() lstOrg: { Code: string; Name: string }[] = [];\n @Input() lstTemplateType: { Code: string; Name: string }[] = [];\n @Input() lstTemplatePrint: { Code: string; Name: string }[] = [];\n @Input() template: Workflow = new Workflow();\n @Input() lstStage: WorkflowStage[] = [\n new WorkflowStage({ Code: 'start', Name: 'Start', x: -35, y: 120, StageType: 'START', SeqValue: 1 }),\n new WorkflowStage({ Code: 'end', Name: 'End', x: 780, y: 120, StageType: 'END', SeqValue: 999 }),\n ];\n\n @Input() lstAction: WorkflowAction[] = [];\n\n @Output('onSave') onSave = new EventEmitter();\n //#endregion\n\n Math = Math;\n\n drawTemplateVisibel = false;\n settingVisible = false;\n wfcSetting: { ShowGrid: boolean } = { ShowGrid: true };\n\n selectedStage?: WorkflowStage;\n hoverStage?: WorkflowStage;\n selectedAction?: WorkflowAction;\n selectedBackAction?: WorkflowAction;\n hoverEdge?: WorkflowAction;\n\n // vẽ đường liên kết mới\n connectingFrom?: {\n node: WorkflowStage;\n side: 'left' | 'right';\n };\n connectingPoints: Point[] = [];\n previewX = 0;\n previewY = 0;\n\n /** điểm đang chọn để di chuyển */\n draggingPoint?: Point;\n\n /** đang kéo chọn nhiều node */\n isSelecting = false;\n /** điểm bắt đầu kéo */\n selectStart?: { x: number; y: number };\n /** điểm kết thúc kéo */\n selectEnd?: { x: number; y: number };\n\n draggingGroup = false;\n dragStartMouse?: { x: number; y: number };\n dragStartPositions = new Map<string, { x: number; y: number }>();\n dragStartEdgePoints = new Map<WorkflowAction, { x: number; y: number }[]>();\n\n /** list các điểm đang được chọn */\n lstSelectedStageCode = new Set<string>();\n\n // SNAP point\n gridSize = 20; // 10 / 20 / 25 tuỳ thích\n snapToGrid = true;\n\n // ===== drag node =====\n draggingNode?: WorkflowStage;\n isDragging = false;\n dragStartX = 0;\n dragStartY = 0;\n offsetX = 0;\n offsetY = 0;\n\n KEY_MOVE_STEP = 5; // px\n KEY_MOVE_STEP_BIG = 20; // Shift + arrow\n\n // pan: dịch chuyển cả canvas\n isPanning = false;\n panStart?: { x: number; y: number };\n // panX = 0;\n // panY = 0;\n panX = -5000;\n panY = -5000;\n\n isMoveMode = true;\n\n @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLDivElement>;\n @ViewChild('svg', { static: true }) svgRef!: ElementRef<SVGSVGElement>;\n\n get normalEdges() {\n return this.lstAction.filter((e) => e !== this.hoverEdge && !e.isBackAction);\n }\n\n get hoverEdges() {\n if (this.hoverEdge && !this.hoverEdge.isBackAction) {\n return [this.hoverEdge];\n }\n\n if (this.selectedAction && !this.selectedAction.isBackAction) {\n return [this.selectedAction];\n }\n\n return [];\n }\n\n axisLock: 'x' | 'y' | null = null;\n\n @HostListener('window:keydown', ['$event'])\n onKeyDown(e: KeyboardEvent) {\n // bỏ qua nếu đang gõ input\n const target = e.target as HTMLElement;\n if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;\n\n if (e.key === 'Escape') {\n this.cancelConnecting();\n }\n\n if (e.ctrlKey && e.key === 'z') {\n console.log('ctrl z');\n\n e.preventDefault();\n this.undo();\n }\n\n if (e.ctrlKey && (e.key === 'y' || (e.shiftKey && e.key === 'Z'))) {\n console.log('ctrl y');\n\n e.preventDefault();\n this.redo();\n }\n\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].indexOf(e.key) >= 0) {\n let dx = 0;\n let dy = 0;\n\n const step = e.shiftKey ? this.KEY_MOVE_STEP_BIG : this.KEY_MOVE_STEP;\n\n switch (e.key) {\n case 'ArrowLeft':\n dx = -step;\n break;\n case 'ArrowRight':\n dx = step;\n break;\n case 'ArrowUp':\n dy = -step;\n break;\n case 'ArrowDown':\n dy = step;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n this.moveSelectedNodesBy(dx, dy);\n }\n }\n\n ngOnInit(): void {\n console.log('ngOnInit', this.template, this.lstStage, this.lstAction);\n console.log('template', this.template);\n console.log('lstStage', this.lstStage);\n console.log('lstAction', this.lstAction);\n\n this.lstStage.forEach((x) => {\n x.lstAction = this.lstAction.filter((y) => y.FromStage == x.Code);\n });\n }\n\n ngAfterViewInit() {\n this.updateCanvasSize();\n }\n\n moveSelectedNodesBy(dx: number, dy: number) {\n if (this.lstSelectedStageCode.size === 0) return;\n\n // ⭐ UNDO SNAPSHOT\n this.pushUndo({\n type: 'move-nodes',\n before: this.cloneNodePositions(this.lstSelectedStageCode),\n });\n\n for (const n of this.lstStage) {\n if (!this.lstSelectedStageCode.has(n.Code)) continue;\n\n n.x = this.clamp(n.x + dx, 0, this.CANVAS_WIDTH - this.NODE_WIDTH);\n\n n.y = this.clamp(n.y + dy, 0, this.CANVAS_HEIGHT - this.NODE_HEIGHT);\n }\n }\n\n save() {\n this.onSave.emit({ template: this.template, lstStage: this.lstStage, lstAction: this.lstAction });\n }\n\n addStage() {\n console.log('addStage');\n\n const code = 'New_Stage_' + Math.round(Math.random() * 1000);\n\n // tìm vị trí trống (đơn giản & hiệu quả)\n const baseX = 200;\n const baseY = 120;\n\n const GAP_X = 200;\n const GAP_Y = 120;\n\n let x = baseX;\n let y = baseY;\n\n while (this.isPositionOccupied(x, y)) {\n y += GAP_Y;\n }\n\n const stage = new WorkflowStage();\n stage.Code = code;\n stage.Name = 'New Stage';\n stage.x = x;\n stage.y = y;\n stage.StageType = 'NODE';\n stage.SeqValue = 10;\n\n this.lstStage.push(stage);\n this.lstStage = this.lstStage.sort((a, b) => a.SeqValue - b.SeqValue);\n // this.selectedStage = node;\n this.hoverStage = stage;\n }\n\n isConnectingFrom(node: WorkflowStage) {\n return this.connectingFrom?.node.Code === node.Code;\n }\n\n isDraggingFrom(node: WorkflowStage) {\n return this.draggingNode?.Code === node.Code;\n }\n\n isSelectedNode(node: WorkflowStage) {\n return this.selectedStage?.Code === node.Code;\n }\n\n cancelConnecting() {\n if (this.connectingFrom) {\n this.connectingFrom = undefined;\n this.previewX = 0;\n this.previewY = 0;\n\n this.connectingPoints = [];\n }\n }\n\n //#region NGHIỆP VỤ\n addAction() {\n if (!this.selectedStage) return;\n\n const action = new WorkflowAction();\n action.FromStage = this.selectedStage.Code;\n action.FromSide = 'right';\n\n this.selectedStage.lstAction = this.selectedStage.lstAction ? [...this.selectedStage.lstAction, action] : [action];\n this.lstAction = this.lstAction ? [...this.lstAction, action] : [action];\n }\n\n onchangeAllowBack(action: WorkflowAction) {\n console.log('onchangeAllowBack', action);\n\n const stage = this.lstStage.find((x) => x.Code == action.ToStage);\n if (!stage) {\n this.notiService.error('Stage not found');\n return;\n }\n\n if (action.allowBack) {\n const newAction = new WorkflowAction();\n newAction.FromStage = action.ToStage;\n newAction.FromSide = 'right';\n newAction.ToStage = action.FromStage;\n newAction.ToSide = 'left';\n newAction.isBackAction = true;\n\n console.log('newAction', newAction);\n\n this.lstAction = [...this.lstAction, newAction];\n\n stage.lstAction = [...(stage.lstAction as any), newAction];\n\n this.selectedBackAction = newAction;\n } else {\n action.labelBack = '';\n\n const backAction = this.lstAction.find(\n (x) => x.FromStage == action.ToStage && x.ToStage == action.FromStage && x.isBackAction,\n );\n\n console.log('remove action', backAction);\n\n if (!backAction) {\n this.notiService.error('Action not found');\n } else {\n this.lstAction = [...this.lstAction.filter((x) => x != backAction)];\n stage.lstAction = [...(stage.lstAction?.filter((x) => x != backAction) as any)];\n this.selectedBackAction = undefined;\n }\n }\n }\n\n onchangeLabelBack(action: WorkflowAction) {\n const backAction = this.lstAction.find(\n (x) => x.FromStage == action.ToStage && x.ToStage == action.FromStage && x.isBackAction,\n );\n\n if (!backAction) {\n this.notiService.error('Action not found');\n } else {\n backAction.ActionText = action.labelBack || '';\n }\n }\n\n onchangeActionText(action: WorkflowAction) {\n if (action.isBackAction) {\n const goAction = this.lstAction.find(\n (x) => x.FromStage == action.ToStage && x.ToStage == action.FromStage && !x.isBackAction,\n );\n\n if (!goAction) {\n this.notiService.error('Action not found');\n } else {\n goAction.labelBack = action.ActionText || '';\n }\n }\n }\n\n onchangeNextStage(action: WorkflowAction) {\n console.log('onchangeNextStage', action);\n }\n\n async deleteNode() {\n if (!this.selectedStage) return;\n\n if (!(await this.confirm(`Xoá node: ${this.selectedStage.Name}`))) return;\n\n const node = this.selectedStage;\n\n // 🔹 snapshot edges liên quan\n const relatedEdges = this.lstAction.filter((e) => e.FromStage === node.Code || e.ToStage === node.Code);\n\n // 🔹 snapshot vị trí node trong mảng\n const nodeIndex = this.lstStage.findIndex((n) => n.Code === node.Code);\n\n // ⭐ PUSH UNDO\n this.pushUndo({\n type: 'delete-node',\n node: { ...node }, // clone\n nodeIndex,\n edges: relatedEdges.map((e) => ({ ...e })),\n });\n\n // ❌ xoá edges\n this.lstAction = this.lstAction.filter((e) => e.FromStage !== node.Code && e.ToStage !== node.Code);\n\n // ❌ xoá node\n this.lstStage.splice(nodeIndex, 1);\n\n this.selectedStage = undefined;\n }\n\n async deleteAction(action: WorkflowAction) {\n if (!(await this.confirm(`Delete action ???`))) return;\n\n const stage = this.lstStage.find((x) => x.Code == action.FromStage);\n\n if (!stage) return;\n\n stage.lstAction = stage.lstAction?.filter((x) => x != action);\n this.lstAction = this.lstAction.filter((x) => x != action);\n }\n\n //#endregion\n\n //#region Action type\n\n inputStageStatusVisible = false;\n inputStageStatusCode = '';\n inputStageStatusName = '';\n @ViewChild('inputStageStatusElement', { static: false }) inputStageStatusElement?: ElementRef;\n\n checkRemoveableStageStatus(tag: any) {\n if (\n this.lstAction.find((x) => x.StageStatus === tag.Code) ||\n this.lstAction.find((x) => x.NextStageStatus === tag.Code)\n ) {\n return false;\n }\n return true;\n }\n\n handleCloseStageStatus(removedTag: any): void {\n this.template.lstStageStatus = this.template.lstStageStatus.filter((tag) => tag !== removedTag);\n }\n\n showInputStageStatus(): void {\n this.inputStageStatusVisible = true;\n setTimeout(() => {\n this.inputStageStatusElement?.nativeElement.focus();\n }, 10);\n }\n\n handleInputStageStatusConfirm(): void {\n if (this.inputStageStatusCode && !this.template.lstStageStatus.find((x) => x.Code === this.inputValue)) {\n this.template.lstStageStatus = [\n ...this.template.lstStageStatus,\n { Code: this.inputStageStatusCode, Name: this.inputStageStatusName },\n ];\n }\n this.inputStageStatusCode = '';\n this.inputStageStatusName = '';\n this.inputStageStatusVisible = false;\n }\n //#endregion\n\n //#region Action type\n\n sliceTagName(tag: string): string {\n // const isLongTag = tag.length > 20;\n // return isLongTag ? `${tag.slice(0, 20)}...` : tag;\n return tag;\n }\n\n inputActionTypeVisible = false;\n inputActionTypeCode = '';\n inputActionTypeName = '';\n @ViewChild('inputActionTypeElement', { static: false }) inputActionTypeElement?: ElementRef;\n\n checkRemoveableActionType(tag: any) {\n if (this.lstAction.find((x) => x.ActionType === tag.Code)) {\n return false;\n }\n return true;\n }\n\n handleCloseActionType(removedTag: {}): void {\n this.template.lstActionType = this.template.lstActionType.filter((tag) => tag !== removedTag);\n }\n\n showInputActionType(): void {\n this.inputActionTypeVisible = true;\n setTimeout(() => {\n console.log(this.inputActionTypeElement);\n\n this.inputActionTypeElement?.nativeElement.focus();\n }, 10);\n }\n\n handleInputActionTypeConfirm(): void {\n if (this.inputActionTypeCode && !this.template.lstActionType.find((x) => x.Code === this.inputValue)) {\n this.template.lstActionType = [\n ...this.template.lstActionType,\n { Code: this.inputActionTypeCode, Name: this.inputActionTypeName },\n ];\n }\n this.inputActionTypeCode = '';\n this.inputActionTypeName = '';\n this.inputActionTypeVisible = false;\n }\n //#endregion\n\n //#region Action status\n inputVisible = false;\n inputValue = '';\n @ViewChild('inputElement', { static: false }) inputElement?: ElementRef;\n\n checkRemoveableActionStatus(tag: any) {\n if (this.lstAction.find((x) => x.ActionStatus === tag.Code)) {\n return false;\n }\n return true;\n }\n\n handleClose(removedTag: {}): void {\n this.template.lstActionStatus = this.template.lstActionStatus.filter((tag) => tag !== removedTag);\n }\n\n showInput(): void {\n this.inputVisible = true;\n setTimeout(() => {\n console.log(this.inputElement);\n this.inputElement?.nativeElement.focus();\n }, 10);\n }\n\n handleInputConfirm(): void {\n if (this.inputValue && !this.template.lstActionStatus.find((x) => x.Code === this.inputValue)) {\n this.template.lstActionStatus = [...this.template.lstActionStatus, { Code: this.inputValue }];\n }\n this.inputValue = '';\n this.inputVisible = false;\n }\n //#endregion\n\n //#region Canvas action\n onMouseDownCanvas(event: MouseEvent) {\n console.log('onMouseDownCanvas > event.button', event.button);\n\n if (event.button !== 0) return; // button === 0 : chuột trái\n\n // click vào canvas trống\n if ((event.target as HTMLElement).closest('.workflow-node')) return;\n\n // 🖐 SPACE + drag → pan\n if (this.isMoveMode) {\n this.isPanning = true;\n this.panStart = {\n x: event.clientX,\n y: event.clientY,\n };\n\n this.canvasRef?.nativeElement.classList.add('panning');\n return;\n }\n\n const p = this.getSvgPoint(event, true);\n\n this.isSelecting = true;\n this.selectStart = p;\n this.selectEnd = p;\n\n this.lstSelectedStageCode.clear();\n }\n\n onMouseMoveCanvas(event: MouseEvent) {\n if (this.isPanning && this.panStart) {\n const dx = event.clientX - this.panStart.x;\n const dy = event.clientY - this.panStart.y;\n\n this.panX += dx;\n this.panY += dy;\n\n this.panStart = {\n x: event.clientX,\n y: event.clientY,\n };\n\n return;\n }\n\n const p = this.getSvgPoint(event);\n\n const dx = Math.abs(event.clientX - this.dragStartX);\n const dy = Math.abs(event.clientY - this.dragStartY);\n\n if (dx > 4 || dy > 4) {\n this.isDragging = true;\n }\n\n // 1️⃣ đang kéo vùng chọn\n if (this.isSelecting && this.selectStart) {\n const p1 = this.getSvgPoint(event, true);\n this.selectEnd = p1;\n this.updateSelection();\n return;\n }\n\n // 2️⃣ đang kéo nhiều node\n if (this.draggingGroup && this.dragStartMouse) {\n let dx = p.x - this.dragStartMouse.x;\n let dy = p.y - this.dragStartMouse.y;\n\n // ⭐ xác định trục lock\n if (event.shiftKey && !this.axisLock) {\n this.axisLock = Math.abs(dx) > Math.abs(dy) ? 'x' : 'y';\n }\n\n if (event.shiftKey && this.axisLock === 'x') {\n dy = 0;\n }\n\n if (event.shiftKey && this.axisLock === 'y') {\n dx = 0;\n }\n\n const snap = this.snapPoint(\n {\n x: this.dragStartMouse.x + dx,\n y: this.dragStartMouse.y + dy,\n },\n event,\n );\n\n const sdx = snap.x - this.dragStartMouse.x;\n const sdy = snap.y - this.dragStartMouse.y;\n\n // for (const n of this.lstStage) {\n // if (!this.lstSelectedStageCode.has(n.Code)) continue;\n\n // const start = this.dragStartPositions.get(n.Code)!;\n // n.x = start.x + sdx;\n // n.y = start.y + sdy;\n // }\n\n const nodeW = this.NODE_WIDTH;\n const nodeH = this.NODE_HEIGHT;\n\n // tìm biên group\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const n of this.lstStage) {\n if (!this.lstSelectedStageCode.has(n.Code)) continue;\n\n const start = this.dragStartPositions.get(n.Code)!;\n\n minX = Math.min(minX, start.x);\n minY = Math.min(minY, start.y);\n maxX = Math.max(maxX, start.x + nodeW);\n maxY = Math.max(maxY, start.y + nodeH);\n }\n\n // clamp delta\n const clampedDx = this.clamp(sdx, -minX, this.CANVAS_WIDTH - maxX);\n\n const clampedDy = this.clamp(sdy, -minY, this.CANVAS_HEIGHT - maxY);\n\n // 🔹 move nodes\n for (const n of this.lstStage) {\n if (!this.lstSelectedStageCode.has(n.Code)) continue;\n\n const start = this.dragStartPositions.get(n.Code)!;\n n.x = start.x + clampedDx;\n n.y = start.y + clampedDy;\n }\n\n // 🔹 move edge points\n for (const [edge, startPoints] of this.dragStartEdgePoints.entries()) {\n if (!edge.points) continue;\n\n edge.points.forEach((pt, i) => {\n pt.x = startPoints[i].x + dx;\n pt.y = startPoints[i].y + dy;\n });\n }\n\n return;\n }\n\n // 4️⃣ đang kéo 1 node\n if (this.draggingNode) {\n const dx = p.x;\n const dy = p.y;\n\n // ⭐ xác định trục khi giữ Shift\n if (event.shiftKey && !this.axisLock) {\n if (Math.abs(dx) > Math.abs(dy)) {\n this.axisLock = 'x';\n } else {\n this.axisLock = 'y';\n }\n }\n\n let rawX = p.x - this.offsetX;\n let rawY = p.y - this.offsetY;\n\n // ⭐ khoá trục\n if (event.shiftKey && this.axisLock === 'x') {\n rawY = this.draggingNode.y;\n }\n\n if (event.shiftKey && this.axisLock === 'y') {\n rawX = this.draggingNode.x;\n }\n\n const snap = this.snapPoint({ x: rawX, y: rawY }, event);\n\n // this.draggingNode.x = snap.x;\n // this.draggingNode.y = snap.y;\n\n const nodeW = this.NODE_WIDTH;\n const nodeH = this.NODE_HEIGHT;\n\n this.draggingNode.x = this.clamp(\n snap.x,\n 0,\n this.CANVAS_WIDTH - nodeW,\n // this.canvasWidth - nodeW,\n );\n\n this.draggingNode.y = this.clamp(\n snap.y,\n 0,\n this.CANVAS_HEIGHT - nodeH,\n // this.canvasHeight - nodeH,\n );\n\n return;\n }\n\n // 3️⃣ đang kéo waypoint\n if (this.draggingPoint) {\n const p1 = this.getSvgPoint(event, true);\n const snap = this.snapPoint(p1, event);\n // this.draggingPoint.x = snap.x;\n // this.draggingPoint.y = snap.y;\n\n this.draggingPoint.x = this.clamp(snap.x, 0, this.CANVAS_WIDTH);\n\n this.draggingPoint.y = this.clamp(snap.y, 0, this.CANVAS_HEIGHT);\n\n return;\n }\n\n // 5️⃣ đang kéo connection preview\n if (this.connectingFrom) {\n const p = this.getSvgPoint(event, true);\n this.previewX = p.x;\n this.previewY = p.y;\n }\n }\n\n onMouseUpCanvas(event?: MouseEvent) {\n this.isSelecting = false;\n this.draggingGroup = false;\n this.draggingNode = undefined;\n this.draggingPoint = undefined;\n this.isPanning = false;\n\n setTimeout(() => (this.isDragging = false));\n }\n\n onClickCanvas(e: MouseEvent) {\n console.log('onClickCanvas', e.offsetX, e.offsetY);\n\n if (!this.connectingFrom) return;\n\n this.connectingPoints.push({\n x: e.offsetX,\n y: e.offsetY,\n });\n\n console.log(this.connectingPoints);\n }\n //#endregion\n\n //#region NODE action\n onMouseDownNode(event: MouseEvent, node: WorkflowStage) {\n console.log('onMouseDownNode', node);\n\n event.stopPropagation();\n event.preventDefault();\n\n this.axisLock = null;\n\n const p = this.getSvgPoint(event);\n\n // CASE 1️⃣: node nằm trong selection → kéo cả group\n if (this.lstSelectedStageCode.has(node.Code)) {\n /* =============================\n * UNDO SNAPSHOT (GROUP)\n * ============================= */\n this.pushUndo({\n type: 'move-nodes',\n before: this.cloneNodePositions(this.lstSelectedStageCode),\n });\n\n this.draggingGroup = true;\n this.dragStartMouse = p;\n\n // 🔹 snapshot node positions\n this.dragStartPositions.clear();\n for (const n of this.lstStage) {\n if (this.lstSelectedStageCode.has(n.Code)) {\n this.dragStartPositions.set(n.Code, { x: n.x, y: n.y });\n }\n }\n\n // 🔹 snapshot edge points\n this.dragStartEdgePoints = new Map<WorkflowAction, { x: number; y: number }[]>();\n\n for (const e of this.lstAction) {\n if (!e.points?.length) continue;\n\n if (this.lstSelectedStageCode.has(e.FromStage || '') || this.lstSelectedStageCode.has(e.ToStage || '')) {\n this.dragStartEdgePoints.set(\n e,\n e.points.map((p) => ({ x: p.x, y: p.y })),\n );\n }\n }\n\n return;\n }\n\n // CASE 2️⃣: node chưa được chọn → kéo node đơn\n this.lstSelectedStageCode.clear();\n // this.selectedNodeIds.add(node.id);\n\n /* =============================\n * UNDO SNAPSHOT (1 NODE)\n * ============================= */\n this.pushUndo({\n type: 'move-nodes',\n before: this.cloneNodePositions(new Set([node.Code])),\n });\n\n this.draggingNode = node;\n this.dragStartX = event.clientX;\n this.dragStartY = event.clientY;\n this.offsetX = event.clientX - node.x;\n this.offsetY = event.clientY - node.y;\n this.isDragging = false;\n }\n\n onClickStage(node: WorkflowStage) {\n console.log('onClickStage', node);\n\n this.hoverStage = undefined;\n\n if (this.isDragging) return;\n\n if (this.connectingFrom) {\n if (this.connectingFrom.node.Code !== node.Code) {\n const existed = this.lstAction.some(\n (e) => e.FromStage === this.connectingFrom!.node.Code && e.ToStage === node.Code,\n );\n\n if (!existed) {\n const newAction = new WorkflowAction();\n newAction.FromStage = this.connectingFrom.node.Code;\n newAction.FromSide = this.connectingFrom.side;\n newAction.ToStage = node.Code;\n newAction.ToSide = 'left';\n\n // ⭐ NẾU CÓ WAYPOINT → MANUAL ROUTE\n if (this.connectingPoints.length > 0) {\n newAction.points = [...this.connectingPoints];\n }\n\n this.lstAction.push(newAction);\n\n const stage = this.lstStage.find((x) => x.Code == newAction.FromStage);\n\n if (stage) {\n stage.lstAction = stage.lstAction ? [...stage.lstAction, newAction] : [newAction];\n }\n }\n }\n\n this.cancelConnecting();\n\n return;\n }\n\n if (this.isDragging) return;\n if (this.lstSelectedStageCode.size) return;\n // if (node.id == 'start' || node.id == 'end') return;\n\n this.selectedStage = node;\n\n console.log(this.selectedStage);\n }\n //#endregion\n\n //#region EDGE action\n onMouseEnterEdge(e: WorkflowAction) {\n // console.log('onMouseEnterEdge', e);\n if (this.connectingFrom) return;\n this.hoverEdge = e;\n this.connectingPoints = e.points || [];\n }\n\n onMouseLeaveEdge(e: WorkflowAction) {\n // console.log('onEdgeLeave', e);\n if (this.connectingFrom) return;\n this.hoverEdge = undefined;\n this.connectingPoints = [];\n }\n\n private edgeClickTimer: any = null;\n private CLICK_DELAY = 250;\n\n onClickEdge(edge: WorkflowAction, event: MouseEvent, doAction = false) {\n event.stopPropagation();\n event.preventDefault();\n\n if (this.edgeClickTimer) {\n // 👉 DBL CLICK\n clearTimeout(this.edgeClickTimer);\n this.edgeClickTimer = null;\n\n this.onDoubleClickEdge(event, edge);\n return;\n }\n\n if (doAction) {\n this.selectedAction = edge;\n this.selectedBackAction = this.lstAction.find(\n (x) =>\n x.isBackAction == true &&\n x.FromStage == this.selectedAction?.ToStage &&\n x.ToStage == this.selectedAction?.FromStage,\n );\n } else {\n // 👉 SINGLE CLICK (chờ xem có dbl không)\n this.edgeClickTimer = setTimeout(() => {\n this.edgeClickTimer = null;\n console.log('onClickEdge', edge);\n\n this.onClickEdge(edge, event, true);\n }, this.CLICK_DELAY);\n }\n }\n\n onDoubleClickEdge(event: MouseEvent, edge: WorkflowAction) {\n console.log('onDoubleClickEdge', edge);\n\n event.stopPropagation();\n event.preventDefault();\n\n const p = this.getSvgPoint(event, true);\n\n // Nếu edge chưa có manual points → convert auto → manual\n if (!edge.points || edge.points.length === 0) {\n edge.points = [];\n }\n\n const insertIndex = this.findInsertIndex(edge, p);\n\n edge.points.splice(insertIndex, 0, {\n x: p.x,\n y: p.y,\n });\n }\n\n //#endregion\n\n //#region Connector action\n onClickConnector(event: MouseEvent, node: WorkflowStage, side: 'left' | 'right') {\n console.log('onClickConnector', side, node);\n\n event.stopPropagation();\n event.preventDefault();\n\n const p = this.getSvgPoint(event, true);\n this.previewX = p.x;\n this.previewY = p.y;\n\n /* =============================\n * CLICK OUT (RIGHT) → BẮT ĐẦU\n * ============================= */\n if (side === 'right') {\n this.connectingFrom = {\n node: node,\n side: side,\n };\n this.connectingPoints = []; // ⭐ reset waypoint\n return;\n }\n\n /* =============================\n * CLICK IN (LEFT) → KẾT THÚC\n * ============================= */\n if (side === 'left' && this.connectingFrom) {\n if (this.connectingFrom.node.Code !== node.Code) {\n const existed = this.lstAction.some(\n (e) => e.FromStage === this.connectingFrom!.node.Code && e.ToStage === node.Code,\n );\n\n if (!existed) {\n const newAction = new WorkflowAction();\n newAction.FromStage = this.connectingFrom.node.Code;\n newAction.FromSide = this.connectingFrom.side;\n newAction.ToStage = node.Code;\n newAction.ToSide = 'left';\n\n // ⭐ NẾU CÓ WAYPOINT → MANUAL ROUTE\n if (this.connectingPoints.length > 0) {\n newAction.points = [...this.connectingPoints];\n }\n\n this.lstAction.push(newAction);\n\n const stage = this.lstStage.find((x) => x.Code == newAction.FromStage);\n\n if (stage) {\n stage.lstAction = stage.lstAction ? [...stage.lstAction, newAction] : [newAction];\n }\n\n console.log(newAction);\n console.log(stage);\n }\n }\n\n this.cancelConnecting();\n }\n }\n //#endregion\n\n //#region Point action\n onmousedownPoint(event: MouseEvent, p: Point) {\n console.log('onmousedownPoint', p);\n\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.draggingPoint) {\n this.draggingPoint = p;\n } else {\n this.draggingPoint = undefined;\n }\n }\n\n onRightClickPoint(event: MouseEvent, edge: WorkflowAction, index: number) {\n console.log('onRightClickPoint', edge, index);\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!edge.points) return;\n\n edge.points.splice(index, 1);\n\n // Nếu xoá hết → quay về auto route\n if (edge.points.length === 0) {\n delete edge.points;\n }\n }\n //#endregion\n\n //#region UNDO REDU\n undoStack: any[] = [];\n redoStack: any[] = [];\n\n cloneNodePositions(nodeIds: Set<string>) {\n const map = new Map<string, { x: number; y: number }>();\n for (const n of this.lstStage) {\n if (nodeIds.has(n.Code)) {\n map.set(n.Code, { x: n.x, y: n.y });\n }\n }\n return map;\n }\n\n pushAlignUndo() {\n this.pushUndo({\n type: 'move-nodes',\n before: this.cloneNodePositions(this.lstSelectedStageCode),\n });\n }\n\n pushUndo(action: any) {\n this.undoStack.push(action);\n this.redoStack = [];\n }\n\n undo() {\n const action = this.undoStack.pop();\n if (!action) return;\n\n switch (action.type) {\n case 'move-nodes':\n this.undoMoveNodes(action);\n break;\n\n case 'delete-node': {\n // 🔙 restore node\n this.lstStage.splice(action.nodeIndex, 0, action.node);\n\n // 🔙 restore edges\n this.lstAction.push(...action.edges);\n\n // redo snapshot\n this.redoStack.push(action);\n break;\n }\n }\n }\n\n undoMoveNodes(action: any) {\n const after = this.cloneNodePositions(new Set(action.before.keys()));\n\n this.redoStack.push({\n type: 'move-nodes',\n before: after,\n });\n\n // restore\n action.before.forEach((pos: any, id: any) => {\n const node = this.lstStage.find((n) => n.Code === id);\n if (node) {\n node.x = pos.x;\n node.y = pos.y;\n }\n });\n }\n\n redo() {\n const action = this.redoStack.pop();\n if (!action) return;\n\n switch (action.type) {\n case 'move-nodes':\n this.redoMoveNodes(action);\n break;\n\n case 'delete-node': {\n const nodeId = action.node.id;\n\n // redo = xoá lại\n this.lstAction = this.lstAction.filter((e) => e.FromStage !== nodeId && e.ToStage !== nodeId);\n\n const idx = this.lstStage.findIndex((n) => n.Code === nodeId);\n if (idx >= 0) this.lstStage.splice(idx, 1);\n\n this.undoStack.push(action);\n break;\n }\n }\n }\n\n redoMoveNodes(action: any) {\n const after = this.cloneNodePositions(new Set(action.before.keys()));\n\n this.undoStack.push({\n type: 'move-nodes',\n before: after,\n });\n\n action.before.forEach((pos: any, id: any) => {\n const node = this.lstStage.find((n) => n.Code === id);\n if (node) {\n node.x = pos.x;\n node.y = pos.y;\n }\n });\n }\n\n //#endregion\n\n CANVAS_WIDTH = 10000;\n CANVAS_HEIGHT = 10000;\n\n canvasWidth = 0;\n canvasHeight = 0;\n\n NODE_WIDTH = 160;\n NODE_HEIGHT = 80;\n\n //#region ALIGN\n\n getSelectedNodes(): WorkflowStage[] {\n return this.lstStage.filter((n) => this.lstSelectedStageCode.has(n.Code));\n }\n\n alignLeft() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const minX = Math.min(...nodes.map((n) => n.x));\n nodes.forEach((n) => (n.x = minX));\n }\n\n alignCenter() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const centers = nodes.map((n) => n.x + this.NODE_WIDTH / 2);\n const centerX = centers.reduce((a, b) => a + b) / centers.length;\n\n nodes.forEach((n) => {\n n.x = centerX - this.NODE_WIDTH / 2;\n });\n }\n\n alignRight() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const maxX = Math.max(...nodes.map((n) => n.x + this.NODE_WIDTH));\n nodes.forEach((n) => (n.x = maxX - this.NODE_WIDTH));\n }\n\n alignTop() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const minY = Math.min(...nodes.map((n) => n.y));\n nodes.forEach((n) => (n.y = minY));\n }\n\n alignMiddle() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const centers = nodes.map((n) => n.y + this.NODE_HEIGHT / 2);\n const centerY = centers.reduce((a, b) => a + b) / centers.length;\n\n nodes.forEach((n) => {\n n.y = centerY - this.NODE_HEIGHT / 2;\n });\n }\n\n alignBottom() {\n if (this.lstSelectedStageCode.size < 2) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes();\n const maxY = Math.max(...nodes.map((n) => n.y + this.NODE_HEIGHT));\n nodes.forEach((n) => (n.y = maxY - this.NODE_HEIGHT));\n }\n\n distributeHorizontal() {\n if (this.lstSelectedStageCode.size < 3) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes().sort((a, b) => a.x - b.x);\n\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n\n const totalWidth = nodes.reduce((s, n) => s + this.NODE_WIDTH, 0);\n const space = (last.x - first.x - totalWidth + this.NODE_WIDTH) / (nodes.length - 1);\n\n let x = first.x;\n\n nodes.forEach((n, i) => {\n if (i === 0 || i === nodes.length - 1) {\n x = n.x + this.NODE_WIDTH + space;\n return;\n }\n n.x = x;\n x += this.NODE_WIDTH + space;\n });\n }\n\n distributeVertical() {\n if (this.lstSelectedStageCode.size < 3) return;\n\n this.pushAlignUndo();\n\n const nodes = this.getSelectedNodes().sort((a, b) => a.y - b.y);\n\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n\n const totalHeight = nodes.reduce((s, n) => s + this.NODE_HEIGHT, 0);\n const space = (last.y - first.y - totalHeight + this.NODE_HEIGHT) / (nodes.length - 1);\n\n let y = first.y;\n\n nodes.forEach((n, i) => {\n if (i === 0 || i === nodes.length - 1) {\n y = n.y + this.NODE_HEIGHT + space;\n return;\n }\n n.y = y;\n y += this.NODE_HEIGHT + space;\n });\n }\n\n //#endregion\n\n //#region zoom\n zoom = 1;\n minZoom = 0.5;\n maxZoom = 2;\n zoomStep = 0.1;\n\n get svgTransform(): string {\n const cx = this.getCanvasWidth() / 2;\n const cy = this.getCanvasHeight() / 2;\n\n return `\n translate(${cx} ${cy})\n scale(${this.zoom})\n translate(${-cx} ${-cy})\n `;\n }\n\n zoomIn() {\n this.zoom = Math.min(this.zoom + this.zoomStep, this.maxZoom);\n }\n\n zoomOut() {\n this.zoom = Math.max(this.zoom - this.zoomStep, this.minZoom);\n }\n //#endregion\n\n //#region HELPER\n\n isEdgeReversed(edge: WorkflowAction): boolean {\n const from = this.getNodeCenter(this.lstStage.find((x) => x.Code == edge.FromStage) as any, 'right');\n const to = this.getNodeCenter(this.lstStage.find((x) => x.Code == edge.ToStage) as any, 'left');\n\n return to.x < from.x;\n }\n\n getEdgeLabelPosition(edge: WorkflowAction) {\n // Ưu tiên waypoint giữa nếu có\n if (edge.points && edge.points.length > 0) {\n const mid = edge.points[Math.floor(edge.points.length / 2)];\n return { x: mid.x, y: mid.y };\n }\n\n // fallback: giữa from → to\n const from = this.getNodeCenter(this.lstStage.find((x) => x.Code == edge.FromStage) as any, 'right');\n const to = this.getNodeCenter(this.lstStage.find((x) => x.Code == edge.ToStage) as any, 'left');\n\n return {\n x: (from.x + to.x) / 2,\n y: (from.y + to.y) / 2,\n };\n }\n\n getNodeCenter(node: WorkflowStage, side: 'left' | 'right' | 'top' | 'bottom' = 'right') {\n // const width = node.width ?? 160; // ⭐ đúng với card của bạn\n // const height = node.height ?? 80;\n\n const width = 160;\n const height = 80;\n\n switch (side) {\n case 'left':\n return {\n x: node.x,\n y: node.y + height / 2,\n };\n\n case 'right':\n return {\n x: node.x + width,\n y: node.y + height / 2,\n };\n\n case 'top':\n return {\n x: node.x + width / 2,\n y: node.y,\n };\n\n case 'bottom':\n return {\n x: node.x + width / 2,\n y: node.y + height,\n };\n }\n }\n\n updateCanvasSize() {\n const rect = this.canvasRef?.nativeElement.getBoundingClientRect();\n\n this.canvasWidth = rect?.width;\n this.canvasHeight = rect?.height;\n }\n\n clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n }\n\n findInsertIndex(edge: WorkflowAction, p: { x: number; y: number }): number {\n const points = this.getEdgeFullPoints(edge);\n\n if (!points) return 0;\n\n let minDist = Infinity;\n let index = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const d = this.pointToSegmentDistance(p, points[i], points[i + 1]);\n\n if (d < minDist) {\n minDist = d;\n index = i;\n }\n }\n\n // index tương ứng với vị trí trong edge.points\n return Math.max(0, index);\n }\n\n getEdgeFullPoints(edge: WorkflowAction) {\n if (!edge.FromStage || !edge.ToStage) return null;\n\n const from = this.getNode(edge.FromStage);\n const to = this.getNode(edge.ToStage);\n\n return [{ x: from.x + 160, y: from.y + 40 }, ...(edge.points || []), { x: to.x, y: to.y + 40 }];\n }\n\n pointToSegmentDistance(p: any, a: any, b: any): number {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n\n if (dx === 0 && dy === 0) {\n return Math.hypot(p.x - a.x, p.y - a.y);\n }\n\n const t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / (dx * dx + dy * dy);\n\n const clamped = Math.max(0, Math.min(1, t));\n\n const proj = {\n x: a.x + clamped * dx,\n y: a.y + clamped * dy,\n };\n\n return Math.hypot(p.x - proj.x, p.y - proj.y);\n }\n\n isPositionOccupied(x: number, y: number): boolean {\n return this.lstStage.some((n) => Math.abs(n.x - x) < 160 && Math.abs(n.y - y) < 80);\n }\n\n getCanvasWidth(): number {\n // return 3000;\n\n const PADDING = 200;\n const MIN_WIDTH = 800;\n\n const maxX = Math.max(\n ...this.lstStage.map((n) => (n.StageType == 'END' ? n.x : n.x + 160)), // 160 = node width\n MIN_WIDTH,\n );\n\n return maxX + PADDING;\n }\n\n getCanvasHeight(): number {\n // return 2000;\n\n const PADDING = 100;\n\n const maxY = Math.max(...this.lstStage.map((n) => n.y + 80), 400);\n\n return maxY + PADDING;\n }\n\n /* =============================\n * CONVERT MOUSE → SVG COORD\n * ============================= */\n getSvgPoint(event: MouseEvent, preview = false): { x: number; y: number } {\n const svg = this.svgRef.nativeElement as SVGSVGElement;\n const pt = svg.createSVGPoint();\n\n pt.x = event.clientX;\n pt.y = event.clientY;\n\n const result = pt.matrixTransform(svg.getScreenCTM()!.inverse());\n\n if (preview) {\n return { x: result.x, y: result.y };\n } else {\n return { x: event.clientX, y: event.clientY };\n }\n }\n\n updateSelection() {\n if (!this.selectStart || !this.selectEnd) return;\n\n const x1 = Math.min(this.selectStart.x, this.selectEnd.x);\n const y1 = Math.min(this.selectStart.y, this.selectEnd.y);\n const x2 = Math.max(this.selectStart.x, this.selectEnd.x);\n const y2 = Math.max(this.selectStart.y, this.selectEnd.y);\n\n this.lstSelectedStageCode.clear();\n\n for (const n of this.lstStage) {\n const nx1 = n.x;\n const ny1 = n.y;\n const nx2 = n.x + 160;\n const ny2 = n.y + 80;\n\n const intersect = nx2 >= x1 && nx1 <= x2 && ny2 >= y1 && ny1 <= y2;\n\n if (intersect) {\n this.lstSelectedStageCode.add(n.Code);\n }\n }\n }\n\n snapPoint(p: { x: number; y: number }, event?: MouseEvent) {\n if (!this.snapToGrid || event?.altKey) return p;\n if (!this.snapToGrid) return p;\n\n return {\n x: this.snap(p.x),\n y: this.snap(p.y),\n };\n }\n\n snap(value: number): number {\n return Math.round(value / this.gridSize) * this.gridSize;\n }\n\n getNode(id: string) {\n return this.lstStage.find((n) => n.Code === id)!;\n }\n //#endregion\n\n //#region BUILD PATH\n buildPath(edge: WorkflowAction): string {\n if (!edge.FromStage || !edge.ToStage) return '';\n\n const from = this.getNode(edge.FromStage);\n const to = this.getNode(edge.ToStage);\n\n const start = {\n x: from.x + (from.isReverse ? 0 : 160),\n y: from.y + 40,\n };\n\n const end = {\n x: to.x + (to.isReverse ? 160 : 0),\n y: to.y + 40,\n };\n\n if (edge.points && edge.points.length) {\n return this.buildPathThroughPoints([start, ...edge.points, end]);\n }\n\n // return this.buildRoutedPath({ node: from, side: edge.fromSide }, to.x, to.y + 40);\n return this.buildStragePath(start.x, start.y, end.x, end.y);\n }\n\n buildPreviewPath(): string {\n if (!this.connectingFrom) return '';\n\n const start = {\n x: this.connectingFrom.node.x + (this.connectingFrom.node.isReverse ? 0 : 160),\n y: this.connectingFrom.node.y + 40,\n };\n\n const end = {\n x: this.previewX,\n y: this.previewY,\n };\n\n // ⭐ ĐÃ CÓ WAYPOINT → MANUAL PREVIEW\n if (this.connectingPoints.length > 0) {\n return this.buildPathThroughPoints([start, ...this.connectingPoints, end], 0);\n }\n\n // ⭐ CHƯA CÓ WAYPOINT → AUTO PREVIEW\n // return this.buildRoutedPath(this.connectingFrom, end.x, end.y, 0);\n return this.buildStragePath(start.x, start.y, end.x, end.y, 0);\n }\n\n buildStragePath(fromX: number, fromY: number, toX: number, toY: number, ARROW_GAP = 12): string {\n const x1 = fromX;\n const y1 = fromY;\n\n const x2 = toX;\n const y2 = toY;\n\n /* =============================\n * 1. VECTOR GỐC\n * ============================= */\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy) || 1;\n\n /* =============================\n * 2. SHRINK START & END\n * ============================= */\n const sx = x1 + (dx / len) * ARROW_GAP;\n const sy = y1 + (dy / len) * ARROW_GAP;\n\n const ex = x2 - (dx / len) * ARROW_GAP;\n const ey = y2 - (dy / len) * ARROW_GAP;\n\n /* =============================\n * 3. PATH THẲNG\n * ============================= */\n return `\n M ${sx} ${sy}\n L ${ex} ${ey}\n `;\n }\n\n buildRoutedPath(\n from: {\n node: WorkflowStage;\n side: 'left' | 'right';\n },\n toX: number,\n toY: number,\n ARROW_GAP = 12,\n ): string {\n const x1 = from.node.isReverse ? from.node.x : from.node.x + 160;\n const y1 = from.node.y + 40;\n\n const x2 = toX;\n const y2 = toY;\n\n // const ARROW_GAP = 12;\n\n /* =============================\n * 1. VECTOR GỐC\n * ============================= */\n const dx = x2 - x1;\n const dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy) || 1;\n\n const ux = dx / len;\n const uy = dy / len;\n\n /* =============================\n * 2. START / END (CÁCH CONNECTOR ĐỀU)\n * ============================= */\n let sx = x1 + ux * ARROW_GAP;\n let sy = y1 + uy * ARROW_GAP;\n\n let ex = x2 - ux * ARROW_GAP;\n let ey = y2 - uy * ARROW_GAP;\n\n /* =============================\n * 3. KIỂM TRA BỊ CHẮN KHÔNG\n * ============================= */\n const blocked = this.isBlockedPoint(from, x2, y2);\n\n /* =============================\n * 4. ĐỘ CONG CƠ BẢN\n * ============================= */\n const dist = Math.sqrt((ex - sx) * (ex - sx) + (ey - sy) * (ey - sy));\n\n const BASE_CURVE = Math.max(30, Math.min(80, dist / 2));\n\n /* =============================\n * 5. KHÔNG BỊ CHẮN → CONG TRỰC TIẾP\n * ============================= */\n if (!blocked) {\n let c1x: number, c1y: number;\n let c2x: number, c2y: number;\n\n if (Math.abs(dy) < Math.abs(dx)) {\n // thiên ngang\n c1x = sx + BASE_CURVE;\n c1y = sy;\n c2x = ex - BASE_CURVE;\n c2y = ey;\n } else {\n // thiên dọc\n const dir = ey > sy ? 1 : -1;\n c1x = sx;\n c1y = sy + dir * BASE_CURVE;\n c2x = ex;\n c2y = ey - dir * BASE_CURVE;\n }\n\n return `\n M ${sx} ${sy}\n C ${c1x} ${c1y},\n ${c2x} ${c2y},\n ${ex} ${ey}\n `;\n }\n\n /* =============================\n * 6. BỊ CHẮN → ROUTE NÉ (S-CURVE)\n * ============================= */\n const routeY = this.findBestRouteY(from, ex, ey);\n const midX = (sx + ex) / 2;\n\n const CURVE = 40;\n\n return `\n M ${sx} ${sy}\n C ${sx + CURVE} ${sy},\n ${sx + CURVE} ${routeY},\n ${midX} ${routeY}\n S ${ex - CURVE} ${routeY},\n ${ex} ${ey}\n `;\n }\n\n buildPathThroughPoints(\n points: { x: number; y: number }[],\n ARROW_GAP = 12,\n tension = 0.1, // ⭐ 0.1 → rất thẳng, 0.5 → cong hơn\n ): string {\n if (points.length < 2) return '';\n\n const start = this.shrinkPoint(points[0], points[1], ARROW_GAP);\n const end = this.shrinkPoint(points[points.length - 1], points[points.length - 2], ARROW_GAP);\n\n const pts = [start, ...points.slice(1, -1), end];\n\n let d = `M ${pts[0].x} ${pts[0].y}`;\n\n for (let i = 0; i < pts.length - 1; i++) {\n const p0 = pts[i - 1] || pts[i];\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[i + 2] || p2;\n\n const c1x = p1.x + (p2.x - p0.x) * tension;\n const c1y = p1.y + (p2.y - p0.y) * tension;\n\n const c2x = p2.x - (p3.x - p1.x) * tension;\n const c2y = p2.y - (p3.y - p1.y) * tension;\n\n d += ` C ${c1x} ${c1y}, ${c2x} ${c2y}, ${p2.x} ${p2.y}`;\n }\n\n return d;\n }\n\n shrinkPoint(from: { x: number; y: number }, to: { x: number; y: number }, gap: number) {\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n const len = Math.sqrt(dx * dx + dy * dy) || 1;\n\n return {\n x: from.x + (dx / len) * gap,\n y: from.y + (dy / len) * gap,\n };\n }\n\n isBlockedPoint(\n from: {\n node: WorkflowStage;\n side: 'left' | 'right';\n },\n x2: number,\n y2: number,\n ): boolean {\n const x1 = from.node.isReverse ? from.node.x + 160 : from.node.x;\n const y1 = from.node.y + 40;\n\n return this.lstStage.some((n) => {\n if (n.Code === from.node.Code) return false;\n\n // node phải nằm giữa theo trục X\n if (!this.isNodeBetweenX(x1, x2, n)) return false;\n\n // line phải cắt node theo trục Y\n return this.doesLineCrossNodeY(y1, n);\n });\n }\n\n findBestRouteY(\n from: {\n node: WorkflowStage;\n side: 'left' | 'right';\n },\n toX: number,\n toY: number,\n ): number {\n const baseY = from.node.y + 40;\n\n const OFFSETS = [0, 80, -80, 160, -160, 240, -240];\n\n for (const offset of OFFSETS) {\n const routeY = baseY + offset;\n\n if (this.isLaneClear(from, toX, routeY)) {\n return routeY;\n }\n }\n\n // fallback: dùng lane xa nhất\n return baseY + OFFSETS[OFFSETS.length - 1];\n }\n\n isNodeBetweenX(fromX: number, toX: number, node: WorkflowStage): boolean {\n const nx1 = node.x;\n const nx2 = node.x + 160;\n\n const minX = Math.min(fromX, toX);\n const maxX = Math.max(fromX, toX);\n\n return nx2 > minX && nx1 < maxX;\n }\n\n doesLineCrossNodeY(\n y: number,\n node: WorkflowStage,\n tolerance = 6, // rất quan trọng\n ): boolean {\n const top = node.y;\n const bottom = node.y + 80;\n\n return y > top + tolerance && y < bottom - tolerance;\n }\n\n isLaneClear(\n from: {\n node: WorkflowStage;\n side: 'left' | 'right';\n },\n toX: number,\n routeY: number,\n ): boolean {\n const x1 = from.node.x;\n const y1 = from.node.y + 40;\n const x2 = toX;\n const y2 = routeY;\n\n return !this.lstStage.some((n) => {\n if (n.Code === from.node.Code) return false;\n\n // node phải nằm giữa theo trục X\n if (!this.isNodeBetweenX(x1, x2, n)) return false;\n\n // lane Y cắt node\n return this.doesLineCrossNodeY(routeY, n);\n });\n }\n //#endregion\n}\n","<div\n #canvasRef\n class=\"workflow-canvas\"\n [class.connecting]=\"!!connectingFrom\"\n [class.dragging-point]=\"!!draggingPoint\"\n [style.width.px]=\"CANVAS_WIDTH\"\n [style.height.px]=\"CANVAS_HEIGHT\"\n (mousedown)=\"onMouseDownCanvas($event)\"\n (mousemove)=\"onMouseMoveCanvas($event)\"\n (mouseup)=\"onMouseUpCanvas($event)\"\n (click)=\"onClickCanvas($event)\"\n>\n <!-- \n\n [style.width.px]=\"getCanvasWidth()\"\n [style.height.px]=\"getCanvasHeight()\" \n\n style=\"width: 100%; height: calc(100vh - 120px)\"\n \n -->\n\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\n <nz-icon nzType=\"setting\"></nz-icon>\n </button>\n\n <box [width]=\"1\"></box>\n <span class=\"divider\"></span>\n <box [width]=\"1\"></box>\n\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\n <nz-icon nzType=\"setting\"></nz-icon> T\n </button>\n\n <box [width]=\"1\"></box>\n <span class=\"divider\"></span>\n <box [width]=\"1\"></box>\n\n <button nz-button nzSize=\"small\" nzDanger nz-tooltip=\"Save\" (click)=\"save()\">\n <nz-icon nzType=\"save\"></nz-icon>\n </button>\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\n </button>\n\n <box [width]=\"1\"></box>\n <span class=\"divider\"></span>\n <box [width]=\"1\"></box>\n\n <button\n nz-button\n nzSize=\"small\"\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\n nz-tooltip=\"Move mode\"\n (click)=\"isMoveMode = true\"\n >\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\n </button>\n <button\n nz-button\n nzSize=\"small\"\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\n nz-tooltip=\"Select mode\"\n (click)=\"isMoveMode = false\"\n >\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\n </button>\n\n <box [width]=\"1\"></box>\n <span class=\"divider\"></span>\n <box [width]=\"1\"></box>\n\n <!-- UNDO / REDO -->\n <button\n nz-button\n nzSize=\"small\"\n nzType=\"default\"\n [disabled]=\"undoStack.length === 0\"\n nz-tooltip=\"Undo\"\n (click)=\"undo()\"\n >\n <nz-icon nzType=\"undo\"></nz-icon>\n </button>\n\n <button\n nz-button\n nzSize=\"small\"\n nzType=\"default\"\n [disabled]=\"redoStack.length === 0\"\n nz-tooltip=\"Redo\"\n (click)=\"redo()\"\n >\n <nz-icon nzType=\"redo\"></nz-icon>\n </button>\n\n <box [width]=\"1\"></box>\n <span class=\"divider\"></span>\n <box [width]=\"1\"></box>\n\n <!-- ALIGN -->\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignLeft()\">⟸</button>\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignCenter()\">≡</button>\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignRight()\">⟹</button>\n\n <span class=\"divider\"></span>\n\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignTop()\">⇑</button>\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignMiddle()\">═</button>\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 2\" (click)=\"alignBottom()\">⇓</button>\n\n <span class=\"divider\"></span>\n\n <!-- DISTRIBUTE -->\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 3\" (click)=\"distributeHorizontal()\">\n ⇄\n </button>\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageCode.size < 3\" (click)=\"distributeVertical()\">\n ⇅\n </button>\n </div>\n\n <div\n class=\"canvas-content\"\n [class.panning]=\"isMoveMode\"\n [style.transform]=\"'translate(' + panX + 'px,' + panY + 'px)'\"\n >\n <!-- GRID -->\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\n\n <!-- <div class=\"zoom-toolbar\">\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">−</button>\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\n </div> -->\n\n <!-- SVG EDGES -->\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\n <g [attr.transform]=\"svgTransform\">\n <!-- DEFS -->\n <defs>\n <!-- glow effect -->\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\n <feMerge>\n <feMergeNode in=\"blur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n\n <!-- arrow markers -->\n <marker\n id=\"arrow-blue\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"10\"\n refY=\"5\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\n </marker>\n\n <marker\n id=\"arrow-red\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"10\"\n refY=\"5\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\n </marker>\n\n <marker\n id=\"arrow-blue-start\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n viewBox=\"0 0 10 10\"\n refX=\"0\"\n refY=\"5\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\n </marker>\n\n <marker\n id=\"arrow-red-start\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n viewBox=\"0 0 10 10\"\n refX=\"0\"\n refY=\"5\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\n </marker>\n </defs>\n\n <!-- EDGES BÌNH THƯỜNG -->\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\n <path\n class=\"edge-hit\"\n [attr.d]=\"buildPath(e)\"\n (mouseenter)=\"onMouseEnterEdge(e)\"\n (mouseleave)=\"onMouseLeaveEdge(e)\"\n (click)=\"onClickEdge(e, $event)\"\n ></path>\n\n <path\n class=\"edge\"\n [attr.id]=\"'edge-path-' + i\"\n [attr.d]=\"buildPath(e)\"\n marker-end=\"url(#arrow-blue)\"\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\n ></path>\n\n <!-- LABEL -->\n <!-- text bám theo line -->\n <!-- \n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\n {{ e.ActionText }}\n </textPath>\n </text> \n \n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\n {{ e.labelBack }}\n </textPath>\n </text>\n -->\n\n <!-- text thẳng nằm ngang -->\n <text\n *ngIf=\"e.ActionText\"\n class=\"edge-label\"\n [attr.x]=\"getEdgeLabelPosition(e).x\"\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\n [attr.text-anchor]=\"'middle'\"\n >\n {{ e.ActionText }}\n </text>\n\n <text\n *ngIf=\"e.allowBack && e.labelBack\"\n class=\"edge-label\"\n [attr.x]=\"getEdgeLabelPosition(e).x\"\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\n [attr.text-anchor]=\"'middle'\"\n >\n {{ e.labelBack }}\n </text>\n </ng-container>\n\n <!-- EDGE ĐANG HOVER (LUÔN TRÊN CÙNG) -->\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\n <path\n class=\"edge-hit\"\n [attr.d]=\"buildPath(e)\"\n (mouseleave)=\"onMouseLeaveEdge(e)\"\n (click)=\"onClickEdge(e, $event)\"\n ></path>\n\n <path\n class=\"edge red\"\n [attr.id]=\"'edge-path-hover-' + i\"\n [attr.d]=\"buildPath(e)\"\n marker-end=\"url(#arrow-red)\"\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\n ></path>\n\n <!-- LABEL -->\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\n {{ e.ActionText }}\n </textPath>\n </text>\n\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\n {{ e.labelBack }}\n </textPath>\n </text> -->\n\n <text\n *ngIf=\"e.ActionText\"\n class=\"edge-label\"\n [attr.x]=\"getEdgeLabelPosition(e).x\"\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\n [attr.text-anchor]=\"'middle'\"\n >\n {{ e.ActionText }}\n </text>\n\n <text\n *ngIf=\"e.allowBack && e.labelBack\"\n class=\"edge-label\"\n [attr.x]=\"getEdgeLabelPosition(e).x\"\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\n [attr.text-anchor]=\"'middle'\"\n >\n {{ e.labelBack }}\n </text>\n </ng-container>\n\n <!-- preview -->\n <path\n *ngIf=\"connectingFrom\"\n class=\"edge\"\n [attr.d]=\"buildPreviewPath()\"\n stroke-dasharray=\"5,5\"\n marker-end=\"url(#arrow-blue)\"\n ></path>\n </g>\n </svg>\n\n <div\n *ngIf=\"isSelecting && selectStart && selectEnd\"\n class=\"selection-box\"\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\n ></div>\n\n <!-- lstStage -->\n @for (n of lstStage; track $index) {\n @if (n.StageType == \"NODE\") {\n <nz-card\n #nodeEl\n class=\"workflow-node\"\n [attr.data-id]=\"n.Code\"\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageCode.has(n.Code)\"\n [style.left.px]=\"n.x\"\n [style.top.px]=\"n.y\"\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\n nzSize=\"small\"\n (mousedown)=\"onMouseDownNode($event, n)\"\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\n >\n <div class=\"title\">{{ n.Code }}</div>\n\n <div>{{ n.Name }}</div>\n\n @if (!n.isReverse) {\n <!-- connector RIGHT: output -->\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\n\n <!-- connector LEFT: input -->\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\n } @else {\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\n }\n </nz-card>\n }\n <!-- START NODE -->\n @else if (n.StageType === \"START\") {\n <nz-card\n class=\"workflow-node workflow-node-start\"\n style=\"border: unset\"\n [style.left.px]=\"n.x\"\n [style.top.px]=\"n.y\"\n nzSize=\"small\"\n (mousedown)=\"onMouseDownNode($event, n)\"\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\n >\n <div class=\"title\"> </div>\n\n <nz-tag\n [class.selected]=\"n == selectedStage || lstSelectedStageCode.has(n.Code)\"\n style=\"position: relative; top: -13px\"\n [style.right.px]=\"n.isReverseLabel ? -83 : 1\"\n [nzColor]=\"'green'\"\n >\n {{ n.StageType }}\n </nz-tag>\n\n <!-- connector RIGHT: output -->\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\n </nz-card>\n }\n\n <!-- END NODE -->\n @else if (n.StageType === \"END\") {\n <nz-card\n class=\"workflow-node workflow-node-end\"\n style=\"border: unset\"\n [style.left.px]=\"n.x\"\n [style.top.px]=\"n.y\"\n [class.connecting-source]=\"isConnectingFrom(n)\"\n nzSize=\"small\"\n (mousedown)=\"onMouseDownNode($event, n)\"\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\n >\n <div class=\"title\"> </div>\n\n <nz-tag\n [class.selected]=\"n == selectedStage || lstSelectedStageCode.has(n.Code)\"\n style=\"position: relative; top: -13px\"\n [style.right.px]=\"n.isReverseLabel ? 65 : -5\"\n [nzColor]=\"'red'\"\n >\n {{ n.StageType }}\n </nz-tag>\n\n <!-- connector LEFT: input -->\n <div class=\"connector connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\n </nz-card>\n }\n }\n\n <!-- POINTS -->\n @for (p of connectingPoints; track $index) {\n @if (p != draggingPoint) {\n <div\n class=\"waypoint\"\n [style.left.px]=\"p.x\"\n [style.top.px]=\"p.y\"\n (mousedown)=\"onmousedownPoint($event, p)\"\n (contextmenu)=\"onRightClickPoint($event, hoverEdge!, $index)\"\n ></div>\n } @else {\n <div\n class=\"waypoint dragging\"\n [style.left.px]=\"p.x\"\n [style.top.px]=\"p.y\"\n (mousedown)=\"onmousedownPoint($event, p)\"\n ></div>\n }\n }\n </div>\n</div>\n\n<!-- TEMPLATE -->\n<nz-drawer\n [nzTitle]=\"drawTemplateTitle\"\n nzPlacement=\"right\"\n [nzWidth]=\"500\"\n [nzClosable]=\"false\"\n [nzVisible]=\"drawTemplateVisibel\"\n [nzFooter]=\"footerTplTemplate\"\n (nzOnClose)=\"drawTemplateVisibel = false\"\n>\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> Template </ng-template>\n <ng-container *nzDrawerContent>\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\n <extend-select\n [label]=\"'Type'\"\n [lstItem]=\"lstTemplateType\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"template.DocType\"\n ></extend-select>\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\n <extend-select\n [label]=\"'Print template'\"\n [lstItem]=\"lstTemplatePrint\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"template.TemplatePrint\"\n ></extend-select>\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\n\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" /> Stage status</h3>\n\n @for (tag of template.lstStageStatus; track tag) {\n <nz-tag\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\n >\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\n </nz-tag>\n }\n\n <br *ngIf=\"template.lstStageStatus && template.lstStageStatus.length\" />\n\n @if (!inputStageStatusVisible) {\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\n <nz-icon nzType=\"plus\" />\n New Action type\n </nz-tag>\n } @else {\n <input\n #inputStageStatusElement\n nz-input\n nzSize=\"small\"\n type=\"text\"\n style=\"width: 150px\"\n placeholder=\"Code\"\n [(ngModel)]=\"inputStageStatusCode\"\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\n />\n <input\n #inputStageStatusNameElement\n nz-input\n nzSize=\"small\"\n type=\"text\"\n style=\"width: 150px\"\n placeholder=\"Name\"\n [(ngModel)]=\"inputStageStatusName\"\n (blur)=\"handleInputStageStatusConfirm()\"\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\n />\n }\n\n <box [height]=\"16\"></box>\n\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" /> Action type</h3>\n\n @for (tag of template.lstActionType; track tag) {\n <nz-tag\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\n (nzOnClose)=\"handleCloseActionType(tag)\"\n >\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\n </nz-tag>\n }\n\n <br *ngIf=\"template.lstActionType && template.lstActionType.length\" />\n\n @if (!inputActionTypeVisible) {\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\n <nz-icon nzType=\"plus\" />\n New Action type\n </nz-tag>\n } @else {\n <input\n #inputActionTypeElement\n nz-input\n nzSize=\"small\"\n type=\"text\"\n style=\"width: 150px\"\n placeholder=\"Code\"\n [(ngModel)]=\"inputActionTypeCode\"\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\n />\n <input\n #inputActionTypeNameElement\n nz-input\n nzSize=\"small\"\n type=\"text\"\n style=\"width: 150px\"\n placeholder=\"Name\"\n [(ngModel)]=\"inputActionTypeName\"\n (blur)=\"handleInputActionTypeConfirm()\"\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\n />\n }\n\n <box [height]=\"16\"></box>\n\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" /> Action status</h3>\n\n @for (tag of template.lstActionStatus; track tag) {\n <nz-tag [nzMode]=\"checkRemoveableActionStatus(tag) ? 'closeable' : 'default'\" (nzOnClose)=\"handleClose(tag)\">\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\n </nz-tag>\n }\n\n <br *ngIf=\"template.lstActionStatus && template.lstActionStatus.length\" />\n\n @if (!inputVisible) {\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\n <nz-icon nzType=\"plus\" />\n New Action status\n </nz-tag>\n } @else {\n <input\n #inputElement\n nz-input\n nzSize=\"small\"\n type=\"text\"\n style=\"width: 150px\"\n placeholder=\"+ New Action status\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"handleInputConfirm()\"\n (keydown.enter)=\"handleInputConfirm()\"\n />\n }\n </ng-container>\n\n <ng-template #footerTplTemplate>\n <div nz-flex [nzGap]=\"6\">\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\n <button nz-button nzDanger (click)=\"save()\">Save</button>\n </div>\n </ng-template>\n</nz-drawer>\n\n<!-- STAGE -->\n<nz-drawer\n [nzTitle]=\"drawerTitleStage\"\n [nzPlacement]=\"selectedStage?.drawerPosition ? selectedStage?.drawerPosition : 'right'\"\n [nzVisible]=\"!!selectedStage\"\n [nzWidth]=\"750\"\n [nzClosable]=\"false\"\n [nzFooter]=\"footerTplNode\"\n (nzOnClose)=\"selectedStage = undefined\"\n>\n <ng-template #drawerTitleStage>\n <div nz-row nzJustify=\"space-between\">\n @if (selectedStage) {\n @if (selectedStage.drawerPosition == \"left\") {\n <button nz-button nzSize=\"small\" nz-tooltip=\"To the right\" (click)=\"selectedStage.drawerPosition = 'right'\">\n <nz-icon nzType=\"double-right\"></nz-icon>\n </button>\n STAGE\n } @else {\n STAGE\n <button nz-button nzSize=\"small\" nz-tooltip=\"To the left\" (click)=\"selectedStage.drawerPosition = 'left'\">\n <nz-icon nzType=\"double-left\"></nz-icon>\n </button>\n }\n }\n </div>\n </ng-template>\n <ng-container *nzDrawerContent>\n <ng-container *ngIf=\"selectedStage\">\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\n <label nz-radio nzValue=\"START\" [nzDisabled]=\"true\">START</label>\n <label nz-radio nzValue=\"NODE\" [nzDisabled]=\"true\">NODE</label>\n <label nz-radio nzValue=\"END\" [nzDisabled]=\"true\">END</label>\n </nz-radio-group>\n\n <box [height]=\"16\"></box>\n\n <div nz-row [nzGutter]=\"32\">\n <extend-input\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Code'\"\n [layOutType]=\"'vertical'\"\n [disabled]=\"['START', 'END'].indexOf(selectedStage!.StageType) >= 0\"\n [required]=\"true\"\n [(_ngModel)]=\"selectedStage.Code\"\n ></extend-input>\n\n <extend-textarea\n nz-col\n [nzSpan]=\"16\"\n [label]=\"'Name'\"\n [layOutType]=\"'vertical'\"\n [autoSize]=\"true\"\n [disabled]=\"['START', 'END'].indexOf(selectedStage!.StageType) >= 0\"\n [required]=\"true\"\n [(_ngModel)]=\"selectedStage.Name\"\n ></extend-textarea>\n </div>\n\n <div nz-row [nzGutter]=\"32\">\n <extend-input-number\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Sequence'\"\n [layOutType]=\"'vertical'\"\n [(_ngModel)]=\"selectedStage.SeqValue\"\n ></extend-input-number>\n\n <extend-select\n nz-col\n [nzSpan]=\"16\"\n [label]=\"'Org implement'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"lstOrg\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\n ></extend-select>\n </div>\n\n @if ([\"START\", \"END\"].indexOf(selectedStage.StageType) < 0) {\n <extend-checkbox [label]=\"'Reverse'\" [labelSpan]=\"0\" [(_ngModel)]=\"selectedStage.isReverse\"></extend-checkbox>\n\n <extend-checkbox\n [label]=\"'Require user action'\"\n [labelSpan]=\"0\"\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\n ></extend-checkbox>\n } @else {\n <extend-checkbox\n [label]=\"'Reverse'\"\n [labelSpan]=\"0\"\n [(_ngModel)]=\"selectedStage.isReverseLabel\"\n ></extend-checkbox>\n }\n\n <box [height]=\"16\"></box>\n\n <div nz-row [nzGutter]=\"16\">\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" /> List Action</h3>\n <div nz-col>\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\n <nz-icon nzType=\"plus\"></nz-icon>\n </button>\n </div>\n </div>\n\n <nz-table\n nzSize=\"small\"\n [nzData]=\"selectedStage.lstAction || []\"\n [nzShowPagination]=\"false\"\n [nzNoResult]=\"' '\"\n >\n <thead>\n <tr [hidden]=\"true\">\n <th nzWidth=\"50px\"></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (action of selectedStage.lstAction; track $index) {\n <tr>\n <td>\n <nz-icon\n nzType=\"delete\"\n nzTheme=\"outline\"\n class=\"color-warn cursor-pointer icon-size-16\"\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\n ></nz-icon>\n </td>\n <td (click)=\"hoverEdge = action\">\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\n <extend-input\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action text'\"\n [layOutType]=\"'vertical'\"\n [(_ngModel)]=\"action.ActionText\"\n (_ngModelChange)=\"onchangeActionText(action)\"\n ></extend-input>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action type'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionType\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"action.ActionType\"\n ></extend-select>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"action.ActionStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"action.StageStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"lstStage\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"action.ToStage\"\n (_ngModelChange)=\"onchangeNextStage(action)\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"action.NextStageStatus\"\n ></extend-select>\n\n <nz-divider\n *ngIf=\"selectedStage.lstAction && $index + 1 < selectedStage.lstAction.length\"\n style=\"margin: 16px 0px 8px 0px; background-color: orange\"\n ></nz-divider>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </nz-table>\n\n <box [height]=\"16\"></box>\n </ng-container>\n </ng-container>\n\n <ng-template #footerTplNode>\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"selectedStage && selectedStage.drawerPosition == 'left' ? 'end' : 'start'\">\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\n <button\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\n nz-button\n nzDanger\n (click)=\"deleteNode()\"\n >\n Delete\n </button>\n </div>\n </ng-template>\n</nz-drawer>\n\n<!-- EDGE -->\n<nz-drawer\n nzTitle=\"ACTION\"\n nzPlacement=\"right\"\n [nzClosable]=\"false\"\n [nzWidth]=\"750\"\n [nzVisible]=\"!!selectedAction\"\n (nzOnClose)=\"selectedAction = undefined\"\n>\n <ng-container *nzDrawerContent>\n <ng-container *ngIf=\"selectedAction\">\n <strong>{{ selectedAction.FromStage }} -> {{ selectedAction.ToStage }}</strong>\n\n <box [height]=\"16\"></box>\n\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\n <extend-input\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action text'\"\n [layOutType]=\"'vertical'\"\n [(_ngModel)]=\"selectedAction.ActionText\"\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\n ></extend-input>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action type'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionType\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedAction.ActionType\"\n ></extend-select>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedAction.ActionStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedAction.StageStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"lstStage\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedAction.ToStage\"\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedAction.NextStageStatus\"\n ></extend-select>\n </div>\n\n <!-- <box [height]=\"16\"></box> -->\n <nz-divider></nz-divider>\n\n <extend-checkbox\n [label]=\"'Allow back'\"\n [labelSpan]=\"0\"\n [(_ngModel)]=\"selectedAction.allowBack\"\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\n ></extend-checkbox>\n\n <box [height]=\"16\"></box>\n\n @if (selectedAction.allowBack) {\n <strong>{{ selectedAction.ToStage }} -> {{ selectedAction.FromStage }}</strong>\n\n @if (selectedBackAction) {\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\n <extend-input\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action text'\"\n [layOutType]=\"'vertical'\"\n [(_ngModel)]=\"selectedBackAction.ActionText\"\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\n ></extend-input>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action type'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionType\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedBackAction.ActionType\"\n ></extend-select>\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Action status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstActionStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedBackAction.ActionStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"lstStage\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedBackAction.ToStage\"\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\n ></extend-select>\n\n <extend-select\n nz-col\n [nzSpan]=\"8\"\n [label]=\"'Next stage status'\"\n [layOutType]=\"'vertical'\"\n [lstItem]=\"template.lstStageStatus\"\n [valueField]=\"'Code'\"\n [displayFields]=\"['Code', 'Name']\"\n [(_ngModel)]=\"selectedBackAction.NextStageStatus\"\n ></extend-select>\n </div>\n }\n }\n </ng-container>\n </ng-container>\n</nz-drawer>\n\n<!-- setting editor -->\n<nz-drawer\n [nzTitle]=\"drawSettingTitle\"\n nzPlacement=\"right\"\n [nzClosable]=\"false\"\n [nzVisible]=\"settingVisible\"\n (nzOnClose)=\"settingVisible = false\"\n>\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> Editor </ng-template>\n <ng-container *nzDrawerContent>\n <div class=\"form-item-no-bottom\">\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\n\n <box [height]=\"16\"></box>\n\n <extend-input-number [label]=\"'Canvas width'\" [(_ngModel)]=\"CANVAS_WIDTH\"></extend-input-number>\n <box [height]=\"16\"></box>\n <extend-input-number [label]=\"'Canvas height'\" [(_ngModel)]=\"CANVAS_HEIGHT\"></extend-input-number>\n </div>\n </ng-container>\n</nz-drawer>\n","import { Directive, ElementRef, Input, Renderer2, OnChanges, SimpleChanges, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[appAutoFocus]'\n})\nexport class AutoFocusDirective implements OnChanges {\n\n @Input() appAutoFocus: boolean = false;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['appAutoFocus'] && this.appAutoFocus) {\n setTimeout(() => this.el.nativeElement.focus(), 0);\n }\n }\n}\n","import { Directive, ElementRef, HostListener, Optional } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'input',\n})\nexport class NullIfEmptyDirective {\n constructor(\n private el: ElementRef,\n @Optional() private ngControl: NgControl,\n ) {}\n\n @HostListener('input')\n onInput() {\n // const value = this.el.nativeElement.value;\n // const newValue = value.trim() === '' ? null : value;\n // this.ngControl?.control?.setValue(newValue, { emitEvent: false });\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[numberOnly]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberOnlyDirective),\n multi: true,\n },\n ],\n})\nexport class NumberOnlyDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n return value.replace(/\\D/g, '');\n }\n}\n","import { Directive, forwardRef, ElementRef, Renderer2 } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\n@Directive({\n selector: '[uppercaseFirstLetterEachWord]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UpperCaseFirsLetterEachWordDirective),\n multi: true,\n },\n ],\n})\nexport class UpperCaseFirsLetterEachWordDirective implements ControlValueAccessor {\n private inputElement: HTMLInputElement | null = null;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n ngAfterViewInit() {\n setTimeout(() => {\n // Nếu gắn vào <input>, thì chính nó là input\n if (this.el.nativeElement.tagName.toLowerCase() === 'input') {\n this.inputElement = this.el.nativeElement;\n } else {\n // Nếu không, tìm input con bên trong\n this.inputElement = this.el.nativeElement.querySelector('input');\n }\n\n if (this.inputElement) {\n this.renderer.listen(this.inputElement, 'input', (event: any) => {\n const formatted = this.formatValue(event.target.value);\n this.renderer.setProperty(this.inputElement, 'value', formatted);\n this.onChange(formatted);\n });\n }\n\n if (this.pendingValue !== null) {\n this.renderer.setProperty(this.inputElement, 'value', this.pendingValue);\n this.pendingValue = null;\n }\n }, 0);\n }\n\n private pendingValue: any = null;\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n if (this.inputElement) {\n this.renderer.setProperty(this.inputElement, 'value', formattedValue);\n } else {\n this.pendingValue = formattedValue;\n }\n }\n\n onChange = (_: any) => {};\n onTouched = () => {};\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.inputElement) {\n this.renderer.setProperty(this.inputElement, 'disabled', isDisabled);\n }\n }\n\n private formatValue(value: string): string {\n return value\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[uppercaseFirstLetter]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UppercaseFirstLetterDirective),\n multi: true,\n },\n ],\n})\nexport class UppercaseFirstLetterDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n const ls = value.split('');\n ls[0] = ls[0].toUpperCase();\n return ls.join('');\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[uppercase]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UppercaseDirective),\n multi: true,\n },\n ],\n})\nexport class UppercaseDirective implements ControlValueAccessor {\n onChange = (value: any) => {};\n onTouched = () => {};\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n @HostListener('input', ['$event.target.value']) onInput(value: string) {\n const formattedValue = this.formatValue(value);\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n if (this.onChange) {\n this.onChange(formattedValue);\n }\n }\n\n writeValue(value: any): void {\n const formattedValue = value ? this.formatValue(value) : '';\n this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n }\n\n private formatValue(value: string): string {\n return value.toUpperCase();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'limitWords',\n})\nexport class LimitWordsPipe implements PipeTransform {\n transform(value: string, limit: number = 3): string {\n if (!value) return '';\n const words = value.split(' ');\n return words.length <= limit ? value : words.slice(0, limit).join(' ') + '...';\n }\n}\n","export class DownloadHelper {\n public static downloadFileBlop(response: any) {\n const contentDisposition = response.headers.get('Content-Disposition');\n let filename = 'downloaded-file';\n\n if (contentDisposition) {\n const filenameStarMatch = contentDisposition.match(/filename\\*\\=UTF-8''(.+?)(;|$)/);\n const filenameMatch = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n\n if (filenameStarMatch?.[1]) {\n filename = decodeURIComponent(filenameStarMatch[1]);\n } else if (filenameMatch?.[1]) {\n filename = filenameMatch[1];\n }\n }\n\n const blob = new Blob([response.body!], { type: 'application/octet-stream' });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n\n alert('Không có dữ liệu file');\n return;\n }\n\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n }\n\n public static downloadFile(data: any, filename: string) {\n const contentType = 'application/octet-stream';\n const blob = new Blob([data], { type: contentType });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n alert('Không có dữ liệu file');\n return;\n }\n\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n }\n\n public static downloadFileBase64(base64Data: string, fileName: string) {\n // Chuyển đổi Base64 thành dữ liệu nhị phân\n const binaryString = window.atob(base64Data);\n const binaryLen = binaryString.length;\n const bytes = new Uint8Array(binaryLen);\n\n for (let i = 0; i < binaryLen; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Tạo một Blob từ dữ liệu nhị phân\n const blob = new Blob([bytes], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n\n if (blob.size <= 4) {\n console.log(blob.size);\n alert('Không có dữ liệu file');\n return;\n }\n\n // Tạo một liên kết tạm thời để tải tệp về\n const link = document.createElement('a');\n link.href = window.URL.createObjectURL(blob);\n link.download = fileName;\n\n // Kích hoạt việc tải tệp\n document.body.appendChild(link);\n link.click();\n\n // Xóa liên kết sau khi tải\n document.body.removeChild(link);\n }\n}\n","import * as XLSX from 'xlsx';\n\nexport class XLSXHelper {\n public static readExcelFileToObjects(file: File, columnCount?: number, readAllSheets?: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent<FileReader>) => {\n const data = new Uint8Array(e.target?.result as ArrayBuffer);\n const workbook = XLSX.read(data, { type: 'array' });\n\n const sheetNames = workbook.SheetNames;\n\n // Trả về nhiều sheet\n if (readAllSheets) {\n const sheetsdata: Record<string, any[]> = {};\n\n for (const sheetName of sheetNames) {\n const worksheet = workbook.Sheets[sheetName];\n const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {\n header: 1,\n defval: '',\n });\n\n let rows = rawData.slice(1);\n\n while (rows.length > 0 && rows[rows.length - 1].every((cell) => cell === '' || cell == null)) {\n rows.pop();\n }\n\n const result = rows.map((row, index) => {\n const obj: any = {};\n const limit = columnCount ?? row.length;\n for (let i = 0; i < limit; i++) {\n obj[`col${i + 1}`] = row[i] ?? '';\n }\n obj.rowIndex = index + 2;\n return obj;\n });\n\n sheetsdata[sheetName] = result;\n }\n\n postMessage({\n sheets: sheetNames,\n sheetsdata,\n });\n\n resolve({\n sheets: sheetNames,\n sheetsdata,\n });\n }\n\n // Trả về sheet đầu tiên\n else {\n const sheetName = sheetNames[0];\n const worksheet = workbook.Sheets[sheetName];\n const rawData: any[][] = XLSX.utils.sheet_to_json(worksheet, {\n header: 1,\n defval: '',\n });\n\n let rows = rawData.slice(1);\n\n while (rows.length > 0 && rows[rows.length - 1].every((cell) => cell === '' || cell == null)) {\n rows.pop();\n }\n\n const result = rows.map((row, index) => {\n const obj: any = {};\n const limit = columnCount ?? row.length;\n for (let i = 0; i < limit; i++) {\n obj[`col${i + 1}`] = row[i] ?? '';\n }\n obj.rowIndex = index + 2;\n return obj;\n });\n\n resolve(result);\n }\n };\n\n reader.onerror = (error) => reject(error);\n reader.readAsArrayBuffer(file);\n });\n }\n}\n","import { AppGlobals } from './app-global';\n\nexport interface ApiEndpoint {\n apiEndpoint: string;\n versionCheck: string;\n}\n\nexport interface RespondData {\n IsSuccess: boolean;\n ErrorMessage: string;\n Data: any;\n}\n\nexport interface ESPModel {\n SPN: string;\n Params?: any[];\n}\n\nexport interface ExportExcelModel extends ESPModel {\n FileCode?: string;\n TemplateName?: string;\n OpenXML?: boolean;\n}\n\nexport class PagingModel {\n PageIndex: number = 0;\n PageSize: number = AppGlobals.pageSizeOptions[1];\n}\n\nexport class GridFilter extends PagingModel {\n Keyword: string | null = null;\n OrderOption: OrderOption | null = null;\n}\n\nexport class OrderOption {\n FieldName: string | null = null;\n Direction: string | null = null;\n}\n\nexport class PagingData<T = any> {\n LstHeader: TableHeader[] = [];\n LstItem: T[] = [];\n TotalCount = 0;\n\n constructor(\n obj?: any,\n private TypeConstructor?: new (data?: any) => T,\n ) {\n obj = obj ?? {};\n\n this.LstHeader = obj.LstHeader || [];\n this.TotalCount = obj.TotalCount || 0;\n\n if (Array.isArray(obj.LstItem) && this.TypeConstructor) {\n this.LstItem = obj.LstItem.map((item: any) => new this.TypeConstructor!(item));\n } else {\n this.LstItem = obj.LstItem || [];\n }\n }\n}\n\nexport class TableHeader {\n Code: string = '';\n Name: string = '';\n Class: string = '';\n Type: string = '';\n Width: string = '';\n MinWidth: string = '';\n}\n\nexport class CheckModel {\n ConfirmMessage: string = '';\n ConfirmContent: string = '';\n ErrorMessage: string = '';\n ErrorContent: string = '';\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { AuthService } from '../auth/auth.service';\nimport { NotiService } from './noti.service';\n\n@Injectable({ providedIn: 'root' })\nexport class RouteMonitorService {\n constructor(\n private router: Router,\n private authService: AuthService,\n private notiService: NotiService,\n ) {\n this.router.events.subscribe(async (event) => {\n if (event instanceof NavigationEnd) {\n const url = event.urlAfterRedirects;\n\n if (url == '/' || url.startsWith('/login') || url == '/no-permission') {\n return;\n }\n\n const hasMenu = await this.authService.checkUserMenu(url);\n if (!hasMenu) {\n this.notiService.error(`Không có quyền truy cập: ${url}`);\n this.router.navigate(['/no-permission'], {\n state: {\n deniedUrl: url,\n message: `Bạn không có quyền truy cập vào đường dẫn ${url}`,\n },\n });\n }\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n setHighContrast(enabled: boolean) {\n document.body.classList.toggle('high-contrast', enabled);\n localStorage.setItem('high-contrast', enabled ? '1' : '0');\n }\n\n isHighContrast(): boolean {\n return localStorage.getItem('high-contrast') == '1';\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { HTTPService } from './api-service/http.service';\nimport { NotiService } from './noti.service';\nimport { AppGlobals } from '../app-global';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class VscService extends HTTPService {\n // private readonly currentVersion = '{{POST_BUILD_ENTERS_VERSION_HERE}}';\n public static feClientVersion = '{{POST_BUILD_ENTERS_VERSION_HERE}}';\n public static feServerVersion: string;\n public static beVersion: {};\n public static dbVersion: string;\n public static jsReportTemplateVersion: string;\n\n private modal = inject(NzModalService);\n private notiService = inject(NotiService);\n private interval: any;\n private isShowingPopup = false;\n\n // 10 phút\n public initVersionCheck(frequency = 1000 * 60 * 10) {\n this.interval = setInterval(() => {\n if (!this.isShowingPopup) {\n this.checkVersion();\n }\n }, frequency);\n this.checkVersion();\n }\n\n public checkVersion(all = false) {\n console.log('Check version');\n this.checkFrontendVersion();\n if (all) {\n this.checkBackendVersion();\n // this.checkDatabaseVersion();\n // this.checkJSReportTemplateVersion();\n }\n }\n\n public checkFrontendVersion() {\n if (this.isShowingPopup) {\n return;\n }\n console.log('Check version');\n console.log('current version: ', VscService.feClientVersion);\n this.get(AppGlobals.versionCheck + '?t=' + new Date().getTime()).then(\n async (response: any) => {\n VscService.feServerVersion = response.version;\n console.log('version check: ', VscService.feServerVersion);\n const hashChanged = this.hasVersionChanged(VscService.feClientVersion, VscService.feServerVersion);\n if (hashChanged) {\n // window.location.reload();\n // window.location.href = window.location.href;\n this.isShowingPopup = true;\n // await this.notiService.warning('Có phiên bản mới', 'Vui lòng ấn \"Ctrl + F5\" để cập nhật');\n // this.isShowingPopup = false;\n const modalRef = this.modal.warning({\n nzTitle: 'Có phiên bản mới',\n nzContent: 'Vui lòng ấn \"Ctrl + F5\" để cập nhật',\n });\n }\n },\n (err) => {\n console.error(err, 'Could not get version');\n },\n );\n }\n\n private hasVersionChanged(currentVersion: string, newVersion: string) {\n if (!currentVersion || newVersion === currentVersion) {\n return false;\n }\n return currentVersion !== newVersion;\n }\n\n public clearInterval() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n private checkBackendVersion() {\n this.httpClient.get(AppGlobals.apiEndpoint + '/version').subscribe(\n async (response: any) => {\n VscService.beVersion = response;\n },\n (err) => {\n console.error(err, 'Could not get backend version');\n VscService.beVersion = 'Could not get backend version';\n },\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","filter","i1","i2","i3","i4","i5","i7","i6","i1.LoadingService","i12","i2.AuthService","i3.NotiService"],"mappings":"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"}
|