{"version":3,"file":"eagna-io-core.mjs","sources":["../../../../projects/core/src/lib/abstract-core.ts","../../../../projects/core/src/lib/core.interface.ts","../../../../projects/core/src/lib/generic/card/card.component.ts","../../../../projects/core/src/lib/generic/card/card.component.html","../../../../projects/core/src/lib/generic/loading/loading.component.ts","../../../../projects/core/src/lib/generic/loading/loading.component.html","../../../../projects/core/src/lib/shared.service.ts","../../../../projects/core/src/lib/core.static.ts","../../../../projects/core/src/lib/pipes/eagna.pipe.ts","../../../../projects/core/src/lib/helper.service.ts","../../../../projects/core/src/lib/core.service.ts","../../../../projects/core/src/lib/generic/error/error.component.ts","../../../../projects/core/src/lib/generic/error/error.component.html","../../../../projects/core/src/lib/generic/loading/loading.service.ts","../../../../projects/core/src/lib/generic/loading/loading.directive.ts","../../../../projects/core/src/lib/prime-ng/prime-ng.module.ts","../../../../projects/core/src/lib/pipes/eagna-pipes.module.ts","../../../../projects/core/src/lib/generic/splash-screen/splash-screen-state.service.ts","../../../../projects/core/src/lib/generic/splash-screen/splash-screen.component.ts","../../../../projects/core/src/lib/generic/splash-screen/splash-screen.component.html","../../../../projects/core/src/lib/generic/splash-screen/splash-screen.resolver.ts","../../../../projects/core/src/lib/generic/generic.module.ts","../../../../projects/core/src/lib/grids/grid.interface.ts","../../../../projects/core/src/lib/grids/custom-filter/boolean-filter.ts","../../../../projects/core/src/lib/grids/editor/datepicker-editor.component.ts","../../../../projects/core/src/lib/grids/editor/dropdown-select-editor.component.ts","../../../../projects/core/src/lib/grids/editor/mask.editor.component.ts","../../../../projects/core/src/lib/grids/editor/numeric-editor.component.ts","../../../../projects/core/src/lib/grids/cell-custom/cell-custom.component.ts","../../../../projects/core/src/lib/grids/cell-custom/cell-custom.component.html","../../../../projects/core/src/lib/grids/tool-panel/analysis-tool-panel.ts","../../../../projects/core/src/lib/grids/tool-panel/analysis-tool-panel.html","../../../../projects/core/src/lib/grids/tool-panel/custom-tools-panel.ts","../../../../projects/core/src/lib/grids/tool-panel/custom-tools-panel.html","../../../../projects/core/src/lib/grids/grid.service.ts","../../../../projects/core/src/lib/grids/grid/grid.component.ts","../../../../projects/core/src/lib/grids/grid/grid.component.html","../../../../projects/core/src/lib/grids/editor/dropdown-multiselect-editor.component.ts","../../../../projects/core/src/lib/grids/grids.module.ts","../../../../projects/core/src/lib/navigation/sidebar/sidebar.service.ts","../../../../projects/core/src/lib/navigation/sidebar/sidebar.component.ts","../../../../projects/core/src/lib/navigation/sidebar/sidebar.component.html","../../../../projects/core/src/lib/navigation/navigation.module.ts","../../../../projects/core/src/lib/kanban/kanban.component.ts","../../../../projects/core/src/lib/kanban/kanban.component.html","../../../../projects/core/src/lib/kanban/kanban.module.ts","../../../../projects/core/src/lib/core.module.ts","../../../../projects/core/src/lib/shared.module.ts","../../../../projects/core/src/lib/services/route-observer.service.ts","../../../../projects/core/src/public-api.ts","../../../../projects/core/src/eagna-io-core.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { ColDef, ColGroupDef } from \"ag-grid-community\";\nimport { Observable } from \"rxjs\";\nimport { apiMethod, ResponseObj, userPrefType } from \"./core.interface\";\n\n@Injectable()\nexport abstract class AbstractCoreService {\n    //to be implemented for Grid\n    //TODO: can be removed\n    public abstract getColumnDefs(gridId: string, extraParams?: any): (ColDef | ColGroupDef)[];\n\n    //APIs\n    public abstract userPreferences(params: any, changeType: userPrefType,  method?: apiMethod, extra?: any): Observable<ResponseObj<any>>;\n}\n","import { Observable } from \"rxjs\";\nimport { agThemeType, GridPeferences } from \"./grids/grid.interface\";\n/* import { panelType, sideBarMode } from \"./navigation/side-bar/side-bar.interface\"; */\nimport { DynamicDialogConfig } from \"primeng/dynamicdialog\";\nimport { InjectionToken } from \"@angular/core\";\n\nexport const APP_ID: InjectionToken<number> = new InjectionToken<number>(\"1\");\nexport const ComponentLookupRegistry: Map<string, any> = new Map();\nexport const ComponentLookup = (key: string): any => {\n    return (cls: any) => {\n        ComponentLookupRegistry.set(key, cls);\n    };\n};\nexport type apiMethod = 'post' | 'get' | 'put' | 'patch' | 'delete' | 'options' | 'copy' | 'head' | 'link' | 'unlink' | 'purge' | 'lock' | 'unlock' | 'propfind' | 'view' | 'email' | undefined;\nexport type onOff = {on: string, off: string};\nexport type snackBarExtraButtons = {label: string, class?: string, callback: (p?: any)=>void};\nexport type notifColors = \"success\" | \"danger\" | \"warn\" | \"primary\" | \"info\";\nexport type envAppConfig = {apiUrl: string, isProd: boolean, isDebug: boolean, hideConsoleLog: boolean};\nexport type schemeType = 'dark' | 'light' | 'auto';\n\nexport function getElementValue(obj: any, attr: string, params?: any): any{\n    if(obj && obj[attr]){\n        if(typeof(obj[attr]) == \"function\"){\n            return obj[attr](params);\n        } else{\n            return obj[attr];\n        }\n    }\n    return null;\n}\n\n/* export type localeTypeComplex = {value: string, arrayKeys?: string[], interpolateParams?: Object};\nexport type getLocaleType = (string | localeTypeComplex); */\nexport type getLocaleType = {value: string, arrayKeys?: Array<string>, interpolateParams?: () => Object, processInterPolation?: (params: Object) => string} | undefined;\n\nexport interface AnyPropertyFunc {\n    (params?: any): any;\n}\n\nexport interface StringPropertyFunc {\n    (params?: any): string;\n}\n\nexport interface NumberPropertyFunc {\n    (params?: any): number;\n}\n\nexport interface BooleanPropertyFunc {\n    (params?: any): boolean;\n}\n\nexport interface ArrayAnyPropertyFunc {\n    (params?: any): any[];\n}\n\nexport interface ArrayStringPropertyFunc {\n    (params?: any): string[];\n}\n\nexport interface ArrayNumberPropertyFunc {\n    (params?: any): number[];\n}\n\nexport interface ArrayBooleanPropertyFunc {\n    (params?: any): boolean[];\n}\n\nexport interface ApiCallParams {\n    /* RT eagna commented\n    disableLoader?: boolean;\n    disableProgress?: boolean; */\n    params?: any;\n    next?:any;\n    previous?:any;\n    api(params?: any, method?:any, nexturl?:any): Observable<any>;\n    callback?(result?: any, p?: any): void;\n    failCallback?(e?: any, p?: any): void;\n    executeAfterCallback?(result?: any, params?: any): void; // this is very rare, when a callback is not set at the beginning and overridden.\n    executeAfterFailCallback?(e?: any, p?: any): void;\n    finally?(p?: any): void;\n}\n\nexport interface OptionsAsyncParams{\n    api: (params: any) => Observable<any>,\n    params: any,\n    mapFn?: (result: any, currentValue?: any) => any[],\n    requiresQuery?: boolean\n}\n\n/* export interface UserSideBar{\n    menuType: panelType;\n    sidebarVisible: boolean;\n    mode: sideBarMode;\n    modal: boolean;\n\n    //backend alignment\n    id?: number;\n    appId?: number;\n    sidebarId?: string;\n} */\n\nexport type userPrefType = 'locale' | 'am' | 'gridPref' | 'gridTheme' | 'sidebar' | 'darkMode' | undefined;\n\nexport interface AppPreferences{\n    ui_theme: 'dark' | 'light' | 'auto';\n\n    //backend alignment\n    appId: number;\n    app_name: string;\n    userId?: number;\n    id?: number;\n\n    /* //temp\n    sidebar?: {[p: string]: UserSideBar};\n    grid?: GridPeferences[]; //TODO convert to object\n    am?: amThemeType[]; //TODO convert to object */\n}\n\nexport interface UserPreferences {\n    app: AppPreferences[];\n    sidebar?: {[p: string]: any /* UserSideBar */};\n    grid?:  {[p: string]: GridPeferences};\n    locale: string;\n    changeType?: {type: userPrefType, value?: any}\n}\n\nexport interface ValueFilterFunc {\n    (params?: any): boolean;\n}\n\nexport interface GenericResponse{\n    myProp: any;\n}\n\nexport interface UserModel{\n    id: number | string;\n    name: string;\n    email: string;\n    user_pref_id?: number;\n}\n\nexport interface ResponseObj<T>{\n    status: {\n        status_code: number,\n        message: any\n    },\n    content: T\n    response?: {\n        code: number,\n        message: string\n    }\n}\n\nexport interface ToolBarHeaderSettings{\n    name: string;\n    /* sideMenu?: SideMenuSettings; */\n    logo?: {\n        class: string,\n        status: string\n    };\n    homeLink?: string;\n    rightIcons?: {\n        notif: boolean,\n        apps: boolean,\n        contacts: boolean,\n        user: boolean\n    };\n}\n\n/* RT: note, to be removed when confirm tabs from primeNg is available */\nexport interface TabsData {\n    path?: string | StringPropertyFunc;\n    icon?: string;\n    label: string;\n    tooltip?: string;\n    iconClass?: boolean | AnyPropertyFunc;\n    disabled?: boolean | BooleanPropertyFunc;\n    isActive?: boolean | BooleanPropertyFunc;\n    onClick?: (p: any) => void;\n    hidden?: boolean | BooleanPropertyFunc;\n    badgeValue?: string | StringPropertyFunc;\n    visited?: boolean | BooleanPropertyFunc;\n}\n\n\n/* RT: note, to be removed when confirm dialog from primeNg is available */\nexport interface ConfirmDialogResult{\n    isConfirmed: boolean;\n    newDate?: any;\n    token?: string;\n    newValue?: string;\n    customOptionData?: any;\n    additionalFormData?: any;\n\n    apiData?:any;\n    rawData?:any;\n}\n\nexport interface CustomDialogConfig extends DynamicDialogConfig{\n    pStyleClass?: string;\n    icon?: string | undefined;\n    visible?: boolean | undefined;\n    breakpoints?: any | undefined;\n    draggable?: boolean | undefined;\n    resizable?: boolean | undefined;\n    //position?: 'left' | 'right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'top-left' | 'top' | 'top-right' | '' | undefined;\n    position?: \"top\" | \"left\" | \"center\" | \"right\" | \"bottom\" | \"topleft\" | \"topright\" | \"bottomleft\" | \"bottomright\";\n    dialogType?: CONFIRM_DIALOG_TYPE;\n    content: string | undefined;\n    onConfirm(confirmData?: ConfirmDialogResult): void;\n    onCancel?(cancelData?: ConfirmDialogResult): void;\n}\n\nexport interface FormTemplate {\n    key: string;\n    value?: any;\n    controlType: string;\n    type?: \"text\" | \"number\";\n    list?: any[];\n    editable?: boolean;\n    isDynamic?: boolean;\n    toSave?: boolean;\n    disabled?: boolean;\n\n    min?: number;\n    max?: number;\n    minRows?: number;\n    maxRows?: number;\n\n    label?: string;\n    required?: boolean;\n    placeholder?: string;\n    appearance?: string;\n    displayKey?: string;\n    valueKey?: string;\n    options?: any[];\n    isHidden?: boolean;\n    style?: any;\n    inputClass?: string;\n    formClass?: any;\n    emptyLabel?: string;\n\n    optionsAsyncParams?: OptionsAsyncParams;\n    requireSelection?: boolean;\n\n    readonly?: boolean;\n\n    filter  ?: (searchTerm: any) => any;\n    //no need to set\n    oldValue?: any;\n}\n\nexport type taskStatus = {\n    id: number,\n    name: string\n}\n\nexport type taskType = {\n    id: number,\n    name: string\n}\n\nexport class TASK_TYPE{\n    static byCode: {[key: string]: string} = {\n        '1': 'Task Type 1',\n        '2': 'Task Type 2',\n        '3': 'Task Type 3',\n        '4': 'Task Type 4',\n        '5': 'Task Type 5'\n    };\n\n    static byName: {[key: string]: number} = {\n        'Task Type 1': 1,\n        'Task Type 2': 2,\n        'Task Type 3': 3,\n        'Task Type 4': 4,\n        'Task Type 5': 5\n    };\n}\n\nexport class TASK_STATUS{\n    static byCode: {[key: string]: string} = {\n        '1': 'Status 1',\n        '2': 'Status 2',\n        '3': 'Status 3',\n        '4': 'Status 4',\n        '5': 'Status 5'\n    };\n\n    static byName: {[key: string]: number} = {\n        'Status 1': 1,\n        'Status 2': 2,\n        'Status 3': 3,\n        'Status 4': 4,\n        'Status 5': 5\n    };\n}\n\nexport type laneType = {\n    id?: number,\n    name: string,\n    position: number,\n    isCollapsed?: boolean,\n    isLocked?: boolean,\n    isNew?: boolean,\n    isHidden?: boolean,\n}\n\nexport type laneItem = {\n    id: number,\n    name: string,\n    laneId: number,\n    position: number,\n    projects?: number[],\n\n    /* modules?: string[],\n    priority?: number,\n    status?: taskStatus,\n    delay_driver?: any,\n    owner?: number,\n    requestor?: number,\n    task_type?: any, */\n    modules?: string[],\n    priority?: number,\n    status?: taskStatus,\n    delay_driver?: string,\n    owner?: string,\n    requestor?: string,\n    task_type?: any,\n}\n\nexport enum CONFIRM_DIALOG_TYPE {\n    YES_NO          = \"yesNo\",\n    DATE_PICKER     = \"datePicker\",\n    CUSTOM_OPTIONS  = \"customOptions\",\n    TOKEN           = \"confirmationToken\",\n    LARGE_TEXT      = \"largeText\",\n    GENERIC         = \"generic\"\n}\n\nexport enum MESSAGE_SEVERITY {\n    ERROR           = \"error\",\n    WARN            = \"warn\",\n    SUCCESS         = \"success\"\n}\n\nexport interface CustomOptionButtons {\n    label           : string;\n    value           : any;\n    icon            ?: string;\n    isButtonDefault ?: boolean; //Sets as 'mat-raised', inconsistent behaviour\n    buttonColor     ?: string; // Avoid Using button colors. use classes btn btn-success.\n    buttonClass     ?: any;\n}\n\nexport interface IViewDetails{\n    data: any;\n    enableHistory?: boolean;\n    modeActions?: IModeActions;\n    isDebug?: boolean;\n}\n\nexport interface IModeActions{\n    mode: string;\n    notEditable?: true | BooleanPropertyFunc;\n    actions: {[mode: string]: {\n        lane?: 'history' | undefined;\n        label?: string;\n        icon?: string;\n        title?: string;\n        styleClass?: string | StringPropertyFunc;\n        style?: string | AnyPropertyFunc;\n        callback: (p?: any) => any;\n        disabled?: true | BooleanPropertyFunc;\n        hide?: true | BooleanPropertyFunc;\n        /*position?: \"start\" | \"middle\" | undefined; */\n        }\n    },\n    historyCallback?: (params: any) => Observable<ResponseObj<any>>;\n    contentButtonClass?: string;\n}\n\nexport interface User{\n    app_metadata: any[];\n    blocked: boolean;\n    country: string;\n    created_at: string;\n    date_joined: string;\n    email: string;\n    email_verified: boolean;\n    first_name: string;\n    globalChartPref: boolean;\n    globalGridPref: boolean;\n    globalMenubarPref: boolean;\n    globalScheme: schemeType;\n    groups: any[];\n    id: number;\n    identities: any[];\n    is_active: boolean;\n    is_deactivated: boolean;\n    is_staff: boolean;\n    is_superuser: boolean;\n    last_ip: string;\n    last_login: string;\n    last_name: string;\n    last_password_reset: string;\n    locale: string;\n    logins_count: number;\n    multifactor: string;\n    phone_number: string;\n    phone_verified: boolean;\n    picture: string;\n    provider: string;\n    updated_at: string;\n    user_id: string;\n    user_metadata: any[];\n    user_permissions: any[];\n    username: string;\n  };\n","import { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { Component, EventEmitter, Input, OnInit, Optional, Output } from '@angular/core';\nimport { ConfirmationService, MenuItem, PrimeIcons } from 'primeng/api';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { TASK_STATUS, TASK_TYPE } from '../../core.interface';\n\n@Component({\n  selector: 'eag-card',\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.css']\n})\nexport class CardComponent implements OnInit {\n  /* @Input()\n  laneData: any;\n\n  @Input()\n  cardData: any;\n\n  @Input()\n  laneIndex!: number; //TODO remove\n\n  @Input()\n  activeLaneMenu: any;\n  \n  @Input()\n  laneMenu: MenuItem[] = []\n  \n  @Input()\n  connectedLanes: string|CdkDropList<any>|(string|CdkDropList<any>)[] = [];\n\n  @Output()\n  popShow = new EventEmitter<{data: any}>();\n  \n  @Output()\n  addNew = new EventEmitter<{data: any}>();\n\n  @Output()\n  dropItem = new EventEmitter<{data: CdkDragDrop<any,any,any>}>();\n  \n  onPopupShow(data: any) {\n    this.popShow.emit({data});\n  }\n\n  onAddNew(data: any) {\n    this.addNew.emit({data});\n  }\n\n  onDropItem($event: CdkDragDrop<any,any,any>) {\n    this.dropItem.emit ({data: $event})\n  } */\n\n  constructor(private _confirmationService: ConfirmationService,\n    @Optional() public ref?: DynamicDialogRef,\n    @Optional() private _config?: DynamicDialogConfig) {\n      if(this._config?.data){\n        this.view = this._config.data?.view;\n      }\n    }\n\n  public PI = PrimeIcons;\n\n  @Input()\n  view?: 'default' | 'edit' = 'default';\n\n  @Input()\n  item: any;\n\n  @Output()\n  editItem = new EventEmitter<{mouseEvent: MouseEvent}>();  \n\n  public status = TASK_STATUS;\n  public taskType = TASK_TYPE;\n\n  ngOnInit(): void {\n  }\n}\n","<ng-container [ngSwitch]=\"view\">\n    <div *ngSwitchCase=\"'default'\" class=\"align-items-center flex full-width line-item\">\n        <div class=\"flex-1\">\n            <div [innerHTML]=\"item?.name\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Status: ' + (status.byCode[item?.status?.id] || item?.status?.id || item?.status)\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Priority: ' + item?.priority\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Projects: ' + item?.projects?.join(', ')\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Modules: ' + item?.modules?.join(', ')\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Owner: ' + item?.owner\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Requestor: ' + item?.requestor\"></div>\n            <div class=\"fs-11\" [innerHTML]=\"'Task Type: ' + (taskType.byCode[item?.task_type?.id] || item?.task_type?.id || item?.task_type)\"></div>\n            <div *ngIf=\"item?.delay_driver\" class=\"fs-11\" [innerHTML]=\"'Delay Driver: ' + item?.delay_driver\"></div>\n            <!-- name: 'Item 1', status: \"Status 1\", laneId: 1, position: 0, projects: [], modules: [], priority: 1, delay_driver: '', owner: '', requestor: '', task_type: 1 -->\n        </div>\n    \n        <span class=\"item-edit\">\n            <button pButton pRipple type=\"button\" [icon]=\"PI.PENCIL\" [pTooltip]=\"'Edit Item'\" class=\"p-button-rounded p-button-text valign-middle\" (click)=\"editItem.emit({mouseEvent: $event})\"></button>\n        </span>\n    </div>\n\n    <div *ngSwitchCase=\"'edit'\">\n        Edit Card\n    </div>\n</ng-container>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'eag-loading',\n  templateUrl: './loading.component.html',\n  styleUrls: ['./loading.component.scss']\n})\nexport class LoadingComponent {\n\n\n  @Input() enabled?             : boolean = false;\n  @Input() type?                : string  = \"standard\" || \"splash\";\n  @Input() message?             : string  = \"Loading\";\n  @Input() image?               : any     = null;\n  @Input() style?               : string  = \"height: 7em; width: 9em;\";\n\n  private _isEnabled            : boolean = false;\n  isLoading = false;\n  isLoading2 = false;\n  public constructor(){\n    this.enabled = false;\n  }\n\n  public isEnabled(): boolean {\n    return Boolean(this.enabled);\n  }\n\n  toggle() {\n    this.isLoading = !this.isLoading;\n  }\n\n  toggle2() {\n    this.isLoading2 = !this.isLoading2;\n  }\n}\n","<div class=\"flex full-height justify-content-center flex-wrap \" >\n  <div class=\"flex align-items-center justify-content-center\">\n      <div class=\"loader-container-center\">\n        <p-progressSpinner styleClass=\"custom-spinner\"></p-progressSpinner>\n        <p class=\"saving fw-500 saving-color\">\n          <span [innerHTML]=\"message\"></span>\n          <span>.</span>\n          <span>.</span>\n          <span>.</span>\n        </p>\n      </div>\n  </div>\n</div>\n\n\n","import { Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { envAppConfig, User, UserPreferences } from './core.interface';\n\nimport { agThemeType } from '../lib/grids/grid.interface';\nimport { sideBarMode } from './navigation/sidebar/sidebar.interface';\n\n\n@Injectable({providedIn: 'root'})\nexport class SharedService {\n  static defaultGridTheme: agThemeType = \"alpine\";\n  static defaultLocaleConf = {\n    locale: \"en\",\n    dateDelimeter: \"/\",\n    dateFormat: \"dd/MM/y\",\n    timeFormat: \"HH:mm:ss\",\n  };\n  static defaultDateFormatEn = \"dd/MM/yyyy\";\n  static defaultDateFormatEnForDatePicker = \"dd/MM/yyyy\";\n  static defaultSidebarMode: sideBarMode = \"thin\";\n\n  static defaultUserPref: UserPreferences = {\n    app: [{ui_theme: 'light', appId: 1, app_name: \"framework\"}],\n    locale: SharedService.defaultLocaleConf.locale\n  }\n\n  static getSavedLocale(envLocale: string): string{\n    const _savedLocale = (JSON.parse(localStorage.getItem('userPref') || '{}').locale);\n    const _locale = _savedLocale || envLocale || SharedService.defaultUserPref.locale;\n    /* console.table({\n      \"savedLocale\": _savedLocale,\n      \"envLocal\": envLocale,\n      \"defaultLocaleIfNoEnvLocal\": SharedService.defaultUserPref.locale,\n      \"localeToTransalate\": _locale}); */\n\n    return (_locale == \"tl\" ? \"pt-TL\" : _locale);\n  }\n\n  constructor(config: SharedService) {\n    this.appConfig = config.appConfig || {env: {main: {apiUrl: 'no-apiUrl', isProd: false, isDebug: false, hideConsoleLog: true} as envAppConfig},\n      appName: 'no-app',\n      app$: new BehaviorSubject({appId: 1})\n    };\n    this.userRoles = config.userRoles || [];\n    this.userPref$ = config.userPref$ || new Subject(); /* || new BehaviorSubject<UserPreferences>({darkMode: false, sidebar: {'eag-main':{modal: false, mode: 'thin', sidebarVisible: true}}, grid: {theme: 'balham'}}); */\n    this.userPref = config.userPref || {};\n    this.agGridLicenseKey = config.agGridLicenseKey || \"\",\n    this.tinyMceApiKey = config.tinyMceApiKey || \"\",\n    //this.amChartsLicenseKey = config.amChartsLicenseKey || \"\",\n    this.globalVars = config.globalVars || {}\n  }\n\n  public appConfig: {env: any, appName: string, app$: BehaviorSubject<any>, user?: User, userId?: number};\n  public userRoles?: string[];\n  public userPref$?: Subject<UserPreferences>;\n  public userPref?: {[appProjectName: string]: UserPreferences};\n  public gridLocal?:  {[key: string]: string};\n  public agGridLicenseKey?:  string;\n  public tinyMceApiKey?:  string;\n  /* public amChartsLicenseKey?:  string; */\n  public globalVars?: any;\n}\n","import { DecimalPipe } from \"@angular/common\";\nimport { PrimeIcons } from \"primeng/api\";\nimport { FormatWidth, NumberFormatStyle, TranslationWidth, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleFirstDayOfWeek, getLocaleMonthNames, getLocaleNumberFormat, getLocaleTimeFormat} from '@angular/common';\n\nexport class Core{\n    static _localize: {[key: string]: (((p?: any) => string) | undefined)} = {};\n\n    static Localize(key: string,\n        /** Default {count: 1, item: ''} */\n        p: any = {count: 1}) : string{\n        const _key = (key || '').toLowerCase();\n        const _params = {...p, count: (p.count === undefined ? 1 : p.count), item: (p.item || ''), company: (p.company || '')};\n        const _toReturn = (this._localize[_key]?.(_params) || `{translations.${key}}`);\n        return _toReturn;\n    }\n\n    static Resolution: {\n        type: string,\n        name: string,\n        ratio: string,\n        pixel: string,\n        height: number,\n        width: number,\n        font_size: string}[] = [\n        {\n            type:\"SD (Standard Definition)\",\n            name:\"480p\",\n            ratio:\"4:3\",\n            pixel:\"640 x 480\",\n            height: 480,\n            width: 640,\n            font_size:\"10px\"\n        },\n        {\n            type:\"HD (High Definition)\",\n            name:\"720p\",\n            ratio:\"16:9\",\n            pixel:\"1280 x 720\",\n            height: 720,\n            width: 1280,\n            font_size:\"12px\"\n        },\n        {\n            type:\"Full HD (FHD)\",\n            name:\"1080p\",\n            ratio:\"16:9\",\n            pixel:\"1920 x 1080\",\n            height:1080,\n            width:1920,\n            font_size:\"13px\"\n        },\n        {\n            type:\"QHD (Quad HD)\",\n            name:\"1440p\",\n            ratio:\"16:9\",\n            pixel:\"2560 x 1440\",\n            height:1440,\n            width:2560,\n            font_size:\"20px\"\n        },\n        {\n            type:\"2K video\",\n            name:\"1080p\",\n            ratio:\"1:1.77\",\n            pixel:\"2048 x 1080\",\n            height:1080,\n            width:2048,\n            font_size:\"17px\"\n        },\n        {\n            type:\"4K video or Ultra HD (UHD)\",\n            name:\"4K or 2160p\",\n            ratio:\"1:1.9\",\n            pixel:\"3840 x 2160\",\n            height:2160,\n            width:3840,\n            font_size:\"19px\"\n        },\n        {\n            type:\"8K video or Full Ultra HD\",\n            name:\"8K or 4320p\",\n            ratio:\"16∶9\",\n            pixel:\"7680 x 4320\",\n            height:4320,\n            width:7680,\n            font_size:\"21px\"\n        }\n    ];\n\n    /* private static _TimeZones: {[city: string]: {value: number, tz?: string}}; */\n\n    public static getTimeZones(_d: DecimalPipe, /* byCountry?: string */) {\n        const tzStr = (_num: number): string => {\n            const whole = _num - (_num % 1);\n            const modulo = (((_num %1 ) * 10) * 0.1);\n            const by60 = ((((_num %1 ) * 10) * 0.1) * 60) * 0.01;\n            const _sum = whole + by60;\n            const formatted = _d.transform(_sum * 100, \"4.0\", \"en\")?.replace(\",\", \"\") || (_num + '');\n            return formatted;\n        }\n\n        const _timeZones: {[city: string]: {value: number, tz?: string}} = {};\n\n        const _arr = [\n            'Europe/Andorra',\n            'Asia/Dubai',\n            'Asia/Kabul',\n            'Europe/Tirane',\n            'Asia/Yerevan',\n            'Antarctica/Casey',\n            'Antarctica/Davis',\n            'Antarctica/DumontDUrville', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068\n            'Antarctica/Mawson',\n            'Antarctica/Palmer',\n            'Antarctica/Rothera',\n            'Antarctica/Syowa',\n            'Antarctica/Troll',\n            'Antarctica/Vostok',\n            'America/Argentina/Buenos_Aires',\n            'America/Argentina/Cordoba',\n            'America/Argentina/Salta',\n            'America/Argentina/Jujuy',\n            'America/Argentina/Tucuman',\n            'America/Argentina/Catamarca',\n            'America/Argentina/La_Rioja',\n            'America/Argentina/San_Juan',\n            'America/Argentina/Mendoza',\n            'America/Argentina/San_Luis',\n            'America/Argentina/Rio_Gallegos',\n            'America/Argentina/Ushuaia',\n            'Pacific/Pago_Pago',\n            'Europe/Vienna',\n            'Australia/Lord_Howe',\n            'Antarctica/Macquarie',\n            'Australia/Hobart',\n            'Australia/Currie',\n            'Australia/Melbourne',\n            'Australia/Sydney',\n            'Australia/Broken_Hill',\n            'Australia/Brisbane',\n            'Australia/Lindeman',\n            'Australia/Adelaide',\n            'Australia/Darwin',\n            'Australia/Perth',\n            'Australia/Eucla',\n            'Asia/Baku',\n            'America/Barbados',\n            'Asia/Dhaka',\n            'Europe/Brussels',\n            'Europe/Sofia',\n            'Atlantic/Bermuda',\n            'Asia/Brunei',\n            'America/La_Paz',\n            'America/Noronha',\n            'America/Belem',\n            'America/Fortaleza',\n            'America/Recife',\n            'America/Araguaina',\n            'America/Maceio',\n            'America/Bahia',\n            'America/Sao_Paulo',\n            'America/Campo_Grande',\n            'America/Cuiaba',\n            'America/Santarem',\n            'America/Porto_Velho',\n            'America/Boa_Vista',\n            'America/Manaus',\n            'America/Eirunepe',\n            'America/Rio_Branco',\n            'America/Nassau',\n            'Asia/Thimphu',\n            'Europe/Minsk',\n            'America/Belize',\n            'America/St_Johns',\n            'America/Halifax',\n            'America/Glace_Bay',\n            'America/Moncton',\n            'America/Goose_Bay',\n            'America/Blanc-Sablon',\n            'America/Toronto',\n            'America/Nipigon',\n            'America/Thunder_Bay',\n            'America/Iqaluit',\n            'America/Pangnirtung',\n            'America/Atikokan',\n            'America/Winnipeg',\n            'America/Rainy_River',\n            'America/Resolute',\n            'America/Rankin_Inlet',\n            'America/Regina',\n            'America/Swift_Current',\n            'America/Edmonton',\n            'America/Cambridge_Bay',\n            'America/Yellowknife',\n            'America/Inuvik',\n            'America/Creston',\n            'America/Dawson_Creek',\n            'America/Fort_Nelson',\n            'America/Vancouver',\n            'America/Whitehorse',\n            'America/Dawson',\n            'Indian/Cocos',\n            'Europe/Zurich',\n            'Africa/Abidjan',\n            'Pacific/Rarotonga',\n            'America/Santiago',\n            'America/Punta_Arenas',\n            'Pacific/Easter',\n            'Asia/Shanghai',\n            'Asia/Urumqi',\n            'America/Bogota',\n            'America/Costa_Rica',\n            'America/Havana',\n            'Atlantic/Cape_Verde',\n            'America/Curacao',\n            'Indian/Christmas',\n            'Asia/Nicosia',\n            'Asia/Famagusta',\n            'Europe/Prague',\n            'Europe/Berlin',\n            'Europe/Copenhagen',\n            'America/Santo_Domingo',\n            'Africa/Algiers',\n            'America/Guayaquil',\n            'Pacific/Galapagos',\n            'Europe/Tallinn',\n            'Africa/Cairo',\n            'Africa/El_Aaiun',\n            'Europe/Madrid',\n            'Africa/Ceuta',\n            'Atlantic/Canary',\n            'Europe/Helsinki',\n            'Pacific/Fiji',\n            'Atlantic/Stanley',\n            'Pacific/Chuuk',\n            'Pacific/Pohnpei',\n            'Pacific/Kosrae',\n            'Atlantic/Faroe',\n            'Europe/Paris',\n            'Europe/London',\n            'Asia/Tbilisi',\n            'America/Cayenne',\n            'Africa/Accra',\n            'Europe/Gibraltar',\n            'America/Godthab',\n            'America/Danmarkshavn',\n            'America/Scoresbysund',\n            'America/Thule',\n            'Europe/Athens',\n            'Atlantic/South_Georgia',\n            'America/Guatemala',\n            'Pacific/Guam',\n            'Africa/Bissau',\n            'America/Guyana',\n            'Asia/Hong_Kong',\n            'America/Tegucigalpa',\n            'America/Port-au-Prince',\n            'Europe/Budapest',\n            'Asia/Jakarta',\n            'Asia/Pontianak',\n            'Asia/Makassar',\n            'Asia/Jayapura',\n            'Europe/Dublin',\n            'Asia/Jerusalem',\n            'Asia/Kolkata',\n            'Indian/Chagos',\n            'Asia/Baghdad',\n            'Asia/Tehran',\n            'Atlantic/Reykjavik',\n            'Europe/Rome',\n            'America/Jamaica',\n            'Asia/Amman',\n            'Asia/Tokyo',\n            'Africa/Nairobi',\n            'Asia/Bishkek',\n            'Pacific/Tarawa',\n            'Pacific/Enderbury',\n            'Pacific/Kiritimati',\n            'Asia/Pyongyang',\n            'Asia/Seoul',\n            'Asia/Almaty',\n            'Asia/Qyzylorda',\n            'Asia/Qostanay', // https://bugs.chromium.org/p/chromium/issues/detail?id=928068\n            'Asia/Aqtobe',\n            'Asia/Aqtau',\n            'Asia/Atyrau',\n            'Asia/Oral',\n            'Asia/Beirut',\n            'Asia/Colombo',\n            'Africa/Monrovia',\n            'Europe/Vilnius',\n            'Europe/Luxembourg',\n            'Europe/Riga',\n            'Africa/Tripoli',\n            'Africa/Casablanca',\n            'Europe/Monaco',\n            'Europe/Chisinau',\n            'Pacific/Majuro',\n            'Pacific/Kwajalein',\n            'Asia/Yangon',\n            'Asia/Ulaanbaatar',\n            'Asia/Hovd',\n            'Asia/Choibalsan',\n            'Asia/Macau',\n            'America/Martinique',\n            'Europe/Malta',\n            'Indian/Mauritius',\n            'Indian/Maldives',\n            'America/Mexico_City',\n            'America/Cancun',\n            'America/Merida',\n            'America/Monterrey',\n            'America/Matamoros',\n            'America/Mazatlan',\n            'America/Chihuahua',\n            'America/Ojinaga',\n            'America/Hermosillo',\n            'America/Tijuana',\n            'America/Bahia_Banderas',\n            'Asia/Kuala_Lumpur',\n            'Asia/Kuching',\n            'Africa/Maputo',\n            'Africa/Windhoek',\n            'Pacific/Noumea',\n            'Pacific/Norfolk',\n            'Africa/Lagos',\n            'America/Managua',\n            'Europe/Amsterdam',\n            'Europe/Oslo',\n            'Asia/Kathmandu',\n            'Pacific/Nauru',\n            'Pacific/Niue',\n            'Pacific/Auckland',\n            'Pacific/Chatham',\n            'America/Panama',\n            'America/Lima',\n            'Pacific/Tahiti',\n            'Pacific/Marquesas',\n            'Pacific/Gambier',\n            'Pacific/Port_Moresby',\n            'Pacific/Bougainville',\n            'Asia/Manila',\n            'Asia/Karachi',\n            'Europe/Warsaw',\n            'America/Miquelon',\n            'Pacific/Pitcairn',\n            'America/Puerto_Rico',\n            'Asia/Gaza',\n            'Asia/Hebron',\n            'Europe/Lisbon',\n            'Atlantic/Madeira',\n            'Atlantic/Azores',\n            'Pacific/Palau',\n            'America/Asuncion',\n            'Asia/Qatar',\n            'Indian/Reunion',\n            'Europe/Bucharest',\n            'Europe/Belgrade',\n            'Europe/Kaliningrad',\n            'Europe/Moscow',\n            'Europe/Simferopol',\n            'Europe/Kirov',\n            'Europe/Astrakhan',\n            'Europe/Volgograd',\n            'Europe/Saratov',\n            'Europe/Ulyanovsk',\n            'Europe/Samara',\n            'Asia/Yekaterinburg',\n            'Asia/Omsk',\n            'Asia/Novosibirsk',\n            'Asia/Barnaul',\n            'Asia/Tomsk',\n            'Asia/Novokuznetsk',\n            'Asia/Krasnoyarsk',\n            'Asia/Irkutsk',\n            'Asia/Chita',\n            'Asia/Yakutsk',\n            'Asia/Khandyga',\n            'Asia/Vladivostok',\n            'Asia/Ust-Nera',\n            'Asia/Magadan',\n            'Asia/Sakhalin',\n            'Asia/Srednekolymsk',\n            'Asia/Kamchatka',\n            'Asia/Anadyr',\n            'Asia/Riyadh',\n            'Pacific/Guadalcanal',\n            'Indian/Mahe',\n            'Africa/Khartoum',\n            'Europe/Stockholm',\n            'Asia/Singapore',\n            'America/Paramaribo',\n            'Africa/Juba',\n            'Africa/Sao_Tome',\n            'America/El_Salvador',\n            'Asia/Damascus',\n            'America/Grand_Turk',\n            'Africa/Ndjamena',\n            'Indian/Kerguelen',\n            'Asia/Bangkok',\n            'Asia/Dushanbe',\n            'Pacific/Fakaofo',\n            'Asia/Dili',\n            'Asia/Ashgabat',\n            'Africa/Tunis',\n            'Pacific/Tongatapu',\n            'Europe/Istanbul',\n            'America/Port_of_Spain',\n            'Pacific/Funafuti',\n            'Asia/Taipei',\n            'Europe/Kiev',\n            'Europe/Uzhgorod',\n            'Europe/Zaporozhye',\n            'Pacific/Wake',\n            'America/New_York',\n            'America/Detroit',\n            'America/Kentucky/Louisville',\n            'America/Kentucky/Monticello',\n            'America/Indiana/Indianapolis',\n            'America/Indiana/Vincennes',\n            'America/Indiana/Winamac',\n            'America/Indiana/Marengo',\n            'America/Indiana/Petersburg',\n            'America/Indiana/Vevay',\n            'America/Chicago',\n            'America/Indiana/Tell_City',\n            'America/Indiana/Knox',\n            'America/Menominee',\n            'America/North_Dakota/Center',\n            'America/North_Dakota/New_Salem',\n            'America/North_Dakota/Beulah',\n            'America/Denver',\n            'America/Boise',\n            'America/Phoenix',\n            'America/Los_Angeles',\n            'America/Anchorage',\n            'America/Juneau',\n            'America/Sitka',\n            'America/Metlakatla',\n            'America/Yakutat',\n            'America/Nome',\n            'America/Adak',\n            'Pacific/Honolulu',\n            'America/Montevideo',\n            'Asia/Samarkand',\n            'Asia/Tashkent',\n            'America/Caracas',\n            'Asia/Ho_Chi_Minh',\n            'Pacific/Efate',\n            'Pacific/Wallis',\n            'Pacific/Apia',\n            'Africa/Johannesburg'\n        ];\n          \n        let date = new Date;\n        let arrMap = _arr.map(timeZone => {\n            let utcDate = new Date(date.toLocaleString('en-US', { timeZone: \"UTC\" }));\n            let tzDate = new Date(date.toLocaleString('en-US', { timeZone: timeZone }));\n            let offset = utcDate.getTime() - tzDate.getTime();\n            let _tz = (offset/3600000)\n            _tz = _tz != 0 ? (_tz * -1) : _tz;\n            const _toReturn = {city: timeZone, timeZone: _tz};\n\n            return _toReturn;\n        })/* .sort((a, b) => { \n            if (a.timeZone < b.timeZone) {\n                return -1;\n            } else if (a.timeZone > b.timeZone) {\n                return 1;\n            }\n            return 0;\n        }) */;\n\n        for (const _tz of arrMap) {\n            _timeZones[_tz.city] = {value: _tz.timeZone, tz: (_tz.timeZone >= 0 ? \"+\" : \"\") + tzStr(_tz.timeZone)};\n        }\n\n        /* if(byCountry && _timeZones[byCountry]){\n            return {[byCountry]: _timeZones[byCountry]};\n        } else{\n            console.warn(byCountry + \" timezone not found\");\n        } */\n\n        return _timeZones;\n        //return Core._TimeZones;\n    }\n    /* public static set _TimeZones(value) {\n        Core._TimeZones = value;\n    } */\n\n    static FieldMeta: {[key: string]: {\n        /** to be displayed as alt text */\n        icon?: string, \n\n        /** useful to represent a data that needs an uploader */\n        isFile?: boolean\n\n        /** to display image instead of url (string) */\n        isImage?: boolean,\n\n        /** password field? to encrypt the display */\n        isPassword?: boolean\n\n        /** email  */\n        isEmail?: boolean,\n\n        /** if a field is primary/foreign key  */\n        isKeyId?: boolean,\n\n        /** if a field url  */\n        isUrl?: boolean,\n\n        /** to convert true/false label to Yes/No  */\n        isYesNo?: boolean,\n\n        /** to provide list options */\n        isList?: boolean,\n\n        /** to show hierarchy map */\n        isHierarchy?: boolean,\n\n        /** to exclude display of fields from hierarchy except editting */\n        foreignFrom?: string[],\n\n        /** Replace the field label to be displayed */\n        altLabel?: string,\n        }} = {\n        //\"organization\": {icon: PrimeIcons.SITEMAP, isList: true, isHierarchy: true, foreignFrom: [\"dept\", \"teams\"]},\n        \"organization\": {icon: PrimeIcons.SITEMAP, isHierarchy: true, isList: true},\n        \"company\": {icon: PrimeIcons.SITEMAP, isHierarchy: true, isList: true, foreignFrom: [\"teams\"]},\n        \"department\": {icon: PrimeIcons.SITEMAP, isHierarchy: true, isList: true},\n        \"name\": {icon: PrimeIcons.USER_EDIT},\n        \"password\": {icon: PrimeIcons.KEY, isPassword: true},\n        \"is_superuser\": {icon: PrimeIcons.USERS, isYesNo: true},\n        \"username\": {icon: PrimeIcons.USER_EDIT},\n        \"first_name\": {icon: PrimeIcons.USER_EDIT},\n        \"last_name\": {icon: PrimeIcons.USER_EDIT},\n        \"email\": {icon: PrimeIcons.AT, isEmail: true},\n        \"is_staff\": {icon: PrimeIcons.USERS, isYesNo: true},\n        \"is_active\": {icon: PrimeIcons.CHECK_CIRCLE, isYesNo: true},\n        \"date_joined\": {icon: PrimeIcons.CALENDAR},\n        \"id\": {icon: PrimeIcons.KEY, isKeyId: true},\n        \"country\": {icon: PrimeIcons.FLAG},\n        \"app_metadata\": {icon: PrimeIcons.SLIDERS_V},\n        \"blocked\": {icon: PrimeIcons.BAN, isYesNo: true},\n        \"created_at\": {icon: PrimeIcons.CALENDAR},\n        \"is_deactivated\": {icon: PrimeIcons.MINUS_CIRCLE, isYesNo: true},\n        \"email_verified\": {icon: 'pi pi-verified', isYesNo: true},\n        \"user_metadata\": {icon: PrimeIcons.SLIDERS_V},\n        \"identities\": {icon: PrimeIcons.USERS},\n        \"last_ip\": {icon: PrimeIcons.WIFI},\n        \"last_login\": {icon: PrimeIcons.CALENDAR},\n        \"last_password_reset\": {icon: PrimeIcons.CALENDAR},\n        \"logins_count\": {icon: 'pi pi-sort-numeric-up-alt'},\n        \"multifactor\": {icon: PrimeIcons.QUESTION},\n        \"phone_number\": {icon: PrimeIcons.PHONE},\n        \"phone_verified\": {icon: 'pi pi-verified', isYesNo: true},\n        \"picture\": {icon: 'fa fa-id-badge', isImage: true, isFile: true},\n        \"updated_at\": {icon: PrimeIcons.CALENDAR},\n        \"user_id\": {icon: PrimeIcons.USER, isKeyId: true},\n        \"provider\": {icon: PrimeIcons.BRIEFCASE},\n        \"locale\": {icon: 'pi pi-language'}, //TODO: upgrade PrimeNg\n        \"globalMenubarPref\": {icon: PrimeIcons.BARS, isYesNo: true},\n        \"globalGridPref\": {icon: PrimeIcons.TABLE, isYesNo: true},\n        \"globalChartPref\": {icon: PrimeIcons.CHART_PIE, isYesNo: true},\n        \"globalScheme\": {icon: PrimeIcons.SUN},\n        \"provision\": {icon: PrimeIcons.CALENDAR},\n        \"provision_uri\": {icon: PrimeIcons.AT, isUrl: true},\n        \"provision_verified\": {icon: 'pi pi-verified', isYesNo: true},\n        \"addressBy\": {icon: PrimeIcons.USER_EDIT},\n        \"title\": {icon: PrimeIcons.TAG},\n        \"middle_name\": {icon: PrimeIcons.USER_EDIT},\n        \"gender\": {icon: 'fa fa-venus-mars'},\n        \"language\": {icon: 'pi pi-language'},\n        \"date_of_birth\": {icon: PrimeIcons.CALENDAR},\n        \"phone_number_mobile\": {icon: PrimeIcons.CAMERA},\n        \"fax_number\": {icon: 'fa fa-fax'},\n        \"website\": {icon: PrimeIcons.CLOUD, isUrl: true},\n        \"banner\": {icon: PrimeIcons.IMAGE, isImage: true},\n        \"job\": {icon: PrimeIcons.BRIEFCASE},\n        \"user\": {icon: PrimeIcons.USER, isHierarchy: true, isList: true},\n        \"address\": {icon: PrimeIcons.BUILDING},\n        \"parent_id\": {icon: PrimeIcons.SITEMAP, isHierarchy: true, isList: true, altLabel: \"org_parent\"},\n        \"legal_form\": {icon: 'fa fa-file-contract'},\n        \"legal_name\": {icon: 'fa fa-file-contract'},\n        \"preferred_name\": {icon: 'fa fa-font'},\n        \"registration_no\": {icon: 'fa fa-hashtag'},\n        \"vat_no\": {icon: 'fa fa-hashtag'},\n        \"point_of_contact\": {icon: PrimeIcons.USER},\n        \"abbreviation\": {icon: 'fa fa-font'},\n        \"disclaimer\": {icon: PrimeIcons.USER},\n        \"data_privacy\": {icon: 'fa fa-exclamation'},\n        \"copyright\": {icon: 'fa fa-copyright'},\n        \"terms_conditions\": {icon: 'fa fa-file-contract'},\n        \"app_logo\": {icon: 'fa fa-font-awesome', isImage: true},\n        \"app_background\": {icon: PrimeIcons.IMAGE, isImage: true},\n        \"branding\": {icon: 'fa fa-copyright'},\n        \"units\": {icon: PrimeIcons.EURO},\n        \"is_vat_subject\": {icon: PrimeIcons.EURO},\n        }\n    \n    static setTranslations(locale: string) {\n        if(locale == \"tl\"){\n            locale = \"pt-TL\";\n        }\n        const primeNgTranslations : any = {\n            startsWith            : Core.Localize('startsWith'),\n            contains              : Core.Localize('contains'),\n            notContains           : Core.Localize('notContains'),\n            endsWith              : Core.Localize('endsWith'),\n            equals                : Core.Localize('equals'),\n            notEquals             : Core.Localize('notEquals'),\n            noFilter              : Core.Localize('noFilter'),\n            lt                    : Core.Localize('lt'),\n            lte                   : Core.Localize('lte'),\n            gt                    : Core.Localize('gt'),\n            gte                   : Core.Localize('gte'),\n            is                    : Core.Localize('is'),\n            isNot                 : Core.Localize('isNot'),\n            before                : Core.Localize('before'),\n            after                 : Core.Localize('after'),\n            dateIs                : Core.Localize('dateIs'),\n            dateIsNot             : Core.Localize('dateIsNot'),\n            dateBefore            : Core.Localize('dateBefore'),\n            dateAfter             : Core.Localize('dateAfter'),\n            clear                 : Core.Localize('clear'),\n            apply                 : Core.Localize('apply'),\n            matchAll              : Core.Localize('matchAll'),\n            matchAny              : Core.Localize('matchAny'),\n            addRule               : Core.Localize('addRule'),\n            removeRule            : Core.Localize('removeRule'),\n            accept                : Core.Localize('accept'),\n            reject                : Core.Localize('reject'),\n            choose                : Core.Localize('choose'),\n            upload                : Core.Localize('upload'),\n            cancel                : Core.Localize('cancel'),\n            dayNames              : getLocaleDayNames(locale, 0, TranslationWidth.Wide),\n            dayNamesShort         : getLocaleDayNames(locale, 0, TranslationWidth.Short),\n            dayNamesMin           : getLocaleDayNames(locale, 0, TranslationWidth.Narrow),\n            monthNames            : getLocaleMonthNames(locale, 0, TranslationWidth.Wide),\n            monthNamesShort       : getLocaleMonthNames(locale, 0, TranslationWidth.Short),\n            dateFormat            : getLocaleDateFormat(locale, FormatWidth.Full),\n            timeFormat            : getLocaleTimeFormat(locale, FormatWidth.Full),\n            dateTimeFormat        : getLocaleDateTimeFormat(locale, FormatWidth.Full),\n            eraNames              : getLocaleEraNames(locale, TranslationWidth.Short),\n            period                : getLocaleDayPeriods(locale, 0, TranslationWidth.Short),\n            localeDirection       : getLocaleDirection(locale),\n            currencyFormat        : getLocaleNumberFormat(locale, NumberFormatStyle.Currency),\n            decimalFormat         : getLocaleNumberFormat(locale, NumberFormatStyle.Decimal),\n            scientificFormat      : getLocaleNumberFormat(locale, NumberFormatStyle.Scientific),\n            percentFormat         : getLocaleNumberFormat(locale, NumberFormatStyle.Percent),\n            currency              : getLocaleCurrencyName(locale),\n            currencyCode          : getLocaleCurrencyCode(locale),\n            currencySymbol        : getLocaleCurrencySymbol(locale),\n            firstDayOfWeek        : 0,\n            today                 : Core.Localize(\"today\"),\n            weekHeader            : Core.Localize(\"weekHeader\"),\n            weak                  : Core.Localize(\"weak\"),\n            medium                : Core.Localize(\"medium\"),\n            strong                : Core.Localize(\"strong\"),\n            passwordPrompt        : Core.Localize(\"passwordPrompt\"),\n            emptyMessage          : Core.Localize(\"emptyMessage\"),\n            emptyFilterMessage    : Core.Localize(\"emptyFilterMessage\"),\n        }\n        return primeNgTranslations;\n    }\n}","import { JsonPipe, TitleCasePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormControl } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { SharedService } from '../shared.service';\nimport { ValueFilterFunc } from '../core.interface';\nimport { Core } from '../core.static';\n\n@Pipe({name: 'eagnaTest'})\nexport class EagnaTestPipe implements PipeTransform {\n  transform(value: string): string { //, ...args: any[]\n    return value + ' - eagna 0.0.1 test pipe';\n  }\n}\n\n@Pipe({ name: 'plural' })\nexport class CustomPluralPipe implements PipeTransform {\n  transform(input: number, customPluralForm: {singular?: string, plural: string} = {plural: 's'} ): string {\n    return input > 1 ? customPluralForm.plural : (customPluralForm.singular || \"\");\n  }\n}\n\n@Pipe( {name: 'isNotEmpty'} )\nexport class IsNotEmptyPipe implements PipeTransform {\n  transform(value: any): boolean{\n    let isValueNotEmpty = !!value;\n    try {\n      // console.log(1)\n        if(!isValueNotEmpty && parseInt(value) >= 0){\n            isValueNotEmpty = true;\n        }\n    } catch (error) {\n      // console.log(2)\n        console.warn(\"parseInt error\", value);\n    }\n\n    if(!(value instanceof Date)){\n      if(value && ((Array.isArray(value) && value.length == 0) || (typeof value == \"object\" && Object.keys(value).length == 0))){\n        // console.log(3)\n        isValueNotEmpty = false;\n      } else if(value && typeof value ==  'string' && value == \"undefined\"){\n        // console.log(4)\n        isValueNotEmpty = false;\n      }\n    }\n    // console.log(5, isValueNotEmpty)\n    return isValueNotEmpty;\n  }\n}\n\n/* get Initials of Name */\n@Pipe({\n  name: 'getInitials'\n})\nexport class GetInitialsPipe implements PipeTransform {\n  transform(value: string, limit?: number, splitter: string[] = []): string { //TODO, repeat for splitter instead of replacing\n    let _toReturn = '';\n    if(value){\n      const _splitter = splitter.concat(' ');\n      let _firstReplace = false;\n      for (const _s of _splitter) {\n          if (!_firstReplace && ((value.includes(_s) && value.split(_s)?.[1] !== 'com') || _s == ' ')) {\n              value = value.split(_s).map((x, _i) => {\n                  if(_s == ' ' || _i <= 1){\n                      return (x[0] || '').toUpperCase() + x?.substring(1).toLowerCase()\n                  } else{\n                      return x?.toLowerCase()\n                  }\n\n              }).join(_s);\n              _firstReplace = true;\n          }\n      }\n      _toReturn = value.replace(new RegExp('[a-z'+ splitter.join('') +']', 'g'), '');\n      if (limit) {\n          return _toReturn.substring(0, limit);\n      } else {\n          return _toReturn;\n      }\n    }\n    return _toReturn;\n  }\n}\n\n@Pipe({\n  name: 'abstractToFormControl'\n})\nexport class AbstractToFormControlPipe implements PipeTransform{\n  transform(value: AbstractControl | null, ...args: any[]): UntypedFormControl {\n      const ctrl = value as UntypedFormControl;\n      return ctrl;\n  }\n}\n\n@Pipe({\n  name: 'abstractToFormArray'\n})\nexport class AbstractToFormArrayPipe implements PipeTransform{\n  transform(value: AbstractControl | null, ...args: any[]): UntypedFormArray {\n      const ctrl = value as UntypedFormArray;\n      return ctrl;\n  }\n}\n\n/* @Pipe({ name: \"jsonDebug\" })\nexport class JsonDebugPipe implements PipeTransform{\n    constructor(private _jsonPipe: JsonPipe, private _sharedService: SharedService) {}\n    transform(value: any): any {\n      if(!this._sharedService.appConfig?.env?.main?.isProd === true){\n        return this._jsonPipe.transform(value);\n      }\n      return \"\";\n    }\n} */\n\n/* FilterBy Pipe */\n@Pipe({ name: \"filterBy\", pure : false })\nexport class FilterByPipe implements PipeTransform\n{\n    constructor(private _isNotEmptyPipe: IsNotEmptyPipe) { }\n    //TODO: field and value to be array, or accept operrators in comparing\n    transform(arr: any[], byField: { field?: string, value: ValueFilterFunc | any, searchType?: 'anywhere' | 'start' | 'end'}): any[] {\n      let byVal: any;\n      let isNegation = false;\n      if(typeof byField.value == 'boolean'){\n        byVal = (byField.value == true);\n      } else if(typeof byField.value == 'string'){\n        byVal = (byField.value || '').trim();\n        isNegation = byVal.startsWith(\"!\");\n        if(isNegation){\n          byVal = byVal.substr(1);\n        }\n      }\n      if (arr && arr.length > 0) {\n        return arr.filter(a => {\n          const aValue = !byField.field ? a : a[byField.field];\n          let filterResult = false;\n          if(byVal == \"!empty\"){\n            filterResult = this._isNotEmptyPipe.transform(aValue);\n          } else if(byVal == \"empty\"){\n            filterResult = !this._isNotEmptyPipe.transform(aValue);\n          } else if(typeof byField.value == \"function\"){\n            filterResult = byField.value(aValue)\n          } else if(typeof byField.value != 'boolean' && !byVal){\n            filterResult = true;\n          } else{\n            if(!byField.field){\n              filterResult = (aValue == byVal);\n            } else{\n              if(byField.searchType){\n                switch(byField.searchType){\n                  case \"anywhere\":\n                    if(Array.isArray(aValue)){ //in case of array\n                      filterResult = aValue.includes(byVal);\n                    } else {\n                      filterResult = (aValue as string).toLowerCase().indexOf(byVal.toLowerCase()) >= 0;\n                    }\n                    break; //?\n                    /** falls through ?? */\n                  case \"start\":\n                    filterResult = (aValue as string).toLowerCase().startsWith(byVal.toLowerCase());\n                    break; //?\n                    /* falls through ?? */\n                  case \"end\":\n                    filterResult = (aValue as string).toLowerCase().endsWith(byVal.toLowerCase());\n                }\n                filterResult = true;\n              } else{\n                //means exact match or in Array\n                if(Array.isArray(aValue)){\n                  filterResult = aValue.includes(byVal);\n                } else {\n                  filterResult = (aValue == byVal);\n                }\n              }\n            }\n          }\n          if(isNegation){\n            return !filterResult;\n          }\n          return filterResult;\n        });\n      }\n      return arr;\n    }\n}\n\n/* IncludeBy Pipe */\n@Pipe({ name: \"includeBy\", pure : false })\nexport class IncludeByPipe implements PipeTransform\n{\n    constructor() { }\n    transform(arr: any[], byField: { field: string, value: any, searchType?: 'anywhere' | 'start' | 'end'}): any[] {\n      if (arr && arr.length > 0) {\n        return arr.filter(a => {\n          return a[byField.field].includes(byField.value)\n        });\n      }\n      return arr;\n    }\n}\n\n/* IncludeBy Pipe */\n@Pipe({ name: \"excludeBy\", pure : false })\nexport class ExcludeByPipe implements PipeTransform\n{\n    constructor() { }\n    transform(arr: any[], byField: { field: string, value: any, searchType?: 'anywhere' | 'start' | 'end'}): any[] {\n      if (arr && arr.length > 0) {\n        return arr.filter(a => {\n          return !a[byField.field].includes(byField.value)\n        });\n      }\n      return arr;\n    }\n}\n\n@Pipe({name: 'filterUnique'})\nexport class FilterUnique implements PipeTransform{\n  transform(arrayValues: any[]) {\n    return arrayValues.filter((_val: any, _index: number, _arr: any[]) => _arr.indexOf(_val) === _index);\n  }\n}\n\n/* Search Highlight Pipe */\n@Pipe({ name: 'highlight' })\nexport class HighlightSearchPipe implements PipeTransform{\n    constructor(private sanitizer: DomSanitizer){}\n    transform(elemText: string, searchTerms: string,type?:string): SafeHtml {\n        if (!searchTerms || !elemText) {\n        return elemText;\n        }\n        elemText = elemText.toString();\n        let searchWords = searchTerms.split(\" \");\n        let regexTermsToMatch=\"\";\n        let reservedTerms = ['*','.',\"\"];\n        for(let word in searchWords){ //'Pipify search terms' ex 'apple jelly' -> 'apple|jelly' [to generate Regex]\n\n        if(searchWords[word].length > 1 && reservedTerms.indexOf(searchWords[word]) == -1){\n            regexTermsToMatch = \"(?<!<)\"+regexTermsToMatch+searchWords[word]+\"(?!>)|\";\n        }\n        }\n        regexTermsToMatch = regexTermsToMatch.trim()\n\n        let highlightText=elemText;\n        if(regexTermsToMatch != ''){\n        let r = new RegExp('(' + regexTermsToMatch.slice(0, -1) + ')', 'gi'); //'Search' with case-insensitive agains all terms\n        let elemMatch = elemText.match(r);\n        if( elemMatch != null){\n            let allMatches = [... new Set( elemMatch ) ]; //Get the unique matches (Case Sensitive) as an array. Ex. ['Apple','apple','jelly']\n            for (let item in allMatches) {\n                if(allMatches[item] != ''){\n                let ignore=\"\";\n                let index = '<mark>'.indexOf(allMatches[item]);\n                if( index != -1 ){\n                    //In case search term is substring of <html> wrapper for styling, append Regex to ignore.\n                    //Ex. SearchTerm = ['ar'] -> Regex: \"(!?ark>)ar\"\n                    //i.e. Match all subwords starting with 'ar' as long as it's not 'ark>'\n                    //Applies to all substrings of '<mark>' [m, ma, mar, ark, rk, k ...] (Match all 'k' as long as it's not 'k>')\n                    ignore = ignore+ \"(?!\"+ \"<mark>\".substr(index) +\")\";\n                }\n                let toReplace = new RegExp(ignore+allMatches[item], 'g');\n                //Apply markup (Case Sebsutive)\n                highlightText = highlightText.replace(toReplace,  \"<mark>\" + allMatches[item] + \"</mark>\");\n                }\n            }\n        }else if (type==\"tree\"){\n            highlightText = \"<span style='opacity:0.5;'>\"+highlightText+\"</span>\";\n        }\n    }\n        // Match in a case insensitive manner\n        return this.sanitizer.bypassSecurityTrustHtml(highlightText);\n    }\n}\n\n/* Auto Complete Highlight Pipe */\n@Pipe({ name: 'autoCompleteHighlight' })\nexport class AutoCompleteHighlightPipe implements PipeTransform\n{\n    constructor(){}\n    transform(value: any, args: any): any {\n        if (!args)\n        {\n          return value;\n        } else {\n          args = (typeof args == \"string\")?args.replace('*',''):args;\n          var re = new RegExp(args, 'gi'); //'gi' for case insensitive and can use 'g' if you want the search to be case sensitive.\n          return (value + '').replace(re, \"<b>$&</b>\");\n        }\n\n    }\n}\n\n/* String Replace All Pipe */\n@Pipe({ name: 'replaceAll' })\nexport class ReplaceAllPipe implements PipeTransform{\n    constructor(){}\n    transform(value: string, from: string, to: string, isCaseSensitive = false): any {\n      if (!from || !to){\n        return value;\n      } else {\n        var re = new RegExp(from, 'g' + (!isCaseSensitive ? 'i' : '')); //'gi' for case insensitive.\n        return (value + '').replace(re, to);\n    }\n  }\n}\n\n@Pipe({name: 'translateField'})\nexport class TranslateFieldPipe implements PipeTransform {\n  constructor(private _capitalizeFirst: CapitalizeFirstPipe){}\n  transform (input: string, keyword='translations'): any {\n    const _trans = Core.Localize(input, {item: ''});\n    return _trans == `{${keyword}.${input}}` ? this._capitalizeFirst.transform(input) : _trans;\n  }\n}\n\n\n@Pipe({name: 'pluck'})\nexport class PluckPipe implements PipeTransform {\n  transform (input: any[], key: string, delimeter?: string): any {\n      return input.map(value => delimeter ? ((value[key] || '') + delimeter) : value[key]);\n  }\n}\n\n/* Quick Filter Pipe */\n@Pipe({ name: 'quickFilter' })\nexport class QuickFilterPipe implements PipeTransform\n{\n    recursiveMatch(val:any,filter:string): any {\n        if(Array.isArray(val)){\n        return val.some((each)=>{return this.recursiveMatch(each,filter)});\n        } else if (!(typeof val === \"string\") && !(typeof val ===\"number\")){\n        return Object.values(val).some((each)=>{return this.recursiveMatch(each,filter)});\n        }else{\n        if(new RegExp(filter,'gi').test(val.toString())){\n        }\n        return new RegExp(filter,'gi').test(val.toString());\n        }\n    }\n\n    transform(items: any, filter: any): any {\n        if (filter && Array.isArray(items)) {\n            return items.filter(item => {\n                return Object.values(item).some((each)=>{return this.recursiveMatch(each,filter)})\n            });\n\n        } else {\n        return items;\n        }\n    }\n}\n\n/* Capitalize Pipe */\n@Pipe({ name: \"capitalizeFirst\" })\nexport class CapitalizeFirstPipe implements PipeTransform\n{\n    constructor(private titleCase: TitleCasePipe) {}\n    transform(title: string): string\n    {\n      if (title != null) {\n        return this.titleCase.transform(\n          title.replace(/_/g, \" \").replace(/.png|.jpg/g, \"\")\n        );\n      }\n      return title;\n    }\n}\n\n/* merge object Pipe */\n@Pipe({ name: 'mergeTo' })\nexport class MergeToPipe implements PipeTransform\n{\n    constructor(){}\n    transform(obj1: any, obj2: any): any\n    {\n      return {...obj1, ...obj2};\n    }\n}\n\n/* flatMap array Pipe */\n@Pipe({ name: 'flatMap' })\nexport class FlatMapPipe implements PipeTransform\n{\n    constructor(){}\n    transform(obj1: any[]): any\n    {\n      return (obj1 as any[]).flatMap(f => f);\n    }\n}\n\n@Pipe({ name: 'objToArray' })\nexport class ObjToArrayPipe implements PipeTransform\n{\n    constructor(){}\n    transform(obj: any): {label: string, value: any}[]{\n      let _toReturn: {label: string, value: any}[] = [];\n      if(obj && typeof obj == \"object\" && Object.keys(obj).length > 0){\n        for (const key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            const element = obj[key];\n            _toReturn.push({label: key, value: element})\n          }\n        }\n      }\n      return _toReturn;\n    }\n}\n\n@Pipe({ name: 'arrayToObj' })\nexport class ArrayToObjPipe implements PipeTransform\n{\n    constructor(){}\n    transform(objArr: any[], byId?: string): {[p: string]: any} | undefined{\n      let _toReturn: {[p: string]: any} | undefined = undefined;\n      if(objArr.length > 0){\n        _toReturn = {};\n        for (const element of objArr) {\n          if(byId){\n            if(element && element[byId] && (typeof element[byId] == \"string\")){\n              _toReturn[element[byId]] = element;\n            }\n          } else { //get the first field and the vlaue of that key\n            const _firstKey = Object.keys(element)?.[0];\n            if(_firstKey){\n              _toReturn[_firstKey] = element[_firstKey];\n            }\n          }\n        }\n      }\n      return _toReturn;\n    }\n}\n","import { Inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport { ApiCallParams, ResponseObj } from './core.interface';\nimport { GridResponse } from '../lib/grids/grid.interface';\nimport { ArrayToObjPipe, CustomPluralPipe, GetInitialsPipe, IsNotEmptyPipe, ObjToArrayPipe } from './pipes/eagna.pipe';\nimport { DatePipe, DecimalPipe, formatDate, Location } from '@angular/common';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { deepEqual } from 'ts-deep-equal';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class HelperService {\n  constructor(\n    @Inject(LOCALE_ID) private _locale: string,\n    private _datePipe: DatePipe,\n    private _getInitials: GetInitialsPipe,\n    private _plural: CustomPluralPipe,\n    private _isNotEmpty: IsNotEmptyPipe,\n    private _router: Router,\n    private _objToArray: ObjToArrayPipe,\n    private _arrToObject: ArrayToObjPipe,\n    private _decimal: DecimalPipe,\n    private _location: Location\n  ) {}\n\n  public toggleClass(classes: string | string[], class2: string, mode?: 'add' | 'remove'): string[] | string{\n    const _index = classes.indexOf(class2);\n    const _isExisting = _index >= 0;\n    if(Array.isArray(classes)){\n      if(mode == 'remove'){\n        classes.splice(_index, 1);\n      } else if(mode == 'add'){\n        classes.push(class2);\n      } else if(_isExisting){\n        classes.splice(_index, 1);\n      } else if(!_isExisting){\n        classes.push(class2);\n      }\n    } else{\n      if(mode == 'remove'){\n        classes = classes.replace(class2, '');\n      } else if(mode == 'add'){\n        classes += ' ' + class2;\n      } else if(_isExisting){\n        classes = classes.replace(class2, '');\n      } else if(!_isExisting){\n        classes += ' ' + class2;\n      }\n    }\n    return classes;\n  }\n\n  public arrToObj(arr: any[], byId?: string): {[field: string]: string} | undefined{\n    return this._arrToObject.transform(arr, byId);\n  }\n\n  public objToArray(obj: any): {label: string, value: any}[]{\n    return this._objToArray.transform(obj);\n  }\n\n  public gotoPage(params: {\n    /** if empty, it will reinitialize the current component without page reload */\n    pageName?: string | string[];\n\n    /** e.g. {relativeTo: this.activatedRoute} */\n    extraParams: NavigationExtras;\n\n    /** from Event (PointerEvent) originalEvent?.ctrlKey */\n    newTab?: boolean;\n  }): void {\n    let _loc: string | string[] = (params.pageName || this._location.path());\n    if(!Array.isArray(_loc)){\n      _loc = [_loc];\n    }\n\n    if(this.isNotEmpty(_loc)){\n      if(params.newTab){\n        let _url = this._router.serializeUrl(\n          this._router.createUrlTree(_loc, params.extraParams)\n        );\n        //window.open('#' + _url, '_blank'); //# depends on config if is using fragment (by default yes)\n        window.open(_url, '_blank'); //# depends on config if is using fragment (by default yes)\n      } else{\n        if(params.pageName !== undefined){\n          this._router.navigate(_loc, params.extraParams);\n        } else{\n          this._router.navigate(['/'], {skipLocationChange: true}).then(() => {\n            this._router.navigate((<string[]>_loc), params.extraParams);\n          });\n        }\n      }\n    } else{\n      console.warn('no destination provided upon route change request');\n    }\n  }\n\n  public gotoUrl(pageName: string): void {\n    this._router.navigateByUrl(pageName);\n  }\n\n  public getInitials(value: string){\n    if(value){\n      return this._getInitials.transform(value);\n    }else {\n      return '';\n    }\n    \n  }\n\n  public getNumAndLetterMask(howMany: number, numericOnly = false, withAcceptableChars?: {char: string, includeAlsoFirstAndLast?: boolean}) : any[]{\n    let getRegEx = (index: number) => {\n      let applyChar = withAcceptableChars && (withAcceptableChars.includeAlsoFirstAndLast || (index > 0 && index < howMany-1)); //only in between character (excluding 1st and last)\n\n      let regEx = !applyChar? /[0-9]|[a-z]|[A-Z]/ : new RegExp(`[0-9]|[a-z]|[A-Z]|${withAcceptableChars?.char}`);\n      if(numericOnly){\n        regEx = !applyChar? /[0-9]/ : new RegExp(`[0-9]|${withAcceptableChars?.char}`);\n      }\n      return regEx;\n    }\n\n    let regExs = [];\n\n    for (let i = 0; i < howMany; i++) {\n      regExs.push(getRegEx(i));\n    }\n    return regExs;\n  }\n\n  /* RT: TODO get new library */\n  public decrypt(value: any) {\n    /* let iv  = CryptoJS.enc.Utf8.parse(this._keys);\n    let decrypted = CryptoJS.AES.decrypt(value, this._keys, {\n      keySize: 128 / 8,\n      iv,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    });\n\n    return decrypted.toString(CryptoJS.enc.Utf8); */\n    return \"\";\n  }\n\n  /* RT: TODO get new library */\n  public encrypt(value: any, keys: string){\n    //let key = CryptoJS.enc.Utf8.parse(this._keys);\n    /* let iv = CryptoJS.enc.Utf8.parse(keys);\n    let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(value.toString()), this._keys,\n      {\n        keySize: 128 / 8,\n        iv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n\n    return encrypted.toString(); */\n    return '';\n  }\n\n  \n  public arrayFilterDistinct(toFilter: { arr: any[], byId?: string | string[], mapper?: { field: string, func?: \"sum\" | \"diff\" }[] } = {arr: []}): any[] {\n    if (toFilter.byId) {\n      let byIds = Array.isArray(toFilter.byId) ? toFilter.byId : [toFilter.byId];\n      let filterReturn = toFilter.arr.filter((val, index, self) => {\n        if (val[byIds[0]]) {\n          if (self.findIndex(a => {\n            let _isFound = true;\n            for (let id of byIds) {\n              if(a[id] !== val[id]){\n                _isFound = false;\n                break;\n              }\n            }\n            return _isFound;\n          }) === index) {\n            if (toFilter.mapper) {\n              let aggs: any = {};\n              aggs[byIds[0]] = val[byIds[0]];\n\n              toFilter.mapper.forEach(m => {\n\n                let runAggsToThis = self.filter(f => f[byIds[0]] == val[byIds[0]]);\n                if (runAggsToThis.length > 1) {\n                  aggs[m.field] = runAggsToThis.reduce((total, num) => {\n                    let tot = total[m.field] ? total[m.field] : total;\n                    if (isNaN(tot)) {\n                      tot = 0;\n                    }\n                    switch (m.func) {\n                      case \"diff\": return (tot * 1) - (num[m.field] * 1);\n                      default: return (tot * 1) + (num[m.field] * 1);\n                    }\n                  });\n                } else {\n                  aggs[m.field] = runAggsToThis[0][m.field];\n                }\n              });\n              self[index].aggs = aggs;\n            }\n            return true;\n          }\n          return false;\n        }\n        return self.indexOf(val) === index;\n      });\n\n      if (toFilter.mapper) {\n        return filterReturn.map(f => f.aggs);\n      }\n      return filterReturn;\n\n    } else {\n      return toFilter.arr.filter((val, index, self) => self.indexOf(val) === index);\n    }\n  }\n\n  public arraySortBy(toSort: { arr: any[], byId?: string }): any[] {\n    let sortFunc = (a: any, b: any) => {\n      let x;\n      let y;\n\n      if(toSort.byId){\n        x = a[toSort.byId];\n        y = b[toSort.byId];\n      } else{\n        x = a;\n        y = b;\n      }\n\n      if (x && y) {\n        if (!isNaN((x * 1))) {\n          x = parseFloat(x);\n          y = parseFloat(y);\n        } else {\n          x = x.toLowerCase();\n          y = y.toLowerCase();\n        }\n        if (x < y) {\n          return -1;\n        }\n        if (x > y) {\n          return 1;\n        }\n      } else if(!x){\n        return -1;\n      } else if(!y){\n        return 1;\n      }\n      /* else {\n        return 1;\n      } */\n\n      return 0;\n    };\n\n    return (Array.from(new Set(toSort.arr) || []).sort(sortFunc));\n  }\n\n  public arrayFilter(value: any, key: string, arrayName: any[]){\n    const filterValue = (typeof value != \"object\") ? (value.toString()).toLowerCase() : value;\n    return arrayName.filter(option => {\n      if(option[key] != null){\n        let tempOptKey = option[key].toString();\n        return tempOptKey.toLowerCase().includes(filterValue);\n      }\n    });\n  }\n\n  public dateMask(show: boolean) {\n    return {\n      guide     : true,\n      showMask  : show,\n      mask      : [/\\d/, /\\d/, '/', /\\d/, /\\d/, '/',/\\d/, /\\d/,/\\d/, /\\d/]\n    };\n  }\n\n  public convertUTCDateToLocalDate(date: any, localeFormat?: string) {\n    let lcf         = localeFormat || \"en-GB\";\n    let newDate   = new Date(date);\n    let enDate    = newDate.toLocaleDateString(lcf);\n    return enDate;\n  }\n\n  public transformDate(date: any, format: string, locale?: string) {\n    let whichFormat = format || 'dd/MM/yyyy';\n    let whichLocale = locale || this._locale;\n    return formatDate(date, whichFormat, whichLocale);\n  }\n  \n  public pipeDate(date: any, format: string, locale: string, tz?: string, alreadyDate = false) {\n    //let whichFormat = format || 'dd.MM.yyyy - HH:mm';\n    let whichFormat = format || 'dd/MM/yyyy';\n    let whichLocale = locale || this._locale;\n    if(date != null){\n      try{\n        return this._datePipe.transform(date, whichFormat, tz, whichLocale);\n      } catch(e){}\n      //if not translated then orig logic\n\n      if(typeof(date) == typeof('str')){\n        // date = date.replaceAll('/', '-');\n        date = date.replace(/\\//gi,'-');\n\n        if(alreadyDate){\n          let tempDateTime = date.split(\" \");\n          if(tempDateTime[0]){\n            let tempDate = tempDateTime[0];\n            let tempTime = tempDateTime[1];\n            let switchTempDate = tempDate.split(\"-\");\n            if(switchTempDate){\n              date = switchTempDate[1] + \"-\" + switchTempDate[0] + \"-\" + switchTempDate[2] + (tempTime? \" \" + tempTime : \"\");\n            }\n          }\n        }\n      }\n      try{\n        return this._datePipe.transform(date, whichFormat, tz, whichLocale);\n      } catch(e){\n        console.warn(e);\n        return date;\n      }\n      /* } \n      return date; */\n    }\n    return null;\n  }\n\n  pipeDecimal(num: number, locale: string, digitsInfo?: string): string{\n    let _toReturn = num + '';\n    try{\n      _toReturn = (this._decimal.transform(num, digitsInfo, locale) || _toReturn);\n    }catch(e){}\n\n    return _toReturn;\n  }\n\n  public plural(count: number,  plural: string = 's', singular?: any){\n    const customPlural:any = {plural};\n    if(singular){\n      customPlural.singular = singular;\n    }\n    return this._plural.transform(count, customPlural);\n  }\n\n  public isNotEmpty(value: any): boolean{\n    return this._isNotEmpty.transform(value);\n  }\n\n  public getCircularReplacer(){\n    const seen = new WeakSet();\n        return (key: any, value: any) => {\n            if (typeof value === \"object\" && value !== null) {\n                if (seen.has(value)) {\n                    return;\n                }\n                seen.add(value);\n            }\n            return value;\n        };\n  }\n\n  public toFormControl(formControlTemplate: any, value?: any) {\n    let validators: any[] = [];\n    let asyncValidators: any[] = [];\n\n    if (formControlTemplate && formControlTemplate.required ==true){\n      validators = validators.concat([Validators.required]);\n    }\n    if(formControlTemplate && formControlTemplate.customValidators != null){\n      validators = validators.concat(formControlTemplate.customValidators);\n    }\n    if(formControlTemplate && formControlTemplate.customAsyncValidators != null){\n      asyncValidators = asyncValidators.concat(formControlTemplate.customAsyncValidators);\n    }\n\n    let nfc =  new UntypedFormControl(\n        {\n          value: (value ||\n          ((formControlTemplate && formControlTemplate.value != null)\n              ? formControlTemplate.value\n              : '')),\n          disabled: (formControlTemplate && formControlTemplate.disabled)\n        },\n        validators,\n        asyncValidators\n      )\n\n      return nfc;\n  }\n\n  public toFormGroup(formTemplate: any) {\n    let group: any = {};\n\n    for (var i = 0; i < formTemplate.length; i++) {\n      var field = formTemplate[i];\n      if(field && field.controlType == \"list\"){\n        let fArr;\n        if(field.arrayTemplate && field.arrayTemplate.length>0){\n          //this is for groups in array\n          fArr = field.list.map((fc: any) => {\n            let grpObj: any = {};\n            for (let iterator of field.arrayTemplate) {\n              let validators: any[] = [];\n              let asyncValidators: any[] = [];\n\n              if (iterator.required){\n                validators = validators.concat([Validators.required])\n              }\n              if(iterator.customValidators != null){\n                validators = validators.concat(iterator.customValidators)\n              }\n              if(iterator.customAsyncValidators != null){\n                asyncValidators = asyncValidators.concat(iterator.customAsyncValidators)\n              }\n\n              grpObj[iterator.key] = new UntypedFormControl({value: fc[iterator.key], disabled: (iterator.disabled || false)}, validators, asyncValidators);\n            }\n\n            return new UntypedFormGroup(grpObj);\n          })\n        } else{ //normal array\n          fArr =  field.list ? field.list.map((fc: any) => {\n            let nfc = this.toFormControl(field, fc);\n            return nfc;\n          }) : [];\n        }\n\n        group[field.key] = new UntypedFormArray(fArr);\n      } else{\n        group[field.key] = this.toFormControl(field);\n      }\n    }\n    return new UntypedFormGroup(group);\n  }\n\n  public toFormData( formValue: any, isMultiple = true, ref?: string ): FormData {\n    let formData = new FormData();\n\n    let i=1;\n    for ( let key of Object.keys(formValue) ) {\n      let obj = formValue[key] as any;\n      if(obj){\n        if(obj.type == \"file\"){\n          formData.append(isMultiple? \"file[]\" : \"file_\"+ (i++), obj.file, (ref? ref + \"_\" : \"\") + obj.file.name);\n        } else{\n          if(key == \"file\"){\n            formData.append(\"file\", obj, (ref? ref + \"_\" : \"\") + obj.name);\n          } else{\n            formData.append(key, obj);\n          }\n        }\n      } else{\n        formData.append(key, obj);\n      }\n    }\n    return formData;\n  }\n\n  public fieldValue(p: {[field: string]: any}): any{\n    if(p){\n      return Object.keys(p)?.[0] || '';\n    }\n    return '';\n  }\n  \n  public mergeArrays(destination: any[] = [], source: any[] = [], byId?: string): any[] {\n    let hasNewColumn = false;\n    source.forEach(s => {\n        if((byId && s.hasOwnProperty(byId) && !destination.find(d => d[byId] == s[byId])) || (!byId && !destination.find(d => deepEqual(d, s)))){\n            destination.push(s);\n            hasNewColumn = true;\n        }\n    });\n    return destination;\n}\n\n  public ValidationRules = {\n    inValidIf : (fn: (ctrl: AbstractControl) => boolean, customError: any): ValidatorFn => {\n      return (control: AbstractControl): any => {\n          if(fn(control)){\n              return customError;\n          }\n          return null;\n      }\n    },\n    uniqueInForm: (checkOnlyChanged?: boolean, key?:string, label = \"Serial number\"): ValidatorFn => {\n      return (control: AbstractControl): any => {\n          if(control.parent != null && (!checkOnlyChanged || (checkOnlyChanged && !control.pristine))){\n              let values: any[] = [];\n\n              if(key){\n                  /* (Object.keys(control?.parent?.parent?.controls) as any[]).forEach(pKey => {\n                      values.push(control.parent.parent.controls[pKey].controls[key].value);\n                  }); */\n              } else{\n                  Object.keys(control.parent.controls).forEach(key => {\n                      /* values.push(control.parent.controls[key].value); */\n                  });\n              }\n\n              if(values.filter((x:any)=>{ return !['',null].includes(x) && !['',null].includes(control.value) != null &&  x.toString().toLowerCase() == (control.value || '').toString().toLowerCase()}).length > 1){\n                  return {isDuplicate:{message: label + \" duplicated\"}}\n              }\n          }\n          return null;\n      };\n    }\n  }\n\n  /* public isGridResponse(obj: any): obj is GridResponse{\n    return (obj && obj.hasOwnProperty('data'));\n  } */\n\n  public isResponseObj(obj: any): obj is ResponseObj<any>{\n    return (obj && obj.hasOwnProperty('content'));\n  }\n\n  public isGridResponse(obj: any): obj is GridResponse{\n    return obj && obj.hasOwnProperty(\"results\") && Array.isArray(obj.results) && obj.hasOwnProperty(\"count\") && typeof obj.count == \"number\";\n  }\n\n  private isArrayOf(obj: any[], whichType: any): boolean{\n    return this.isNotEmpty(obj) && (Array.isArray(obj) && obj[0] && typeof obj[0] == whichType);\n  }\n\n  public isArrayOfObject(obj: any): obj is any[]{\n    return this.isArrayOf(obj, \"object\");\n  }\n\n  public isArrayOfString(obj: any): obj is string[]{\n    return this.isArrayOf(obj, \"string\");\n  }\n  public isArrayOfNumber(obj: any): obj is string[]{\n    return this.isArrayOf(obj, \"number\");\n  }\n\n  public isApiCallParams(obj: any): obj is ApiCallParams{\n    return (obj as ApiCallParams).api !== undefined;\n}\n\n  public stripHtml(html: any){\n    // Create a new div element\n    let temporalDivElement = document.createElement(\"div\");\n    // Set the HTML content with the providen\n    temporalDivElement.innerHTML = html;\n    // Retrieve the text property of the element (cross-browser support)\n    return temporalDivElement.textContent || temporalDivElement.innerText || \"\";\n\n    //.replace(/<[^>]*>/g, '')\n  }\n\n  public filterUnique(array: any[], byField?: string) {\n    if(byField){\n      return array.filter((_value: any, _index: number, _arr: any[]) => _arr.findIndex(_eachArr => _eachArr[byField] == _value[byField]) === _index);\n    }\n    return array.filter((_value: any, _index: number, _arr: any[]) => _arr.indexOf(_value) === _index);\n  }\n}\n","import { DatePipe, DecimalPipe, DOCUMENT, FormatWidth, getLocaleDateFormat, getLocaleTimeFormat, Location } from '@angular/common';\nimport { EventEmitter, Inject, Injectable, LOCALE_ID, OnDestroy } from '@angular/core';\nimport { filter, Observable, of, pairwise, startWith, Subject, Subscription, switchMap, } from 'rxjs';\nimport { ApiCallParams, apiMethod, AppPreferences, ConfirmDialogResult, CONFIRM_DIALOG_TYPE, CustomDialogConfig, getLocaleType, /* localeTypeComplex, */ notifColors, ResponseObj, schemeType, snackBarExtraButtons, UserPreferences } from './core.interface';\nimport { SharedService } from './shared.service';\nimport { HelperService } from './helper.service';\nimport { agThemeType, GridResponse } from '../lib/grids/grid.interface';\nimport { Message, MessageService, PrimeNGConfig } from 'primeng/api';\nimport * as WebFont from 'webfontloader';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\n/* import { SideBarService } from '../lib/navigation/side-bar/side-bar.service'; */\nimport { AbstractCoreService } from './abstract-core';\nimport { DefaultLangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { Core } from './core.static';\nimport { HttpClient } from '@angular/common/http';\n\nlet _APP_ID = 1;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CoreService {\n  constructor\n  (\n    @Inject(DOCUMENT) private _document: HTMLDocument,\n    @Inject(LOCALE_ID) private _locale: string,\n    private _sharedService: SharedService,\n    private _helperService: HelperService,\n    private _messageService: MessageService,\n    private _router: Router,\n    private _activatedRoute: ActivatedRoute,\n    /* private _sidebarService: SideBarService, */\n    private _location: Location,\n    private _translate: TranslateService,\n    private _primeConfig: PrimeNGConfig\n  ){\n    this.isDebug = this._sharedService.appConfig.env?.main.isDebug;\n    /* if(!this.isDebug){\n      window.console.log=function(){};\n      window.console.table=function(){};\n      window.console.warn=function(){};\n    } */\n\n    /* const _num = 6.75;\n    const whole = _num - (_num % 1);\n    const modulo = (((_num %1 ) * 10) * 0.1);\n    const by60 = ((((_num %1 ) * 10) * 0.1) * 60) * 0.01;\n    const _sum = whole + modulo;\n    const formatted = this._number.transform(_sum * 100, \"4.0\", \"en\")?.replace(\",\", \"\"); */\n    this._subscriptions.add(this._translate.onDefaultLangChange.subscribe((res: DefaultLangChangeEvent) => {\n      if(this.isDebug){\n        console.log(\"trans\", res);\n      }\n\n      const _ttrans = res?.translations?.['translations'];\n      for (const key in _ttrans) {\n        if (Object.prototype.hasOwnProperty.call(_ttrans, key)) {\n          const element = _ttrans[key];\n          Core._localize[(key || '').toLowerCase()] = (p?) => {\n            try{\n              const _toReturn = element?.(p) || `translations.${key}`;\n              /* console.trace({_toReturn}); */\n              return _toReturn;\n            } catch(e){\n              console.warn('Core Localize', e);\n              return `translations.${key}`;\n            }\n          };\n        }\n      }\n\n      let onDefaultLangChange: 'init' | 'changed' = 'changed';\n      if(!this._listenTranslateOnce){\n        this._listenTranslateOnce = true;\n        onDefaultLangChange = 'init';\n\n        this._primeConfig.setTranslation(Core.setTranslations(this._locale));\n      }\n      this.translationDone$.next(onDefaultLangChange);\n\n      if(this.isDebug){\n        console.log({globalHeader: Core.Localize('globalHeader', {dateToday: new Date()})});\n        console.log({people3: Core.Localize('people', { gender: 'male', how: (Core.Localize('funny')) })});\n        console.log({people4: Core.Localize('nothing', { gender: 'female', how: (Core.Localize('charming')) })});\n        console.log({people5: Core.Localize('people', { gender: 'heshe', how: (Core.Localize('charming')) })});\n      }\n    }));\n\n    this._subscriptions.add(this._router.events.pipe(\n      filter(event => event instanceof NavigationEnd),\n      startWith(null),\n      ).subscribe(() => {\n        /* this._sidebarService.sidebarLoaderId =  ''; */\n        this._sharedService.globalVars = {...this._sharedService.globalVars, breadcrumbs: []};\n        this.createBreadcrumbs(this._activatedRoute.root);\n      }));\n\n    this._subscriptions.add(this._sharedService.appConfig.app$?.subscribe(_app => {\n      _APP_ID = _app.appId;\n    }));\n\n    window.matchMedia('(prefers-color-scheme: light)').addEventListener(\"change\", (e) => {\n      if(this._scheme == 'auto' && e.matches){\n        this.setDarkMode('auto');\n      }\n    });\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener(\"change\", (e) => {\n      if(this._scheme == 'auto' && e.matches){\n        this.setDarkMode('auto');\n      }\n    });\n  }\n  public isDebug = false;\n  private _appName = this._sharedService.appConfig?.appName || 'no-app';\n  private _subscriptions = new Subscription();\n  private _listenTranslateOnce = false;\n  public isLoading = false;\n  public translationDone$ = new Subject<'init' | 'changed'>();\n  /* private _isLocalizeComplex(obj: getLocaleType): obj is localeTypeComplex{\n    return typeof obj == \"object\" && obj.hasOwnProperty('value');\n  } */\n\n  private _scheme: schemeType | undefined;\n\n  private _isDarkMode!: boolean;\n\n  public get isDarkMode(): boolean {\n    if(this._scheme == 'auto'){\n      if(window.matchMedia('(prefers-color-scheme: light)').matches){\n        return false;\n      } else if(window.matchMedia('(prefers-color-scheme: dark)').matches){\n        return true;\n      }\n    }\n    return this._scheme == 'dark';\n  }\n\n  public setDarkMode(scheme: schemeType, _abstractCore?: AbstractCoreService) {\n    this._scheme = scheme;\n\n    if(this._sharedService.userPref){\n      const _userPref = (this._sharedService.userPref[this._appName] || {});\n      let _apiMethod: apiMethod = \"patch\";\n      let _appToUpdate = _userPref?.app?.find(_app => _app.appId == _APP_ID);\n\n      if(_appToUpdate){\n        _appToUpdate.ui_theme = scheme;\n      } else {\n        _apiMethod = \"put\";\n        _appToUpdate = <AppPreferences>{appId: _APP_ID, ui_theme: scheme};\n      }\n\n      this._document.body.setAttribute(\"class\", (this.isDarkMode ? \"dark\" : \"light\"));\n      this._sharedService.userPref$?.next({..._userPref, changeType: {type: 'darkMode'}});\n\n      if(_abstractCore){\n        try{\n          this._subscriptions.add(_abstractCore.userPreferences(_userPref, 'darkMode', _apiMethod, _appToUpdate).subscribe({next: result => {\n            //am4core.useTheme(isDarkMode ? this._eagnaTheme.am4themes_darkTheme : this._eagnaTheme.am4themes_lightTheme);\n            if(result.status.status_code == 200){\n            }\n          }, error: (err) => {\n            console.warn('update userPreferences error', err);\n          }\n        }));\n        } catch(e){\n          console.warn('update userPreferences error', e);\n        }\n      }\n    }\n  }\n\n  public setLocale(locale: string, _abstractCore?: AbstractCoreService){\n    const _locale = locale == \"tl\" ? \"pt-TL\" : locale\n    if(this._sharedService.userPref){\n      const _userPref = (this._sharedService.userPref[this._appName] || {});\n      _userPref.locale = _locale;\n      this._sharedService.userPref$?.next({..._userPref, changeType: {type: 'locale'}});\n      this._translate.setDefaultLang(_locale);\n\n      if(_abstractCore){\n        try{\n          this._subscriptions.add(_abstractCore.userPreferences(_userPref, 'locale', \"patch\").subscribe({next: result => {\n            const _loc = this._location.path();\n            if(result.status.status_code == 200 || result.status.status_code == 201){\n               if(this._helperService.isNotEmpty(_loc)){\n                this._router.navigate(['/'], {skipLocationChange: true}).then(() => {\n                  this._router.navigate([_loc]);\n                });\n               } else{\n                //window.location.reload();\n                this._router.navigate(['/']);\n               }\n            }\n          }, error: (err) => {\n            this._messageService.add({data: err, detail: \"Error updating language\", severity: \"error\"});\n            console.warn('update userPreferences error', err);\n          }\n        }));\n        } catch(e){\n          this._messageService.add({data: e, detail: \"Error updating language\", severity: \"error\"});\n          console.warn('update userPreferences error', e);\n        }\n\n        /* For translation, a refresh is necessary  */\n        window.location.reload();\n      }\n    }\n  }\n\n  public refreshPage(loc?: Location){\n    const _loc = (loc || this._location)?.path();\n    if(this._helperService.isNotEmpty(_loc) && this._router){\n      this._router.navigate(['/'], {skipLocationChange: true}).then(() => {\n        this._router.navigate([_loc]);\n      });\n    }\n  }\n\n  public setAgTheme(theme: agThemeType, _abstractCore?: AbstractCoreService){ //TODO call in the beginning to set default\n    if(theme != undefined && this._sharedService.userPref){\n      const _userPref = (this._sharedService.userPref[this._appName] || {});\n\n      for (const key in _userPref.grid) { //TODO: not necessary, when ['all'] in gridTheme is implemented\n        if (Object.prototype.hasOwnProperty.call(_userPref.grid, key)) {\n          if(_userPref.grid[key]){\n            _userPref.grid[key].theme = theme;\n          }\n        }\n      }\n\n      this._sharedService.userPref$?.next({..._userPref, changeType: {type: \"gridTheme\", value: theme}});\n      if(_abstractCore){\n        try{\n          this._subscriptions.add(_abstractCore.userPreferences(_userPref, \"gridTheme\", \"patch\", {gridId: 'all'}).subscribe({next: result => {\n            if(result.status.status_code == 200){ }\n          }, error: (err) => {\n            console.warn('update userPreferences error', err);\n          }\n          }));\n        } catch(e){\n          console.warn('update userPreferences error', e);\n        }\n      }\n    }\n  }\n\n  public loadFonts(){\n    WebFont.load({\n      google: {\n          families: ['Material Icons:100,300,400,500,700,900', 'Urbanist:100,300,400,500,700,900', 'Roboto Condensed:100,300,400,500,700,900', 'Roboto Mono:100,300,400,500,700,900', 'Roboto:100,300,400,500,700,900'],\n      },\n      loading :() => {\n        this.isLoading = true\n      },\n      active :() => {\n        this.isLoading = false;\n      },\n      inactive :() => {\n      },\n    });\n  }\n\n  public get fetchErrorCodes(){\n      let classes = [\n          { error_code: \"400\", status: \"400\", icon: \"pi pi-exclamation-triangle\", name: \"Bad Request\", message: \"The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, size too large, invalid request message framing, or deceptive request routing)\"},\n          { error_code: \"401\", status: \"401\", icon: \"pi pi-lock\", name: Core.Localize('unauthorized'), message: Core.Localize('unauthorizedDetails')},\n          { error_code: \"403\", status: \"403\", icon: \"pi pi-ban\", name: \"Forbidden\", message: \"The request contained valid data and was understood by the server, but the server is refusing action. This may be due to the user not having the necessary permissions for a resource or needing an account of some sort, or attempting a prohibited action (e.g. creating a duplicate record where only one is allowed)\"},\n          { error_code: \"404\", status: \"404\", icon: \"\", name: \"Not Found\", message: \"The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.\"},\n          { error_code: \"405\", status: \"405\", icon: \"do_not_disturb\", name: \"Method Not Allowed\", message: \"A request method is not supported for the requested resource; for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.\"},\n          { error_code: \"418\", status: \"418\", icon: \"assignment\", name: \"I'm a teapot\", message: \"This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by teapots requested to brew coffee.\"},\n          { error_code: \"500\", status: \"500\", icon: \"error\", name: \"Internal Server Error\", message: \"A generic error message, given when an unexpected condition was encountered and no more specific message is suitable\"},\n          { error_code: \"501\", status: \"501\", icon: \"warning_amber\", name: \"Not Implemented\", message: \"The server either does not recognize the request method, or it lacks the ability to fulfil the request. Usually this implies future availability (e.g., a new feature of a web-service API).\"},\n          { error_code: \"502\", status: \"502\", icon: \"fence\", name: \"Bad Gateway\", message: \"The server was acting as a gateway or proxy and received an invalid response from the upstream server.\"},\n          { error_code: \"503\", status: \"503\", icon: \"event_busy\", name: \"Service Unavailable\", message: \"The server cannot handle the request (because it is overloaded or down for maintenance). Generally, this is a temporary state\"},\n          { error_code: \"504\", status: \"504\", icon: \"pi pi-clock\", name: \"Gateway Timeout\", message: \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\"},\n      ];\n      let temp :any = {};\n      classes.forEach(element => {\n          temp[element.error_code] = element;\n      })\n      return temp;\n  }\n\n  public setAndGetUserPreferences(_abstractCore: AbstractCoreService, refresh?: boolean, sharedUserPref?: {[appProjectName: string]: UserPreferences } ): Observable<UserPreferences> {\n    const _defaultUserPref = SharedService.defaultUserPref;\n    if(sharedUserPref){\n      if (!sharedUserPref[this._appName] || Object.keys(sharedUserPref[this._appName]).length == 0 || refresh) {\n        try{\n          if(_abstractCore){\n            return _abstractCore.userPreferences({app_name: this._appName}, undefined, \"get\").pipe(switchMap(value => {\n              return of(value.content || _defaultUserPref);\n            }));\n          } else{\n            console.warn(\"getUserPref() not implemented\");\n            return of(_defaultUserPref);\n          }\n        } catch(e: any){\n          console.warn(\"getUserPref() error\", e);\n        }\n      }\n      return of(sharedUserPref[this._appName] || _defaultUserPref);\n    }\n    return of(_defaultUserPref);\n  }\n\n  public getLocaleFormat(_dateFormatWidth?: FormatWidth, _timeFormatWidth?: FormatWidth) : {_locale: string, _dateDelimeter: string, _dateFormat: string, _timeFormat: string} {\n    let _toReturn = {\n        _dateDelimeter: SharedService.defaultLocaleConf.dateDelimeter,\n        _dateFormat: SharedService.defaultLocaleConf.dateFormat,\n        _timeFormat: SharedService.defaultLocaleConf.timeFormat,\n        _locale: SharedService.defaultLocaleConf.locale,\n    };\n    if(this._sharedService.userPref){\n        //const _appConfigName = this._sharedService.appConfig?.appName || 'no-app';\n        //console.log({injectedLocale: this._locale, sharedLocale: SharedService.getSavedLocale(this._sharedService.appConfig.env?.main.locale), defaultLocale: SharedService.defaultLocaleConf.locale});\n        const _locale = SharedService.getSavedLocale(this._sharedService.appConfig.env?.main.locale) || this._locale || SharedService.defaultLocaleConf.locale;\n        //console.log(_locale);\n\n        const _dateDelimeter = getLocaleDateFormat(_locale, FormatWidth.Short).includes(\"/\") ? \"/\" : \".\";\n        const _dateFormat = _dateDelimeter == \".\" ? getLocaleDateFormat(_locale, (_dateFormatWidth !== undefined ? _dateFormatWidth : FormatWidth.Medium)) : SharedService.defaultDateFormatEn;\n        const _timeFormat = getLocaleTimeFormat(_locale, (_timeFormatWidth !== undefined ? _timeFormatWidth : (_dateFormatWidth !== undefined ? _dateFormatWidth : FormatWidth.Medium)));\n        _toReturn = {\n            _dateDelimeter,\n            _dateFormat,\n            _locale,\n            _timeFormat\n        };\n    }\n    return _toReturn;\n}\n\n  public createBreadcrumbs(route: ActivatedRoute) {\n    this._sharedService.globalVars.breadcrumbs = [];\n    this._sharedService.globalVars.url = '';\n    const _recur = (route: ActivatedRoute, url: string = \"#\") => {\n      const children: ActivatedRoute[] = route.children;\n      const _toReturn = new Subject();\n\n      /* if (children.length === 0) {\n        ;\n      } */\n\n      for (const child of children) {\n        const routeURL: string = child.snapshot.url.map(segment => segment.path).join(\"/\");\n        if (routeURL !== \"\") {\n          url += `/${routeURL}`;\n          this._sharedService.globalVars.url = url;\n        }\n        let label = '';\n        if (child.snapshot.data.hasOwnProperty('title') && (this._sharedService.globalVars.breadcrumbs.length == 0 || (this._sharedService.globalVars.breadcrumbs[this._sharedService.globalVars.breadcrumbs.length-1] || {}).label != child.snapshot.data['title'])) {\n          label = child.snapshot.data[\"title\"] || '';\n        } else {\n          label = routeURL || '';\n        }\n\n        /* if(child.snapshot.data.hasOwnProperty('sidebarLoaderId') && child.snapshot.data['sidebarLoaderId']){\n          this._sidebarService.sidebarLoaderId = child.snapshot.data['sidebarLoaderId'];\n        } */\n\n        if(this._helperService.isNotEmpty(label)){\n          if(label.startsWith(\"titles.\")){\n            const _pluralCount = child.snapshot.data[\"pluralCount\"] || 1;\n            const _item = child.snapshot.data[\"item\"] || '';\n            try { //TODO do for translations first\n              this._subscriptions.add(this._translate.get(label, {count: _pluralCount, item: _item}).subscribe((res: string) => {\n                //if(`{${label}}` != routeURL){\n                  this._sharedService.globalVars.breadcrumbs.push({label: (res ? res : label), routerLink: (url.slice(1) || '/') });\n                //}\n                _recur(child, url);\n              }));\n            } catch (error) {\n              console.warn('problem in translation',error);\n            }\n          } else{\n            this._sharedService.globalVars.breadcrumbs.push({label, routerLink: (url.slice(1) || '/') });\n            _recur(child, url);\n          }\n        } else{\n          _recur(child, url);\n        }\n      }\n    }\n\n    _recur(route);\n  }\n\n  /**\n   * DOWNLOAD\n   * @param s\n   * @returns\n   */\n   private _s2ab(s: any) {\n    let buf   = new ArrayBuffer(s.length);\n    let view  = new Uint8Array(buf);\n\n    for (let i = 0; i != s.length; ++i)\n    {\n      view[i] = s.charCodeAt(i) & 0xFF;\n    }\n    return buf;\n  }\n\n  /**\n   * DOWNLOAD\n   * @param res\n   * @param file_type\n   */\n  public  downloadFile(res: any, file_type?: any) { /* : Response */\n  this._messageService.clear()\n    if(res && res.file && res.filename){\n      let fNameChunks = res.filename.split(\".\");\n      let ext = fNameChunks[fNameChunks.length-1]\n      fNameChunks.pop();\n      let filename = fNameChunks.join('_') + Date.now().toString() + \".\" + ext;\n      let blob = new Blob([this._s2ab(atob(res.file))]);\n      /* this.notification(\"File generated.\",'success'); */\n      this._messageService.add({detail: \"File generated\", severity: \"success\"});\n      /* saveAs(blob, filename); */\n    } else {\n      /* this.notification( {message: \"No file(s) found from the database. Please contact the system administrators.\"}, \"warn\"); */\n      this._messageService.add({detail: \"No file(s) found from the database. Please contact the system administrators.\", severity: \"warn\"});\n    }\n  }\n}\n\n@Injectable({providedIn: 'root'}) //Singletonization\nexport class ApiCallService {\n    constructor(\n      private _messageService: MessageService,\n      private _eagnaListner: EagnaListener,\n      private _helper: HelperService,\n      private _http: HttpClient,\n      ) { }\n\n    private _caller: Subscription | undefined;\n\n    execute(apiCallParams: ApiCallParams | undefined, requireToken?: boolean, p?: any, pipeMapForGrid = false, nextPage=false/* , loaderObject?: any *//* , l?: Observable<any> */): Promise<{[key: string]: any, p?: any}> { //(e.g. p is gridParams) /* loaderId?: string, */\n      return new Promise((resolve, reject) => {\n        if (!this._caller) { this._caller = new Subscription(); }\n        let callSucceeded = false;\n\n        //let apiCall: Observable<any> | undefined = l;\n        let apiCall: Observable<any> | undefined;\n\n        /* if(!l){ */\n        if(nextPage &&  apiCallParams?.next){ // p.api?.paginationGetCurrentPage() > 0 &&\n          apiCall = <Observable<any>>this._http?.post(apiCallParams?.next, apiCallParams.params);\n        } else{\n          apiCall = apiCallParams?.api(apiCallParams.params, \"post\", apiCallParams?.next);\n        }\n        /* } */\n\n        /* loaderObject = {loader: {\n          key: 'agGrid',\n          value: apiCall\n        }};\n\n        console.log({loaderObject}); */\n\n        if(pipeMapForGrid){\n          const mapGridResponse = (res: GridResponse): GridResponse => {\n            if(!res?.page && res?.results?.length > 0){\n              res.page = {total: (res.results.length || 0), page: 1, page_size: 1};\n            }\n            if(!res?.total && res?.results?.length > 0){\n              res.total = (res.results.length || 0);\n            }\n            return res;\n          }\n\n          apiCall = apiCall?.pipe(switchMap((result: ResponseObj<any>): Observable<GridResponse> => {\n            if(this._helper.isResponseObj(result)){\n              return of(mapGridResponse(<GridResponse>result.content || {}));\n            } else if(this._helper.isGridResponse(result)){\n              return of(mapGridResponse(<GridResponse>(result || {})));\n            }\n          return of(mapGridResponse(<GridResponse>(result || {})));\n          }));\n        }\n        try {\n          this._caller.add(apiCall?.subscribe({next: result => {\n            if (requireToken) {\n              this._messageService.add({detail: \"Token sent.\", severity: \"success\"});\n\n              if(apiCallParams?.callback){\n                apiCallParams?.callback({ tokenSent: true }, p);\n              }\n              /* RT: eagna TODO: timer value + resendFn */\n              this._eagnaListner.customDialogOpened$.emit( {\n                  visible: true,\n                  position: 'center',\n                  content: `You have requested an operation that requires e-mail verification. An email has been sent to your account.\\nPlease provide the token in the field below: `,\n                  dialogType: CONFIRM_DIALOG_TYPE.TOKEN,\n                  header: `Email Verification`,\n                  onConfirm: (tokenDialogResult: ConfirmDialogResult) => {\n                    if(tokenDialogResult.isConfirmed){\n                      if (!this._caller) { this._caller = new Subscription(); }\n\n                      this._caller.add(apiCallParams?.api({ ...apiCallParams.params, token: tokenDialogResult.token })\n                      .pipe(switchMap((result: ResponseObj<any>): Observable<any> => {\n                        if(pipeMapForGrid){\n                          if(this._helper.isResponseObj(result)){\n                            return of(<GridResponse>result.content || {});;\n                          } else if(this._helper.isGridResponse(result)){\n                            return of((result || {}) as GridResponse);\n                          }\n                        }\n                        return of(result);\n                      }))\n                      .subscribe({next: tokenSubmittedResult => {\n                        resolve({tokenSubmittedResult, p});\n                        if (apiCallParams.callback) {\n                            apiCallParams.callback(tokenSubmittedResult, p);\n                        }\n                      }, error: e => {\n                          if (apiCallParams.failCallback) {\n                            reject({e, p});\n                            apiCallParams.failCallback(e, p);\n                            if (apiCallParams.executeAfterFailCallback) {\n                                apiCallParams.executeAfterFailCallback(e, p);\n                            }\n                        }\n                      }}));\n                    }\n                  },\n                  onCancel: (cancelData: any) => {\n                  }\n              });\n            } else {\n                if (apiCallParams?.callback) {\n                    resolve({result, p});\n                    apiCallParams.callback(result, p);\n                }\n            }\n            callSucceeded = true;\n          }, error: (e) => {\n            if (apiCallParams?.failCallback) {\n                apiCallParams.failCallback(e, p);\n                reject({e, p});\n                if (apiCallParams?.executeAfterFailCallback) {\n                    apiCallParams.executeAfterFailCallback(e, p);\n                }\n            }\n          }}));\n        } catch (error) {\n          if (apiCallParams?.failCallback) {\n              apiCallParams.failCallback(error, p);\n              reject({error, p});\n              if (apiCallParams.executeAfterFailCallback) {\n                  apiCallParams.executeAfterFailCallback(error, p);\n              }\n          }\n        }\n\n        if(callSucceeded && apiCallParams?.finally){\n            apiCallParams.finally(p);\n        }\n\n      });\n    }\n\n    kill() {\n        if (this._caller) { this._caller.unsubscribe(); }\n    }\n}\n\n@Injectable({providedIn: 'root'})\nexport class EagnaListener{\n  constructor(){}\n\n  /* public sideBarComponentLoader$ = new EventEmitter<SideBarLoaderParams<any>>(); */\n  public authLogout$ = new EventEmitter<boolean>();\n  public customDialogOpened$ = new EventEmitter<CustomDialogConfig>();\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { CoreService } from '../../core.service';\nimport { Location } from '@angular/common';\n\n\n@Component({\n  selector: 'eag-error',\n  templateUrl: './error.component.html',\n  styleUrls: ['./error.component.css']\n})\nexport class ErrorComponent implements OnInit {\n  constructor(private location: Location, \n    private _coreService: CoreService) { }\n\n  gotoPrev() {\n    this.location.back();\n  }\n\n  @Input() errorMessage   : any;\n  public error            : any;\n\n  ngOnInit(): void {\n    const err = this.errorMessage;\n    this.error = this._coreService.fetchErrorCodes?.[err?.status];\n\n  }\n\n}\n","<div class=\"center mat-typography flex-column\">\n    <div class=\"errorContainer\" *ngIf=\"error\">\n        <!-- <div class=\"p-y-16\">\n            <i [class]=\"error.icon\" class=\"font-rr-secondary wh-80\"></i>\n        </div> -->\n        <h1 class=\"p-y-8 fw-500\" [innerHTML]=\"error.error_code + ' - ' + error.name\"></h1>\n        <p class=\"fs-16 font-rr-grey4 fw-400 lh-24\"[innerHTML]=\"error.message\"></p>\n    </div>\n    <ng-content></ng-content>\n\n    <div class=\"m-2\">\n        <a style=\"color: -webkit-link\" class=\"underline cursor-pointer\" (click)=\"gotoPrev()\">Back</a> | <a routerLink=\"/\">Home</a> |  <a routerLink=\"/login\">Log-in</a> | <a routerLink=\"/logout\">Log-out</a>\n    </div>\n</div>","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Subscription, Observable, throwError } from \"rxjs\";\nimport { distinctUntilChanged, debounceTime, take, catchError } from \"rxjs/operators\";\n\nexport type Key = string | object | symbol;\n\nexport interface IGetLoadingOptions {\n  /** Which loading \"thing\" do you want to track? */\n  key?: Key;\n}\n\nexport interface IAddLoadingOptions {\n  /** Used to track the loading of different things */\n  key?: Key | Key[];\n  /**\n   * The first time you call IsLoadingService#add() with\n   * the \"unique\" option, it's the same as without it.\n   * The second time you call add() with the \"unique\" option,\n   * the IsLoadingService will see if\n   * an active loading indicator with the same \"unique\" ID\n   * already exists.\n   * If it does, it will remove that indicator and replace\n   * it with this one (ensuring that calling add() with a\n   * unique key multiple times in a row only adds a single\n   * loading indicator to the stack). Example:\n   *\n   * ```ts\n   * this.isLoadingService.isLoading(); // false\n   * this.isLoadingService.add({ unique: 'test' });\n   * this.isLoadingService.add({ unique: 'test' });\n   * this.isLoadingService.isLoading(); // true\n   * this.isLoadingService.remove();\n   * this.isLoadingService.isLoading(); // false\n   * ```\n   */\n  unique?: Key;\n}\n\nexport interface IRemoveLoadingOptions {\n  key?: Key | Key[];\n}\n\nclass LoadingToken<T> {\n  constructor(private value: T, private unique?: Key) { }\n\n  isSame(a: unknown, unique?: Key): boolean {\n    if (a === this.value) return true;\n    if (this.unique && unique && this.unique === unique) return true;\n    return false;\n  }\n}\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class LoadingService {\n  protected defaultKey = \"default\";\n  public errorMessage: any;\n  // provides an observable indicating if a particular key is loading\n  private loadingSubjects = new Map<Key, BehaviorSubject<boolean>>();\n  public isSetLoading$ = new BehaviorSubject<boolean>(false);\n\n  // tracks how many \"things\" are loading for each key\n  private loadingStacks = new Map<\n    Key,\n    LoadingToken<true | Subscription | Promise<unknown>>[]\n  >();\n\n  // tracks which keys are being watched so that unused keys\n  // can be deleted/garbage collected.\n  private loadingKeyIndex = new Map<Key, number>();\n\n  constructor() { }\n\n  isLoading$(args: IGetLoadingOptions = {}): Observable<boolean> {\n    const keys = this.normalizeKeys(args.key);\n\n    return new Observable<boolean>((observer) => {\n      // this function will called each time this\n      // Observable is subscribed to.\n      this.indexKeys(keys);\n\n      const subscription = this.loadingSubjects\n        .get(keys[0])!\n        .pipe(distinctUntilChanged(), debounceTime(10), distinctUntilChanged(), catchError(error => {\n          return throwError(error);     //return from(['A','B','C'])\n        }))\n        .subscribe(observer);\n\n      // the return value is the teardown function,\n      // which will be invoked when the new\n      // Observable is unsubscribed from.\n      return () => {\n        subscription.unsubscribe();\n        keys.forEach((key) => this.deIndexKey(key));\n      };\n    });\n  }\n\n  /**\n   * Same as `isLoading$()` except a boolean is returned,\n   * rather than an observable.\n   *\n   * @param args.key optionally specify the key to check\n   */\n  isLoading(args: IGetLoadingOptions = {}): boolean {\n    const key = this.normalizeKeys(args.key)[0];\n    const obs = this.loadingSubjects.get(key);\n\n    return (obs && obs.value) || false;\n  }\n\n  setLoading(observable: Observable<any>, key: any) {\n    const tempKey = (key) ? key : \"__static__\";\n    if (observable !== undefined) {\n      this.add(observable, { key: tempKey });\n\n      observable.subscribe(\n        res => { },\n        err => { this.remove({ key: tempKey }, undefined, 'temp'); this.errorMessage = err; },\n        () => this.remove({ key: tempKey })\n      );\n    }\n\n  }\n\n  add(): void;\n  add(options: IAddLoadingOptions): void;\n  add<T extends Subscription | Promise<unknown> | Observable<unknown>>(\n    sub: T,\n    options?: IAddLoadingOptions\n  ): T;\n  add(\n    a?: Subscription | Promise<unknown> | IAddLoadingOptions,\n    b?: IAddLoadingOptions\n  ) {\n    let options = b;\n    let sub: Subscription | Promise<unknown> | undefined;\n    const teardown = () => this.remove(sub!, options);\n\n    if (a instanceof Subscription) {\n      sub = a;\n\n      if (sub.closed) return a;\n\n      sub.add(teardown);\n    } else if (a instanceof Promise) {\n      sub = a;\n\n      // If the promise is already resolved, this executes syncronously\n      sub.then(teardown, teardown);\n    } else if (a instanceof Observable) {\n      sub = a.pipe(take(1)).subscribe();\n\n      if (sub.closed) return a;\n\n      sub.add(teardown);\n    } else if (a) {\n      options = a;\n    }\n\n    const keys = this.normalizeKeys(options?.key);\n\n    this.indexKeys(keys);\n\n    for (const key of keys) {\n      const loadingStack = this.loadingStacks.get(key)!;\n\n      // if the \"unique\" option is present, remove any existing\n      // loading idicators with the same \"unique\" value\n      if (options?.unique) {\n        const index = loadingStack.findIndex((t) =>\n          t.isSame(sub || true, options?.unique)\n        );\n\n        if (index >= 0) {\n          loadingStack.splice(index, 1);\n        }\n      }\n\n      loadingStack.push(new LoadingToken(sub || true, options?.unique));\n\n      this.updateLoadingStatus(key);\n    }\n\n    return a instanceof Observable ? a : sub;\n  }\n\n  /*  remove(): void;\n     remove(options: IRemoveLoadingOptions, param?): void;\n    remove(\n      sub: Subscription | Promise<unknown>,\n      options?: IRemoveLoadingOptions\n    ): void; */\n  remove(\n    a?: Subscription | Promise<unknown> | IRemoveLoadingOptions,\n    b?: IRemoveLoadingOptions,\n    param?: any\n  ) {\n    let options = b;\n    let sub: Subscription | Promise<unknown> | undefined;\n\n    if (a instanceof Subscription) {\n      sub = a;\n    } else if (a instanceof Promise) {\n      sub = a;\n    } else if (a) {\n      options = a;\n    }\n\n    const keys = this.normalizeKeys(options?.key);\n\n    for (const key of keys) {\n      const loadingStack = this.loadingStacks.get(key);\n\n      // !loadingStack means that a user has called remove() needlessly\n      if (!loadingStack) return;\n\n      const index = loadingStack.findIndex((t) => t.isSame(sub || true));\n\n      this._updateLoadingStatus(key, param);\n\n      if (index >= 0) {\n        loadingStack.splice(index, 1);\n\n        this.deIndexKey(key);\n      }\n    }\n  }\n\n\n\n  private normalizeKeys(key?: Key | Key[]): Key[] {\n    if (!key) key = [this.defaultKey];\n    else if (!Array.isArray(key)) key = [key];\n    return key as Key[];\n  }\n\n  private indexKeys(keys: Key[]) {\n    for (const key of keys) {\n      if (this.loadingKeyIndex.has(key)) {\n        const curr = this.loadingKeyIndex.get(key)!;\n        this.loadingKeyIndex.set(key, curr + 1);\n      } else {\n        const subject = new BehaviorSubject(false);\n\n        this.loadingKeyIndex.set(key, 1);\n        this.loadingSubjects.set(key, subject);\n        this.loadingStacks.set(key, []);\n      }\n    }\n  }\n\n  private deIndexKey(key: Key) {\n    const curr = this.loadingKeyIndex.get(key)!;\n\n    if (curr === 1) {\n      this.loadingKeyIndex.delete(key);\n      this.loadingSubjects.delete(key);\n      this.loadingStacks.delete(key);\n    } else {\n      this.loadingKeyIndex.set(key, curr - 1);\n    }\n  }\n\n  private updateLoadingStatus(key: Key) {\n    const loadingStatus = this.loadingStacks.get(key)!.length > 0;\n\n    this.loadingSubjects.get(key)!.next(loadingStatus);\n  }\n\n  private _updateLoadingStatus(key: Key, param?: any) {\n\n    const loadingStatus = this.loadingStacks.get(key)!.length > 0;\n    const tempStatus = (param == 'temp') ? null : loadingStatus;\n    this.loadingSubjects.get(key)!.next(Boolean(tempStatus));\n  }\n}\n\n","import { Directive, Input, ComponentFactory, ComponentRef, TemplateRef, ViewContainerRef, ComponentFactoryResolver, Inject, ViewChild, SimpleChanges, OnChanges, OnDestroy, AfterViewInit } from \"@angular/core\";\n\nimport { Subscription, Observable } from \"rxjs\";\n\nimport { catchError } from \"rxjs/operators\";\n\nimport { LoadingService } from \"./loading.service\";\nimport { LoadingComponent } from \"./loading.component\";\nimport { ErrorComponent } from \"../error/error.component\";\n\n  @Directive({\n    selector: '[apploading]'\n  })\n  export class LoadingDirective implements AfterViewInit, OnDestroy {\n\n    public loadingComponent : ComponentRef<LoadingComponent> | undefined;\n    public errorComponent   : ComponentRef<ErrorComponent> | undefined;\n\n    private _inputValue : any;\n    private _subscription = new Subscription();\n    loadingFactory: any;\n    errorFactory: any;\n\n    constructor ( private _isLoadingService: LoadingService,\n      private templateRef: TemplateRef<any>,\n      private vcRef: ViewContainerRef,\n      private componentFactoryResolver: ComponentFactoryResolver){\n        this.loadingFactory = this.componentFactoryResolver.resolveComponentFactory(LoadingComponent);\n        this.errorFactory   = this.componentFactoryResolver.resolveComponentFactory(ErrorComponent);\n      }\n\n    @Input() refId = '';\n\n    @Input() set apploading(value: unknown) {\n      this._inputValue = value;\n\n      if (typeof this._inputValue === 'boolean')\n      {\n        this.vcRef.clear();\n        this._directiveLoader(this._inputValue);\n      }\n      else if (typeof this._inputValue === 'object')\n      {\n        if(this._inputValue instanceof Observable)\n        {\n          this._isLoadingService?.setLoading(this._inputValue, '__static__');\n          this._subscription.add(this._isLoadingService?.isLoading$({key: '__static__'}).subscribe({\n            next: (res) =>  {\n                        this.vcRef.clear();\n                        this._directiveLoader(res);\n                      },\n            error: (error) =>  {\n                        this.vcRef.clear();\n                      }\n          }));\n        } else if(this._inputValue?.value === true){\n          this.vcRef.clear();\n          this._directiveLoader(this._inputValue?.value);\n        } else {\n          this._isLoadingService.setLoading(this._inputValue?.value, this._inputValue?.key);\n          this._subscription.add(this._isLoadingService.isLoading$({key: this._inputValue?.key}).subscribe({\n            next: (res: any)   =>  {\n                        this.vcRef.clear();\n                        this._directiveLoader(res);\n                      },\n            error: (err) =>  {\n                        catchError(err);\n                        this._directiveLoader(null);\n\n                      }}\n          ));\n        }\n      }\n    }\n\n    private _directiveLoader(loading:any){\n      //console.trace({loading});\n      switch(loading){\n        case true:\n            //console.trace(\"true\", {_directiveLoader: loading});\n            this.loadingComponent = this.vcRef.createComponent(this.loadingFactory);\n            if(typeof this._inputValue !== 'boolean')\n            {\n              this.loadingComponent.instance.message = (!(\"message\" in this._inputValue))? this.loadingComponent.instance.message: this._inputValue?.message;\n              this.loadingComponent.instance.style = (!(\"style\" in this._inputValue))? this.loadingComponent.instance.style: this._inputValue?.style;\n              this.loadingComponent.instance.type = (!(\"type\" in this._inputValue))? this.loadingComponent.instance.type: this._inputValue?.type;\n              this.loadingComponent.instance.image = (!(\"image\" in this._inputValue))? \"assets/img/eg_rd_black.png\": this._inputValue?.image;\n            }\n          break;\n        case null:\n        case false:\n            //console.trace(\"null false\", {_directiveLoader: loading, inputValue: this._inputValue});\n            if(loading === false){\n              if(typeof this._inputValue !== 'boolean'){\n                if(this._isLoadingService.errorMessage){\n                  //setTimeout(() => {\n                    if(!this.refId || this.refId == this._inputValue?.key){\n                      this.errorComponent = this.vcRef.createComponent(this.errorFactory);\n                      this.errorComponent.instance.errorMessage = this._isLoadingService.errorMessage;\n                    }\n                  //})\n                } else{\n                  this.vcRef.createEmbeddedView(this.templateRef);\n                }\n              } else {\n                this.vcRef.createEmbeddedView(this.templateRef);\n              }\n            } else {\n              this.errorComponent = this.vcRef.createComponent(this.errorFactory);\n              if(typeof this._inputValue !== 'boolean')\n              {\n                this.errorComponent.instance.errorMessage = this._isLoadingService.errorMessage;\n              }\n            }\n          break;\n        default:\n          //console.trace(\"default\", {_directiveLoader: loading});\n          this.vcRef.createEmbeddedView(this.templateRef);\n          break;\n      }\n    }\n\n    ngOnDestroy(): void {\n      this._subscription?.unsubscribe();\n    }\n\n    ngAfterViewInit(): void {\n    }\n  }\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\n\nexport const APP_ANGULAR_MODULE = [\n\tFormsModule,\n\tCommonModule,\n\tHttpClientModule\n]\n\nimport { SharedModule, Header, Footer, MessageService } from 'primeng/api';\nimport { TableModule } from 'primeng/table';\nimport { Dialog, DialogModule } from 'primeng/dialog';\nimport { ConfirmDialog, ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { MenubarModule } from 'primeng/menubar';\nimport { ButtonModule } from 'primeng/button';\nimport { ListboxModule } from 'primeng/listbox';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { PanelModule } from 'primeng/panel';\nimport { CalendarModule } from 'primeng/calendar';\nimport { AccordionModule } from 'primeng/accordion';\nimport { TabViewModule } from 'primeng/tabview';\nimport { FocusTrapModule } from 'primeng/focustrap';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { TreeTableModule } from 'primeng/treetable';\nimport { TreeModule } from 'primeng/tree';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { CascadeSelectModule } from 'primeng/cascadeselect';\nimport { ChipsModule } from 'primeng/chips';\nimport { ColorPickerModule } from 'primeng/colorpicker';\nimport { InputMaskModule } from 'primeng/inputmask';\nimport { InputSwitchModule } from 'primeng/inputswitch';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputTextareaModule } from 'primeng/inputtextarea';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { KnobModule } from 'primeng/knob';\nimport { KeyFilterModule } from 'primeng/keyfilter';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { PasswordModule } from 'primeng/password';\nimport { RatingModule } from 'primeng/rating';\nimport { SliderModule } from 'primeng/slider';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { ToggleButtonModule } from 'primeng/togglebutton';\nimport { TreeSelectModule } from 'primeng/treeselect';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { SpeedDialModule } from 'primeng/speeddial';\nimport { DataViewModule } from 'primeng/dataview';\n/* import { GMapModule } from 'primeng/gmap'; */\nimport { OrderListModule } from 'primeng/orderlist';\nimport { OrganizationChartModule } from 'primeng/organizationchart';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PickListModule } from 'primeng/picklist';\nimport { TimelineModule } from 'primeng/timeline';\nimport { VirtualScrollerModule } from 'primeng/virtualscroller';\nimport { CardModule } from 'primeng/card';\nimport { DividerModule } from 'primeng/divider';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { SplitterModule } from 'primeng/splitter';\nimport { ScrollPanelModule } from 'primeng/scrollpanel';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ConfirmPopupModule } from 'primeng/confirmpopup';\nimport { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';\nimport { OverlayPanelModule } from 'primeng/overlaypanel';\nimport { SidebarModule } from 'primeng/sidebar';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { MenuModule } from 'primeng/menu';\nimport { MegaMenuModule } from 'primeng/megamenu';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\nimport { ContextMenuModule } from 'primeng/contextmenu';\nimport { DockModule } from 'primeng/dock';\nimport { PanelMenuModule } from 'primeng/panelmenu';\nimport { SlideMenuModule } from 'primeng/slidemenu';\nimport { StepsModule } from 'primeng/steps';\nimport { TabMenuModule } from 'primeng/tabmenu';\nimport { TieredMenuModule } from 'primeng/tieredmenu';\nimport { MessagesModule } from 'primeng/messages';\nimport { MessageModule } from 'primeng/message';\nimport { ToastModule } from 'primeng/toast';\nimport { CarouselModule } from 'primeng/carousel';\nimport { GalleriaModule } from 'primeng/galleria';\nimport { ImageModule } from 'primeng/image';\nimport { DragDropModule } from 'primeng/dragdrop';\nimport { AvatarModule } from 'primeng/avatar';\nimport { AvatarGroupModule } from 'primeng/avatargroup';\nimport { BadgeModule } from 'primeng/badge';\nimport { BlockUIModule } from 'primeng/blockui';\n/* import { CaptchaModule } from 'primeng/captcha'; */\nimport { ChipModule } from 'primeng/chip';\nimport { InplaceModule } from 'primeng/inplace';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { ScrollTopModule } from 'primeng/scrolltop';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TagModule } from 'primeng/tag';\nimport { TerminalModule } from 'primeng/terminal';\nimport { DeferModule } from 'primeng/defer';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { RippleModule } from 'primeng/ripple';\n/* import {EditorModule} from 'primeng/editor'; */\nimport {ScrollerModule} from 'primeng/scroller';\nimport {AutoFocusModule} from 'primeng/autofocus';\nimport {AnimateModule} from 'primeng/animate';\n\nexport const APP_PRIMENG_MODULE = [\n\tSharedModule,\n\tTableModule,\n\tDialogModule,\n\tConfirmDialogModule,\n\tDropdownModule,\n\tMenubarModule,\n\tButtonModule,\n\tListboxModule,\n\tRadioButtonModule,\n\tPanelModule,\n\tAccordionModule,\n\tCalendarModule,\n\tTabViewModule,\n\tFocusTrapModule,\n\tCheckboxModule,\n\tTreeTableModule,\n\tTreeModule,\n\tAutoCompleteModule,\n\tCascadeSelectModule,\n\tChipsModule,\n\tColorPickerModule,\n\tInputMaskModule,\n\tInputSwitchModule,\n\tInputTextModule,\n\tInputTextareaModule,\n\tInputNumberModule,\n\tKnobModule,\n\tKeyFilterModule,\n\tMultiSelectModule,\n\tPasswordModule,\n\tRatingModule,\n\tSliderModule,\n\tSelectButtonModule,\n\tToggleButtonModule,\n\tTreeSelectModule,\n\tTriStateCheckboxModule,\n\tSplitButtonModule,\n\tSpeedDialModule,\n\tDataViewModule,\n\t/* GMapModule, */\n\tOrderListModule,\n\tOrganizationChartModule,\n\tPaginatorModule,\n\tPickListModule,\n\tTimelineModule,\n\tVirtualScrollerModule,\n\tCardModule,\n\tDividerModule,\n\tFieldsetModule,\n\tSplitterModule,\n\tScrollPanelModule,\n\tToolbarModule,\n\tConfirmPopupModule,\n\tDynamicDialogModule,\n\tOverlayPanelModule,\n\tSidebarModule,\n\tTooltipModule,\n\tFileUploadModule,\n\tMenuModule,\n\tMegaMenuModule,\n\tBreadcrumbModule,\n\tContextMenuModule,\n\tDockModule,\n\tPanelMenuModule,\n\tSlideMenuModule,\n\tStepsModule,\n\tTabMenuModule,\n\tTieredMenuModule,\n\tMessagesModule,\n\tMessageModule,\n\tToastModule,\n\tCarouselModule,\n\tGalleriaModule,\n\tImageModule,\n\tDragDropModule,\n\tAvatarModule,\n\tAvatarGroupModule,\n\tBadgeModule,\n\tBlockUIModule,\n\t/* CaptchaModule, */\n\tChipModule,\n\tInplaceModule,\n\tProgressBarModule,\n\tProgressSpinnerModule,\n\tScrollTopModule,\n\tSkeletonModule,\n\tTagModule,\n\tTerminalModule,\n\tDeferModule,\n\tStyleClassModule,\n\tRippleModule,\n\t/* EditorModule, */\n  ScrollerModule,\n  AutoFocusModule,\n  AnimateModule\n];\n//\nexport const APP_PRIMENG_COMPONENTS = [\n\tDialog,\n\tConfirmDialog,\n\tHeader,\n\tFooter\n];\n//\nimport { ConfirmationService } from 'primeng/api';\nimport { FilterService } from 'primeng/api';\nimport { CommonModule } from '@angular/common';\n\n//\nexport const APP_PRIMENG_PROVIDERS = [\n\tConfirmationService,\n\tFilterService,\n\tDialogService,\n\tMessageService,\n];\n// ===========================================================================\n\n@NgModule({\n  //declarations\t: [],\n  imports\t\t: APP_PRIMENG_MODULE.concat(APP_ANGULAR_MODULE),\n  exports\t\t: APP_PRIMENG_MODULE.concat(APP_ANGULAR_MODULE)\n})\nexport class PrimeNgModule {\n\tstatic forRoot(): ModuleWithProviders<any> {\n\t\treturn {\n\t\t\tngModule: PrimeNgModule,\n\t\t\tproviders: APP_PRIMENG_PROVIDERS\n\t\t};\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule,  DatePipe,  DecimalPipe,  I18nPluralPipe,  JsonPipe, LowerCasePipe, NgLocalization, PercentPipe, TitleCasePipe, UpperCasePipe } from '@angular/common';\nimport { EagnaTestPipe, CustomPluralPipe, GetInitialsPipe, IsNotEmptyPipe, AbstractToFormControlPipe, AbstractToFormArrayPipe, FilterByPipe, IncludeByPipe, ExcludeByPipe, HighlightSearchPipe, AutoCompleteHighlightPipe, ReplaceAllPipe, PluckPipe, QuickFilterPipe, CapitalizeFirstPipe, MergeToPipe, FlatMapPipe, ObjToArrayPipe, ArrayToObjPipe, TranslateFieldPipe } from './eagna.pipe';\n\nconst _pipes: any = [\n  EagnaTestPipe,\n  AbstractToFormControlPipe,\n  AutoCompleteHighlightPipe,\n  AbstractToFormArrayPipe,\n  CapitalizeFirstPipe,\n  CustomPluralPipe,\n  ExcludeByPipe,\n  FilterByPipe,\n  GetInitialsPipe,\n  HighlightSearchPipe,\n  IncludeByPipe,\n  IsNotEmptyPipe,\n  MergeToPipe,\n  FlatMapPipe,\n  PluckPipe,\n  QuickFilterPipe,\n  ReplaceAllPipe,\n  ObjToArrayPipe,\n  ArrayToObjPipe,\n  TranslateFieldPipe\n  /* JsonDebugPipe */\n];\n\nconst _corePipes: any = [\n  UpperCasePipe, LowerCasePipe, TitleCasePipe, JsonPipe, DatePipe, I18nPluralPipe, DecimalPipe, PercentPipe\n];\n\nconst _customProviders: any[] = []\n\n@NgModule({\n  declarations: _pipes,\n  imports: [CommonModule],\n  exports: [].concat(_corePipes, _pipes),\n  providers: [].concat(_corePipes, _pipes)\n})\nexport class EagnaPipesModule {}\n","import { Injectable } from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\n\n@Injectable()\nexport class SplashScreenStateService {\n\n  subject = new Subject();\n\n  subscribe(onNext:any): Subscription {\n    return this.subject.subscribe(onNext);\n  }\n\n  stop() {\n    this.subject.next(false);\n  }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { SplashScreenStateService } from './splash-screen-state.service';\n\n@Component({\n  selector: 'eag-splash-screen',\n  templateUrl: './splash-screen.component.html',\n  styleUrls: ['./splash-screen.component.scss']\n})\nexport class SplashScreenComponent implements OnInit {\n  @Input() loadingText : any = \"Loading\";\n  @Input() image       ?: any = null;\n\n  // The screen starts with the maximum opacity\n  public opacityChange = 1;\n  public splashTransition : any;\n  // First access the splash is visible\n  public showSplash = true;\n\n  readonly ANIMATION_DURATION = 2;\n\n  constructor(private splashScreenStateService: SplashScreenStateService) {\n\n    this.image = (this.image == null)? \"assets/img/eg_rd_black.png\" : this.image;\n\n  }\n\n  ngOnInit(): void {\n    // Somewhere the stop method has been invoked\n\n    this.splashScreenStateService.subscribe((res:any) => {\n\n      this.hideSplashAnimation();\n    });\n  }\n\n  private hideSplashAnimation() {\n    // Setting the transition\n    this.splashTransition = `opacity ${this.ANIMATION_DURATION}s`;\n    this.opacityChange = 0;\n    setTimeout(() => {\n      // After the transition is ended the showSplash will be hided\n      this.showSplash = !this.showSplash;\n    }, 1000);\n  }\n\n}\n","<div *ngIf=\"showSplash\" class=\"app-splash-screen\" [ngStyle]=\"{'opacity': opacityChange, 'transition': splashTransition}\">\n    <div class=\"logo-png\">\n        <img [src]=\"image\" class=\"logo-png\">\n\n        <!-- <div style=\"text-align: center; margin-top:20px; color: white;\">\n            <div class=\"progress\">\n                <div class=\"color\"></div>\n            </div>\n        </div> -->\n\n\n    </div>\n\n   <!--  <div class=\"content\">\n        <div class=\"content__container\">\n\n            <p class=\"content__container__text\">\n            {{loadingText}}:\n            </p>\n\n            <ul class=\"content__container__list\">\n            <li class=\"content__container__list__item\">Connecting</li>\n            <li class=\"content__container__list__item\">Fetching Data</li>\n            <li class=\"content__container__list__item\">Rendering</li>\n            <li class=\"content__container__list__item\">Still Rendering</li>\n\n            </ul>\n        </div>\n    </div> -->\n\n</div>\n","import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { SplashScreenStateService } from './splash-screen-state.service';\n\n\n@Injectable()\nexport class SplashScreenResolver  {\n\n  constructor(private splashScreenStateService: SplashScreenStateService) { }\n\n  public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Observable<any>> {\n    return new Promise((resolve, reject) => {\n      setTimeout(() => {\n        this.splashScreenStateService.stop();\n        resolve(of(['item1', 'item2']));\n      }, 5000);\n    });\n  }\n\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CardComponent } from './card/card.component';\nimport { LoadingComponent } from './loading/loading.component';\nimport { LoadingDirective } from './loading/loading.directive';\nimport { ErrorComponent } from './error/error.component';\nimport { LoadingService } from './loading/loading.service';\nimport { PrimeNgModule } from '../prime-ng/prime-ng.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { EagnaPipesModule } from '../pipes/eagna-pipes.module';\nimport { SplashScreenComponent } from './generic-api';\nimport { SplashScreenResolver } from './splash-screen/splash-screen.resolver';\nimport { SplashScreenStateService } from './splash-screen/splash-screen-state.service';\n\nconst components  : any   = [\n                              CardComponent,\n                              LoadingComponent, \n                              ErrorComponent,\n                              SplashScreenComponent\n                            ]\n\nconst directive   : any   = [\n                              LoadingDirective\n                            ]\n\nconst modules     : any   = [\n                              CommonModule,\n                              ReactiveFormsModule,\n                              PrimeNgModule,\n                              EagnaPipesModule\n                            ]\nconst provider    : any   = [\n                              LoadingService,\n                              SplashScreenResolver,\n                              SplashScreenStateService\n                            ]\n\n@NgModule({\n  declarations: [].concat(components, directive),\n  imports     : [].concat(modules),\n  providers   : [].concat(provider, directive),\n  exports     : [].concat(modules, components, directive),\n})\nexport class GenericModule { }\n","import { ColDef, ColumnApi, GridApi, GridOptions, Module, ColGroupDef, ExcelStyle, IDatasource, IServerSideDatasource, IViewportDatasource, IAggFunc, CsvExportParams, ExcelExportParams, StatusPanelDef, SideBarDef, AgChartThemeOverrides, AgChartTheme, ServerSideStoreType, RowGroupingDisplayType, GetContextMenuItems, GetMainMenuItems, GetRowNodeIdFunc, GetRowIdFunc, NavigateToNextHeaderParams, HeaderPosition, TabToNextHeaderParams, NavigateToNextCellParams, CellPosition, TabToNextCellParams, PostProcessPopupParams, GetDataPath, RowNode, IsRowMaster, IsRowSelectable, PaginationNumberFormatterParams, ProcessDataFromClipboardParams, GetServerSideGroupKey, IsServerSideGroup, SuppressKeyboardEventParams, GetChartToolbarItems, FillOperationParams, IsApplyServerSideTransaction, GetServerSideStoreParamsParams, ServerSideStoreParams, IsServerSideGroupOpenByDefaultParams, IsGroupOpenByDefaultParams, ColumnEverythingChangedEvent, NewColumnsLoadedEvent, ColumnPivotModeChangedEvent, ColumnRowGroupChangedEvent, ExpandCollapseAllEvent, ColumnPivotChangedEvent, GridColumnsChangedEvent, ColumnValueChangedEvent, ColumnMovedEvent, ColumnVisibleEvent, ColumnPinnedEvent, ColumnGroupOpenedEvent, ColumnResizedEvent, DisplayedColumnsChangedEvent, VirtualColumnsChangedEvent, AsyncTransactionsFlushed, RowGroupOpenedEvent, RowDataChangedEvent, RowDataUpdatedEvent, PinnedRowDataChangedEvent, RangeSelectionChangedEvent, ChartCreated, ChartRangeSelectionChanged, ChartOptionsChanged, ChartDestroyed, ChartRefParams, ToolPanelVisibleChangedEvent, ModelUpdatedEvent, PasteStartEvent, PasteEndEvent, CellClickedEvent, CellDoubleClickedEvent, CellMouseDownEvent, CellContextMenuEvent, CellValueChangedEvent, RowValueChangedEvent, CellFocusedEvent, RowSelectedEvent, SelectionChangedEvent, CellKeyDownEvent, CellKeyPressEvent, CellMouseOverEvent, CellMouseOutEvent, FilterChangedEvent, FilterModifiedEvent, FilterOpenedEvent, SortChangedEvent, VirtualRowRemovedEvent, RowClickedEvent, RowDoubleClickedEvent, GridReadyEvent, GridSizeChangedEvent, ViewportChangedEvent, FirstDataRenderedEvent, DragStartedEvent, DragStoppedEvent, RowEditingStartedEvent, RowEditingStoppedEvent, CellEditingStartedEvent, CellEditRequestEvent, CellEditingStoppedEvent, BodyScrollEvent, BodyScrollEndEvent, PaginationChangedEvent, ComponentStateChangedEvent, RowDragEvent, ColumnRowGroupChangeRequestEvent, ColumnPivotChangeRequestEvent, ColumnValueChangeRequestEvent, ColumnAggFuncChangeRequestEvent, ProcessRowParams, ProcessCellForExportParams, ProcessHeaderForExportParams, ProcessGroupHeaderForExportParams, RowStyle, RowClassRules, RowClassParams, RowHeightParams, SendToClipboardParams, TreeDataDisplayType, FullWidthCellKeyDownEvent, FullWidthCellKeyPressEvent, LoadingCellRendererSelectorFunc, IsExternalFilterPresentParams, InitialGroupOrderComparatorParams, GetGroupRowAggParams, PostSortRowsParams, IsFullWidthRowParams, GetLocaleTextParams, IsRowFilterable, ColumnState, MenuItemDef, GetContextMenuItemsParams } from \"ag-grid-community\";\nimport { EventEmitter } from \"@angular/core\";\nimport { AnyPropertyFunc, BooleanPropertyFunc, OptionsAsyncParams, StringPropertyFunc } from \"../core.interface\";\nimport { MenuItem } from \"primeng/api\";\n\nexport type rowModelType = 'clientSide' | 'infinite' | 'viewport' | 'serverSide' | undefined;\nexport type editableIndicator = \"hide\" | \"show\" | \"hover\";\nexport type apiFilter = {values: (string | number)[], type?: 'set' | 'date'};\nexport type statusPanel = { statusPanel: STATUS_PANEL, align?: \"left\" | \"center\" };\nexport type keysAndCallback = {[p: string]:{cond: (keyEvent: KeyboardEvent) => boolean, callback: (p?: any) => void}};\nexport type colsAndCharts = {[p: string]: {id?: number, cols: any, charts?: any, filters?: any, isFullRange?: boolean, isGlobal?: boolean, dateCreated?: string, lastUpdate?: string, user?: string, save_as?: string}};\nexport type columnTypeIsA = {isUnique?: boolean, isUniqueCaseSensitive?: boolean, hasErrors?: boolean, isRequiredWhen?: boolean, isRequiredWhenEditable?: boolean};\nexport type dropDownEditorParams = {value: any, searchPlaceHolder?: string, useChildren?: boolean, optionsAsyncParams?: OptionsAsyncParams, dontUseSearch?: boolean, options?: any /* RT eagna TODO: HeaderMenuOptions[] */, onSelect?: (val: any) => {srcChanged: boolean, newVal?: any}};\nexport type setValues = (p: any) => void | string[];\n\nexport type gridDefaultColumns = {\n        columns?: {state: (ColumnState[] | string[]),\n        groupState?: ({\n                groupId: string,\n                open: boolean\n            })[] | undefined\n        },\n        hiddenCols?: string[]\n    } | undefined;\n/* export type aggsType = {[p: string]: (number | string)[]} | undefined; */\nexport type aggsType = {\n    [p: string]: {\n        [key: string]: any, count?: number} []\n    };\n\n    /* {[key: string]: any, p?: any} */\n\nexport interface GridResponse{\n    /**\n     * rows of fetched (according to limit and/or offset)\n     */\n    results: any[];\n\n    /**\n     * Total fetched / to fetch\n     */\n    total: number;\n    \n    /**\n     * URL of previous page\n     */\n    previous?: string;\n\n    /**\n     * URL of next page\n     */\n    next?: string;\n    \n    /**\n     * When fetching aggregations\n     */\n    aggs?: aggsType[] | undefined;\n\n    /**\n     * To identify automatically which field type to use\n     */\n    //fields?: {[field: string]: string}[];\n    //fields?: { ['form']?: string, ['field']?: string, ['required']?: any, [field: string]: string | undefined }[];\n    fields?: any[];\n\n    /**\n     * Page (auto when paginating)\n     * Not used\n     */\n    page?: {\n        next?: string;\n        page: number;\n        page_size?: number;\n        previous?: string;\n        total?: number;\n    },\n    /**\n     * Displayed count (auto when paginating)\n     * Not used\n     */\n    page_size?: number;\n\n    /**\n     * Permission (authorization rights from backend)\n     */\n    permission: {\n        create?: boolean;\n        read?: boolean;\n        update?: boolean;\n        delete?: boolean;\n        role?: any;\n        message?: any;\n    }\n}\n\n/* PermissionConfig{\n    create  ?: boolean;\n    read    ?: boolean;\n    update  ?: boolean;\n    delete  ?: boolean;\n    role    ?: any;\n    message ?: any;\n  } */\n\nexport enum BOOLEAN_FILTER_MODE {\n    /**\n    * Defaault if not supplied.\n    */\n   TRUE_FALSE = \"trueFalse\",\n   /**\n    * Converts True/False label to Yes/No.\n    */\n   YES_NO = \"yesNo\"\n}\n\nexport enum GRID_TYPE {\n    INFINITE    = \"infinite\",\n    SERVER_SIDE = \"serverSide\",\n    CLIENT_SIDE = \"clientSide\",\n    VIEWPORT    = \"viewport\"\n}\n\nexport enum CELL_EDITOR_TYPES {\n    LARGE_TEXT              = \"agLargeTextCellEditor\",\n    NUMERIC                 = \"numericEditor\",\n    MASK                    = \"maskEditor\",\n    DATE_PICKER             = \"datePicker\",\n    DROPDOWN_EDITOR         = \"dropdownEditor\",\n    DROPDOWN_EDITOR_NATIVE  = \"agRichSelectCellEditor\"\n}\n\nexport enum COLUMN_TYPE {\n    /**\n     * boolean column is used for the column that tells a column is Yes/No or True/False e.g. has_attachments.\n     */\n    BOOLEAN_COLUMN = \"booleanColumn\",\n    \n    /**\n     * date column is useful, for date formation, use of the calendar date picker, generating PIVOT extracted dates, etc.\n     */\n    DATE_COLUMN = \"dateColumn\",\n\n    /**\n     * default column type\n     */\n    DEFAULT_SET_COLUMN = \"default_setColumn\",\n\n    /**\n     * editable column without any validations\n     */\n    EDITABLE_COLUMN = \"editableColumn\",\n\n    /**\n     * auto complete column\n     */\n    /* AUTOCOMPLETE_COLUMN = \"autoCompleteColumn\", */\n\n    /**\n     * new auto complete column\n     */\n    NEW_AUTOCOMPLETE_COLUMN = \"newAutoCompleteColumn\",\n\n    /**\n     * column will only be available for superUser\n     */\n    SUPER_USER_COLUMN = \"superUserColumn\",\n\n    /**\n     * for editable column, to keep the icon even if is not empty\n     */\n    KEEP_ICON_COLUMN = \"keepIconColumn\",\n\n    /**\n     * for editable, but no edit Icon is gonna be displayed\n     */\n    NO_ICON_COLUMN = \"noIconColumn\",\n\n    /**\n     * depracated\n     */\n    NON_EDITABLE_COLUMN = \"nonEditableColumn\",\n\n    /**\n     * for filtering, not null columns will not have blank option\n     */\n    NOTNULL_COLUMN = \"notNullColumn\",\n\n    /**\n     * for filtering, nullable columns will have blank option\n     */\n    NULLABLE_COLUMN = \"nullableColumn\",\n\n    //for PIVOTING\n    /**\n     * used for primary column, so it will aggregate to sum by default\n     */\n    PIVOTING_ID = \"pivotingId\",\n    /**\n     * use this column type to any dates needed by analysis tool to extract to dd/mm/yy\n     */\n    PIVOTING_DATE = \"pivotingDate\",\n    /**\n     * use this column type to a list containing lists so it will create a PIVOTING_LIST_column that can feed to value aggregation for analysis\n     */\n    PIVOTING_LIST = \"pivotingList\",\n\n    /**\n     * for filtering, number columns will have the proper sorted options, and various range like greater than or equal,etc.\n     */\n    NUMBER_COLUMN = \"numberColumn\",\n    \n    /**\n     * another type for number to make the digit info defaulted to e.g. \"0.50\"\n     */\n    DECIMAL_COLUMN = \"decimalColumn\",\n\n    /**\n     * another type for number to make the digit info defaulted to e.g. \"0.50\"\n     */\n     FLOAT_COLUMN = \"floatColumn\",\n\n    /**\n     * Editable columns that are required to be filled in. Use grid hasErrors() method to check for validation\n     */\n    REQUIRED_COLUMN = \"requiredColumn\",\n\n    /**\n     * Editable columns that are required to be filled in with certain condition to be supplied in extraParams.validateRequiredWhen(p) => {return logic}.\n     * For all editable columns with certain validations, either unique, unique case sensitive, required. This can be used as replacement as dynamic as needed.\n     * Use grid hasErrors() method to check for validation.\n     */\n    VALIDATE_WHEN_COLUMN = \"validateWhenColumn\",\n\n    /**\n     * use this to show the raw value of the column data\n     */\n    SHOW_TOOLTIP_VALUE_COLUMN = \"showToolTipValueColumn\",\n\n    /**\n     * Editable columns that are must have unique values. Use grid hasDuplicates() method to check for validation\n     */\n    UNIQUE_VALUE_COLUMN = \"uniqueValueColumn\",\n\n    /**\n     * Editable columns that are must have unique CASE SENSITIVE values. Use grid hasDuplicates() method to check for validation\n     */\n    UNIQUE_CASE_SENSITIVE_COLUMN = \"uniqueCaseSensitiveColumn\"\n}\n\nexport type agThemeType = 'balham' | 'alpine' | 'blue' | 'fresh' | 'bootstrap';\n\nexport enum STATUS_PANEL {\n    TOTAL_AND_FILTERED_ROW_COUNT    = \"agTotalAndFilteredRowCountComponent\",\n    TOTAL_ROW_COUNT                 = \"agTotalRowCountComponent\",\n    FILTERED_ROW_COUNT              = \"agFilteredRowCountComponent\",\n    SELECTED_ROW_COUNT              = \"agSelectedRowCountComponent\",\n    AGGREGATION                     = \"agAggregationComponent\",\n    COUNTER_OPERATIONS_TOOLBAR      = \"countOperationsToolbar\"\n}\n\nexport enum FILTER_TYPE {\n    DATE    = 'agDateColumnFilter',\n    SET     = 'set'\n}\n\nenum DATE_SET_OPTIONS {\n    IN_RANGE                = 'inRange',\n    EQUALS                  = 'equals',\n    NOT_EQUAL               = 'notEqual',\n    GREATER_THAN_OR_EQUAL   = 'greaterThanOrEqual',\n    LESS_THAN_OR_EQUAL      = 'lessThanOrEqual',\n}\n\ninterface PrefColumns {\n    col     : string;\n    pinned  ?: string;\n}\n\nexport abstract class PrefFilters {\n    filterType  ?: string; //type and filterType are the same, just use filterType for backend request\n\n    //if filterType date\n    dateFrom    ?: string;\n    dateTo      ?: string;\n    type        ?: string;\n\n    //if filterType set\n    values          ?: setValues | undefined;\n    valueFormatter  ?: any;\n\n    //for sorting\n    sort            ?: string;\n    sortingOrder    ?: number;\n\n    abstract setFilterParams(params?: any): void;\n    abstract getFilterParams(enableDynamicFiltering?: boolean): any;\n    abstract setFilterModel(params?: any): void;\n    abstract getFilterModel(): any;\n}\n\nexport type filterTypeDate = {dateFrom: string, dateTo: string, filterType: string /* text or date or number */, type: string} | null;\nexport type filterTypeText = {filter: string, filterType: string /* text or date or number */, type: string} | null;\nexport type multiFilterTypeText = {condition1: (filterTypeText | filterTypeDate), condition2?: (filterTypeText | filterTypeDate), filterType: string, operator?: string} | null\nexport type filterTypeSet = {filterType: \"set\", values: string[]} | null\n\nexport interface GridPrefMultiFilters{\n    [p: string]: {filterType: \"multi\", filterModels: [multiFilterTypeText, filterTypeSet]}; //or {filterType: \"set\", values: string[]}\n}\n\nexport interface GridPrefColumns{\n    state: ColumnState[];\n    groupState?: ({\n        groupId: string;\n        open: boolean;\n    })[];\n}\n\nexport interface GridPeferences{\n    /** deprecated the app TOKEN provided by the app or manually specified to grid via appProject\n     * refer to appId instead */\n    app?: string;\n\n    /** deprecated the user who saves the current preferences, readonly from backend */\n    user_id?: number | string;\n\n    /** the grid components's gridId */\n    gridId: string;\n\n    /** stringified:  \n     * {[id: string]: {values: any[], filterType?: string}}\n    */\n    filters?: string;\n\n    /** stringified: GridPrefColumns \n    */\n    columns?: string;\n\n    /** 'profile' for grid Profile's list when changing views\n     * 'chart' is when saving and retrieving chart is enabled\n     * dont set by default, it's the grid's columns and filters being saved.\n     */\n    type?: 'profile' | 'chart' | '' | undefined;\n\n    /** when type is 'profile', profileName should be provided */\n    profileName?: string;\n\n    /** stringified array of charts object\n     * when type is 'chart' */\n    charts?: string;\n    \n    /** default TRUE, to be used later, when profile and charts are gonna be implemented */\n    isGlobal?: boolean;\n\n    /** default balham */\n    theme: agThemeType;\n\n    //backend alignment\n    id?: number;\n    appId?: number;\n    prefId?: number;\n}\n\nexport interface FilterAggsMapper {\n    suffix      : string;\n    extraField  ?: string;\n    objectKey   ?: string; // if null, use default 'key'\n}\n\nexport interface PrefParams {\n    appProj     ?: number;\n    filters     ?: any; //{filterName: {filterType: values: PrefFilters}}\n    columns     ?: PrefColumns[];\n    engColumns  ?: PrefColumns[];\n    screen      ?: string;\n}\n\nexport class PrefFilterTypeDate extends PrefFilters {\n    public setFilterParams(params?: { dateFrom: string, dateTo: string }): void {\n        /* this.dateFrom = params.dateFrom;\n        this.dateTo = params.dateTo; */\n    }\n\n    public getFilterParams(enableDynamicFiltering = false): any { //in the future, extend this option to the grid component caller to be set to true/ currently false\n        return {\n            /* type: FILTER_TYPE.DATE, */\n            browserDatePicker: true,\n            suppressAndOrCondition: true,\n            filterOptions: [DATE_SET_OPTIONS.IN_RANGE/* , DATE_SET_OPTIONS.EQUALS, DATE_SET_OPTIONS.GREATER_THAN_OR_EQUAL, DATE_SET_OPTIONS.LESS_THAN_OR_EQUAL, DATE_SET_OPTIONS.NOT_EQUAL */],\n            defaultOption: DATE_SET_OPTIONS.IN_RANGE,\n        };\n    }\n\n    public setFilterModel(params?: { dateFrom: string, dateTo: string, type?: string }): void {\n        this.dateFrom = params?.dateFrom;\n        this.dateTo = params?.dateTo;\n        this.type = params?.type;\n    }\n\n    public getFilterModel(): any {\n        return {\n            dateFrom: this.dateFrom,\n            dateTo: this.dateTo,\n            type: this.type\n        }\n    }\n}\n\nexport class PrefFilterTypeSet extends PrefFilters {\n    public setFilterParams(params?: { values: setValues, valueFormatter?: any}): void {\n        this.values = params?.values;\n        if(params?.valueFormatter){\n            this.valueFormatter = params.valueFormatter;\n        }        \n    }\n\n    public getFilterParams(enableDynamicFiltering = false): any {\n        const fp: any = {\n            /* type: \"agSetColumnFilter\", */\n            values: this.values /* .filter(aggr => {return aggr.key != ''}) */\n        };\n        if(this.valueFormatter){\n            fp.valueFormatter = this.valueFormatter;\n        }\n        return fp;\n    }\n\n    public setFilterModel(params?: { values: setValues }): void {\n        this.values = params?.values;\n    }\n\n    public getFilterModel(): { type?: string, values: (setValues | undefined), selectAllOnMiniFilter?: boolean, valueFormatter?: any, date_from?: string, date_to?: string, date_type?: string } {\n        return {\n            type: \"set\",\n            values: this.values,\n            valueFormatter: this.valueFormatter,\n        };\n    }\n}\n\nexport interface CellCustomActions {\n    colId: string;\n    color?: string | StringPropertyFunc;\n    title?: string | StringPropertyFunc;\n    icon?: string | StringPropertyFunc;\n    text?: string | number | AnyPropertyFunc;\n    extraText?: string | number | AnyPropertyFunc;\n    iconClass?: any | AnyPropertyFunc;\n    iconStyle?: any | AnyPropertyFunc;\n    bgClass?: any | AnyPropertyFunc;\n    badgeClass?: any | AnyPropertyFunc;\n    bgStyle?: any | AnyPropertyFunc;\n    isReversedTextAndIcon?: boolean;\n    \n    useButton?: boolean;\n    mode?: 'button' | 'badge' | undefined;\n    \n    isCheckbox?: boolean;\n    checkboxValue?: boolean;\n    buttonOptions?: any[]; /* RT eagna TODO HeaderMenu[]; */\n    fetchUserDetailsOnHover?: boolean; // To be implemented (using the hover directive)\n    isHidden: boolean | BooleanPropertyFunc;\n    initParams?(params?: any): boolean;    \n    clickCallback?(event: UIEvent, params: any): void;\n\n    //prime\n    isMulti?: boolean;\n    popup?: boolean;\n    menuItems?: AgCellMenuItems[];\n\n    //primeButton\n    btnClass?: any | AnyPropertyFunc;\n}\n\nexport interface AgCellMenuItems extends MenuItem{\n    clickCallback?(event: UIEvent, params: any): void;\n    items?: AgCellMenuItems[];\n}\n\nexport type extraContextMenu = {position?: 'before' | 'after', item: (string | MenuItemDef)};\n\nexport type fieldMapperType = {[_f: string]: {\n    aggKey?: string;\n    aggValue?: string | AnyPropertyFunc;\n    filterKey?: string | AnyPropertyFunc;\n}} | undefined;\n\nexport interface IExtraContexMenuItems{\n    (params: GetContextMenuItemsParams): extraContextMenu[];\n};\n\nexport interface ExtendedGridDefinition extends GridOptions{\n    extraContextMenuItems?: IExtraContexMenuItems | extraContextMenu[];\n    /**\n         * To amend existing column definitions:\n         * \n         * Receive the colDefs object then return with amendment\n         * \n         * eg. \n         * \n         *  * return colDefs.concat([{field: \"my_new_field\" type: [COLUMN_TYPE.EDITABLE_COLUMN, COLUMN_TYPE.NUMBER_COLUMN]}])\n         * \n         * for ServerSide filtering using different aggs key or custom aggs function\n         * use: \n         *  * filterKey: 'my_new_filter_key'\n         * \n         * or \n         *  * filterFunc: (p?) => {\n            *  return ['agg value 1', 'agg value 2']\n            * }\n         */\n    amendColDefs?: (\n            colDefs: ColDef[],\n            gridResult?: GridResponse,\n            p?: FirstDataRenderedEvent\n        ) => (ColDef | ColGroupDef)[];\n}\n\nexport interface AutoCompleteSelectDatum{\n    label: string;\n    value: any;\n    group?: string;\n}\n\nexport interface AutoCompleteCellEditorParams{\n    placeholder: string;\n\n    /** for Syncrhonous */\n    //selectData?: ({[p: string]: any} | string)[];\n    selectData?: AutoCompleteSelectDatum[];\n    autocomplete?: {\n      /** default to true, turn it off to allow any value */  \n      strict?: boolean;\n      /** default to true, turn it off to not auto-select the first item */  \n      autoselectfirst?: boolean;\n      /** for Asyncrhonous */\n      fetch?(cellEditor: any, text: string, update: (p: AutoCompleteSelectDatum[]) => void): void;\n    };\n  }\n\n  export interface StatusBar {\n    statusPanels: statusPanel[];\n  }\n\n  export class StatusBarForGridWithoutPagination {\n    constructor(panels?: STATUS_PANEL[]) {\n        this._statusBar = {\n            statusPanels: [\n                ...(!panels || panels.includes(STATUS_PANEL.TOTAL_AND_FILTERED_ROW_COUNT) ? [{ statusPanel: STATUS_PANEL.TOTAL_AND_FILTERED_ROW_COUNT }]: []) as statusPanel[],\n                ...(!panels || panels.includes(STATUS_PANEL.TOTAL_ROW_COUNT) ? [{ statusPanel: STATUS_PANEL.TOTAL_ROW_COUNT, align: \"center\" }]: []) as statusPanel[],\n                ...(!panels || panels.includes(STATUS_PANEL.FILTERED_ROW_COUNT) ? [{ statusPanel: STATUS_PANEL.FILTERED_ROW_COUNT }]: []) as statusPanel[],\n                ...(!panels || panels.includes(STATUS_PANEL.SELECTED_ROW_COUNT) ? [{ statusPanel: STATUS_PANEL.SELECTED_ROW_COUNT, align: \"left\"}]: []) as statusPanel[],\n                ...(!panels || panels.includes(STATUS_PANEL.AGGREGATION) ? [{ statusPanel: STATUS_PANEL.AGGREGATION }]: []) as statusPanel[],\n            ]\n        }\n    }\n\n    private _statusBar: StatusBar;\n\n    public set statusBar(statusBar) {\n        this._statusBar = statusBar;\n    }\n\n    public get statusBar(): StatusBar {\n        return this._statusBar;\n    }\n}","import { Component } from '@angular/core';\r\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\r\nimport { BOOLEAN_FILTER_MODE } from '../grid.interface';\r\nimport { onOff } from '../../core.interface';\r\n\r\n@Component({\r\n  selector: 'eagna-boolean-filter',\r\n  template: `\r\n    <div style=\"display: inline-block;\" class=\"full-width\">\r\n      <p-inputSwitch inputId=\"booleanFilterSwitch\" pStyleClass=\"boolean-filter fw-500 fs-13 p-l-8\" \r\n        [class.isOn]=\"isOn()\" [class.isOff]=\"isOff()\" [class.isInactive]=\"!isFilterActive()\"\r\n        [(ngModel)]=\"value\" (ngModelChange)=\"updateFilter()\"></p-inputSwitch>\r\n      <label for=\"booleanFilterSwitch\" class=\"ml-2\" [innerHTML]=\"getLabel()\"></label>\r\n      <div style=\"padding: 4px; text-align: center;\" class=\"bg-eg-grey2\">\r\n        <button [disabled]=\"!isFilterActive()\" mat-flat-button (click)=\"updateFilter(true)\">Reset</button>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n    ::ng-deep.boolean-filter .mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb {\r\n      background-color: green !important;\r\n    }\r\n    \r\n    ::ng-deep.boolean-filter .mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar {\r\n        background-color: #ff99ff !important;\r\n    }\r\n    `\r\n  ]\r\n})\r\nexport class BooleanFilter /* implements AgFilterComponent */ {\r\n  params: any; //IFilterParams; \r\n  value : boolean | null = null;\r\n  mode: BOOLEAN_FILTER_MODE | string = BOOLEAN_FILTER_MODE.TRUE_FALSE;\r\n  modeMap: {[p: string]: onOff} = {\r\n    trueFalse: {on: \"True\", off: \"False\"},\r\n    yesNo: {on: \"Yes\", off: \"No\"}\r\n  };\r\n  private _modeMapVal: onOff = this.modeMap['trueFalse'];\r\n  private _mappedValue: string | undefined;\r\n\r\n  agInit(params: IFilterParams): void {\r\n    this.params = params;\r\n    if(!!this.params.mode && [BOOLEAN_FILTER_MODE.TRUE_FALSE, BOOLEAN_FILTER_MODE.YES_NO].includes(this.params.mode)){\r\n        this.mode = this.params.mode;\r\n    }\r\n    this._modeMapVal = this.modeMap[this.mode];\r\n    if(this.params.defaultValue != null){\r\n        this.value = this.params.defaultValue;\r\n        this._setMappedValue();\r\n        this.updateFilter();\r\n    }\r\n  }\r\n\r\n  private _isFilterActive(){\r\n    return this.value === true || this.value === false;\r\n  }\r\n\r\n  isOn(): boolean{\r\n    return this.isFilterActive() && this.value === true;\r\n  }\r\n\r\n  isOff(): boolean{\r\n    return this.isFilterActive() && this.value === false;\r\n  }\r\n\r\n  isFilterActive(): boolean {\r\n    return this._isFilterActive();\r\n  }\r\n\r\n  private _setMappedValue(){\r\n    if(this._modeMapVal){\r\n      if(this.value === true){\r\n        this._mappedValue = this._modeMapVal.on;\r\n      } else if(this.value === false){\r\n        this._mappedValue = this._modeMapVal.off;\r\n      } else{\r\n        this._mappedValue = '';\r\n      }\r\n    }\r\n    //console.log({value: this.value, typeo: (typeof this.value), modelMapVal: this._modeMapVal});\r\n  }\r\n\r\n  doesFilterPass(params: IDoesFilterPassParams): boolean {\r\n    if(this.params.customFilterCondition){ //filtering condition can be customized outside using filterParams.customFilterCondition(p, filterValue: [true/false])\r\n        return this.params.customFilterCondition({...this.params, ...params}, this.value);\r\n    } else if(this.params.valueGetter){ //in case valueGetter is used\r\n      const gotValue = this.params.valueGetter(params.node);\r\n      if(gotValue !== undefined){\r\n        return (gotValue == this.value || (this._mappedValue != null && gotValue == this._mappedValue));\r\n      }\r\n    } //else use its default value\r\n    return (params.data[this.params.colDef.colId] == this.value || (this._mappedValue != null && params.data[this.params.colDef.colId] == this._mappedValue));\r\n  }\r\n\r\n  getModel() {\r\n    if(this._isFilterActive()){\r\n      const model = {\r\n        filterType: \"set\",\r\n        values: [(this.value === true)]\r\n      };\r\n      return model;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  setModel(model: any) {\r\n    this.value = null;\r\n    if(model && model.values && model.values.length > 0){      \r\n      this.value = (model.values[0]===true);      \r\n    }\r\n    this._setMappedValue();\r\n  }\r\n\r\n  updateFilter(clear = false) {\r\n    if(clear){\r\n        this.value = null;\r\n    }\r\n    this._setMappedValue();\r\n    this.params.filterChangedCallback({colId: this.params.colDef.colId});\r\n  }\r\n\r\n  getLabel(){\r\n    if(this.value === true){\r\n      return this.modeMap[this.mode].on;\r\n    } else if(this.value === false){\r\n      return this.modeMap[this.mode].off;\r\n    }    \r\n    return `Filter is Off (${this.modeMap[this.mode].on}/${this.modeMap[this.mode].off})`;\r\n  }\r\n}","import { AfterViewInit, Component, ViewChild, ViewContainerRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { ICellEditorAngularComp, IDateAngularComp } from \"ag-grid-angular\";\r\nimport { Calendar, LocaleSettings } from \"primeng/calendar\";\r\nimport { FormatWidth, getLocalePluralCase, LowerCasePipe } from \"@angular/common\";\r\nimport { CoreService } from \"../../core.service\";\r\nimport { SharedService } from \"../../shared.service\";\r\n\r\n@Component({\r\n    selector: \"date-editor-cell\",\r\n    template: `<div #agPCalHolder class=\"p-field p-col-12 p-md-4 inside-grid ag-input-wrapper\" role=\"presentation\">\r\n        <!-- {{newDateFormat}} -->\r\n        <p-calendar #agPCal\r\n            [dateFormat]=\"newDateFormat\"\r\n            [(ngModel)]=\"calendarModel\"\r\n            [showIcon]=\"fromFilter\"\r\n            [inputStyleClass]=\"'inside-grid ag-input-field-input ag-text-field-input'\"\r\n            [inputId]=\"'agPCalInput'\"\r\n            [inputStyle]=\"inputStyle\"\r\n            [placeholder]=\"placeholder || localeFormatDefault\"\r\n            [ariaLabelledBy]=\"inputArialLabel\"    \r\n            (onSelect)=\"onSelect($event)\"></p-calendar>\r\n    </div>`,\r\n    styles: [``],\r\n    encapsulation: ViewEncapsulation.None\r\n})\r\nexport class DatePickerEditorComponent implements ICellEditorAngularComp, IDateAngularComp, AfterViewInit {\r\n    private _changesApplied = false;\r\n    private _currentValue: any;\r\n\r\n    public inputStyle = { height: '100%', width: '100%', 'border-radius': '0px' };\r\n    public inputArialLabel = '';\r\n    public placeholder = '';\r\n\r\n    constructor(\r\n        private _sharedService: SharedService,\r\n        private _lowecase: LowerCasePipe,\r\n        private _coreService: CoreService\r\n        ) {}\r\n    \r\n    @ViewChild(\"agPCalInput\", { read: ViewContainerRef }) public agPCalInput: ViewContainerRef | undefined;\r\n    @ViewChild(\"agPCal\") public agPCal: Calendar | undefined;\r\n\r\n    public params           : any;\r\n    public src              : any;\r\n    public calendarModel    : any;\r\n    public dateToday        = new Date();\r\n    /* public textMask         : any = this._helper.dateMask(true); */\r\n\r\n    private _localeFormat = this._coreService.getLocaleFormat(FormatWidth.Short);\r\n    //public localeSettings   : LocaleSettings = {dateFormat: this._dateFormat};\r\n    //public newDateFormat    = this._localeFormat._locale != \"en\" ? this._lowecase.transform(this._localeFormat._dateFormat) : \"dd/mm/yy\";\r\n    public newDateFormat    = this._lowecase.transform(this._localeFormat._dateFormat).replace(\"yyyy\", \"yy\");\r\n    public localeFormatDefault = this._lowecase.transform(this._coreService.getLocaleFormat()._dateFormat);\r\n    public fromFilter = false;\r\n\r\n    isDebug = this._sharedService.appConfig.env?.main.isDebug == true;\r\n\r\n    public agInit(params: any): void {\r\n        if(params.hasOwnProperty('filterParams')){\r\n            this.fromFilter = true;\r\n        }\r\n        this.params = params;\r\n        this.src = this.params.value;\r\n        if (this.src) {\r\n            this.calendarModel = this.src;\r\n\r\n            if(typeof this.src === \"string\"){\r\n                let _newDate;\r\n                try{\r\n                    _newDate = new Date(this.src);\r\n                } catch(e){\r\n                    try{\r\n                        const default_date = this.src.split(\"/\");\r\n                        _newDate = new Date(((default_date[2] as any) * 1), ((default_date[1] as any) * 1) - 1, (default_date[0] as any * 1));\r\n                    } catch(e){\r\n                        console.warn(\"new Date error\", e);\r\n                    }\r\n                }\r\n                if(_newDate){\r\n                    this.calendarModel = _newDate;\r\n                }\r\n            }\r\n        }\r\n        if(this.params.eGridCell && this.params.eGridCell.clientHeight && this.params.eGridCell.clientWidth){\r\n            this.inputStyle.height = this.params.eGridCell.clientHeight + 'px';\r\n            this.inputStyle.width = this.params.eGridCell.clientWidth + 'px';\r\n        }\r\n\r\n        if(!this.fromFilter){\r\n            setTimeout(() => {\r\n                this.agPCal?.toggle();\r\n            }, 1);\r\n        }\r\n    }\r\n\r\n    public getGui() {}\r\n\r\n    public afterGuiAttached() {}\r\n\r\n    public getValue(): any {\r\n        return this.src;\r\n    }\r\n\r\n    public isCancelAfterEnd(): boolean {\r\n        return false;\r\n    }\r\n\r\n    public isCancelBeforeStart(): boolean {\r\n        return false;\r\n    }\r\n\r\n    public isPopup(): boolean {\r\n        return !this.fromFilter;\r\n    }\r\n\r\n    onSelect(p: any){\r\n        this._applyChanges(p);\r\n    }\r\n    \r\n    /* public dateChangeEvent(src: any) {\r\n        this._applyChanges(src.value);\r\n    }\r\n\r\n    public dateInputEvent(src: any){\r\n        setTimeout(() => {\r\n            this._currentValue = src.value;\r\n            this._applyChanges(src.value);\r\n        }, 100);\r\n    } */\r\n\r\n    private _applyChanges(newVal: any){\r\n        if(!this._changesApplied){\r\n            this.src = newVal;\r\n            this._changesApplied = true;\r\n            this.params.api.stopEditing();\r\n        }        \r\n    }\r\n\r\n    public ngAfterViewInit() {}\r\n\r\n    //for filter\r\n    getDate(): Date | null {\r\n        return this.calendarModel;\r\n    }\r\n    setDate(date: Date | null): void {\r\n        this.calendarModel = date;\r\n    }\r\n    /* setDisabled?(disabled: boolean): void {} */\r\n    setInputPlaceholder?(placeholder: string): void {\r\n        this.placeholder = placeholder;\r\n    }\r\n    setInputAriaLabel?(inputArialLabel: string): void {\r\n        this.inputArialLabel = inputArialLabel;\r\n    }\r\n}","import { AfterViewInit,Component,ViewChild,ViewContainerRef, OnDestroy } from \"@angular/core\";\r\nimport { ICellEditorAngularComp } from \"ag-grid-angular\";\r\n/* import { HeaderMenu } from \"../../header-menu/header-menu.interface\";\r\nimport { HeaderMenuComponent } from \"../../header-menu/header-menu.component\"; */\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Component({\r\n    selector: \"dropdown-select-editor\",\r\n    template: `<div #container class=\"dropdown-container\"><span class=\"p-5 p-l-10 m-5\" [innerHTML]=\"getSource()\"></span>\r\n            <!-- <eagna-header-menu #hMenu [menuList]=\"[headerMenu]\" [gridParams]=\"params\"></eagna-header-menu> -->\r\n        </div>`,\r\n    styles: [`\r\n        .flex-column{\r\n            display: flex;\r\n            flex-direction: column;\r\n        }\r\n      `],\r\n})\r\nexport class DropdownSelectEditorComponent implements ICellEditorAngularComp, AfterViewInit, OnDestroy {\r\n    public params: any;\r\n    /* public headerMenu: HeaderMenu; */\r\n    public source: any;\r\n    private _subs = new Subscription()\r\n\r\n    @ViewChild(\"container\", { read: ViewContainerRef }) public container: ViewContainerRef | undefined;\r\n    /* @ViewChild(\"hMenu\") hMenu: HeaderMenuComponent; */\r\n\r\n    constructor() {\r\n        /* this.headerMenu = {\r\n            isForGridEditable: true,\r\n            isMulti: true, id: \"someEditables\",\r\n            xPosition: \"after\",\r\n            yPosition: \"above\",\r\n            searchPlaceHolder: \"Source\",\r\n            text: () => this.getValue(),\r\n            selectCallback: (p, extra?) => { this.onClick(p); },\r\n        }  */\r\n    }\r\n\r\n    public getSource(){\r\n        if(typeof this.source != \"object\"){\r\n            return this.source;\r\n        } else{\r\n            if(this.params.colDef && this.params.colDef.valueGetter && typeof this.params.colDef.valueGetter == \"function\"){\r\n                return this.params.colDef.valueGetter(this.params)\r\n            } else if(this.params.colDef && this.params.colDef.cellRenderer && typeof this.params.colDef.cellRenderer == \"function\"){\r\n                return this.params.colDef.cellRenderer(this.params);\r\n            }\r\n        }\r\n        return '';\r\n    }\r\n    // dont use afterGuiAttached for post gui events - hook into ngAfterViewInit instead for this\r\n    public ngAfterViewInit() {\r\n        setTimeout(()=>{\r\n            /* if(this.hMenu && this.hMenu.allTriggers[0]){\r\n                this.hMenu.allTriggers[0].openMenu();\r\n                this._subs.add(this.hMenu.allTriggers[0].menuClosed.subscribe(() => {\r\n                        this.params.api.stopEditing();\r\n                }));\r\n            } */\r\n        });\r\n    }\r\n    \r\n    public agInit(params: any): void {\r\n        this.params = {isFromDropDownEditor: true, ...params};\r\n        this.source = this.params.value;\r\n        \r\n        if(this.params){\r\n            if(this.params.hMenu){\r\n                /* this.headerMenu = {...this.headerMenu, ...this.params.hMenu}; */\r\n            } else{\r\n                if(this.params.useChildren){\r\n                } else if(this.params.optionsAsyncParams){\r\n                    /* this.headerMenu.optionsAsyncParams = this.params.optionsAsyncParams;\r\n                    if(this.params.value){\r\n                        this.headerMenu.triggerInitialSearch = this.source;\r\n                        this.headerMenu.search = this.source;\r\n                    } */\r\n                } else {\r\n                    /* this.headerMenu.options = this.params.values; */\r\n                }\r\n\r\n                if(this.params.dontUseSearch){\r\n                    /* delete this.headerMenu.searchPlaceHolder; */\r\n                } else if(this.params.searchPlaceHolder){\r\n                    /* this.headerMenu.searchPlaceHolder = this.params.searchPlaceHolder; */\r\n                }\r\n            }\r\n        }\r\n        \r\n    }\r\n\r\n    public getValue(): any {\r\n        return this.source;\r\n    }\r\n\r\n    public isPopup(): boolean {\r\n        return false;\r\n    }\r\n\r\n    public onClick(src: string) {\r\n        if(!this.params.onSelect){\r\n            this.source = src;\r\n        } else{\r\n            const onSelectVal = this.params.onSelect(src);\r\n            if(onSelectVal && onSelectVal.srcChanged){\r\n                this.source = onSelectVal.newVal;\r\n            }            \r\n        }\r\n        this.params.api.stopEditing();\r\n    }\r\n\r\n    public onKeyDown(event: any): void {}\r\n\r\n    ngOnDestroy(){\r\n        this._subs.unsubscribe();\r\n    }\r\n}\r\n","import { AfterViewInit,Component,ViewChild,ViewContainerRef, ElementRef } from \"@angular/core\";\r\nimport { ICellEditorAngularComp } from \"ag-grid-angular\";\r\n\r\n@Component({\r\n    selector: \"mask-editor\",\r\n    template: `<input  #textInput class=\"p-0 p-l-4 m-0 fill-height full-width\" [(ngModel)]=\"value\" type=\"text\"/> <!-- [textMask]=\"input_mask\" -->`,\r\n    styles: [\r\n        `\r\n        .flex-column{\r\n            display: flex;\r\n            flex-direction: column;\r\n        }\r\n      `,\r\n    ],\r\n})\r\nexport class MaskEditorComponent implements ICellEditorAngularComp, AfterViewInit {\r\n    public params       : {input_mask: any, value:any, enforce_length?:boolean} | undefined;\r\n    public value        : any;\r\n    @ViewChild(\"container\", { read: ViewContainerRef }) public container: ViewContainerRef | undefined;\r\n    @ViewChild(\"textInput\") textInput: ElementRef | undefined;\r\n\r\n    constructor() {}\r\n\r\n    // dont use afterGuiAttached for post gui events - hook into ngAfterViewInit instead for this\r\n    public ngAfterViewInit() {\r\n        setTimeout(()=>{\r\n            if (this.textInput) {\r\n                this.textInput.nativeElement.focus();\r\n            }\r\n        });\r\n    }\r\n\r\n    public agInit(params: any): void {\r\n        this.params            = params;\r\n        /* this.input_mask        = this.params?.input_mask; */\r\n        this.value             = this.params?.value;\r\n    }\r\n    isCancelAfterEnd() {\r\n       // our editor will reject any value greater than 1000\r\n        if(this.params?.enforce_length == false){\r\n            return this.value == null;\r\n        }else{\r\n            /* RT TODO: return this.value == null || this.value != null && this.value.length != ((this.input_mask.mask) as any[]).length; */\r\n            return false;\r\n        }\r\n   }\r\n\r\n\r\n    public getValue(): any {\r\n        return this.value;\r\n    }\r\n\r\n    public isPopup(): boolean {\r\n        return false;\r\n    }\r\n\r\n    // public onClick(val: string) {\r\n    //     this.value = val;\r\n    //     this.params.api.stopEditing();\r\n    // }\r\n\r\n    public onKeyDown(event: any): void {\r\n        /* let key = event.which || event.keyCode;\r\n        if (\r\n          key == 37 || // left\r\n          key == 39\r\n        ) {\r\n          // right\r\n          this.toggleMood(); */\r\n        /* event.stopPropagation(); */\r\n        /* } */\r\n    }\r\n}\r\n","import { AfterViewInit, Component, ViewChild, ViewContainerRef } from \"@angular/core\";\r\nimport { ICellEditorAngularComp } from \"ag-grid-angular\";\r\n\r\n\r\nconst KEY_BACKSPACE = 8;\r\nconst KEY_DELETE    = 46;\r\nconst KEY_F2        = 113;\r\nconst KEY_ENTER     = 13;\r\nconst KEY_TAB       = 9;\r\nconst KEY_LEFT      = 37;\r\nconst KEY_RIGHT     = 39;\r\nconst KEY_UP        = 38;\r\nconst KEY_DOWN      = 40;\r\n\r\n@Component({\r\n    selector: \"numeric-cell\",\r\n    template: `\r\n      <input #input input-check\r\n        [min]=\"params.minValue ? params.minValue : 0\"\r\n        [max]=\"params.maxValue ? params.maxValue : null\"\r\n        type=\"number\"\r\n        (keydown)=\"onKeyDown($event)\"\r\n        (blur)=\"toStop($event)\"\r\n        [(ngModel)]=\"value\"\r\n        class=\"p-0 p-l-4 m-0 fill-height full-width b-0\"\r\n      />\r\n    `,\r\n})\r\nexport class NumericEditorComponent implements ICellEditorAngularComp, AfterViewInit {\r\n    public params: any;\r\n    public value: number = 0;\r\n    public highlightAllOnFocus: boolean = true;\r\n    private cancelBeforeStart: boolean = false;\r\n\r\n    @ViewChild(\"input\", { read: ViewContainerRef }) public input: any;\r\n\r\n    public agInit(params: any): void {\r\n        this.params = params;\r\n        this.setInitialState(this.params);\r\n\r\n        // only start edit if key pressed is a number, not a letter\r\n        this.cancelBeforeStart = params.charPress && \"1234567890\".indexOf(params.charPress) < 0;\r\n    }\r\n\r\n    public setInitialState(params: any) {\r\n        let startValue;\r\n        let highlightAllOnFocus = true;\r\n\r\n        if (params.keyPress === KEY_BACKSPACE || params.keyPress === KEY_DELETE) {\r\n            // if backspace or delete pressed, we clear the cell\r\n            startValue = \"\";\r\n        } else if (params.charPress) {\r\n            // if a letter was pressed, we start with the letter\r\n            startValue = params.charPress;\r\n            highlightAllOnFocus = false;\r\n        } else {\r\n            // otherwise we start with the current value\r\n            startValue = params.value;\r\n            if (params.keyPress === KEY_F2) {\r\n                highlightAllOnFocus = false;\r\n            }\r\n        }\r\n\r\n        this.value = startValue;\r\n        this.highlightAllOnFocus = highlightAllOnFocus;\r\n    }\r\n\r\n    public toStop(e: any){\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n        this.params.api.stopEditing();\r\n    }\r\n\r\n    public getValue(): any {\r\n        return this.value;\r\n    }\r\n\r\n    public isCancelBeforeStart(): boolean {\r\n        return this.cancelBeforeStart;\r\n    }\r\n\r\n    // will reject the number if it greater than 1,000,000\r\n    // not very practical, but demonstrates the method.\r\n    public isCancelAfterEnd(): boolean {\r\n        return this.value > 1000000;\r\n    }\r\n\r\n    public onKeyDown(event: any): void {\r\n        if (this.isLeftOrRight(event) || this.deleteOrBackspace(event)) {\r\n            event.stopPropagation();\r\n            return;\r\n        }\r\n\r\n        if (\r\n            !this.finishedEditingPressed(event) &&\r\n            !this.isKeyPressedNumeric(event) &&\r\n            !this.isUpOrDown(event)\r\n        ) {\r\n            if (event.preventDefault) { event.preventDefault(); }\r\n        }\r\n    }\r\n\r\n    // dont use afterGuiAttached for post gui events - hook into ngAfterViewInit instead for this\r\n    public ngAfterViewInit() {\r\n        window.setTimeout(() => {\r\n            // this.input.element.nativeElement.focus();\r\n            if (this.highlightAllOnFocus) {\r\n                // this.input.element.nativeElement.select();\r\n\r\n                this.highlightAllOnFocus = false;\r\n            } else {\r\n                // when we started editing, we want the carot at the end, not the start.\r\n                // this comes into play in two scenarios: a) when user hits F2 and b)\r\n                // when user hits a printable character, then on IE (and only IE) the carot\r\n                // was placed after the first character, thus 'apply' would end up as 'pplea'\r\n                const length = this.input.element.nativeElement.value\r\n                    ? this.input.element.nativeElement.value.length\r\n                    : 0;\r\n                if (length > 0) {\r\n                    this.input.element.nativeElement.setSelectionRange(length, length);\r\n                }\r\n            }\r\n\r\n            if(this.params.allowFocus) {\r\n                this.input.element.nativeElement.focus();\r\n                this.input.element.nativeElement.select();\r\n            }\r\n\r\n            // this.input.element.nativeElement.focus();\r\n        });\r\n    }\r\n\r\n    private getCharCodeFromEvent(event: any): any {\r\n        event = event || window.event;\r\n        return typeof event.which == \"undefined\" ? event.keyCode : event.which;\r\n    }\r\n\r\n    private isCharNumeric(charStr: string): boolean {\r\n        return !!/\\d/.test(charStr);\r\n    }\r\n\r\n    private isKeyPressedNumeric(event: any): boolean {\r\n        const charCode = this.getCharCodeFromEvent(event);\r\n        const charStr = event.key ? event.key : String.fromCharCode(charCode);\r\n        return this.isCharNumeric(charStr);\r\n    }\r\n\r\n    private deleteOrBackspace(event: any) {\r\n        return (\r\n            [KEY_DELETE, KEY_BACKSPACE].indexOf(this.getCharCodeFromEvent(event)) > -1\r\n        );\r\n    }\r\n\r\n    private isLeftOrRight(event: any) {\r\n        return [KEY_LEFT, KEY_RIGHT].indexOf(this.getCharCodeFromEvent(event)) > -1;\r\n    }\r\n\r\n    private isUpOrDown(event: any) {\r\n        return [KEY_UP, KEY_DOWN].indexOf(this.getCharCodeFromEvent(event)) > -1;\r\n    }\r\n\r\n    private finishedEditingPressed(event: any) {\r\n        const charCode = this.getCharCodeFromEvent(event);\r\n        return charCode === KEY_ENTER || charCode === KEY_TAB;\r\n    }\r\n}\r\n","import { Component, OnInit } from \"@angular/core\";\r\nimport { AgCellMenuItems, CellCustomActions } from \"../grid.interface\";\r\nimport { getElementValue } from \"../../core.interface\";\r\nimport { MenuItem } from \"primeng/api\";\r\nimport { HelperService } from \"../../helper.service\";\r\n\r\n@Component({\r\n    selector    : \"app-cell-custom\",\r\n    templateUrl : \"./cell-custom.component.html\",\r\n    styleUrls   : [\"./cell-custom.component.scss\"]\r\n})\r\nexport class CellCustomComponent implements OnInit {\r\n    public params               : any;\r\n    public cellCustomActions    : CellCustomActions[] = [];\r\n    public checkboxValue: boolean | null = null;\r\n\r\n    constructor(private _helper: HelperService) {}\r\n\r\n    public getElementValue = getElementValue;\r\n\r\n    public ngOnInit() { }\r\n\r\n    public agInit(params: any) {\r\n        this.params = params;\r\n\r\n        if (this.params.actions != null) {\r\n            this.cellCustomActions = this.params.actions;\r\n\r\n            this.cellCustomActions.forEach((action)=>{\r\n\r\n                if( action.buttonOptions != null){\r\n                    action.buttonOptions.forEach((button: any)=>{\r\n                        if (button.class == null){\r\n                            button.class = \"btn btn-border slim\";\r\n                        }\r\n                    });\r\n                }\r\n\r\n                /* if(action.useButton == undefined){\r\n                    action.useButton = true;\r\n                } */\r\n                /* if(action.mode == undefined){\r\n                    action.mode = 'button';\r\n                } */\r\n                if(action.initParams){\r\n                    action.initParams(this.params);\r\n                }\r\n                action.menuItems = this.getMenuItems(action.menuItems || []);\r\n            });\r\n        }\r\n    }\r\n\r\n    public isPopup(){\r\n        return true;\r\n    }\r\n\r\n    getMenuItems(menuItems: AgCellMenuItems[], p?: any): MenuItem[]{\r\n        const m = (mm: AgCellMenuItems[]) => {\r\n            mm.forEach((mmm, i) => {\r\n                if((mmm.items || []).length > 0){\r\n                    m(mmm.items || []);\r\n                } else{\r\n                    const mCommand = Object.assign({}, mmm);\r\n                    mm[i].command = (e?:any) => {\r\n                        if(mCommand.clickCallback) {\r\n                            mCommand.clickCallback(e, this.params);\r\n                        }\r\n                    };\r\n\r\n                }\r\n            });\r\n        };\r\n        m(menuItems);\r\n        return menuItems;\r\n    }\r\n\r\n    public onSelect(e: any){}\r\n\r\n    public buttonClick(e: UIEvent , mat: CellCustomActions, params?: any) {\r\n        if(mat.isMulti){\r\n            params?.toggle(e);\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n        } else{\r\n            if (mat.clickCallback) {\r\n                mat.clickCallback(e, params);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getBgStyle(mat: CellCustomActions) {\r\n        if (mat.clickCallback) {\r\n            mat.bgStyle = { ...mat.bgStyle, ...{ cursor: \"pointer\" } };\r\n        }\r\n        return mat.bgStyle;\r\n    }\r\n}\r\n\r\n","<ng-container *ngFor=\"let pElement of cellCustomActions\" [ngTemplateOutlet]=\"pContents\" [ngTemplateOutletContext]=\"{\r\n    label: getElementValue(pElement, 'text', params), \r\n    btnClass: getElementValue(pElement, 'btnClass', params), \r\n    badgeClass: getElementValue(pElement, 'badgeClass', params)}\">\r\n    <!-- {{pElement | json}} -->\r\n    <ng-template #pContents let-label=\"label\" let-btnClass=\"btnClass\" let-badgeClass=\"badgeClass\">\r\n        <span *ngIf=\"params.data && !getElementValue(pElement, 'isHidden', params)\" [ngClass]=\"pElement.bgClass\" [ngStyle]=\"getBgStyle(pElement)\"\r\n        style=\"text-align:center\" class=\"ag-cell-custom\" [pTooltip]=\"getElementValue(pElement, 'title', params)\" [ngSwitch]=\"pElement.isMulti == true\">\r\n\r\n        <ng-container *ngSwitchCase=\"true\">\r\n        <p-splitButton [label]=\"label\" [icon]=\"getElementValue(pElement, 'icon', params)\" [model]=\"pElement.menuItems || []\" [appendTo]=\"'body'\" styleClass=\"p-button-text\"></p-splitButton> \r\n        </ng-container>\r\n        \r\n        <ng-container *ngSwitchDefault [ngSwitch]=\"pElement.mode\">\r\n            <span *ngSwitchCase=\"'button'\">\r\n                <!-- <p-button [icon]=\"getElementValue(pElement, 'icon')\" pRipple (click)=\"buttonClick($event, pElement, params)\" [label]=\"label\" \r\n                    [styleClass]=\"'p-button-sm p-button-text ' + getElementValue(pElement, 'iconClass')\"></p-button> -->\r\n                    <!-- {{badgeClass}} -->\r\n                    <button pButton pRipple type=\"button\" [label]=\"label\" [class]=\"btnClass\" (click)=\"buttonClick($event, pElement, params)\"></button>\r\n            </span>\r\n            <span *ngSwitchCase=\"'badge'\">\r\n                <p-badge [value]=\"label\" [severity]=\"badgeClass\" [styleClass]=\"'p-mr-2 ' + getElementValue(pElement, 'btnClass', params)\" (click)=\"buttonClick($event, pElement, params)\"></p-badge>\r\n            </span>\r\n            <span *ngSwitchDefault (click)=\"buttonClick($event, pElement, params)\" style=\"align-items: center;\" [pTooltip]=\"getElementValue(pElement, 'title', params)\">\r\n                <span *ngIf=\"!pElement.isReversedTextAndIcon\" [innerHTML]=\"label\"></span>\r\n                <span *ngIf=\"pElement.icon\" [class]=\"'eg-m-x-4 ' + getElementValue(pElement, 'iconClass', params) + ' ' + getElementValue(pElement, 'icon', params)\" [ngStyle]=\"getElementValue(pElement, 'iconStyle', params)\"></span>\r\n                <span *ngIf=\"pElement.isReversedTextAndIcon\" [innerHTML]=\"label\"></span>\r\n            </span>\r\n        </ng-container>\r\n\r\n        <div *ngIf=\"getElementValue(pElement, 'isCheckbox', params)\"\r\n                class=\"ag-wrapper ag-input-wrapper ag-checkbox-input-wrapper m-l-1\" [ngClass]=\"{'ag-checked':checkboxValue}\">\r\n            <input class=\"ag-input-field-input ag-checkbox-input\" [(ngModel)]=\"checkboxValue\" type=\"checkbox\" >\r\n        </div>\r\n    </span> <span innerHTML=\"pElement.extraText\"></span>\r\n    </ng-template>\r\n</ng-container>","import { Component, AfterViewInit, OnDestroy, ElementRef, ViewChild } from \"@angular/core\";\r\nimport { IToolPanel, IToolPanelParams } from 'ag-grid-community';\r\nimport { Subscription } from \"rxjs\";\r\nimport { HelperService } from \"../../helper.service\";\r\nimport { CoreService } from \"../../core.service\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\n@Component({ \r\n    selector: \"analysis-tool-panel\",\r\n    templateUrl: \"./analysis-tool-panel.html\",\r\n    styles: [\r\n        `:host{\r\n            width: 100% !important;\r\n        }\r\n        .savedButtons{\r\n            width: 100px !important;\r\n        }\r\n        /* .menuHeader{ */\r\n            .pButton, mat-button-wrapper{\r\n                width: 24px; height: 24px; line-height: 24px\r\n            }\r\n        /* } */\r\n\r\n        .columnDefs{\r\n            padding: 10px;\r\n            font-weight: 300;\r\n        }\r\n        ul{\r\n            padding-left:24px;\r\n            font-weight:bold;\r\n        }\r\n        ul li{\r\n            margin-top:2px;\r\n            margin-bottom:2px;\r\n        }\r\n        ul li:hover{\r\n            text-decoration:underline !important;\r\n        }\r\n        `,\r\n    ],\r\n})\r\nexport class AnalysisToolPanel implements IToolPanel, AfterViewInit, OnDestroy {\r\n    public params: any;\r\n    public newTitle: string | undefined;\r\n    public isPivotMode = false;\r\n    public chartObj: any = {isLoading: false};\r\n    public chartList: any[] = [];\r\n    public currentId: number | undefined;\r\n    public publish: boolean | undefined;\r\n    private _origTitle: string | undefined;\r\n    private _origId: number | undefined;\r\n    public isDisabled = false;\r\n    public last_update: any;\r\n\r\n    private _subscription = new Subscription();\r\n    @ViewChild(\"newChartTitle\") newChartTitle: ElementRef | undefined;\r\n    \r\n    constructor(\r\n        private _helper: HelperService,\r\n        private _coreService: CoreService,\r\n        private _messageService: MessageService\r\n        ) {\r\n            this._messageService.messageObserver.subscribe((a) => {});\r\n        }\r\n\r\n    agInit(params: IToolPanelParams): void {\r\n        this.params = params;\r\n        this.isPivotMode = true; //this._sharedService.globalVars.analysisMode == true;\r\n\r\n        if(this.params.cacheLastUpdate$){\r\n            this._subscription.add(this.params.cacheLastUpdate$.subscribe((cl: any) => {\r\n                this.last_update = cl;\r\n            }));\r\n        }        \r\n    }\r\n\r\n    refresh(): void {\r\n        throw new Error(\"Method not implemented.\");\r\n    }\r\n\r\n    toggleAnalysisMode(reset = false){\r\n        if(!reset){\r\n            this.isPivotMode = !this.isPivotMode;\r\n        } else{\r\n            this.isPivotMode = true;\r\n        }        \r\n        this.params.toolPanelEvents.toggleAnalysisMode(this.isPivotMode, reset);\r\n    }\r\n\r\n    cancelSave(){\r\n        this.newTitle = '';\r\n        this.currentId = undefined;\r\n        this.publish = false;\r\n        this.isDisabled = false;\r\n    }\r\n\r\n    deleteChart(){ \r\n        const justDelete = () => {\r\n            const deleteChart$ = this.params.toolPanelEvents.deleteChart(this.currentId);\r\n            if(deleteChart$){\r\n                const subRef = deleteChart$.subscribe((res: any) => {\r\n                    if(res){\r\n                        //this._helper.notification(\"Chart successfully deleted.\");\r\n                        this._messageService.add({detail: \"Chart successfully deleted.\", severity: \"success\"});\r\n                        this.chartObj.isLoading = true;\r\n                        this.params.toolPanelEvents.getColsAndChartState();\r\n                        this.newTitle = '';\r\n                        this.currentId = undefined;\r\n                    }\r\n                }, (err: any) => {}, ()=> {\r\n                    subRef.unsubscribe();\r\n                });\r\n            }\r\n        }\r\n\r\n        /* this._coreService.confirmDialog({dialogData: new ConfirmDialogModel(\"Confirm delete chart.\", {message: `Are you sure you want to delete the current chart?`}),\r\n            config: {panelClass: \"w-40-v\"},\r\n            doCallback: () => {\r\n                justDelete();\r\n            },\r\n            neverAskAgain: \"deleteChart\"\r\n        }); */\r\n        /*\r\n        RT eagna TODO\r\n        this._messageService.clear();\r\n        this._messageService.add({key: 'c', sticky: true, severity: 'info', summary:'Confirm delete chart', detail:'Are you sure you want to delete the current chart?'}); */\r\n    }\r\n\r\n    saveChart(name: any){\r\n        const justSave = (override?: boolean | undefined) => {\r\n            const saveChart$ = this.params.toolPanelEvents.saveChart(name, (override ? this.currentId : null), this.publish);\r\n            if(saveChart$){\r\n                const subRef = saveChart$.subscribe((id: number) => {\r\n                    if(id){\r\n                        //this._subsChartList();\r\n                        //clear for new creation\r\n                        //this.newTitle = '';\r\n                        //this.currentId = null;\r\n                        //if(res!.data!.id){\r\n                        this.currentId = id;\r\n                        //}\r\n                        \r\n                        this.chartObj.isLoading = true;\r\n                        this.params.toolPanelEvents.getColsAndChartState();\r\n                    }\r\n                }, (err: any) => {}, ()=> {\r\n                    if(subRef){\r\n                        subRef.unsubscribe(); \r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        if(name){\r\n            if(this.currentId || this.chartList.find(chart => chart.title == name)){\r\n                /* this._coreService.confirmDialog({dialogData: new ConfirmDialogModel(\"Confirm override chart.\", {message: `Are you sure you want to update the current chart?`}),\r\n                config: {panelClass: \"w-40-v\"},\r\n                doCallback: () => {\r\n                    justSave(true);\r\n                },\r\n                neverAskAgain: \"analysis\"\r\n                }); */\r\n                /*RT eagna TODO: this._messageService.clear();\r\n                this._messageService.add({key: 'c', sticky: true, severity: 'info', summary:'Confirm override chart.', detail:'Are you sure you want to update the current chart?'}); */\r\n            } else{\r\n                justSave();\r\n            }\r\n        }\r\n    }\r\n\r\n    onTitleChange(newTitle?: any){\r\n        if(this._origTitle == this.newTitle){\r\n            this.isDisabled = true;\r\n            this.currentId = this._origId;\r\n            /* this._coreService.notification(\"Chart name already exists.\", \"danger\"); */\r\n            this._messageService.add({detail: \"Chart name already exists.\", severity: \"error\"});\r\n        } \r\n    }\r\n\r\n    loadChart(chart: any){\r\n        if(chart){\r\n            const name = chart.title;\r\n            const id = chart.id || null;\r\n            const isGlobal = chart.isGlobal == true;\r\n\r\n            if(this.isPivotMode){\r\n                this._origTitle = name;\r\n                this._origId = id;\r\n\r\n                this.newTitle = name;\r\n                this.currentId = id;\r\n\r\n                this.publish = isGlobal;\r\n                \r\n                this.params.toolPanelEvents.restoreChart(name);\r\n            }\r\n        }\r\n    }\r\n    \r\n    ngAfterViewInit() {\r\n        this._subsChartList();\r\n        setTimeout(()=>{\r\n            this.newChartTitle?.nativeElement.focus();\r\n        });        \r\n    }\r\n\r\n    private _subsChartList(){\r\n        this.chartList = []\r\n        const ch$ = this.params.colsAndChartState$;\r\n        if(ch$){\r\n            this._subscription.add(ch$.subscribe((colsAndChartState: { [x: string]: any; }) => {\r\n                this.chartObj.isLoading = false;\r\n                if(this._helper.isNotEmpty(colsAndChartState)){\r\n                    this.chartList = this._helper.arraySortBy({arr: Object.keys(colsAndChartState)\r\n                        .filter(k => colsAndChartState[k] && colsAndChartState[k].save_as == \"chart\")\r\n                        .map(k => ({...colsAndChartState[k], title: k})), byId: \"title\"});\r\n                }\r\n            }));\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        \r\n    }\r\n}\r\n","<div class=\"ag-custom-panel text-left h-80-p\">\r\n    <div class=\"flex flex-column m-4\">\r\n    <button #btn type=\"button\" pButton label=\"'Turn ' + (isPivotMode ? 'off' : 'on') +  'Pivot Mode'\" (click)=\"toggleAnalysisMode()\"></button>\r\n\r\n    </div>\r\n    <div class=\"m-y-12\" [ngSwitch]=\"chartObj.isLoading\">\r\n        <ng-container *ngSwitchDefault [ngSwitch]=\"chartList && chartList | isNotEmpty\">\r\n            <ng-container *ngSwitchDefault>\r\n                <div class=\"fw-500 fs-14 p-x-4 p-y-8\">Available Charts</div>\r\n                <div class=\"fs-13 cursor-pointer p-l-4\" [title]=\"!isPivotMode ? 'Turn on Pivot Mode to use this feature.' : ''\"\r\n                    *ngFor=\"let chart of chartList\">\r\n                    <span [class.cursor-not-allowed]=\"!isPivotMode\" (click)=\"loadChart(chart)\"> [toolTip]=\"(chart.isGlobal ? 'This chart is public and made accessible to everyone' : 'This chart is only visible to ' + chart?.user + ' as the chart owner')\"\r\n                        <span *ngIf=\"chart | isNotEmpty\" class=\"pi\" [class.pi-public]=\"chart.isGlobal\" [class.pi-person]=\"!chart.isGlobal\" aria-label=\"Chart accessibility\" [title]=\"'Created by: ' + chart?.user\"></span>\r\n                        <span [innerHTML]=\"chart.title\"></span>\r\n                        <span *ngIf=\"!(chart?.charts | isNotEmpty)\" class='ag-icon ag-icon-pivot fs-12 pull-right' aria-label=\"Pivot Only\" title='Pivot View Only'></span>\r\n                        <sup *ngIf=\"chart?.charts?.length > 1\" class=\"pull-right\" [title]=\"'Charts'\">+{{(chart?.charts?.length - 1)}}</sup> \r\n                        <span *ngIf=\"chart?.charts | isNotEmpty\" class='ag-icon ag-icon-chart fs-12 pull-right' title=\"{{'Chart' + (chart?.charts?.length | plural)}}\"></span>                        \r\n                    </span>\r\n                </div>\r\n            </ng-container>   \r\n            <ng-container *ngSwitchCase=\"false\">\r\n                <div class=\"fw-500 fs-14 p-x-4 p-y-8\">No Chart Available</div>\r\n            </ng-container>\r\n        </ng-container>\r\n        <ng-container *ngSwitchCase=\"true\">\r\n            <span class=\"fw-500 fs-14 p-x-4 p-y-8\">Loading Grid Charts...</span>\r\n        </ng-container>\r\n\r\n        <div class=\"fw-500 p-x-4 p-y-8\"><!-- {{isPivotMode}} {{currentId}} --></div>\r\n            <div class=\"p-x-4\" [pTooltip]=\"!isPivotMode ? 'Turn on Pivot Mode to use this feature.' : ''\"><label>{{currentId ? 'Save current' : 'Create new'}} chart / pivot</label></div>\r\n            <input pInputText #newChartTitle style=\"padding: 2px; margin: 2px\" type=\"text\" autofocus\r\n                [placeholder]=\"'e.g. BAMs raised per Project'\" [(ngModel)]=\"newTitle\" (ngModelChange)=\"onTitleChange($event)\"\r\n                id=\"newChartTitle\" [disabled]=\"!isPivotMode || isDisabled\"/> \r\n\r\n            <!-- <mat-checkbox matPrefix class=\"inline mat-24 span p-l-4\" span *ngIf=\"isPivotMode\" [(ngModel)]=\"publish\" [class.cursor-not-allowed]=\"!isPivotMode\" tooltipPosition=\"above\" [pTooltip]=\"!isPivotMode ? 'Turn on Pivot Mode to use this feature.' : 'Publish the chart to be accessible to all users'\"></mat-checkbox> -->            \r\n            <button *ngIf=\"isPivotMode && currentId\" span-button matSuffix (click)=\"cancelSave()\" pTooltip=\"Clear the reference to the loaded chart to create a New Chart.\" [disabled]=\"!isPivotMode\">\r\n                <span class=\"mat-24 pi pi-clear\" aria-label=\"Cancel icon\"></span>\r\n            </button>\r\n\r\n            <button *ngIf=\"isPivotMode\" [class.cursor-not-allowed]=\"!isPivotMode || !newTitle || isDisabled\" [disabled]=\"!isPivotMode || !newTitle || isDisabled\" mat-button span-button (click)=\"publish = !publish\" \r\n                class=\"inline mat-24\" tooltipPosition=\"above\" [pTooltip]=\"(currentId ? 'This chart is currently' : 'The new chart will be') + (!publish ? ' private and cannot be accessed by other users.' : ' published and can be accessed by all users.') + ' Click to toggle then save to apply the change.'\"><span class=\"font-eg-accent p-0\">{{(publish ? 'public' : 'person')}}</span></button>\r\n            <button [disabled]=\"!isPivotMode || !newTitle || isDisabled\" [class.cursor-not-allowed]=\"!isPivotMode || !newTitle || isDisabled\" mat-button span-button (click)=\"saveChart(newTitle)\" \r\n                class=\"inline mat-24\"><span tooltipPosition=\"above\" [pTooltip]=\"!isPivotMode ? 'Turn on Pivot Mode to use this feature.' : (currentId ? 'Override the current chart.' : 'Save new chart.')\" class=\"font-success p-0\">save</span></button>\r\n            <button *ngIf=\"isPivotMode && currentId\" [disabled]=\"isDisabled\" [class.cursor-not-allowed]=\"isDisabled\" mat-button span-button (click)=\"deleteChart()\" tooltipPosition=\"above\" [pTooltip]=\"!isPivotMode ? 'Turn on Pivot Mode to use this feature.' : 'Delete the current Chart.'\">\r\n                <span class=\"inline mat-24 font-danger pi pi-delete\" aria-label=\"Delete icon\"></span>\r\n            </button>\r\n        </div>\r\n\r\n        <div class=\"flex full-width m-4\" *ngIf=\"isPivotMode\">\r\n            <div class=\"flex flex-b-80\">\r\n                <span *ngIf=\"last_update\">Cache Last Update: {{last_update | date : 'dd.MM.yyyy HH:mm'}}</span>\r\n            </div>\r\n            <div class=\"flex flex-b-10\">\r\n                <button mat-button span-button (click)=\"toggleAnalysisMode(true)\" tooltipPosition=\"above\" [pTooltip]=\"'Reload Data'\">\r\n                    <span class=\"inline mat-24 font-success pi-refresh\">refresh</span>\r\n                </button>\r\n            </div>        \r\n        </div>\r\n</div>","import { Component, ViewChild, AfterViewInit, ElementRef, OnDestroy } from \"@angular/core\";\r\nimport { IToolPanel, IToolPanelParams } from 'ag-grid-community';\r\nimport { fromEvent, Subscription, Subject } from \"rxjs\";\r\nimport { filter, debounceTime, distinctUntilChanged, tap } from \"rxjs/operators\";\r\nimport { UntypedFormGroup, UntypedFormBuilder, Validators, UntypedFormControl } from '@angular/forms';\r\nimport { CoreService } from \"../../core.service\";\r\nimport { HelperService } from \"../../helper.service\";\r\nimport { ConfirmationService, ConfirmEventType, Message, MessageService } from \"primeng/api\";\r\nimport { SharedService } from \"../../shared.service\";\r\nimport { UserPreferences } from \"../../core.interface\";\r\nimport { TitleCasePipe } from \"@angular/common\";\r\n\r\n@Component({\r\n    selector: \"custom-tools\",\r\n    templateUrl: \"./custom-tools-panel.html\",\r\n    styles: [\r\n        `:host{\r\n            width: 100% !important;\r\n        }\r\n        .savedButtons{\r\n            width: 100px !important;\r\n        }\r\n        .pButton, mat-button-wrapper{\r\n            width: 24px; height: 24px; line-height: 24px\r\n        }\r\n        .columnDefs{\r\n            padding: 10px;\r\n            font-weight: 300;\r\n        }\r\n        `,\r\n    ]\r\n})\r\nexport class CustomToolsPanel implements IToolPanel, AfterViewInit, OnDestroy {\r\n    params: any;\r\n\r\n    @ViewChild(\"searchInput\",{static:false}) searchInput: ElementRef | undefined;\r\n    private _subscription = new Subscription();\r\n\r\n    searchQuery: any;\r\n    formGroup: UntypedFormGroup | undefined/*  = new FormGroup({}) */;\r\n    colDefControls: any[] = [];\r\n    isReset: any;\r\n    controlsOrigState: any = {};\r\n\r\n    public profileCtrl = new UntypedFormControl('');\r\n    public selectedValue: any;\r\n    public profiles: any[] = [];\r\n    public newProfileTitle = '';\r\n    public saveAs = false;\r\n    public enableAnalysisToolPanel = false;\r\n\r\n    constructor(private _helper: HelperService,\r\n        private _fb: UntypedFormBuilder,\r\n        private _confirmationService: ConfirmationService,\r\n        private _sharedService: SharedService,\r\n        private _messageService: MessageService,\r\n        private _titleCase: TitleCasePipe\r\n        ) {}\r\n\r\n    public savedTheme: any;\r\n    private _old_savedTheme: any;\r\n    public isUserGlobalGridPrefEnabled = this._sharedService.appConfig.user?.globalGridPref == true;\r\n\r\n    agInit(params: IToolPanelParams): void {\r\n        if(this.savedTheme){\r\n            this._old_savedTheme = Object.assign({}, this.savedTheme);\r\n        }\r\n        this.params = params;\r\n        this.savedTheme = {value: this.params.agTheme, label: this._titleCase.transform(this.params.agTheme)};\r\n        if(this.params.columnDefsControls){ //this is always false, unless otherwise not provided intentionally\r\n            const controls: any = {\r\n                'excelMode':new UntypedFormControl(false),\r\n                'gridFont':new UntypedFormControl(false)\r\n            };\r\n            for (const controlKey in this.params.columnDefsControls) {\r\n                const controlObject = Object.assign({}, this.params.columnDefsControls[controlKey]);\r\n                if (this.params.columnDefsControls.hasOwnProperty(controlKey)) {\r\n                    controls[controlKey] = new UntypedFormControl(controlObject.value, [Validators.required]);\r\n                    this.colDefControls.push(controlKey); //no use for now\r\n                    this.controlsOrigState[controlKey] = controlObject.value;\r\n                }\r\n            }\r\n            /* this.controlsOrigState = Object.assign(controls); */\r\n            this.formGroup = this._fb.group(controls);\r\n\r\n            for (const controlKey in this.params.columnDefsControls) {\r\n                this.formGroup.get(controlKey)?.valueChanges.subscribe(value => {\r\n                    if(!this.isReset){\r\n                        this.optionsChanges(value, {field: controlKey, type:  this.params.columnDefsControls[controlKey].type});\r\n                    } else{\r\n                        this.isReset = false;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        if(this.params.loadedProfile){\r\n            const profileToReload = Object.assign({}, this.params.loadedProfile);\r\n            this.profileCtrl.setValue(profileToReload, {emitEvent: false});\r\n            this.selectedValue = profileToReload;\r\n            this.newProfileTitle = profileToReload!.title;\r\n        }\r\n\r\n        if(this.params.enableAnalysisToolPanel){\r\n            this.enableAnalysisToolPanel = this.params.enableAnalysisToolPanel;\r\n        }\r\n\r\n        this.searchQuery = this.params.searchQuery;\r\n    }\r\n\r\n    /* BEGIN PROFILE */\r\n    isDisabled = false;\r\n\r\n    ngDoCheck(){\r\n        if(this._old_savedTheme && this.savedTheme && this._old_savedTheme.value != this.savedTheme.value){\r\n            this.params.toolPanelEvents.saveTheme?.(this.savedTheme?.value);\r\n            this._old_savedTheme = Object.assign({}, this.savedTheme);\r\n        } else if(!this._old_savedTheme && this.savedTheme){\r\n            this._old_savedTheme = Object.assign({}, this.savedTheme);\r\n        }\r\n    }\r\n\r\n    onSelectionChange(src: any){\r\n        this.newProfileTitle = src!.value!.title;\r\n        if(this.newProfileTitle && this.params.toolPanelEvents.loadGridProfile){\r\n            this.params.toolPanelEvents.loadGridProfile({[this.newProfileTitle] :src!.value});\r\n        }\r\n    }\r\n\r\n    cancelSave(){\r\n        this.saveAs = false;\r\n        this.selectedValue = null;\r\n        this.profileCtrl.setValue(null, {emitEvent: false});\r\n    }\r\n\r\n    deleteProfile(){\r\n        const justDelete = () => {\r\n            const deleteChart$ = this.params.toolPanelEvents.deleteChart(this.selectedValue!.id);\r\n            if(deleteChart$){\r\n                const subRef = deleteChart$.subscribe((res: any) => {\r\n                    if(res){\r\n                        /* this._coreService.notification(\"Profile \" + this.selectedValue!.title + \" successfully deleted.\"); */\r\n                        this._messageService.add({detail: `Profile ${this.selectedValue!.title} successfully deleted.`, severity: \"success\"});\r\n                        this.cancelSave();\r\n                        this.params.toolPanelEvents.getColsAndChartState();\r\n                    }\r\n                }, (err: any) => {}, ()=> {\r\n                    subRef.unsubscribe();\r\n                });\r\n            }\r\n        }\r\n\r\n        /* this._coreService.confirmDialog({dialogData: new ConfirmDialogModel(\"Confirm delete profile.\", {message: `Are you sure you want to delete the current profile?`}),\r\n            config: {panelClass: \"w-40-v\"},\r\n            doCallback: () => {\r\n                justDelete();\r\n            },\r\n            neverAskAgain: \"deleteProfile\"\r\n        }); */\r\n        \r\n    }\r\n\r\n    private _isProfileExists(): boolean{\r\n        if(this.newProfileTitle){\r\n            return this.profiles.find((p: any) => p.title == this.newProfileTitle) != null;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private _subsGridProfileList(){\r\n        this.profiles = [];\r\n        const ch$ = this.params.colsAndChartState$;\r\n        if(ch$){\r\n            this._subscription.add(ch$.subscribe((colsAndChartState: any) => {\r\n                if(this._helper.isNotEmpty(colsAndChartState)){\r\n                    this.profiles = this._helper.arraySortBy({arr: Object.keys(colsAndChartState)\r\n                        .filter((k: any) => colsAndChartState[k] && colsAndChartState[k].save_as == \"profile\")\r\n                        .map((k: any) => ({...colsAndChartState[k], title: k})), byId: \"title\"});\r\n                }\r\n            }));\r\n        }\r\n    }\r\n\r\n    applyChanges(name: string){\r\n        const justSave = (override?: boolean) => {\r\n            const saveChart$ = this.params.toolPanelEvents.saveChart(name, (override ? this.selectedValue!.id : null), false, true);\r\n            if(saveChart$){\r\n                const subRef = saveChart$.subscribe((res: any) => {\r\n                    if(res){\r\n                        this.params.toolPanelEvents.getColsAndChartState();\r\n                    }\r\n                }, (err: any) => {}, ()=> {\r\n                    if(subRef){\r\n                        subRef.unsubscribe();\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        if((!this.selectedValue || this.saveAs) && this._isProfileExists()){ //always check when title is changed\r\n            /* this._coreService.notification(\"Profile exists.\", \"warn\"); */\r\n            this._messageService.add({detail: \"Profile exists.\", severity: \"warn\"})\r\n        } else{\r\n            if(this.saveAs){\r\n                justSave();\r\n            } else if(this.selectedValue){ \r\n                /* RT eagna TODO:\r\n                this._messageService.clear();\r\n                this._messageService.add({key: 'c', sticky: true, severity: 'info', summary:'Confirm override', detail:'Are you sure you want to update the profile?'}); */\r\n            }\r\n        }\r\n    }\r\n    /* END PROFILE*/\r\n\r\n    optionsChanges(value: any, whichField: {field: string, type?: string}){\r\n        if(this.params.api && this.params.columnApi){\r\n            this._messageService.clear();\r\n            this._confirmationService.confirm({\r\n                message: 'Are you sure you want to apply this new Grid Column Definition?\\nThis will reset the Grid.',\r\n                header: 'Confirm Changes',\r\n                icon: 'pi pi-exclamation-triangle',\r\n                accept: () => {\r\n                    this._messageService.add({severity:'info', summary:'Confirmed', detail:'You have accepted'});\r\n                },\r\n                reject: (type: ConfirmEventType) => {\r\n                    switch(type) {\r\n                        case ConfirmEventType.REJECT:\r\n                            this._messageService.add({severity:'error', summary:'Rejected', detail:'You have rejected'});\r\n                        break;\r\n                        case ConfirmEventType.CANCEL:\r\n                            this._messageService.add({severity:'warn', summary:'Cancelled', detail:'You have cancelled'});\r\n                        break;\r\n                    }\r\n                }\r\n            });\r\n    \r\n        }\r\n    }\r\n\r\n    /* saveTheme(){\r\n        this.params.toolPanelEvents.saveTheme?.(this.savedTheme?.value);\r\n    } */\r\n\r\n    updateTotals(): void {}\r\n\r\n    applyExcelModeChanges(value: any, whichField: any){\r\n        /* const that = this;\r\n        this._sharedService.setGridExcelMode(value);\r\n        this._subscription.add(\r\n            that.params.toolPanelEvents.applyColumnDefChanges(value, whichField.field).subscribe(changeSuccess => {\r\n\r\n                if(changeSuccess){\r\n                    this.controlsOrigState[whichField.field] = value;\r\n                    const newColDef = Object.assign([], that.params.columnApi.columnController.columnDefs.map(col => {\r\n                        let newVal = value;\r\n                        let deleteAttr = false;\r\n                        if(whichField.field == \"excelMode\"){ //TODO: convert to having 3rd object of {field, fieldType and replacingValue}. 4th unsetMember: boolean\r\n                            if(value){\r\n                                newVal = \"windows\";\r\n                            } else{\r\n                                deleteAttr = true;\r\n                            }\r\n                        }\r\n\r\n                        if(whichField.type){\r\n                            if(!deleteAttr){\r\n                                if(col[whichField.type] == null){\r\n                                    col[whichField.type] = {};\r\n                                }\r\n                                col[whichField.type][whichField.field] = newVal;\r\n                            } else if(col[whichField.type] != null){\r\n                                delete col[whichField.type][whichField.field];\r\n                            }\r\n                        } else {\r\n                            if(!deleteAttr){\r\n                                col[whichField.field] = newVal;\r\n                            } else if(col[whichField.field] != null){\r\n                                delete col[whichField.field];\r\n                            }\r\n                        }\r\n                        return col;\r\n                    }));\r\n                    that.params.api.setColumnDefs([]);\r\n                    that.params.api.setColumnDefs(newColDef);\r\n                    this.formGroup.markAsPristine();\r\n\r\n                } else{\r\n                    this.isReset = true;\r\n                    this.formGroup.reset(this.controlsOrigState);\r\n                }\r\n        }, err => {\r\n            this.isReset = true;\r\n            this.formGroup.reset(this.controlsOrigState);\r\n        })); */\r\n    }\r\n    \r\n    refresh(): void {}\r\n\r\n    saveColumns() {\r\n        this.params.toolPanelEvents.saveColumns();\r\n    }\r\n\r\n    toggleFontMonospace(){\r\n        this.params.toolPanelEvents.toggleFontMonospace();\r\n\r\n    }\r\n    saveFilters() {\r\n        this.params.toolPanelEvents.saveFilters();\r\n    }\r\n\r\n    clearColumns() {\r\n        this.params.toolPanelEvents.clearColumns();\r\n    }\r\n\r\n    clearFilters() {\r\n        this.params.toolPanelEvents.clearFilters();\r\n    }\r\n\r\n    maximize(e: any) {\r\n        this.params.toolPanelEvents.resize();\r\n    }\r\n\r\n    moreOptions(e: any) { }\r\n\r\n    ngAfterViewInit() {\r\n        if (this.searchInput) {\r\n            this._subscription.add(\r\n                fromEvent(this.searchInput.nativeElement, \"keyup\")\r\n                .pipe(\r\n                    filter(Boolean),\r\n                    debounceTime(1000),\r\n                    /* distinctUntilChanged((p: KeyboardEvent, c: KeyboardEvent) => { return true; }), */\r\n                    tap((/* event: KeyboardEvent */) => {\r\n                        this.searchQuery.value = this.searchInput?.nativeElement.value.trim();\r\n                        this.params.toolPanelEvents.requery({ searchQuery: this.searchQuery });\r\n                    })\r\n                )\r\n                .subscribe());\r\n        }\r\n        this._subsGridProfileList();\r\n    }\r\n\r\n    toggleGridAnalytics(){\r\n        this.params.enableAnalysisToolPanel = !this.params.enableAnalysisToolPanel;\r\n        this.params.toolPanelEvents.toggleGridAnalytics(this.params.enableAnalysisToolPanel);\r\n    } \r\n\r\n    ngOnDestroy() {\r\n        this._subscription.unsubscribe();\r\n    }\r\n}\r\n","<div class=\"ag-custom-panel text-left h-80-p\">\r\n    <!-- <div class=\"m-t-12 m-b-16\">\r\n        <div class=\"fw-500  p-x-4\">Search</div>\r\n        <div *ngIf=\"params.enableGridSearch\" >\r\n            <input #searchInput style=\"padding: 2px; margin: 2px\" class=\"eg-w-94-p\" type=\"text\" autofocus\r\n                [placeholder]=\"('translations.searchGrid' | translate) + '...'\"\r\n                id=\"customSearch\" ref=\"customSearch\" name=\"customSearch\"/>\r\n        </div>\r\n    </div> -->\r\n    <div style=\"display: inline\">\r\n        <span class=\"p-input-icon-left full-width\">\r\n            <i class=\"fa fa-search\"></i>\r\n            <input #searchInput type=\"text\" class=\"full-width\" pInputText [placeholder]=\"'translations.search' | translate\">\r\n        </span>\r\n    </div>\r\n\r\n    <div class=\"full-width flex align-items-center bold pl-1 pt-1\">\r\n        <!-- <span *ngIf=\"!lData?.isCollapsed\" class=\"align-items-center flex flex-1\"></span> -->\r\n        <span class=\"full-width flex flex-1\" [innerHTML]=\"'translations.viewSettings' | translate\"></span>\r\n    </div>\r\n\r\n    <div class=\"full-width flex\">\r\n        <span class=\"pl-1\" [innerHTML]=\"'translations.columns' | translate\"></span>\r\n        <span class=\"flex full-width justify-content-end\">\r\n            <button type=\"button\" pButton pRipple [pTooltip]=\"'translations.clearColumnsAndSorting' | translate\" class=\"p-button-rounded p-button-danger p-button-text\" icon=\"pi pi-trash\" (click)=\"clearColumns()\"></button>\r\n            <button type=\"button\" pButton pRipple [pTooltip]=\"'translations.saveColumnsAndSorting' | translate\" class=\"p-button-rounded p-button-info p-button-text\" icon=\"pi pi-save\"(click)=\"saveColumns()\"></button>\r\n        </span>\r\n    </div>\r\n\r\n    <div class=\"full-width flex\">\r\n        <span class=\"pl-1\" [innerHTML]=\"'translations.filters' | translate\"></span>\r\n        <span class=\"flex full-width justify-content-end\">\r\n            <button type=\"button\" pButton pRipple [pTooltip]=\"'translations.clearFilters' | translate\" class=\"p-button-rounded p-button-danger p-button-text\" icon=\"pi pi-trash\" (click)=\"clearFilters()\"></button>\r\n            <button type=\"button\" pButton pRipple [pTooltip]=\"'translations.saveFilters' | translate\" class =\"p-button-rounded p-button-info p-button-text\"  icon=\"pi pi-save\"(click)=\"saveFilters()\" [class.cursor-not-allowed]=\"params.isSaveFilterDisabled\" [disabled]=\"params.isSaveFilterDisabled\" [title]=\"params.isSaveFilterDisabled ? 'Saving of filter is not allowed when Pivoting' : ''\"></button>\r\n        </span>\r\n    </div>\r\n\r\n    <div class=\"full-width flex\">\r\n        <span class=\"pl-1 full-width\" [innerHTML]=\"'translations.updateTheme' | translate\"></span>\r\n        <span class=\"flex full-width justify-content-end pr-1\">\r\n            <p-dropdown [pTooltip]=\"isUserGlobalGridPrefEnabled ? ('translations.updateThemeDisabled' | translate) : ''\" [styleClass]=\"isUserGlobalGridPrefEnabled ? 'bg-gray-500' : ''\" [options]=\"[{value: 'balham', label: 'Balham'}, {value: 'alpine', label: 'Alpine'}]\" [(ngModel)]=\"savedTheme\" optionLabel=\"label\"\r\n                        [readonly]=\"isUserGlobalGridPrefEnabled\" [showClear]=\"!isUserGlobalGridPrefEnabled\" ></p-dropdown> <!-- (ngModelChange)=\"saveTheme()\" -->\r\n        </span>\r\n    </div>\r\n\r\n    <div class=\"m-y-12\">\r\n        <!-- <div class=\"fw-500 p-x-4 p-y-8\">{{'translations.viewSettings' | translate}}</div> -->\r\n        <table class=\"full-width\">\r\n            <!-- <tr class=\"p-y-8\">\r\n                <td class=\"fw-400 eg-w-80-p\" valign=\"top\">{{'translations.columns' | translate}}</td>\r\n                <td align=\"right\" class=\"eg-w-10-p\" [attr.colspan]=\"!params.enableSaveColumnsAndFilters ? 2 : 1\">\r\n                    <button type=\"button\" pButton pRipple pTooltip=\"{{'translations.clearColumnsAndSorting' | translate}}\" class=\"p-button-rounded p-button-danger p-button-text\" icon=\"pi pi-trash\" (click)=\"clearColumns()\"></button>\r\n                </td>\r\n                <td *ngIf=\"params.enableSaveColumnsAndFilters\" align=\"left\" class=\"eg-w-10-p eg-pr-12\">\r\n                    <button type=\"button\" pButton pRipple pTooltip=\"{{'translations.saveColumnsAndSorting' | translate}}\" class=\"p-button-rounded p-button-info p-button-text\" icon=\"pi pi-save\"(click)=\"saveColumns()\"></button>\r\n                </td>\r\n            </tr>\r\n            <tr class=\"eg-p-y-8\" >\r\n                <td class=\"fw-400 eg-w-80-p\">{{'translations.filters' | translate}}</td>\r\n                <td align=\"right\" class=\"eg-w-10-p\" [attr.colspan]=\"!params.enableSaveColumnsAndFilters ? 2 : 1\">\r\n                    <button type=\"button\" pButton pRipple pTooltip=\"{{'translations.clearFilters' | translate}}\" class=\"p-button-rounded p-button-danger p-button-text\" icon=\"pi pi-trash\" (click)=\"clearFilters()\"></button>\r\n                </td>\r\n                <td *ngIf=\"params.enableSaveColumnsAndFilters\" align=\"left\" class=\"eg-w-10-p eg-pr-12\">\r\n                    <button type=\"button\" pButton pRipple pTooltip=\"{{'translations.saveFilters' | translate}}\" class =\"p-button-rounded p-button-info p-button-text\"  icon=\"pi pi-save\"(click)=\"saveFilters()\" [class.cursor-not-allowed]=\"params.isSaveFilterDisabled\" [disabled]=\"params.isSaveFilterDisabled\" [title]=\"params.isSaveFilterDisabled ? 'Saving of filter is not allowed when Pivoting' : ''\"></button>\r\n                </td>\r\n            </tr> -->\r\n            <!-- <tr class=\"eg-p-y-8\" *ngIf=\"savedTheme && params.enableSaveColumnsAndFilters\">\r\n                <td class=\"fw-400 eg-w-90-p\">{{'translations.updateTheme' | translate}}</td>\r\n                <td class=\"eg-w-10-p\" [attr.colspan]=\"2\">\r\n                    <p-dropdown [pTooltip]=\"isUserGlobalGridPrefEnabled ? ('translations.updateThemeDisabled' | translate) : ''\" [styleClass]=\"isUserGlobalGridPrefEnabled ? 'bg-gray-500' : ''\" [options]=\"[{value: 'balham', label: 'Balham'}, {value: 'alpine', label: 'Alpine'}]\" [(ngModel)]=\"savedTheme\" optionLabel=\"label\"\r\n                        [readonly]=\"isUserGlobalGridPrefEnabled\" [showClear]=\"!isUserGlobalGridPrefEnabled\" (ngModelChange)=\"saveTheme()\"></p-dropdown> placeholder=\"{{'translations.saveTheme'}}\"\r\n                </td>\r\n            </tr> -->\r\n            <!-- <tr class=\"eg-p-y-8\" *ngIf=\"formGroup\" [formGroup]=\"formGroup\">\r\n                <td class=\"fw-400\">Excel Mode</td>\r\n                <td colspan=\"2\" class=\"w-20-p pr-12\" align=\"right\">\r\n                    <p-toggleButton [onLabel]=\"'On'\" [offLabel]=\"'Off'\" [onIcon]=\"'pi pi-check'\" [offIcon]=\"'pi pi-times'\" formControlName=\"excelMode\"></p-toggleButton>\r\n                </td>\r\n            </tr> -->\r\n        </table>\r\n    </div>\r\n</div>","import { Injectable, } from '@angular/core';\nimport { CellClassParams, ColDef, ColGroupDef, FirstDataRenderedEvent, GridApi, RowNode, SetFilterValuesFuncParams, SideBarDef } from 'ag-grid-community';\nimport { getLocaleType } from '../core.interface';\nimport { CoreService } from '../core.service';\nimport { Core } from '../core.static';\nimport { HelperService } from '../helper.service';\nimport { aggsType, colsAndCharts, columnTypeIsA, COLUMN_TYPE, fieldMapperType, GridPeferences, GridResponse, GRID_TYPE } from './grid.interface';\n\n@Injectable({providedIn: 'root'})\nexport class GridService{\n    constructor(private _helper: HelperService,\n        private _coreService: CoreService\n    ){}\n\n    private _aggsValue!: aggsType[] | undefined;\n    public get aggsValue(): aggsType[] | undefined {\n        return this._aggsValue;\n    }\n    public set aggsValue(value: aggsType[] | undefined) {\n        this._aggsValue = value;\n    }\n\n    /* headerName: key,\n        colId: key,\n        //pinned: \"left\",\n        field:key,\n        hide: false,\n        width: 100,\n        enableValue: true,\n        sortable: true,\n        lockPosition: false,\n        cellClass: \"no-border\",\n        rowGroup: false,\n        type: this._checkTypes(paramData[key]) */\n\n    public defaultColDef: ColDef = {\n        hide: false,\n        sortable: true,\n        resizable: true,\n        // allow every column to be aggregated\n        enableValue: true,\n        // allow every column to be grouped\n        enableRowGroup: true,\n        // allow every column to be pivoted\n        enablePivot: true\n    };\n\n    public isColGroupDef(eachCol: ColGroupDef | ColDef): eachCol is ColGroupDef{\n        return eachCol.hasOwnProperty(\"children\");\n    }\n\n    public isColDef(eachCol: ColGroupDef | ColDef): eachCol is ColDef{\n        return !eachCol.hasOwnProperty(\"children\");\n    }\n\n    public getDefaultColDef(extraParams: any, \n        defColDefOverride: ColDef | undefined,\n        fieldMapper: fieldMapperType = {},\n        filterType: \"agTextColumnFilter\" | \"agNumberColumnFilter\" | \"agDateColumnFilter\" = \"agTextColumnFilter\", \n        eachCol?: ColDef): ColDef{\n        const _updatedLocale = this._coreService.getLocaleFormat();\n        return {...this.defaultColDef,\n            /* floatingFilter: extraParams.floatingFilter, */\n            ...defColDefOverride,\n            ...(extraParams.rowModelType == GRID_TYPE.CLIENT_SIDE ? {keyCreator: (kParams) => {\n                if(typeof kParams.value == \"object\" && kParams.value?.[\"name\"]){\n                    return kParams.value[\"name\"];\n                }\n                return kParams.value;\n            }} : {}),\n            ...this.getMultiFilters(extraParams, filterType, eachCol, fieldMapper),\n            ...(filterType == \"agDateColumnFilter\" ? {\n                cellEditor: 'datePicker', valueFormatter: p => {\n                    //const _updatedLocale = this._coreService.getLocaleFormat();\n                    return this.reformatIfDate(p.value, _updatedLocale._dateFormat, _updatedLocale._locale, p)\n                }, ...this.dateComparator(false)}: {}),\n            ...(filterType == \"agNumberColumnFilter\" ? {...this.numberComparator(), valueFormatter: p => {\n                if(p.value != null){\n                    //const _updatedLocale = this._coreService.getLocaleFormat();\n                    return this._helper.pipeDecimal(p.value, _updatedLocale._locale, p.colDef.cellRendererParams?.digitsInfo);\n                }\n                return p.value;\n            } } : {})\n        };\n    }\n\n    public getMultiFilters(extraParams: any, filterType: \"agTextColumnFilter\" | \"agNumberColumnFilter\" | \"agDateColumnFilter\" = \"agTextColumnFilter\", eachCol?: ColDef, fieldMapper: fieldMapperType = {}) : ColDef{\n        const filters = [\n            {\n            filter: filterType,\n            filterParams: {\n                buttons: ['reset'].concat(extraParams.rowModelType != GRID_TYPE.CLIENT_SIDE ? ['apply'] : []),\n                filterOptions: [...['notBlank', 'equals', 'notEqual'],\n                ...(filterType == 'agTextColumnFilter' ? [\n                    'contains',\n                    'notContains',\n                    'startsWith',\n                    'endsWith']: \n                    ['lessThan',\n                    'lessThanOrEqual',\n                    'greaterThan',\n                    'greaterThanOrEqual',\n                    'inRange']\n                    )\n                ],\n                defaultOption: 'equals',\n                ...(filterType == \"agNumberColumnFilter\" ? this.numberComparator(true) : \n                    (filterType == \"agDateColumnFilter\" ? {...this.dateComparator(true), browserDatePicker: false} : {}))\n                }\n            },\n            {filter: 'agSetColumnFilter', \n                filterParams: {\n                    ...eachCol?.filterParams,\n                    selectAllOnMiniFilter: false,\n                    defaultToNothingSelected: true,\n                    buttons: ['reset', 'apply'],\n                    closeOnApply: true,\n                    ...(extraParams.rowModelType != GRID_TYPE.CLIENT_SIDE ? {\n                        refreshValuesOnOpen: true, newRowsAction: \"keep\", values: (p: SetFilterValuesFuncParams) => {\n                            if(p.colDef.filterParams?.['filterFunc'] && typeof p.colDef.filterParams?.['filterFunc'] == 'function'){\n                                p.success(p.colDef.filterParams?.['filterFunc']?.(p));\n                            } else{\n                                let colId = p.colDef.filterParams?.['filterKey'] || p.column?.getColId();\n                                let _fieldToUse = colId;\n                                if(colId && this._aggsValue !== undefined){\n                                    const aggVal = this._aggsValue.find((eachAgg) => eachAgg.hasOwnProperty(colId));\n                                    if(aggVal && aggVal[colId]){\n                                        p.success(aggVal[colId].map((val: any) => {\n\n                                            /* RT FILTERING KEY TO USE _fieldToUse */\n                                            Object.keys(val).forEach((_eaKey: string) => {\n                                                if(_eaKey != 'count'){\n                                                    const _fSplit = _eaKey.split(\"__\");\n                                                    if(_fSplit?.length > 0 && _fSplit[1]){\n                                                        _fieldToUse = _eaKey;\n                                                        if(!fieldMapper?.[colId]){\n                                                            fieldMapper[colId] = {filterKey: _fieldToUse};\n                                                        }\n                                                        \n                                                    }\n                                                }\n                                            });\n                                            /* if(fieldMapper?.[colId]?.filterKey){\n                                                _fieldToUse = fieldMapper?.[colId]?.filterKey;\n                                            } */\n                                            return val?.[_fieldToUse];\n                                        }));\n                                    } else{\n                                        p.success([]); //p.success(this._aggsValue[p.column?.getColId()] || []);  \n                                    }\n                                }\n                            }\n                            \n                        }\n                    } : {newRowsAction: \"clear\"}),\n                    ...(filterType == \"agNumberColumnFilter\" ? this.numberComparator(true): \n                        (filterType == \"agDateColumnFilter\" ? {\n                            valueFormatter: (p: any) => {\n                                const _updatedLocale = this._coreService.getLocaleFormat();\n                                return this.reformatIfDate(p.value, _updatedLocale._dateFormat, _updatedLocale._locale, p);\n                            }, ...this.dateComparator(true) } : {})),\n                }\n            }\n        ];\n\n        const toReturn = {\n            filter: \"agMultiColumnFilter\",\n            filterParams: {\n                filters\n            }\n        };\n        return toReturn;\n    }\n\n    public getSideBar(params: any, defaultToolPanel = '', columnParams = null, iconKey = \"custom-grid\", pivotMode = false): any {\n        const defTP = pivotMode ? \"analysisPanel\" : defaultToolPanel;\n        const colParams = columnParams;\n        const toolPanels: any/* : SideBarDef */ = {\n            toolPanels: [\n                /* {\n                    id: \"save\",\n                    labelDefault: \"\",\n                    //labelKey: \"filters\",\n                    iconKey: \"custom-save\",\n                    toolPanel: \"agSaveColumn\",\n                }, */\n                {\n                    id: \"filters\",\n                    labelDefault: \"Filters\",\n                    labelKey: \"filters\",\n                    iconKey: \"filter\",\n                    toolPanel: \"agFiltersToolPanel\",\n                },\n                {\n                    id: \"columns\",\n                    labelDefault: \"Columns\",\n                    labelKey: \"columns\",\n                    iconKey: \"columns\",\n                    toolPanel: \"agColumnsToolPanel\",\n                    toolPanelParams: colParams\n                }\n            ],\n            defaultToolPanel: defTP\n        };\n        if (params.enableCustomToolPanel) {\n            toolPanels.toolPanels.splice(0, 0, {\n                id: \"customTools\",\n                labelDefault: Core.Localize('gridOptions'),\n                labelKey: \"customTools\",\n                iconKey,\n                toolPanel: \"customToolsPanel\",\n                toolPanelParams: params\n            });\n        }\n        if (params.enableAnalysisToolPanel) {\n            toolPanels.toolPanels.push({\n                id: \"analysisPanel\",\n                labelDefault: \"Insights (BETA)\",\n                labelKey: \"analysis\",\n                iconKey:'chart',\n                toolPanel: \"analysisPanel\",\n                toolPanelParams: params,\n                minWidth: 500,\n                maxWidth: 500,\n                width: 500,\n            });\n        }\n        return toolPanels;\n    }\n\n    public reformatIfDate(val: any, dateFormat: string, locale: string, p?: any, tz?: string){\n        if(!p || (p.colDef.type && p.colDef.type.includes(COLUMN_TYPE.DATE_COLUMN))){\n            if(val){\n                try {\n                    if(val != null && typeof(val) == typeof(1)){//Date in Miliseconds\n                        return (this._helper.pipeDate(val, dateFormat, locale, tz));\n                    } else if(val != null && typeof(val) == typeof(new Date())){\n                        return (this._helper.pipeDate(val, dateFormat, locale, tz));\n                    } else if(val != null && typeof val == \"string\" && val.indexOf(\"T\") >= 0){\n                        return (this._helper.pipeDate(val, dateFormat, locale, tz));\n                    } else{\n                        return (this._helper.pipeDate(val, dateFormat, locale, tz, true));\n                    }    \n                } catch (error) {\n                    console.warn('reformatIfDate', error);\n                    return val;\n                }\n            }\n        }\n        return val;\n    }\n\n    public numberComparator(forGroupOrFiltering = false){ \n        return {\n            comparator: (a: any, b: any) => {\n            const valA = parseInt(a);\n            const valB = parseInt(b);\n            if(forGroupOrFiltering){\n                if (valA === valB) return 0;\n                return valA > valB ? 1 : -1;    \n            } else {\n                return valA - valB;\n            }\n        }};\n    }\n\n    public dateComparator(forGroupOrFiltering = false, p?: any){\n        return {\n            //filterLocalDateAtMidnight\n            comparator: (date1: any, cellValue: any) => {\n                const _updatedLocale = this._coreService.getLocaleFormat();\n                const dateAsString = this.reformatIfDate(cellValue, _updatedLocale._dateFormat, _updatedLocale._locale);\n                if (dateAsString == null) {\n                    return 0;\n                }\n                // In the example application, dates are stored as dd.mm.yyyy\n                // We create a Date object for comparison against the filter date\n                const dateParts = dateAsString.split(_updatedLocale._dateDelimeter);\n                const day = Number(dateParts[0]);\n                const month = Number(dateParts[1]) - 1;\n                const year = Number(dateParts[2]);\n                const cellDate = new Date(year, month, day);\n\n                // Now that both parameters are Date objects, we can compare\n                if(forGroupOrFiltering){\n                    if (cellDate < date1) {\n                        return -1; \n                    } else if (cellDate > date1) {\n                        return 1;\n                    }\n                } else{\n                    if (dateAsString < date1) {\n                        return 1; \n                    } else if (dateAsString > date1) {\n                        return -1;\n                    }\n                    //return date1 == dateAsString ? 0 : (date1 > dateAsString ? 1 : -1);\n                }\n                return 0;\n            },\n        };\n    }\n\n    public extractApiColumns(_firstResult: GridResponse | undefined, isDebug = false): ColDef[]{\n        if(isDebug){\n            console.log(\"this._firstResult\", _firstResult);\n        }\n\n        let colDefs: ColDef[] = [];\n        if(this._helper.isNotEmpty(_firstResult)){\n            colDefs = _firstResult?.fields?.map(_col => {\n                let _toReturn: ColDef;\n                let field = '_id';\n                let colId = field;\n                let headerName;\n                let headerTooltip;\n                let type : string | string[] = COLUMN_TYPE.DEFAULT_SET_COLUMN;\n                \n                if(this._helper.isNotEmpty(_col)){\n                    field = Object.keys(_col)?.[0];\n                    colId = field;\n                    \n                    const _toType = _col[field];\n                    const _toEval = `COLUMN_TYPE.${_toType.toUpperCase()}_COLUMN`;\n\n                    /* console.log({_toType, _toEval}); */\n                    if(_toType){\n                        try{\n                            const _evalType = eval(_toEval);\n                            if(_evalType){\n                                if(isDebug){\n                                    console.log({_toType, field, _toEval});\n                                }\n                                type = _evalType;\n                            }\n                        } catch(e){\n                            switch(_toType){\n                                case \"Decimal\": type = COLUMN_TYPE.DECIMAL_COLUMN; break;\n                                case \"Boolean\": type = COLUMN_TYPE.BOOLEAN_COLUMN; break;\n                                case \"Number\": type = COLUMN_TYPE.NUMBER_COLUMN; break;\n                                case \"Float\": type = COLUMN_TYPE.FLOAT_COLUMN; break;\n                                case \"Date\": type = COLUMN_TYPE.DATE_COLUMN; break;\n                                case \"String\": break; \n                                default: console.warn({_toType, e});\n                            }\n                        }\n                    }\n\n                    if(isDebug){\n                        console.log({_col: _col, field});\n                    }\n\n                    const _localizedCol = Core.Localize(field);\n                    if(_localizedCol && _localizedCol != `{translations.${field}}`){\n                        headerName = _localizedCol;\n                    }\n                    headerTooltip = (`${(_localizedCol || field)} ${type}`);\n\n                    if(GridService.ObjectFields.includes(_col?.form) ){\n                        type = [...(Array.isArray(type) ? type : [type]), COLUMN_TYPE.NEW_AUTOCOMPLETE_COLUMN];\n                    }\n                }\n                \n                _toReturn = {...this.defaultColDef, field, colId, headerName, headerTooltip, type};\n                if(isDebug){\n                    console.log({_col, _toReturn});\n                }\n                return _toReturn;\n            }) || [];\n        }\n        return colDefs;\n    }\n\n    public columnTypeCheck(columnType: string | string[], columnTypeToCheck: string | string[], returnAsObject = false): boolean | columnTypeIsA{\n        let isMatched = false;\n        let toReturnAsObject: columnTypeIsA = {};\n        if(columnType && columnTypeToCheck){\n            const colType = (Array.isArray(columnType) ? columnType : [columnType]);\n            const colTypeToCheck = (Array.isArray(columnTypeToCheck) ? columnTypeToCheck : [columnTypeToCheck]);\n            isMatched = colType.some(ct => colTypeToCheck.includes(ct));\n\n            if(isMatched && returnAsObject){\n                if(colType.includes(COLUMN_TYPE.UNIQUE_CASE_SENSITIVE_COLUMN)){\n                    toReturnAsObject.isUniqueCaseSensitive = true;\n                }\n                if(colType.includes(COLUMN_TYPE.VALIDATE_WHEN_COLUMN)){\n                    toReturnAsObject.isRequiredWhen = true;\n                }\n            }\n        }\n        return (returnAsObject ? toReturnAsObject : isMatched);\n    }\n\n    public isCellEditable(p: any, whichCol?: string){\n        let pColDef;\n        if(p.columnApi && p.node){\n            pColDef =  p.columnApi.getColumn(whichCol || p.colDef.colId);\n            if(pColDef){\n                return pColDef.isCellEditable(p.node);\n            }\n        }\n        return false;\n    }\n\n    public isRequiredOrValidateWhen(params: CellClassParams | {value: any, api: GridApi, colDef: ColDef, data: any}, validateWhen = false): boolean{\n        const _colId = params.colDef.colId || params.colDef.field || '';\n        if(_colId && params.data){\n            let _isEmpty = false;\n            if(validateWhen){\n                if(params.colDef.cellEditorParams.validateWhen){\n                    _isEmpty = params.colDef.cellEditorParams.validateWhen(params);\n                } else{\n                    console.warn(`**** GRID WARNING: column '${_colId}' is of type ${COLUMN_TYPE.VALIDATE_WHEN_COLUMN} and is missing function 'cellEditorParams.validateWhen(p: CellClassParams): boolean' ****`)\n                }\n            } else if(!this._helper.isNotEmpty(params.value)){\n                _isEmpty = true;\n            }\n\n            if(_isEmpty){\n                if(!params.data?._errors){\n                    params.data._errors = [];\n                }\n                if(!params.data?._errors.includes(_colId)){\n                    params.data?._errors.push(_colId);\n                }\n            } else {\n                const mands = params.data?._errors;\n                if(mands && Array.isArray(mands)){\n                    const rowIndex = mands.indexOf(_colId);\n                    if(rowIndex >= 0){\n                        mands.splice(rowIndex, 1);\n                    }\n                    if(mands.length == 0){\n                        delete params.data?._errors;\n                    }\n                }\n            }\n            return _isEmpty;\n        }\n        return false;\n    }\n\n    public validateDuplicate(params: CellClassParams | {value: any, api: GridApi, colDef: ColDef, data: any}, isCaseSensitive = false): boolean{\n        const _colId = params.colDef.colId || params.colDef.field || '';\n        if(_colId && params.data){\n            let _occurrence = 0;\n            if(params.api && params.colDef){\n                params?.api?.forEachNode((node: RowNode) => {\n                    if(this._helper.isNotEmpty(params.value) && node.data){\n                        if(!isCaseSensitive && typeof params.value == \"string\" && typeof node.data[_colId] == \"string\"){\n                            if(params.value.toLowerCase() == node.data[_colId].toLowerCase()){\n                                _occurrence++;\n                            }\n                        } else if(params.value === node.data[_colId]){\n                            _occurrence++;\n                        }\n                    }\n                });\n            }\n            if(_occurrence >= 2){\n                if(!params.data?._duplicates){\n                    params.data._duplicates = [];\n                }\n                if(!params.data?._duplicates.includes(_colId)){\n                    params.data?._duplicates.push(_colId);\n                }\n            } else {\n                const dups = params.data?._duplicates;\n                if(dups && Array.isArray(dups)){\n                    const rowIndex = dups.indexOf(_colId);\n                    if(rowIndex >= 0){\n                        dups.splice(rowIndex, 1);\n                    }\n                    if(dups.length == 0){\n                        delete params.data?._duplicates;\n                    }\n                }\n            }\n            return (_occurrence >= 2);\n        }\n        return false;\n    }\n\n    public static ObjectFields: string[] = ['autocomplete', 'select', 'multiselect', 'address', 'file', 'JSON'];\n}\n","import { AfterViewChecked, ChangeDetectorRef, Component, DoCheck, EventEmitter, Inject, Input, LOCALE_ID, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { ColDef, ColGroupDef, Column, FilterChangedEvent, FirstDataRenderedEvent, GridReadyEvent, IDatasource, IGetRowsParams, IServerSideDatasource, IServerSideGetRowsParams, RowNode, SelectionChangedEvent, SideBarDef, GetRowIdFunc, GetRowIdParams, CellClassParams, CellValueChangedEvent, Environment, BeanStub, LoadSuccessParams, GetContextMenuItemsParams, GridOptions, MenuItemDef, GetLocaleTextParams, ValueFormatterParams, SortChangedEvent,  CellEditingStartedEvent, ColumnState } from 'ag-grid-community';\nimport {  Observable, Subject, Subscription } from 'rxjs';\nimport { ApiCallParams, apiMethod, MESSAGE_SEVERITY, ResponseObj, UserPreferences, userPrefType } from '../../core.interface';\nimport { ApiCallService, CoreService } from '../../core.service';\nimport { HelperService } from '../../helper.service';\nimport { CustomPluralPipe } from '../../pipes/eagna.pipe';\nimport { SharedService } from '../../shared.service';\nimport { BooleanFilter } from '../custom-filter/boolean-filter';\nimport { DatePickerEditorComponent } from '../editor/datepicker-editor.component';\nimport { DropdownSelectEditorComponent } from '../editor/dropdown-select-editor.component';\nimport { MaskEditorComponent } from '../editor/mask.editor.component';\nimport { NumericEditorComponent } from '../editor/numeric-editor.component';\nimport { agThemeType, apiFilter, /* AutoCompleteCellEditorParams, */ BOOLEAN_FILTER_MODE, colsAndCharts, COLUMN_TYPE, editableIndicator, ExtendedGridDefinition,  fieldMapperType, filterTypeDate, filterTypeSet, filterTypeText, FILTER_TYPE, GridPeferences, GridPrefColumns, GridPrefMultiFilters, GridResponse, GRID_TYPE, multiFilterTypeText, rowModelType, gridDefaultColumns } from '../grid.interface';\nimport { CellCustomComponent } from '../cell-custom/cell-custom.component';\nimport { AnalysisToolPanel } from '../tool-panel/analysis-tool-panel';\nimport { CustomToolsPanel } from '../tool-panel/custom-tools-panel';\nimport { Message, MessageService, PrimeIcons } from 'primeng/api';\nimport { AbstractCoreService } from '../../abstract-core';\nimport { GridService } from '../grid.service';\nimport { FormatWidth, getLocaleDateFormat, LowerCasePipe, UpperCasePipe } from '@angular/common';\nimport { Core } from '../../core.static';\nimport { deepEqual } from 'ts-deep-equal' \n\n@Component({\n    selector: 'eag-grid',\n    templateUrl: './grid.component.html',\n    styleUrls: ['./grid.component.scss'],\n    //changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GridComponent implements OnInit, OnDestroy, AfterViewChecked, DoCheck {\n  constructor(\n        private _helper: HelperService,\n        private _activatedRoute : ActivatedRoute,\n        private _pluralPipe: CustomPluralPipe,\n        private _lowerCase: LowerCasePipe,\n        private _messageService: MessageService,\n        private _gridService: GridService,\n        private _upperCase: UpperCasePipe,\n        public sharedService: SharedService,\n        public _coreService: CoreService,\n        private _cdr: ChangeDetectorRef,\n        @Inject(LOCALE_ID) private _ilocale: string,\n        @Optional() private _coreServiceImpl: AbstractCoreService,\n        @Optional() private _apiCallService? : ApiCallService,\n  ) {\n    /* this._gridEnv = new gridEnv(); */\n    /* this.subscription.add(this._coreService.translationDone$.subscribe((_next) => {\n        this._coreLocalize = Core.Localize;\n        if(_next == \"changed\"){ */\n            //this._initSideBar('changed');\n        /* }\n    })); */\n  }\n\n  private _noReadRendered = false;\n  private _agLangProvider: any;\n  private _currentPage = 0;\n  private _jumpToLastPage = false;\n  private _nextPage = false;\n  private _sortChanged = false;\n  private _initSortModel?: any[];\n  private _initFilterModel: any; //TODO\n  private _subscription = new Subscription();\n  private _isQuerying = false;\n  private _userPrefReInit = false;\n  //private _locale = this._ilocale || SharedService.defaultLocaleConf.locale;\n  private _locale = SharedService.getSavedLocale(this.sharedService.appConfig.env?.main.locale) || SharedService.defaultLocaleConf.locale;\n  private _dateDelimeter = getLocaleDateFormat(this._locale, FormatWidth.Short).includes(\"/\") ? \"/\" : \".\";\n  private _dateFormat = this._dateDelimeter == \".\" ? getLocaleDateFormat(this._locale, FormatWidth.Medium) : SharedService.defaultDateFormatEn;\n  private _gridEnv: Environment | undefined;\n  public darkMode!: boolean;\n  public picons = PrimeIcons;\n\n  public tOverlay: {loading?: string, noRows?: string} = {loading: undefined, noRows: undefined};\n\n  @Input()\n  defaultColumns: gridDefaultColumns;\n\n  @Input()\n  public duplicateApiParams?: (data: any) => any;\n\n  @Input()\n  public isDebug = this.sharedService.appConfig.env?.main.isDebug == true;\n\n  @Input()\n  public dateFiltersToLocale = false;\n\n  @Input()\n  digitsInfo = \"0.0-2\";\n  \n  @Input()\n  isReadonly = false;\n\n  @Input()\n  /** Supply this property with the grid's first result for ClientSide */\n  public firstResult?: GridResponse;\n\n  @ViewChild(\"agGrid\") public agGrid!: AgGridAngular;\n  @Input() appProject: string | undefined;\n  @Input() gridId: string | undefined;\n  @Input() agClass = '';\n  @Input() agStyle?: string | {[p: string]: any} | undefined;\n\n  @Input() agTheme: agThemeType = SharedService.defaultGridTheme;\n\n  @Input() columnDefs: (ColDef | ColGroupDef)[] | undefined;\n  @Input() rowModelType: rowModelType = 'clientSide';\n  @Input() rowData: any[] | undefined;\n\n  /** AbstractCore Service that should have been implemented */\n  @Input() coreServiceImpl: AbstractCoreService | undefined;\n  @Input() tokenRequired = false;\n  @Input() holder?: HTMLDivElement | string;\n\n  /**\n   * 2-way Binding property to acccess gridParams easily when grid is ready (GridReadyEvent)\n   */\n  @Input() gridParams: GridReadyEvent | undefined;\n\n  @Output() gridParamsChange: EventEmitter<GridReadyEvent> = new EventEmitter<GridReadyEvent>();\n\n  /**\n   * The string to be used as initial value in Search Box when enableSideBar, enableCustomToolPanel and enableGridSearch are on, defaulted to ''\n   */\n  @Input() searchQuery: { value: string } = { value: \"\" };\n\n  /**\n  * Whether the sidebar is to be displayed in Grid or not, defaulted to true\n  */\n  @Input() enableSideBar: boolean = true;\n\n  /**\n   * Whether the custom panel (Grid Options) is to be displayed in the sidebar, defaulted to true\n   */\n  @Input() enableCustomToolPanel: boolean = true;\n\n\n  /**\n  * Grid Insights tool panel, turned off for pilot\n  */\n  @Input() enableAnalysisToolPanel: boolean = false;\n\n  /**\n   * If opted to never offer analysis of a grid at all, turn this off\n   */\n  @Input() analysisOption                 : boolean = true;\n\n  /**\n   * Whether saving of columns and filters is turned on or not, defaulted to true\n   */\n  @Input() enableSaveColumnsAndFilters    : boolean = true;\n\n  /**\n  * Whether the search is to be used in Grid Options sidebar or not, defaulted to true\n  */\n  @Input() enableGridSearch               : boolean = true;\n\n  @Input() gridOptions!: GridOptions;\n  @Input() extendedGridDefinition: ExtendedGridDefinition = {};\n  @Input() extraParams: any = {};\n  @Input() floatingFilter = false;\n\n  /**\n   * Optionally tell the Grid what sidebar tab should be activated by default.\n   */\n  @Input() defaultToolPanel: \"customTools\" | \"filters\" | \"columns\" | \"\" = \"\";\n\n  @Input() pivotMode= false;\n\n  /**\n   * Change the way how Editable Columns shows the edit (pencil) indicator: defaulted to 'hover'\n   * hide: to never show the pencil icon\n   * show: to permanently show the pencil icon\n   * hover: only show the pencil icon upon hover\n   */\n  @Input() editableInd: editableIndicator = \"hover\";\n\n\n  /* Server-Side conf */\n\n  /**\n   * Standard api definition that will be used by the Grid, only for non-ClientSide (e.g. serverSide)\n   */\n  @Input() apiCallParams: ApiCallParams | undefined;\n\n  /**\n  * Optionally tells the Grid not to load the userPreferences for some instances, defaulted to false\n  */\n  @Input() skipUserPref: boolean = false;\n\n   /**\n   * Optionally append the Api request with aggs_filter object same as current filters, defaulted to false\n   */\n  @Input() aggsFilters: boolean = false;\n\n  /**\n   * If serverSideStoreType is full, optionally set limit for backend query, else limit will not be send\n   */\n  @Input() limit: number | undefined;\n\n  /**\n   * Acts as external event emitter when a column is being filtered\n   */\n  @Input() filteringCustomCallback: ((apiParams: any, col: any, colCurrentFilter: any) => any) | undefined;\n\n  /**\n   * Turn this on when using Lazy loaded Route. This will be used when urlState is not provided\n   */\n  @Input() isFeatureModule: boolean = false;\n\n  /**\n   * String to override the formula <gridId_modalId>, this is used in saving filters/coluns in user preference api\n   * If not provided, it is computed as the current url route (the last children. it's important to turn on @isFeatureModule when using lazy loaded Module)\n   */\n  @Input() urlState: string | undefined;\n\n   /**\n   * Used for Grids that are declared in Modal, so that the id to be used in user preferences will be <gridID_modalId>\n   */\n  @Input() modalId: string | undefined;\n\n  /**\n   * Optionally tell the Grid to not use (Blank) in the filter aggregiation\n   */\n  @Input() dontAddBlankFilter: boolean = true;\n\n   /**\n   * Optionally override column keys as its filtering keys\n   */\n  @Input() defaultFilterOptions: any;\n\n  /**\n     * To override Grids Api filter aggs data pattern.\n     * If not supplied, by default: {suffix: \"_aggs\",\n     *  extraField: \"buckets\",\n     *  objectKey: \"key\"\n     * }\n     * where the aggregation structure is e.g. {id: {buckets: [key: <value1_aggs>, key: <value2_aggs>, ...]}\n     */\n  //@Input() filterAggsMapper: FilterAggsMapper | undefined;\n\n\n  @Input() fieldMapper?: fieldMapperType = {};\n\n   /**\n     * If enabled, filters and columns change event will save changes in Memory\n     */\n  @Input() enableFiltersAndColumnsMemory: boolean = false;\n\n  @Input()\n  enableProfile = false;\n\n  /** Override this rowIdKey(s) to specify which data attribute is/are the unique key (or keys combination), default value: ['id'] */\n  @Input()\n  rowIdKey: string | string[] | undefined;\n\n  /* RT eagna\n  BEGIN ex-inputs\n  properties that used to be input, now converted to extendedGridDefinition properties  */\n\n  public defaultColDef: ColDef | undefined;\n\n  public components: {\n    [p: string]: any;\n  } | undefined;\n\n  public columnTypes: {\n    [key: string]: ColDef;\n  } | undefined;\n\n  public pagination: boolean = true;\n  public paginationAutoPageSize: boolean = true;\n  public paginationPageSize = 50;\n  public cacheOverflowSize = 2;\n  public maxConcurrentDatasourceRequests = 2;\n  public infiniteInitialRowCount = 1;\n  public maxBlocksInCache = 200;\n  public cacheBlockSize = 100;\n  public serverSideInfiniteScroll = true;\n  public getRowId: GetRowIdFunc | undefined;\n  //END ex-inputs\n\n  public localeText?: {\n    [key: string]: string;\n  };\n\n  public getLocaleText: (params: GetLocaleTextParams) => string = (\n    params: GetLocaleTextParams ) => {\n    switch (params.key) {\n        case \"dateFormatOoo\": return this._lowerCase.transform(this._dateFormat);\n        default:\n            if(params.defaultValue && this._locale != \"en\"){\n                return this._agLangProvider ? (this._agLangProvider[params.key] || params.defaultValue) : params.defaultValue;\n            }\n            return params.defaultValue;\n    }\n  }\n\n  public icons: any;\n  public sideBarParams: any //TODO put this as property, or fire eventemitter for searchQuery\n  public excelMode = false;\n  public isPivotModeOn = false;\n\n  /** Specifies the side bar components.     */\n  public sideBar: SideBarDef | string | string[] | boolean | null | undefined;\n\n  /**\n   * Grid internal property used in styling\n   */\n  public gridHasFiltersApplied = false;\n\n  /**\n     * Grid rendering indicator that can optionally be changed externally (not most of time)\n     * as this property is originally designed as internal for Grid itself\n     */\n   /* public hasRendered                      : { firstData: boolean, onwardChanges: boolean, firstFilter: boolean, firstSort: boolean, pivotColumns: boolean }\n   = { firstData: false, onwardChanges: false, firstFilter: false, firstSort: false, pivotColumns: false }; */\n\n  protected hasRendered: { gridReady: boolean, firstFilter: boolean, firstSort: boolean, forcedDestroyed: boolean}\n   = { gridReady: false, firstFilter: false, firstSort: false, forcedDestroyed: false};\n\n  public on = false;\n\n  private _appConfigName = this.sharedService.appConfig?.appName || 'no-app';\n  /* private _userGridPref?: GridPeferences; */\n  //public defaultAgTheme: agThemeType = SharedService.defaultGridTheme;\n  public userPref?: {grid: GridPeferences | undefined, darkMode: boolean};\n\n  private _restoringChart: string | undefined;\n  private _origRowModelType: rowModelType;\n  private _orig_num_results: number | undefined;\n  private _colsAndChartState: colsAndCharts | undefined;\n  private _orig_pagination: boolean | undefined;\n  /* private _origStatusBar: StatusBar;\n  private _pivotingStatusBar: StatusBar = new StatusBarForGridWithoutPagination([STATUS_PANEL.AGGREGATION //, STATUS_PANEL.SELECTED_ROW_COUNT\n  ]).statusBar; */\n  private _pivotingList: any[] = [];\n  private _chartRef: any[] = [];\n  private _reset_cache = false;\n  private _cacheLastUpdate$: Subject<any> = new Subject<any>();\n  private _colsAndChartState$ = new Subject<any>();\n  private _loadedProfile = null;\n  private _isFilterAndSortingApplied = false;\n  private _currentSelections: any[] | undefined;\n  private _selectionBeforeRefreshSubject: Subject<boolean> = new Subject();\n  private _selectionBeforeRefresh$: Observable<boolean> = this._selectionBeforeRefreshSubject.asObservable();\n  private _isRefreshed = false;\n  private _dataSource!: IDatasource;\n  private _serverSideDataSource!: IServerSideDatasource;\n  private _pSuccessData?: LoadSuccessParams;\n\n  /* BEGIN variables to be observed in DoCheck lifecycle*/\n  private _apiCallParamsParams: any = undefined;\n  private _searchValueValue: any = '';\n\n  private _isServerSideInstance(obj: any) : obj is IServerSideGetRowsParams{\n    return obj && obj.hasOwnProperty(\"request\");\n  }\n\n  private _isInfiniteInstance(obj: any) : obj is IGetRowsParams{\n      return obj && !obj.hasOwnProperty(\"request\");\n  }\n\n  private _isIDataSourceInstance(obj: { hasOwnProperty: (arg0: string) => boolean; }) : obj is IDatasource{\n    return obj && obj.hasOwnProperty(\"rowCount\");\n  }\n\n  private _isIServerSideDatasourceInstance(obj: { hasOwnProperty: (arg0: string) => any; }) : obj is IServerSideDatasource{\n      return obj && !obj.hasOwnProperty(\"rowCount\");\n  }\n\n  ngOnInit(): void {\n    /* console.log({initLocale: this._locale}); */\n\n    if(!this.appProject){\n      this.appProject = this._appConfigName;\n    }\n\n    if(!this.coreServiceImpl && this._coreServiceImpl){\n        this.coreServiceImpl = this._coreServiceImpl;\n    }\n    this._initGrid();\n  }\n\n  private _initUserGridPref(){\n    //set urlState if not provided\n    /* if (!this.urlState) {\n        const acRoute = this.isFeatureModule ? this._activatedRoute.parent : this._activatedRoute;\n        //if feature model add level of parents, currently 1 to reach the route\n        this.urlState = acRoute?.snapshot.url[0] ? acRoute.snapshot.url[0].path : this.gridId;\n    } */\n\n    const _setUserPref = (userPref: UserPreferences) => {\n        const _urlState = this._getUrlState();\n        const _user = this.sharedService?.appConfig.user;\n\n        if(userPref){\n            this.darkMode = this._coreService.isDarkMode;\n            let grid: GridPeferences | undefined = userPref.grid?.[_urlState];\n            if(!grid){\n                const theme = userPref.changeType?.value || 'balham';\n                grid = ({gridId: _urlState, theme});\n            }\n            this.userPref = {grid, darkMode: this.darkMode};\n\n            /* try{\n                console.log({grid: (JSON.parse(grid.columns || '{state: []}').state || []).filter((_col: any) => !_col.hide).map((_col: any) => _col.colId) });\n            } catch(e){} */\n\n            //this._locale = userPref.locale || this._ilocale || SharedService.defaultLocaleConf.locale; RT: enable this if PAGE TRANSLATE REFRESH IS REMOVED\n            /* console.log({initLocale: this._locale, userPrefLocale: userPref.locale}); */\n\n            this._dateDelimeter = getLocaleDateFormat(this._locale, FormatWidth.Short).includes(\"/\") ? \"/\" : \".\";\n            this._dateFormat = this._dateDelimeter == \".\" ? getLocaleDateFormat(this._locale, FormatWidth.Medium) : SharedService.defaultDateFormatEn;\n\n            if(this._locale != \"en\"){\n                this._agLangProvider = this.sharedService.gridLocal;\n            }\n\n            if(_user?.globalGridPref && userPref.grid?.['all']){\n                this.agTheme = userPref.grid?.['all'].theme;\n            } else if(this.userPref.grid){\n                this.agTheme = this.userPref.grid.theme;\n            }\n\n            if(this.isDebug){\n                console.table([\n                        {'rowHeight': this._gridEnv?.getSassVariable(this.agTheme, 'rowHeight')},\n                        {'chartMenuPanelWidth': this._gridEnv?.getSassVariable(this.agTheme, 'chartMenuPanelWidth')},\n                        {'headerCellMinWidth': this._gridEnv?.getSassVariable(this.agTheme, 'headerCellMinWidth')},\n                        {'headerHeight': this._gridEnv?.getSassVariable(this.agTheme, 'headerHeight')},\n                        {'listItemHeight': this._gridEnv?.getSassVariable(this.agTheme, 'listItemHeight')},\n                        {'isAlive': this._gridEnv?.isAlive()},\n                        {'gridOption': this._gridEnv?.isAlive()},\n                        {'locale': this._locale}\n                    ]\n                );\n            }\n\n            this._initAgGridChartTheme(`ag-vivid${this.darkMode ? '-dark' : ''}`);\n            this._initExtendedGridDefinition();\n            /* set sideBar */\n            this._initSideBar(\"_setUserPref\");\n\n            /* console.log({userPref}); */\n            if(this.hasRendered.gridReady && (<userPrefType[]>['gridTheme', 'locale']).includes(userPref.changeType?.type)){\n                this.destroyAndLive({timeout: 5});\n                this._userPrefReInit = true;\n            } else{\n                /* console.log({on1: this.on}) */\n                /* console.log({here1: this.on}) */\n                this.on = true;\n                /* this._cdr.detectChanges(); */\n            }\n\n        }\n    };\n\n    if(this._helper.isNotEmpty(this.sharedService.userPref)){\n        _setUserPref((this.sharedService.userPref || {})[this._appConfigName]);\n    } else{\n        /* console.log({here2: this.on}) */\n        this.on = true;\n        /* this._cdr.detectChanges(); */\n    }\n    if(this.sharedService.userPref$){\n        this._subscription.add(this.sharedService.userPref$?.subscribe((userPref: UserPreferences) => {\n            _setUserPref(userPref);\n        }));\n    }\n  }\n\n  private _initGrid(){\n    /* set extraParams */\n    this.extraParams = { ...this.extraParams,\n      rowModelType: this.rowModelType,\n      /* floatingFilter: this.floatingFilter, */\n      editableInd: (this.editableInd || \"hover\")\n    };\n\n    /* set columnDefs */\n    this._initColumnDefs();\n\n    /* set pagination */\n    this._initPagination();\n\n    /*set columTypes */\n    this._initColumnTypes();\n\n    /* set components */\n    this._initComponents();\n\n    //set getRowId for non-clientSide ??only\n    if(this.rowModelType != 'clientSide'){\n        this._initGetRowId();\n    }\n\n    /* init UserGridPref */\n    this._initUserGridPref();\n  }\n\n  private _reapplyTheme(newAgTheme: agThemeType){\n    console.log({newAgTheme});\n    this.destroyAndLive({timeout: 10, inBetweenCallback: (_a)=>{\n        if(newAgTheme){\n            this.agTheme = newAgTheme;\n        }\n        if(this._gridEnv){\n            this.extendedGridDefinition.rowHeight = this._gridEnv.getSassVariable(newAgTheme, 'rowHeight');\n            this.extendedGridDefinition.headerHeight = this._gridEnv.getSassVariable(newAgTheme, 'headerHeight');\n        }\n    }});\n  }\n\n  private _initExtendedGridDefinition(){\n    this._initContextMenu();\n\n    if(this.extendedGridDefinition){\n        if(this.extendedGridDefinition.enableCharts === undefined){\n            this.extendedGridDefinition.enableCharts = true; \n        }\n        if(this.extendedGridDefinition.enableRangeSelection === undefined){\n            this.extendedGridDefinition.enableRangeSelection = true;\n        }\n        if(this.extendedGridDefinition.columnHoverHighlight === undefined){\n            this.extendedGridDefinition.columnHoverHighlight = true;\n        }\n        if(this.extendedGridDefinition.rowSelection === undefined){\n            this.extendedGridDefinition.rowSelection = 'multiple';\n        }\n        if(this.extendedGridDefinition.allowDragFromColumnsToolPanel === undefined){\n            this.extendedGridDefinition.allowDragFromColumnsToolPanel = true;\n        }\n        if(this.extendedGridDefinition.allowDragFromColumnsToolPanel === undefined){\n            this.extendedGridDefinition.allowDragFromColumnsToolPanel = true;\n        }\n    \n        if(this.userPref && this._gridEnv){\n            this.extendedGridDefinition.rowHeight = this._gridEnv.getSassVariable(this.agTheme, 'rowHeight');\n            this.extendedGridDefinition.headerHeight = this._gridEnv.getSassVariable(this.agTheme, 'headerHeight');\n        }\n\n        const _exg = Object.assign({}, this.extendedGridDefinition);\n        if(!this.gridOptions){\n            delete _exg.extraContextMenuItems;\n            delete _exg.amendColDefs;\n            this.gridOptions = _exg;\n        }\n    }\n\n  }\n\n  private _initContextMenu(){\n    if(!this.extendedGridDefinition?.getContextMenuItems){\n        this.extendedGridDefinition.getContextMenuItems = (params: GetContextMenuItemsParams) => {\n            let hasGroupNode = false;\n            params.api.forEachNode(node => {\n                if(!hasGroupNode && node.group){\n                    hasGroupNode = true;\n                }\n            });\n\n            if(this.extendedGridDefinition?.rowSelection != undefined && params.node){\n                params.node.setSelected(true, true);\n            }\n\n            const _performDuplicate = (_data: any) => {\n                this._subscription.add(this.apiCallParams?.api(_data, 'put').subscribe(res => {\n                    this._messageService.add({detail: Core.Localize('successfullyCopied') , severity: MESSAGE_SEVERITY.SUCCESS});\n                    this.refresh();\n                }));\n            }\n            \n            let _dataCopy = Object.assign({}, params.node?.data);\n            const _isRowNotEmpty = this._helper.isNotEmpty(_dataCopy);\n            const initDefault: (string | MenuItemDef)[]  = [...(this.isReadonly ? [] :[\n                {\n                    icon: `<i class=\"${PrimeIcons.COPY}\"></i>`,\n                    name: (Core.Localize('duplicate', {item: ''})), \n                    disabled: !_isRowNotEmpty,\n                    action: ()=>{ \n                        if(_isRowNotEmpty){\n                            delete _dataCopy.id;\n                            delete _dataCopy.isChanged;\n                            for (const key in _dataCopy) {\n                                if (Object.prototype.hasOwnProperty.call(_dataCopy, key)) {\n                                    if(_dataCopy[key + \"_orig\"]){\n                                        /* console.log(_dataCopy[key + \"_orig\"]); */\n                                        delete _dataCopy[key + \"_orig\"];\n                                    }\n                                }\n                            }\n                            if(this.duplicateApiParams){\n                                _dataCopy = this.duplicateApiParams(_dataCopy);\n                                /* console.log({_dataCopy}); */\n                                _performDuplicate(_dataCopy);\n                            } else{\n                                _performDuplicate(_dataCopy)\n                            }\n                        } else{\n                            console.warn('Cannot copy');\n                        }\n                }}\n                ]),\n                ...[\n                    'autoSizeAll',\n                    {\n                        name: (Core.Localize('sizeToFitColumns') || 'Size to Fit Columns'), \n                        action: ()=>{\n                            params.api.sizeColumnsToFit();\n                    }},\n                ],\n                ...(params.defaultItems || []),\n                ...(this.rowModelType == GRID_TYPE.CLIENT_SIDE && this.extendedGridDefinition?.enableRangeSelection ? ['chartRange'].concat(hasGroupNode ? ['expandAll', 'contractAll'] : []) : [])\n            ];\n\n            let _prepend: (string | MenuItemDef)[] =  [];\n            let _append: (string | MenuItemDef)[] = [];\n\n            for (const cm of (typeof this.extendedGridDefinition?.extraContextMenuItems == \"function\" ? this.extendedGridDefinition?.extraContextMenuItems(params) : this.extendedGridDefinition?.extraContextMenuItems) || []) {\n                if(typeof cm.item != \"string\" || !initDefault.includes(cm.item)){\n                    if(cm.position == \"after\"){\n                        _append.push(cm.item);\n                    } else{\n                        _prepend.push(cm.item);\n                    }\n                }\n            }\n\n            return [..._prepend.concat(_prepend.length > 0 ? ['separator'] : []), ...initDefault, ..._append];\n        }\n    }\n  }\n\n  private _initGetRowId(){\n    if(this.extendedGridDefinition?.getRowId){\n        this.getRowId = this.extendedGridDefinition?.getRowId;\n    } else{\n        let _messageJustOnce = false;\n        this.getRowId = (params: GetRowIdParams<any>) => {\n            if(this._helper.isNotEmpty(this.firstResult?.results?.[0]?.id)){\n                let _rowIdValue = '';\n                let _tmpRowIdKey = this.rowIdKey;\n                let _rowIdKeyNotFound: string[] = [];\n                //let tmpRowIdKey = (this.rowIdKey || ['id']) as string[];\n\n                if(!_tmpRowIdKey){\n                    _tmpRowIdKey = ['id'];\n                }else if(!Array.isArray(_tmpRowIdKey)){\n                    _tmpRowIdKey = [_tmpRowIdKey];\n                }\n\n                _tmpRowIdKey.forEach(eachRowIdKey => {\n                    _rowIdValue += (params.data?.[eachRowIdKey] || '');\n                    if(!this._helper.isNotEmpty(params.data?.[eachRowIdKey])){\n                        _rowIdKeyNotFound.push(eachRowIdKey);\n                    }\n                });\n\n                if(!_messageJustOnce && _rowIdKeyNotFound.length > 0){\n                    console.warn(`No row data found using ${(!this.rowIdKey ? \"default 'id' key\" : _rowIdKeyNotFound.toString() + \" key\" + this._pluralPipe.transform(_rowIdKeyNotFound.length))}. Either provide different rowIdKey: string | string[] input or compute it via 'ExtendedGridDefinition.getRowId' property`)\n                    _messageJustOnce = true;\n                }\n                return _rowIdValue || '';\n            }\n            return '';\n        };\n    }\n  }\n\n  private _initColumnDefs(){\n    if(this.coreServiceImpl){\n        if(!this.columnDefs){\n            if(this.gridId){\n                try{\n                    this.columnDefs = this.coreServiceImpl.getColumnDefs(this.gridId, this.extraParams);\n                } catch(e: any){\n                    if(e?.name == 'TypeError'){\n                        console.warn(\"getColumnDefs() not implemented\");\n                    } else{\n                        console.warn(\"getColumnDefs()\", e);\n                    }\n                }\n            } else{\n                console.warn(\"Cannot compute columnDefs via AbstractCoreService. \" + (!this.gridId ? \"gridId is mandatory\" : \"\"));\n            }\n        }\n    } else {\n        if(!this.columnDefs){\n            console.warn(\"No column definition provided.\");\n        } else{\n            console.warn(\"No AbstractCoreService implementation provided.\");\n      }\n    }\n\n    if(this.columnDefs){ //mandatory fields mapping after columnDefs retrieved\n        this.columnDefs.forEach((_eachCol: ColDef) => {\n            if(!_eachCol.headerName){\n                const _colId = _eachCol.colId || _eachCol.field;\n                const _locColId = Core.Localize(_colId || 'no-column-id');\n                if(_colId && _locColId && _locColId != `{translations.${_colId}}`){\n                    _eachCol.headerName = _locColId;\n                }\n            }\n            if(!_eachCol.headerTooltip && _eachCol.headerName){\n                _eachCol.headerTooltip = _eachCol.headerName;\n            }\n        });\n    }\n  }\n\n  private _initColumnTypes(){\n    this.defaultColDef = {...this._gridService?.getDefaultColDef(this.extraParams, this.extendedGridDefinition?.defaultColDef, this.fieldMapper)};\n    const _errCellRenderer = (p: any, whichErr: 'required' | 'unique' = 'required') => {\n        const _val = p.valueFormatted || p.value || '';\n        const _colId = p.column?.getColId() || ''\n        if(p.tooltip && _colId && ( (whichErr == 'required' && p.data?._errors && p.data?._errors.includes(_colId)) || (whichErr == 'unique' && p.data?._duplicates && p.data?._duplicates.includes(_colId)) )){\n            return `<i class=\"${whichErr == 'required' ? 'grid-error-icon' : 'grid-warning-icon'} ${p.tooltip.icon}\" style='margin-left: -9px;' title=\"${p.tooltip.error || ''}\"></i> ${_val}`;\n        }\n\n        return _val;\n    };\n\n    const getUniqueColumn = (isCaseSensitive = false) : ColDef => {\n        return {...this.defaultColDef,\n            cellClassRules: {\n                'grid-cell-warning border-2': (p: CellClassParams) => this._gridService?.validateDuplicate(p, isCaseSensitive) == true\n            },\n            cellRendererParams: {tooltip: {error: `The field values must be Unique${isCaseSensitive ? ' (Case Sensitive)' : ''}.`, icon: PrimeIcons.INFO_CIRCLE } },\n            cellRenderer: (p: any) => _errCellRenderer(p, 'unique')\n        };\n    }\n\n    const getRequiredOrValidateWhenColumn = (isValidateWhen = false) : ColDef => {\n        return {...this.defaultColDef,\n            cellClassRules: {\n                'grid-cell-error border-2': (p: CellClassParams) => this._gridService?.isRequiredOrValidateWhen(p, isValidateWhen) == true\n            },\n            ...(isValidateWhen ? {cellEditorParams: {validateWhen: (p?: any) =>  false}} : {}),\n            cellRendererParams: {tooltip: {error: 'The field is required.', icon: PrimeIcons.EXCLAMATION_CIRCLE } },\n            cellRenderer: (p: any) => _errCellRenderer(p, 'required')\n        };\n    }\n\n    const dateColumn = {...this._gridService?.getDefaultColDef(this.extraParams, this.extendedGridDefinition?.defaultColDef, this.fieldMapper, 'agDateColumnFilter')};\n    const numberColumn = {...this._gridService?.getDefaultColDef(this.extraParams, this.extendedGridDefinition?.defaultColDef, this.fieldMapper, 'agNumberColumnFilter')}; //TODO: remove rowModelType dependency from extraParams\n    const booleanColumn = {filter: \"booleanFilter\", /* cellEditor: \"booleanFilter\", */ filterParams: {mode: BOOLEAN_FILTER_MODE.TRUE_FALSE }, valueFormatter: (p: ValueFormatterParams) => {\n        const colId = p.column.getColId();\n        if(p.colDef?.filterParams?.mode == BOOLEAN_FILTER_MODE.YES_NO){\n            if(p.value === true){\n                return \"Yes\" ;\n            } else {\n                return \"No\"\n            }\n        }\n        return p.value;\n    }};\n\n    const editableColumn: ColDef = {...this.defaultColDef, editable: !this.isReadonly,\n        cellClassRules: {'grid-cell-changed': (p: CellClassParams) => {\n            const _colId = p.colDef.colId || p.colDef.field || '';\n            if(_colId && p.data){\n                return (p.data.isChanged || []).includes(_colId);\n            }\n            return false;\n    }}};\n\n    //columnTypes is automatically being rendered in CLIENT SIDE, hence putting a type to a column will help setting it up for Server Side\n    this.columnTypes = { ...this.extendedGridDefinition?.columnTypes,\n      ...{\n        booleanColumn,\n        default_setColumn: this.defaultColDef,\n        dateColumn,\n        editableColumn,\n        superUserColumn: this.defaultColDef,\n        keepIconColumn: this.defaultColDef,\n        noIconColumn: this.defaultColDef,\n        nonEditableColumn: {...this.defaultColDef, editable: false },\n        notNullColumn: this.defaultColDef,\n        nullableColumn: this.defaultColDef,\n        numberColumn,\n        decimalColumn: {...numberColumn, cellRendererParams: {digitsInfo: this.digitsInfo}},\n        floatColumn: {...numberColumn, cellRendererParams: {digitsInfo: this.digitsInfo}},\n        requiredColumn: getRequiredOrValidateWhenColumn(),\n        validateWhenColumn: getRequiredOrValidateWhenColumn(true),\n        showToolTipValueColumn: this.defaultColDef,\n        uniqueValueColumn: getUniqueColumn(),\n        uniqueCaseSensitiveColumn: getUniqueColumn(true),\n        pivotingId: this.defaultColDef,\n        pivotingDate: dateColumn,\n        pivotingList: this.defaultColDef,\n        /* autoCompleteColumn: {...editableColumn, cellEditor: AutocompleteSelectCellEditor,\n            cellEditorParams: ({placeholder: 'Select an option', selectData: [{label: 'Option 1', value: 1}  , {label: 'Option 2', value: 2}, {label: 'Option 3', value: 3}]} as AutoCompleteCellEditorParams),\n            valueFormatter: (params) => {\n                if (this._helper.isNotEmpty(params.value)) {\n                    const toReturn = params.value.label || params.value.value;\n                    if(!toReturn && params.value){\n                        let returnIsEmptyObject = true;\n                        for (const key in params.value) {\n                            if (Object.prototype.hasOwnProperty.call(params.value, key)) {\n                                const element = params.value[key];\n                                if(this._helper.isNotEmpty(element)){\n                                    returnIsEmptyObject = false;\n                                    break;\n                                }\n                            }\n                        }\n                        if(returnIsEmptyObject && params.data){\n                            const _colId = params.column.getColId();\n                            if(params.data?.[_colId]){\n                                // params.data?.[_colId] = '';\n                                params.node?.setDataValue(_colId, '');\n                                return ''\n                            }\n                        }\n                    }\n                    return (typeof toReturn == 'object' ? JSON.stringify(toReturn) : toReturn);\n                }\n                return '';\n            }\n            // valueFormatter: (params) => (params.value?.label || params.value?.value || params.value || '')\n            // cellEditorParams: (p: any) => ({placeholder: 'Select an option', selectData: [{label: 'Option 1', value: 1}  , {label: 'Option 2', value: 2}, {label: 'Option 3', value: 3}]\n            //     , autocomplete: {onSelect(cellEditor, item, input) {\n            //         p.api?.stopEditing();\n            //     },}\n            // } as IAutocompleteSelectCellEditorParameters<any>)\n        }, */\n        newAutoCompleteColumn: {\n            valueFormatter: (_k) => (_k.value?.name || _k.value)\n        }\n      }\n    };\n  }\n\n  private _initPagination(){\n    this.pagination = (this.extendedGridDefinition?.pagination === undefined || this.extendedGridDefinition?.pagination === true);\n    this.paginationAutoPageSize = (this.extendedGridDefinition?.paginationAutoPageSize === undefined || this.extendedGridDefinition?.paginationAutoPageSize === true)\n\n    if(this.extendedGridDefinition?.serverSideInfiniteScroll){\n        this.serverSideInfiniteScroll = this.extendedGridDefinition?.serverSideInfiniteScroll;\n    }\n    if(this.extendedGridDefinition?.paginationPageSize){\n        this.paginationPageSize = this.extendedGridDefinition?.paginationPageSize;\n    }\n    if(this.extendedGridDefinition?.cacheOverflowSize){\n        this.cacheOverflowSize = this.extendedGridDefinition?.cacheOverflowSize;\n    }\n    if(this.extendedGridDefinition?.maxConcurrentDatasourceRequests){\n        this.maxConcurrentDatasourceRequests = this.extendedGridDefinition?.maxConcurrentDatasourceRequests;\n    }\n    if(this.extendedGridDefinition?.infiniteInitialRowCount){\n        this.infiniteInitialRowCount = this.extendedGridDefinition?.infiniteInitialRowCount;\n    }\n    if(this.extendedGridDefinition?.maxBlocksInCache){\n        this.maxBlocksInCache = this.extendedGridDefinition?.maxBlocksInCache;\n    }\n    if(this.extendedGridDefinition?.cacheBlockSize){\n        this.cacheBlockSize = this.extendedGridDefinition?.cacheBlockSize;\n    }\n  }\n\n  private _initComponents(){\n    this.components = {\n      ...this.extendedGridDefinition?.components, ...{\n        agSaveColumn: CustomToolsPanel,\n        customToolsPanel: CustomToolsPanel,\n        analysisPanel: AnalysisToolPanel,\n        numericEditor: NumericEditorComponent,\n        maskEditor: MaskEditorComponent,\n        dropdownEditor: DropdownSelectEditorComponent,\n        datePicker: DatePickerEditorComponent,\n        booleanFilter: BooleanFilter,\n        cellCustom: CellCustomComponent,\n        agDateInput: DatePickerEditorComponent\n      }\n    };\n  }\n\n  public toggleOn(){\n    /* console.log({here3: this.on}) */\n    this.on = !this.on;\n    /* this._cdr.detectChanges(); */\n  }\n\n  public destroyAndLive(_p: {timeout?: number, inBetweenCallback?: (_a?: any)=>void} = {timeout: 1000}){\n    this.on = false;\n    this.firstResult = undefined;\n    this.hasRendered.forcedDestroyed = true;\n    this.gridParams?.api?.destroy();\n    \n    setTimeout(() => {\n      this.tOverlay.noRows = undefined;\n      _p?.inBetweenCallback?.();\n      /* console.log({here4: this.on}) */\n      this.on = true;\n      /* this._cdr.detectChanges(); */\n    }, _p?.timeout);\n  } \n\n  private _requery(){\n    if(this.apiCallParams){\n        const _oldApiCallParamsParams = {...this.apiCallParams.params} || {};\n        if (this.searchQuery.value) {\n            _oldApiCallParamsParams.query = this.searchQuery.value;\n        } else {\n            delete _oldApiCallParamsParams.query;\n        }\n        this.apiCallParams.params = {..._oldApiCallParamsParams};\n    }\n    this.refresh();\n  }\n\n  private _updatePreferences(newFiltersColumnsTheme: any, whichPref: 'filters' | 'columns' | 'gridTheme', inMemory = false){\n    if(this.sharedService.userPref && this._helper.isNotEmpty(newFiltersColumnsTheme)){\n        const _urlState = this._getUrlState();\n        const _userPref = (this.sharedService.userPref[this._appConfigName] || {});\n        /* let prefFiltersOrColumns; */\n\n        let gridPref = _userPref.grid?.[_urlState];\n        let method: apiMethod = 'patch';\n        let changeType: userPrefType = 'gridPref';\n        if(!gridPref){\n            gridPref = {gridId: _urlState, filters: '', columns: '', theme: this.agTheme};\n            if(!_userPref.grid){\n                _userPref.grid = {};\n            }\n            _userPref.grid[_urlState] = gridPref;\n        }\n        try{\n            setTimeout(() => {\n                if(gridPref){\n                    if(whichPref == 'filters'){\n                        //prefFiltersOrColumns = JSON.parse(pref?.filters || '');\n                        gridPref.filters = JSON.stringify(newFiltersColumnsTheme);\n                    } else if(whichPref == 'columns'){\n                        //prefFiltersOrColumns = JSON.parse(pref?.columns || '');\n                        gridPref.columns = JSON.stringify(newFiltersColumnsTheme);\n                    } else if(whichPref == 'gridTheme'){\n                        gridPref.theme = newFiltersColumnsTheme;\n                        changeType = 'gridTheme';\n                    }\n\n                    if(!inMemory){\n                        this.coreServiceImpl?.userPreferences(_userPref, changeType, method, {gridId: gridPref.gridId} ).subscribe({next: result => {\n                            if(this.isDebug){console.log(\"result\", result);}\n                            if([200, 201].includes(result?.status?.status_code)){\n                                gridPref = result?.content?.results[0];\n                                if(gridPref?.gridId && this.sharedService.userPref && this.sharedService.userPref[this._appConfigName]){\n                                    this.sharedService.userPref[this._appConfigName].grid = {\n                                        ...this.sharedService.userPref[this._appConfigName].grid, [gridPref.gridId]: gridPref};\n                                        if(this.isDebug){console.log({gridPref, newGridPref: this.sharedService.userPref[this._appConfigName].grid});}\n                                }\n                                this._messageService.add({detail: Core.Localize('successfullySaved', {change: (Core.Localize(whichPref) || whichPref) }) , severity: MESSAGE_SEVERITY.SUCCESS});\n                                if(changeType == 'gridTheme'){\n                                    /* this._reapplyTheme(newFiltersColumnsTheme); */\n                                    location.reload();\n                                }\n                            } else{\n                                this._messageService.add(<Message>{summary: result.status.message, detail: JSON.stringify((<any>result.content)?.results), severity: MESSAGE_SEVERITY.ERROR});\n                            }\n                        }});\n                    } else{\n                        //TODO: use inMemory input\n                        console.warn(\"inMemory not yet implemented\");\n                    }\n                }\n            });\n        } catch(e){}\n    }\n  }\n\n  private _saveColumns(inMemory = false, profileColumns?: any){\n    const newColumns = profileColumns?.state || this.gridOptions?.columnApi?.getColumnState();\n    const newGroupColumns = profileColumns?.groupState || this.gridOptions?.columnApi?.getColumnGroupState();\n    this._updatePreferences({state: newColumns, groupState: newGroupColumns}, \"columns\", inMemory);\n  }\n\n  private _saveFilters(inMemory = false, profileFilters?: any){\n    const newFilters = profileFilters || this.gridOptions?.api?.getFilterModel();\n    this._updatePreferences(newFilters, \"filters\", inMemory);\n  }\n\n  private _initSideBar(fromWhere: string){\n    if(this.isDebug){console.log(\"_initSideBar fromWhere\", fromWhere);}\n      const _toolTip = `Grid Data Rendering: ${this.rowModelType == 'clientSide' ? 'Client Side': 'Non-Client Side'}\nGrid ID: ${this.gridId}`;\n\n      this.icons = {...this.extendedGridDefinition?.icons, ...{\n          \"custom-tools\": \"<span class='ag-icon ag-icon-pivot fs-16' title='\"+ _toolTip +\"'></span>\",\n          \"custom-grid\": \"<span class='pi pi-table fs-16' title='\"+ _toolTip +\"'></span>\",\n          \"custom-save\": \"<span class='p-button-icon pi pi-save fs-16'></span>\",\n      }};\n\n      const toolPanelEvents: any = {\n          saveTheme: (newAgTheme: agThemeType) => { this._saveTheme(newAgTheme); },\n          saveColumns: () => { this._saveColumns(); },\n          saveFilters: () => { this._saveFilters(); },\n          clearColumns: () => { this._clearColumns(); },\n          clearFilters: () => { this._clearFilters(); },\n          toggleAnalysisMode:(on?:boolean, reset = false) => { /* this.turnOnPivot(null, on, reset) */},\n\n          //for chart and profile\n          getColsAndChartState: () => {/* this._getColsAndChartState() */},\n\n          saveChart: (name: string, id?: number, publish = false, isForProfile = false) => {/* this._saveChart(name, id, publish, isForProfile) */},\n          deleteChart: (id: any) => {/* this._deleteChart(id) */},\n          restoreChart:(name: string) => { /* this._restoreChart(name) */ },\n\n          //for profile\n          loadGridProfile:(profile: colsAndCharts) => { /* this._loadGridProfile(profile); */ },\n\n          toggleFontMonospace: () => { /* this._toggleFontMonospace(); */ },\n          applyColumnDefChanges: (value: any, whichField: any) => {/* this._applyColumnDefChanges(value, whichField) */},\n          requery: (params?: any) => {\n              this._isQuerying = true;\n              this.searchQuery = params.searchQuery;\n              if (this.rowModelType != \"clientSide\") {\n                  this._requery();\n              } else {\n                  this.gridParams?.api?.setQuickFilter(this.searchQuery.value);\n              }\n          },\n          resize: (params?: any) => { /* this.resize(params); */ },\n          toggleGridAnalytics: (t: boolean) => {\n              /* this.enableAnalysisToolPanel = t;\n              //this.triggerOnwardChanges(true);\n              this.turnOnPivot(null, t); */\n          }\n      };\n\n      this.sideBarParams = { //TODO put this as property, or fire eventemitter for searchQuery\n          searchQuery: this.searchQuery,\n          enableCustomToolPanel: this.enableCustomToolPanel,\n          enableAnalysisToolPanel: this.enableAnalysisToolPanel,\n          analysisOption: this.analysisOption,\n          enableSaveColumnsAndFilters: this.enableSaveColumnsAndFilters,\n          enableGridSearch: this.enableGridSearch,\n          gridId: this.gridId,\n          agTheme: this.agTheme,\n          /* isAdmin: this.extraParams.isAdmin,\n          username: this.extraParams.username, */\n          isPivotModeOn: this.isPivotModeOn,\n          isSaveFilterDisabled: (this.isPivotModeOn && this._origRowModelType != \"clientSide\"),\n          cacheLastUpdate$: this._cacheLastUpdate$,\n          colsAndChartState$: this._colsAndChartState$,\n          loadedProfile: this._loadedProfile,\n          toolPanelEvents\n      };\n\n      //if(this.excelMode){ //all options should be included in this condition if it's gonna be added as control\n      if(!this.sideBarParams.columnDefsControls){\n          this.sideBarParams.columnDefsControls = {};\n      }\n\n      this.sideBarParams.columnDefsControls.excelMode = {value: this.excelMode, type: 'filterParams'}; //type can be null/unset\n\n      //RT eagna TODO:\n      //let toolDef = (this.extendedGridDefinition != null) ? this.extendedGridDefinition?.toolBarColumnParams : {};\n      let toolDef = null;\n      if(!this.extendedGridDefinition?.sideBar){\n        this.sideBar = this._gridService?.getSideBar(this.sideBarParams, this.defaultToolPanel, toolDef, this.rowModelType == 'clientSide' ? \"custom-tools\" : \"custom-grid\", this.isPivotModeOn);\n      } else{\n        this.sideBar = this.extendedGridDefinition?.sideBar\n      }\n  }\n\n  private _getUrlState(): string{\n    /** preferences now in the database will have urlState_gridId, e.g: 'versions_bucketVersions'\n     * to avoid sharing and overriding two grids in 1 place\n    */\n    /* const toReturn = this.urlState + (this.modalId ? \"_\" + this.modalId : \"_\") + this.gridId; */\n    const toReturn = (this.urlState ? (this.urlState + '_') : '') + (this.modalId ? this.modalId + '_' : \"\") + this.gridId;\n    /* if(this.isDebug){console.log(\"getUrlState\", toReturn);} */\n    return toReturn;\n  }\n\n  private _extractUserPref(columnsOrFilters: \"columns\" | \"filters\"): GridPrefColumns | GridPrefMultiFilters{\n    switch(columnsOrFilters){\n        case \"columns\":\n        try{\n            return <GridPrefColumns>(JSON.parse(this.userPref?.grid?.columns || \"{'state': [], 'groupState': []}\") || {state: []});\n        } catch(e){\n            return {state: []};\n        }\n        case \"filters\":\n        try{\n            return <GridPrefMultiFilters>(JSON.parse(this.userPref?.grid?.filters || \"{}\") || {});\n        } catch(e){\n            return {};\n        }\n    }\n  }\n\n  public applyFilters(){\n    const savedFilters = <GridPrefMultiFilters>this._extractUserPref(\"filters\");\n    this.gridParams?.api.setFilterModel(savedFilters);\n  }\n\n  public _saveTheme(newAgTheme: agThemeType){\n    this._updatePreferences(newAgTheme, \"gridTheme\");\n  }\n\n  private _isConditionDateType(cond: filterTypeText | filterTypeDate): cond is filterTypeDate{\n    return cond?.filterType == \"date\";\n  }\n\n  private _isLocaleDate(date: string): boolean{\n    return this._dateDelimeter == \".\" && typeof date == \"string\" && date.includes(this._dateDelimeter) //e.g. 09.10.2010 is already locale formatted, then skip\n  }\n\n  private _dateFiltersToLocale(filterModels: [multiFilterTypeText, filterTypeSet], key: string){\n    const _fm = JSON.parse(JSON.stringify(filterModels));\n    const e1 = _fm[0];\n    if(e1){\n        if(e1.condition1 && this._isConditionDateType(e1.condition1)){\n            if(e1.condition1.dateFrom && !this._isLocaleDate(e1.condition1.dateFrom)){\n                e1.condition1.dateFrom = this._helper.pipeDate(e1.condition1.dateFrom, this._dateFormat, this._locale);\n                //e1.condition1.dateFrom = this._datePipe.transform(e1.condition1.dateFrom) || e1.condition1.dateFrom;\n            }\n            if(e1.condition1.dateTo && !this._isLocaleDate(e1.condition1.dateTo)){\n                e1.condition1.dateTo = this._helper.pipeDate(e1.condition1.dateTo, this._dateFormat, this._locale);\n                //e1.condition1.dateTo = this._datePipe.transform(e1.condition1.dateTo) || e1.condition1.dateTo;\n            }\n        }\n        if(e1.condition2 && this._isConditionDateType(e1.condition2)){\n            if(e1.condition2.dateFrom && !this._isLocaleDate(e1.condition2.dateFrom)){\n                e1.condition2.dateFrom = this._helper.pipeDate(e1.condition2.dateFrom, this._dateFormat, this._locale);\n                //e1.condition2.dateFrom = this._datePipe.transform(e1.condition2.dateFrom) || e1.condition2.dateFrom;\n            }\n            if(e1.condition2.dateTo  && !this._isLocaleDate(e1.condition2.dateTo)){\n                e1.condition2.dateTo = this._helper.pipeDate(e1.condition2.dateTo, this._dateFormat, this._locale);\n                //e1.condition2.dateTo = this._datePipe.transform(e1.condition2.dateTo) || e1.condition2.dateTo;\n            }\n        }\n    }\n    const e2 = _fm[1];\n    const thisCol = this.gridParams?.columnApi.getColumn(key);\n    if(e2 && thisCol?.getColDef().type?.includes(COLUMN_TYPE.DATE_COLUMN)){\n        e2.values.forEach((e2Val: any, i: number) => {\n            if(!this._isLocaleDate(e2Val)){\n                e2.values[i] = this._helper.pipeDate(e2Val, this._dateFormat, this._locale, undefined, true);\n                //e2.values[i] = this._datePipe.transform(e2Val, this._dateFormat, undefined, this._locale) || e2Val;\n            }\n        });\n    }\n    return _fm;\n  }\n\n  private _getKeyToUse(_colId: string): string{\n    /* let _toReturn = _colId;\n    if(this.fieldMapper?.[_colId]){\n        _toReturn = (<string>this.fieldMapper?.[_colId].filterKey) || _colId;\n    }\n    return _toReturn; */\n    return (<string>this.fieldMapper?.[_colId]?.filterKey) || _colId;\n  }\n\n  private _appendUserPref(apiParams: any, gridParams: IServerSideGetRowsParams | IGetRowsParams){\n    //apply userPref (first time load)\n    if (!this.skipUserPref && !this.hasRendered.gridReady && ((this.enableSaveColumnsAndFilters && this.enableSideBar) || this.enableFiltersAndColumnsMemory)){ // filtering and sorting the first time\n        const savedFilters = <GridPrefMultiFilters>this._extractUserPref(\"filters\");\n        const savedColumns = <GridPrefColumns>this._extractUserPref(\"columns\");\n\n        if (this._helper.isNotEmpty(savedFilters)) {\n            apiParams.filters = {};\n            for (const key in savedFilters) {\n                const _whichKey = this._getKeyToUse(key);\n                if (savedFilters.hasOwnProperty(key)) {\n                    const element = savedFilters[key];\n                    if(element && this._helper.isNotEmpty(element.filterModels)){\n                        if(this.dateFiltersToLocale){\n                            apiParams.filters[_whichKey] = this._dateFiltersToLocale(element.filterModels, _whichKey);\n                        } else{\n                            apiParams.filters[_whichKey] = element.filterModels;\n                        }\n\n                    }\n                }\n            }\n        }\n\n        if (savedColumns && this._helper.isNotEmpty(savedColumns.state)) {\n            savedColumns.state.forEach(col => {\n                if(col.sort){\n                    if (!apiParams.sort) {\n                        apiParams.sort = [];\n                    }\n                    apiParams.sort.push({colId: col.colId, sort: col.sort, sortIndex: col.sortIndex});\n                }\n            });\n            if(apiParams.sort && apiParams.sort.length > 0){\n                apiParams.sort = this._helper.arraySortBy({arr: apiParams.sort, byId: \"sortIndex\"}).map(m => ({ colId: m.colId, sort: m.sort }));\n            }\n        }\n        return apiParams;\n    } else { // for every filtering and sorting apply\n        // filtering\n        let filterModel: any = {};\n        let sortModel: any[] = [];\n\n        if(gridParams){\n            let succeedingCallbackProps = ['groupKeys', 'pivotCols', 'pivotMode', 'rowGroupCols', 'valueCols'];\n            // filterModel: {}\n            // groupKeys: []\n            // pivotCols: [{…}]\n            // pivotMode: false\n            // rowGroupCols: []\n            // sortModel: []\n            // startRow: undefined\n            // valueCols: [{…}]\n            const processRequests = (whichRequests: any) => {\n                //IServerSideGetRowsRequest\n                Object.keys(whichRequests).forEach(key => {\n                    if(succeedingCallbackProps.includes(key) && this._helper.isNotEmpty(whichRequests[key])){\n                        apiParams[key] = whichRequests[key];\n                    }\n                });\n\n                filterModel = whichRequests?.filterModel;\n                sortModel = whichRequests?.sortModel;\n            }\n\n            if(this.rowModelType == \"serverSide\" && this._isServerSideInstance(gridParams)){\n                processRequests(gridParams.request);\n            } else if(this._isInfiniteInstance(gridParams)){\n                processRequests(gridParams);\n            }\n        }\n\n        if (filterModel && Object.keys(filterModel).length > 0) {\n            apiParams.filters = {};\n            for (const key in filterModel) {\n                const _whichKey = this._getKeyToUse(key);\n                if (filterModel.hasOwnProperty(key)) {\n                    const element = filterModel[key];\n                    if(element){\n                        if(this._helper.isNotEmpty(element.filterModels)){\n                            if(this.dateFiltersToLocale){\n                                apiParams.filters[_whichKey] = this._dateFiltersToLocale(element.filterModels, _whichKey);\n                            } else{\n                                apiParams.filters[_whichKey] = element.filterModels;\n                            }\n                        } else if(element.filterType == FILTER_TYPE.SET){ //RT: boolean filter\n                            apiParams.filters[_whichKey] = element.values?.[0];\n                        }\n                    }\n                }\n            }\n        }\n\n        // sorting\n        if (sortModel && sortModel.length > 0) {\n            apiParams.sort = sortModel;\n            /* sortModel.forEach((sortColumn: { colId: any; sort: any; }) => {\n                apiParams.sort.push(sortColumn);\n            }); */\n        }\n\n        return apiParams;\n    }\n  }\n\n  private _setUserColumns(columns: GridPrefColumns, noUserPref = false): void {\n    const allCols = (columns.state || []);\n    if(this.gridParams && this.gridParams?.columnApi){\n        if(!noUserPref){\n            this._helper.mergeArrays(allCols, this.gridParams?.columnApi.getColumnState(), \"colId\");\n        }\n        //const applyResult1 = this.gridParams?.columnApi.applyColumnState({state: , applyOrder: true});\n        const hiddenColumns = allCols.filter(col => col.hide).map(col => {\n            const thisCol = this.gridParams?.columnApi.getColumn(col.colId);\n            if(thisCol){\n                let headerName;\n                if(thisCol.getOriginalParent && this._helper.isNotEmpty(thisCol.getOriginalParent()?.getColGroupDef)){\n                headerName = thisCol.getOriginalParent()?.getColGroupDef()?.headerName;\n                } else{\n                headerName = thisCol.getColDef().headerName != undefined ? thisCol.getColDef().headerName : thisCol.getColId();\n                }\n                return {...col, headerName };\n            }\n            return col;\n        });\n\n        const applyResult = this.gridParams?.columnApi.applyColumnState({state:\n        [...allCols.filter(col => !col.hide),\n            ...this._helper.arraySortBy({arr: hiddenColumns, byId: 'headerName'}).map(col => {\n            delete col.headerName;\n            return col;\n        })],\n        applyOrder: true});\n\n        if(noUserPref){\n            setTimeout(() => {\n                this.gridParams?.columnApi.autoSizeAllColumns();\n            })\n        }\n    }\n  }\n\n  private _setUserFilters(savedFilters: { [x: string]: any; }, clear?: boolean){\n    if(this._helper.isNotEmpty(savedFilters)){\n        setTimeout(() => {\n            if(this.rowModelType != GRID_TYPE.CLIENT_SIDE){\n                this.hasRendered.firstFilter = true;\n            }\n            this.gridParams?.api.setFilterModel(savedFilters);\n            this.gridHasFiltersApplied = true;\n        });\n    }\n  }\n\n  private _disableEnableNextPrevious(mode: 'add' | 'remove'){\n    const _p = (<any>document.querySelectorAll('.ag-icon-previous')[0])?.parentElement;\n    const _n = <any>(document.querySelectorAll('.ag-icon-next')[0])?.parentElement;\n    if(_p){\n        const _cl1 = <string>this._helper.toggleClass(_p.className, 'cursor-not-allowed pointer-events-none', mode);\n        _p.className = _cl1;\n    }\n    if(_n){\n        const _cl2 = <string>this._helper.toggleClass(_n.className, 'cursor-not-allowed pointer-events-none', mode);\n        _n.className = _cl2;\n    }\n  }\n\n  /**\n   * Grid internal method that performs action onGridReady\n   * @params params Grid Options params (e.g. params.api)\n   * Use extendedGridDefinition?.onGridReady to extend this method\n   */\n  public onGridReady(params: GridReadyEvent){\n    //setTimeout(() => {\n        this.gridParams = params;\n        this.gridParamsChange.emit(this.gridParams);\n\n        if(this.hasRendered.gridReady && this._userPrefReInit){\n            this._userPrefReInit = false;\n            setTimeout(() => {\n                this._setUserPreferences(\"filters\");\n            });\n        }\n\n        //this.extendedGridDefinition?.onGridReady?.(params);\n        if (this.rowModelType == GRID_TYPE.INFINITE || this.rowModelType == GRID_TYPE.SERVER_SIDE) {\n            //set empty failCallback to perform data empty\n            if(this.apiCallParams !== undefined){\n                if (!this.apiCallParams?.failCallback) {\n                    this.apiCallParams.failCallback = (e, p) => {\n                        if (p) {\n                            if(p.fail){\n                                p.fail();\n                            }\n                            params.api?.showNoRowsOverlay();\n                        }\n                    }\n                } else {\n                    this.apiCallParams.executeAfterFailCallback = (e, p) => {\n                        if (p) {\n                            if(p.fail){\n                                p.fail();\n                            }\n                            params.api?.showNoRowsOverlay();\n                        }\n                    }\n                }\n\n                //next set callback\n                this.apiCallParams.callback = (result: GridResponse, p: IServerSideGetRowsParams | IGetRowsParams) => {\n                    // RT eagna commented: if(result && result.cache_last_updated){\n                    //     this._cacheLastUpdate$.next(result.cache_last_updated);\n                    // }\n\n                    /* console.log({result, p}); */\n\n                    if(!this.firstResult){\n                        this.firstResult = result;\n\n                        let noRowData = true;\n                        const firstRow = result?.results?.[0];\n                        if(firstRow){\n                            for (const key in firstRow) {\n                                if (Object.prototype.hasOwnProperty.call(firstRow, key)) {\n                                    const element = firstRow[key];\n                                    if(noRowData && this._helper.isNotEmpty(element)){\n                                        noRowData = false;\n                                    }\n                                }\n                            }\n                        }\n                        if(noRowData){\n                            this._onFirstDataRendered(params);\n                        }\n                    }\n\n                    if(!this._noReadRendered && (!result?.permission || !result?.permission.read)){\n                        this._noReadRendered = true;\n                        /* this.destroyAndLive({inBetweenCallback: () => {\n                            this.tOverlay.noRows = `<span style=\"padding: 10px; border: 2px solid #444; background: lightgoldenrodyellow;\">No Read Permission</span>`;\n                            if(this.rowModelType != 'clientSide'){\n                                console.log({noReadRendered: this._noReadRendered, permission: result?.permission, p});\n                                if(this._isServerSideInstance(p)){\n                                    p?.fail();\n                                } else{\n                                    p?.failCallback();\n                                }\n                                params.api?.showNoRowsOverlay();\n                            }\n                        }, timeout: 100}); */\n                        this.tOverlay.noRows = `<span style=\"padding: 10px; border: 2px solid #444; background: lightgoldenrodyellow;\">No Read Permission</span>`;\n                        if(this.rowModelType != 'clientSide'){\n                            //console.log({noReadRendered: this._noReadRendered, permission: result?.permission, p});\n                            if(this._isServerSideInstance(p)){\n                                p?.fail();\n                            } else{\n                                p?.failCallback();\n                            }\n                            params.api?.showNoRowsOverlay();\n                        }\n                    } else if(this._noReadRendered){\n                        if(this._isServerSideInstance(p)){\n                            p?.fail();\n                        } else{\n                            p?.failCallback();\n                        }\n                        params.api?.showNoRowsOverlay();\n                        this._messageService.add({detail: Core.Localize('noReadAccess') , severity: MESSAGE_SEVERITY.WARN});\n                    } else{\n                        let editableCols: any[] = [];\n    \n                        if (params.columnApi) {\n                            editableCols = (params.columnApi.getColumns() || []).filter(col => col.getColDef().editable);\n                        }\n    \n                        if(result.results && Array.isArray(result.results)){\n                            if (editableCols.length > 0) {\n                            result.results = result.results.map((r: { [x: string]: any; isChanged: any[]; }) => {\n                                editableCols.forEach((e: { colId: string; }) => {\n                                    r[e.colId + \"_orig\"] = ((r[e.colId] || \"\") + \"\"); // just assign the value, not ref\n                                });\n                                r.isChanged = [];\n                                return r;\n                            });\n                            }\n                        }\n    \n                        if(p){\n                            this._pSuccessData = {rowData: result.results, rowCount: (result.total || 0)};\n                            if(this._isServerSideInstance(p)){\n                                p.success(this._pSuccessData);\n                            } else {\n                                p.successCallback(this._pSuccessData?.rowData, (this._pSuccessData?.rowCount || 0));\n                            }\n                            //console.log({here: this._pSuccessData});\n                            this._cdr.detectChanges();\n                        }\n    \n                        if(result.total > 0){\n                            params.api?.hideOverlay();\n                            //tell to reselect the selection\n                            if(this._isRefreshed){\n                                this._isRefreshed = false;\n                                this._selectionBeforeRefreshSubject.next(true);\n                            }\n                        }\n                        else if(result.total <= 0) {\n                            params.api?.showNoRowsOverlay();\n                        } else{\n                            params.api?.hideOverlay();\n                        }\n    \n                        if (!this.hasRendered.gridReady) {\n                            this.hasRendered.gridReady = true;\n                            if((this.enableSaveColumnsAndFilters && this.enableSideBar)){ //|| this.enableFiltersAndColumnsMemory\n                                this._setUserPreferences(\"filters\", \"apiCallParams.callback\");\n                            }\n                        }\n    \n                        // RT commented: if (this.hasRendered.onwardChanges) {\n                        //     this.onFirstDataRendered(params);\n                        //     this.hasRendered.onwardChanges = false;\n                        // }\n    \n                        this._initDataValidation(params, result.results);\n    \n                        if (this.apiCallParams?.executeAfterCallback) {\n                            this.apiCallParams.executeAfterCallback(result, params);\n                        }\n    \n                        const _f = document.querySelectorAll('.ag-icon-first')[0];\n                        const _l = document.querySelectorAll('.ag-icon-last')[0];\n    \n                        const _p = (<any>document.querySelectorAll('.ag-icon-previous')[0])?.parentElement;\n                        const _n = <any>(document.querySelectorAll('.ag-icon-next')[0])?.parentElement;\n                        if(_f){\n                            const _cl1 = <string>this._helper.toggleClass(_f.className, 'hidden', 'add');\n                            //document.querySelectorAll('.ag-icon-first')[0].className = _cl1;\n                            _f.className = _cl1;\n                        }\n                        if(_l){\n                            const _cl2 = <string>this._helper.toggleClass(_l.className, 'hidden', 'add');\n                            //document.querySelectorAll('.ag-icon-last')[0].className = _cl2;\n                            _l.className = _cl2;\n                        }\n    \n                        this._disableEnableNextPrevious('remove');\n                    }\n\n                };\n            } else{\n                this._messageService.add({detail: Core.Localize('noApiCallParamsProvided'), severity: MESSAGE_SEVERITY.ERROR, sticky: true});\n            }\n\n            const thisApiCallParams: any = Object.assign({}, this.apiCallParams);\n            const i_dataSource: any = {\n                rowCount: null,\n                getRows: (p: IServerSideGetRowsParams | IGetRowsParams) => {\n                    let sortModel: any = null;\n                    let filterModel: any = null;\n                    if(this._isServerSideInstance(p)){\n                        sortModel = p.request.sortModel;\n                        filterModel = p.request.filterModel;\n                    } else{\n                        sortModel = p.sortModel;\n                        filterModel = p.filterModel;\n                    }\n\n                    if(this._currentPage > 0 && this._sortChanged){ // RT && this._helper.isNotEmpty(sortModel)\n                        this._initSortModel = sortModel;\n                        this._initFilterModel = filterModel;\n                        //console.log(\"TODO store sortModel as local variable and apply upon reload\", sortModel);\n                        this.destroyAndLive({timeout: 10});\n                    } else{\n                        if(!this._jumpToLastPage ){\n                            this._disableEnableNextPrevious('add');\n                            this.hasRendered.firstFilter = true;\n                            //if(!this.hasRendered.firstFilter){\n                                params.api?.showLoadingOverlay();\n        \n                                let apiCallParamsParams = Object.assign({}, this.apiCallParams?.params);\n                                if (!apiCallParamsParams) {\n                                    apiCallParamsParams = {};\n                                }\n        \n                                const executeApiCallParams = (newApiCallParams: any) => {\n                                    thisApiCallParams.params = Object.assign({}, newApiCallParams);\n        \n                                    let startRow = 0, endRow = 0;\n                                    if (this.rowModelType == \"serverSide\" && this._isServerSideInstance(p) ) {\n                                        startRow = (p.request.startRow || 0);\n                                        endRow = (p.request.endRow || this.cacheBlockSize);\n                                    } else if (this.rowModelType == \"infinite\" && this._isInfiniteInstance(p)) {\n                                        startRow = p.startRow;\n                                        endRow = p.endRow;\n                                    }\n        \n                                    let aggs_filters: any;\n                                    if(this.aggsFilters){\n                                        aggs_filters = Object.assign({}, thisApiCallParams.params); //to just create a copy not the instance, otherwise it will create circular copying;\n                                    }\n        \n                                    if(this.serverSideInfiniteScroll){\n                                        const pageSize = this.paginationAutoPageSize ? (endRow - startRow) : this.paginationPageSize;\n                                        //thisApiCallParams.params.page = (startRow / pageSize) + 1;\n                                        const page = (startRow / pageSize) + 1;\n                                        thisApiCallParams.params.limit = pageSize;\n        \n                                        if(page > 1){\n                                            //thisApiCallParams.params.offset = (pageSize * (page - 1));\n                                        }\n                                    } else if(!this.serverSideInfiniteScroll && this.limit){\n                                        //thisApiCallParams.params.page = 1;\n                                        thisApiCallParams.params.limit = this.limit;\n                                    }\n        \n                                    if(this._apiCallService){\n                                        this._apiCallService.execute(thisApiCallParams, this.tokenRequired, p, true, this._nextPage)\n                                            .then((_promise: {[key: string]: GridResponse, p?: any}) => {\n                                                if(_promise['result']?.aggs){\n                                                    this._gridService.aggsValue = _promise['result'].aggs;\n                                                    /* this.cacheBlockSize = 400; */\n                                                    thisApiCallParams.next = _promise['result']?.page?.next;\n                                                    thisApiCallParams.previous = _promise['result']?.page?.previous;\n                                                } else {\n                                                    //after getRows execution, call the same query with aggs and replace the _newAggsFromResult for new async computation\n                                                    setTimeout(() => {\n                                                        const aggsCallParams: any = {...thisApiCallParams.params, ...{aggs: true, limit: 1}, ...(aggs_filters? {aggs_filters} : {})};\n                                                        if(aggsCallParams.page){\n                                                            delete aggsCallParams.page;\n                                                        }\n                                                        this._gridService.aggsValue = undefined;\n                                                        const tempSub = thisApiCallParams.api(aggsCallParams).subscribe({next: (_newAggsFromResult: ResponseObj<GridResponse>) => {\n                                                            this._gridService.aggsValue = _newAggsFromResult.content?.aggs;\n                                                        }, error:  (err: any) => {\n                                                            //this._gridService.aggsValue = {};\n                                                        }, complete: ()=> {\n                                                            setTimeout(()=>{\n                                                                if(tempSub){\n                                                                    tempSub.unsubscribe();\n                                                                }\n                                                            });\n                                                        }})\n                                                    });\n                                                }\n    \n                                                this._nextPage = false;\n                                                this._isQuerying = false;\n                                            }).catch(() => {\n                                                //this._gridService.aggsValue = [];\n                                                this._nextPage = false;\n                                                this._isQuerying = false;\n                                            });\n                                    } else{\n                                        console.warn('No ApiCallService provided');\n                                    }\n                                };\n\n                                let _p = p;\n                                if(this._helper.isNotEmpty(this._initSortModel)){ // RT || this._helper.isNotEmpty(this._initFilterModel)\n                                    //TODO filter this._initFilterModel\n                                    if(this._isServerSideInstance(p)){\n                                        //sortModel = p.request.sortModel;\n                                        _p = {..._p, request: {...p.request , sortModel: (this._initSortModel || [])}};\n                                    } else{\n                                        //sortModel = p.sortModel;\n                                        _p = {..._p, sortModel: (this._initSortModel || [])};\n                                    }\n                                    \n                                    //mark sorting without triggering event\n                                    let _hasSorting = false;\n                                    this._initSortModel?.forEach((_s, i) => {\n                                        const thisCol = params?.columnApi.getColumn(_s.colId);\n                                        if(thisCol){\n                                            _hasSorting = true;\n                                            thisCol.setSort(_s.sort);\n                                            thisCol.setSortIndex(i);\n                                        }\n                                    });\n                                    if(_hasSorting){\n                                        params?.api?.refreshHeader();\n                                    }\n\n                                    // let _hasFilter = false;\n                                    // this._initFilterModel?.\n                                    // for (const o in this._initFilterModel) {\n                                    //     if (Object.prototype.hasOwnProperty.call(this._initFilterModel, o)) {\n                                    //         const element = this._initFilterModel[o];\n                                            \n                                    //         const colFilter = this.gridParams?.api?.getFilterInstance(o);\n                                    //         const thisColumn = this.gridParams?.columnApi?.getColumn(o);\n                                    //         if(colFilter && thisColumn){\n                                    //             if ((!savedFilters[o].filterType || savedFilters[o].filterType == FILTER_TYPE.SET) && savedFilters[o].values && savedFilters[o].values.length > 0) {\n                                    //                 filters = new PrefFilterTypeSet();\n                                    //                 filters.setFilterModel({ values: savedFilters[o].values });\n                                    //                 const fModel = colFilter.setModel(filters.getFilterModel());\n                                    //                 if(fModel){\n                                    //                     fModel.then(()=>{\n                                    //                         thisColumn.setValueActive(filters.values);\n                                    //                     });\n                                    //                 } else{\n                                    //                     thisColumn.setValueActive(filters.values);\n                                    //                 }\n                                    //             }\n                                    //         }\n                                    //     }\n                                    // }\n                                    // RT if(this._initFilterModel){\n                                    //     setTimeout(() => {\n                                    //         params.api?.setFilterModel(this._initFilterModel);\n                                    //     });\n                                    // }\n                                }\n                                \n                                const appendApiCallParams = this._appendUserPref(apiCallParamsParams, _p);\n                                //RT amend filters implementation\n                                if(this.isDebug){console.log({appendApiCallParams});}        \n                                for (const key in appendApiCallParams) {\n                                    if (Object.prototype.hasOwnProperty.call(appendApiCallParams, key)) {\n                                        if(key==\"filters\"){\n                                            for (const key2 in appendApiCallParams[key]) {\n                                                if (Object.prototype.hasOwnProperty.call(appendApiCallParams[key], key2)) {\n                                                    const element = appendApiCallParams[key][key2];\n                                                    if(element && element[1]){\n                                                        appendApiCallParams[key2] = (<filterTypeSet>element[1])?.values;\n                                                    } else{ //boolean filter\n                                                        appendApiCallParams[key2] = element;\n                                                    }\n                                                    if(this.isDebug){console.log(\"multifilter 1\", element[0]);}\n                                                }\n                                            }\n                                            delete appendApiCallParams.filters;\n                                        }\n                                    }\n                                }\n                                executeApiCallParams(appendApiCallParams);\n                            // } else{ TODO: to solve filter preference\n                            //     if(p && this._pSuccessData){\n                            //         if(this._isServerSideInstance(p)){\n                            //             p.success(this._pSuccessData);\n                            //         } else {\n                            //             p.successCallback(this._pSuccessData.rowData, this._pSuccessData.rowCount);\n                            //         }\n                            //     }\n                            //     if(this._helper.isNotEmpty(this.columnDefs)){\n                            //         this.hasRendered.firstFilter = false;\n                            //     }\n                            // }\n                        } else{\n                            //at this moment the ag grid will automatically go back to last first page\n                            params.api?.refreshServerSide({ route: [], purge: true });\n                        }\n                    }\n\n                    this._sortChanged = false;\n                    //this._isQuerying = false;\n                }\n            };\n\n            if(this.rowModelType == \"serverSide\"){ //if(this._isIServerSideDatasourceInstance(i_dataSource)){\n                this._serverSideDataSource = i_dataSource;\n                params.api?.setServerSideDatasource(this._serverSideDataSource);\n            } else {\n                this._dataSource = i_dataSource;\n                params.api?.setDatasource(this._dataSource);\n            }\n        } else if(this.rowModelType == GRID_TYPE.CLIENT_SIDE){\n            if(this.apiCallParams){\n                //this.apiCallParams.api(this.apiCallParams.params, 'options').subscribe((res: ResponseObj<GridResponse>) => {\n                this.apiCallParams.api(this.apiCallParams.params, 'post').subscribe((res: ResponseObj<GridResponse>) => {\n                    if(!this.firstResult){\n                        this.firstResult = res?.content;\n\n                        let noRowData = true;\n                        const firstRow = res?.content?.results?.[0];\n                        if(firstRow){\n                            for (const key in firstRow) {\n                                if (Object.prototype.hasOwnProperty.call(firstRow, key)) {\n                                    const element = firstRow[key];\n                                    if(noRowData && this._helper.isNotEmpty(element)){\n                                        noRowData = false;\n                                    }\n                                }\n                            }\n                        }\n                        if(noRowData){\n                            this._onFirstDataRendered(params);\n                        }\n                    }\n                    if(!this.rowData){\n                        this.rowData = res?.content?.results || [];\n                    }\n                    // console.log({here2: this.rowData});\n                    this._cdr.detectChanges();\n                });\n            }\n\n            if (!this.hasRendered.gridReady) {\n                this.hasRendered.gridReady = true;\n            }\n            setTimeout(() => {\n                this._cdr.detectChanges();\n            }, 1000);\n        }\n\n        // RT eagna commented if(this._loadedProfile){\n        // params.api?.openToolPanel(\"customTools\");\n        // }\n        if((this.enableSaveColumnsAndFilters && this.enableSideBar) || this.enableFiltersAndColumnsMemory){\n            this._setUserPreferences(\"columns\", \"on gridReady\");\n        }\n    //});\n  }\n\n  private _onFirstDataRendered(params: any){\n    //to make initial validations\n    if(this.rowModelType == GRID_TYPE.CLIENT_SIDE){\n        this._initDataValidation(params);\n        if ((this.enableSaveColumnsAndFilters && this.enableSideBar) || this.enableFiltersAndColumnsMemory){\n            this._setUserPreferences(\"filters\", \"on firstdatarendered\");\n        }\n    }\n\n    /* if(this.extendedGridDefinition?.onFirstDataRendered){\n        this.extendedGridDefinition?.onFirstDataRendered(params);\n    } */\n\n    //no default columnDefs is provided neither computed, computing now based on data columns field\n    if(this.hasRendered.forcedDestroyed || !this._helper.isNotEmpty(this.columnDefs)){\n        this.columnDefs = this._gridService.extractApiColumns(this.firstResult, this.isDebug);\n        if(this.hasRendered.forcedDestroyed){\n            this.hasRendered.forcedDestroyed = false;\n        }\n    }\n\n    /* RT: this is a special formatting routine for fields with Objects as expected value\n        such as autocomplete, select, multiselect, address?\n        note that the fields must have at least {name} property\n        else, it will return [Object, object] as it is\n\n        TODO: Input {[p: string]: fieldExtraProperties}\n     */\n    this.firstResult?.fields?.filter( _f => GridService.ObjectFields.includes(_f?.form || '')).forEach( _f2 => {\n        //const _col = params.columnApi.getColumn(_f2?.field);\n        let _col: ColDef | undefined = this.columnDefs ?.find((_c: ColDef) => _c?.field == _f2?.field);\n        //let _colIndex = _newColDefs?.findIndex((_c: ColDef) => _c?.field == _f2?.field);\n        //let _col : ColDef = _newColDefs[_colIndex];\n        if(_col){\n            //if(!_col.valueFormatter){_col.valueFormatter = (_k) => (_k.value?.name || _k.value);}\n            if(Array.isArray(_col.type)){\n                _col.type.push(COLUMN_TYPE.NEW_AUTOCOMPLETE_COLUMN);\n            } else if(_col.type){\n                _col.type = [_col.type, COLUMN_TYPE.NEW_AUTOCOMPLETE_COLUMN];\n            } else {\n                _col.type = [COLUMN_TYPE.NEW_AUTOCOMPLETE_COLUMN];\n            }\n        }\n    });\n\n    //let _newColDefs = this.columnDefs\n    if(this.extendedGridDefinition?.amendColDefs){\n        const _newColDefs = this.extendedGridDefinition?.amendColDefs(this.columnDefs || [], this.firstResult, params);\n        if(this._helper.isNotEmpty(_newColDefs)){\n            this.columnDefs = _newColDefs;\n        }\n    }\n\n    if(this._helper.isNotEmpty(this.columnDefs)){\n        setTimeout(() => {\n            this.hasRendered.firstFilter = true;\n            this._setUserPreferences(\"both\", \"onFirstDataRendered after extractBackendColumns\"); //TODO, to fix the double call\n            /* setTimeout(() => {\n                this.hasRendered.firstFilter = false;\n            }); */\n        });\n    } else{\n        this._messageService.add({detail: Core.Localize('noColumnsProvided'), severity: MESSAGE_SEVERITY.ERROR, sticky: true});\n    }\n  }\n\n  public onFirstDataRendered(params: FirstDataRenderedEvent){\n    this._onFirstDataRendered(params);\n  }\n\n  private _initDataValidation(params: FirstDataRenderedEvent | GridReadyEvent, rowData?: any[]) {\n    params.api?.forEachNode(rowNode => {\n        if(rowNode.data){\n            params.columnApi.getColumns()?.forEach(col => {\n                const value = rowNode.data?.[col.getColId()] || undefined;\n                const colDef = col.getColDef();\n                const tmpParams = {value, api: params.api, colDef, data: rowNode.data};\n                if(colDef.type){\n                    if(colDef.type.includes(COLUMN_TYPE.UNIQUE_VALUE_COLUMN)){\n                        this._gridService?.validateDuplicate(tmpParams); //to validate unique\n                    } else if(colDef.type == COLUMN_TYPE.UNIQUE_CASE_SENSITIVE_COLUMN){\n                        this._gridService?.validateDuplicate(tmpParams, true); //to validate unique case-sensitive\n                    }\n\n                    if(colDef.type.includes(COLUMN_TYPE.REQUIRED_COLUMN)){\n                        this._gridService?.isRequiredOrValidateWhen(tmpParams); //to validate unique\n                    } else if(colDef.type == COLUMN_TYPE.VALIDATE_WHEN_COLUMN){\n                        this._gridService?.isRequiredOrValidateWhen(tmpParams, true); //to validate unique case-sensitive\n                    }\n                }\n            });\n        }\n    });\n  }\n\n  /**\n     * Grid internal method that performs action onSelectionChanged\n     * @params params Grid Options params (e.g. params.api)\n     * Use extendedGridDefinition?.selectionChanged to extend this method\n     */\n  public onSelectionChanged(params: SelectionChangedEvent){\n    /* this._currentSelections = [];\n\n    if(params.api && !params.api?.destroyCalled){\n        this._currentSelections = params.api?.getSelectedNodes();\n\n        //decoupled abstract action when selection changed so this grid library is not app-specific event\n        this.gridService.onSelectionChanged(params, this.extraParams)\n    }\n\n    if(this.rowModelType != \"\"){\n        this._headerMenuService.selectionLengthSource.next({length: this._currentSelections.length, gridId: this.gridId});\n    }\n\n    if(this.extendedGridDefinition?.selectionChanged && !this.gridService.dontSendReselectionEvent){\n        this.extendedGridDefinition?.selectionChanged(params);\n    }\n\n    this.gridService.dontSendReselectionEvent = false; */\n    /* this.extendedGridDefinition?.onSelectionChanged?.(params); */\n  }\n\n  public onFilterChanged(params: FilterChangedEvent){\n    this._initFilterModel = undefined;\n    //this.extendedGridDefinition?.onFilterChanged?.(params)\n  }\n\n  /**\n     * Grid internal method that performs action onCellValueChanged\n     * @params params Grid Options params (e.g. params.api)\n     * Use extendedGridDefinition?.cellValueChanged to extend this method\n     */\n  public onCellValueChanged(params: CellValueChangedEvent){\n    const _colId = params.colDef.colId || params.colDef.field || '';\n    if(_colId){\n        if (!params.data?.hasOwnProperty(_colId + '_orig')){\n            params.data[_colId + '_orig'] = params.oldValue;\n        }\n        let _isChanged;\n        let newObj: any = Object.assign({}, params.data);\n        let newValue    = params.newValue;\n        let oldValue    = params.data?.[_colId + '_orig'];\n        newValue        = newValue === \"\" ? null : newValue;\n        oldValue        = oldValue === \"\" ? null : oldValue;\n        _isChanged      = newValue != oldValue;\n        if(_isChanged !== null && params.node){\n            newObj.isChanged = newObj.isChanged||[];\n            if(_isChanged){\n                if(!newObj.isChanged.includes(_colId)){\n                    newObj.isChanged.push(_colId);\n                }\n            } else {\n                if (newObj.isChanged.includes(_colId)) {\n                    newObj.isChanged = newObj.isChanged.filter((x: any) => x != _colId)\n                }\n            }\n            params.node.setData(newObj);\n            params.api?.refreshCells({columns: [_colId], force: true});\n        }\n    }\n    /* this.extendedGridDefinition?.onCellValueChanged?.(params); */\n  }\n\n  /**\n     * Grid internal method that performs action onCellEditingStarted\n     * @params params Grid Options params (e.g. params.api)\n     * Use extendedGridDefinition?.cellEditingStarted to extend this method\n     */\n  public onCellEditingStarted(params: CellEditingStartedEvent){\n    //TODO: add input if doenst want to autoselect while upon editing start\n    /* if(params.node && params.node.setSelected){\n        params.node.setSelected(true);\n    }\n     */\n    const _noWritePermission = (!this.firstResult?.permission || !this.firstResult?.permission?.update || !this.firstResult?.permission?.create);\n    if(_noWritePermission){\n        //console.log(\"console 1\", params);\n        this._messageService.add({detail: Core.Localize('noWriteAccess'), severity: MESSAGE_SEVERITY.WARN});\n        params.api.stopEditing(true);\n    } /* else{ this.extendedGridDefinition?.onCellEditingStarted?.(params); } */\n  }\n\n  /**\n     * Grid internal method that performs action onCellEditingStopped\n     * @params params Grid Options params (e.g. params.api)\n     * Use extendedGridDefinition?.cellEditingStopped to extend this method\n     */\n  public onCellEditingStopped(params: any){\n    if(params.valueChanged){\n        const _noWritePermission = (!this.firstResult?.permission || !this.firstResult?.permission?.update || !this.firstResult?.permission?.create);\n\n        /* if(params.node && params.node.setSelected){\n            if(params.data && this._helper.isNotEmpty(params.data?.isChanged) && params.data?.isChanged.includes(params.colDef.colId)){\n                //params.node.setSelected(true);\n            } else{\n                params.node.setSelected(false);\n            }\n        } */\n        if(_noWritePermission){\n            //console.log(\"this should not be allowed when console 1 is triggered\", {onCellEditingStopped: _noWritePermission});\n            this._messageService.add({detail: Core.Localize('noWriteAccess'), severity: MESSAGE_SEVERITY.WARN});\n        } /* else{ this.extendedGridDefinition?.onCellEditingStopped?.(params); } */\n\n    \n        /* setTimeout(() => {\n            if(params.api && params.node){\n                const cellsToRefresh: any = {rowNodes: [params.node]};\n                if(params.colDef){\n                    cellsToRefresh.columns = [params.colDef.colId];\n                }\n                this.forceRefreshCells(cellsToRefresh, params);\n            }\n        }, 200); */\n    }\n\n  }\n\n  /**\n     * Cal this method to force refresh the grid cells (by rows or columns)\n     * @param cellsToRefresh columns: array of column [colId1, colId2...], (or rows: [RowNode1, RowNode2...], or rowNodes: [RowNode1, RowNode2...])\n     * @param params Grid Options params (e.g. params.api)\n     */\n    forceRefreshCells(cellsToRefresh: {columns?: any[], rows?: any[], rowNodes?: any[]} = {}, params?: any){\n        const toRefresh = {...cellsToRefresh, ...{force: true}};\n        const gridParams = params || this.gridParams;\n        if(gridParams && gridParams?.api){\n            gridParams?.api?.refreshCells({...{force: true, columns: toRefresh.columns}, ...(toRefresh.rows? {rows: toRefresh.rows}: {})});\n\n            if(cellsToRefresh.rowNodes && this._helper.isNotEmpty(this.extendedGridDefinition?.rowClassRules)){\n                gridParams?.api?.redrawRows({rowNodes: cellsToRefresh.rowNodes});\n            }\n        }\n    }\n\n  /**\n   * Grid internal method that performs action onColumnResized\n   * @params params Grid Options params (e.g. params.api)\n   * Use extendedGridDefinition?.columnResized to extend this method\n   */\n  public onColumnResized(p: any){\n    /* if(p.api && !p.api?.destroyCalled && p.column && p.finished && p.source == \"uiColumnDragged\"){\n        let focusCell = 0;\n        const sel = p.api?.getSelectedNodes();\n        if(sel.length > 0){\n            focusCell = sel[0].rowIndex;\n        }\n        p.api?.setFocusedCell(focusCell, p.column.colId);\n        p.api?.tabToNextCell();\n        p.api?.tabToPreviousCell();\n    }\n    if(this.extendedGridDefinition?.columnResized){\n        this.extendedGridDefinition?.columnResized(p);\n    } */\n  }\n\n  private _clearColumns(): void {\n    this._initSortModel = undefined;\n    this.gridParams?.columnApi.resetColumnState();\n  }\n\n  private _clearFilters(): void {\n    this._initFilterModel = undefined;\n    this.gridParams?.api?.setFilterModel({});\n  }\n\n  private _initAgGridChartTheme(base: string){\n    /* this.chartThemeOverrides = {\n          common: {\n            fontFamily: 'EAGNA Pioneer',\n            fontSize:10,\n            title: {\n              enabled: false,\n              text: 'Precious Metals Production',\n              fontFamily: 'EAGNA Pioneer',\n              color: '#414182',\n            },\n            subtitle: {\n              enabled: false,\n              fontFamily: 'EAGNA Pioneer',\n            },\n            legend: {\n              enabled: false,\n              position: 'bottom',\n              padding: 20,\n              item: {\n                label: {\n                  fontSize: 12,\n                  fontFamily: 'EAGNA Pioneer',\n                  formatter: function (params) {\n                      return params.value.toString().toUpperCase();\n                  },\n                },\n              },\n            },\n            tooltipClass: 'my-tooltip-class',\n          },\n          cartesian: {\n              axes: {\n                  category: {\n                      label: {\n                          fontSize: 12,\n                          fontFamily: 'EAGNA Pioneer',\n                          rotation: 0,\n                          padding: 0,\n                          margin: 0,\n                          formatter: function (params) {\n                          return params.value.toString().toUpperCase();\n                          },\n                      },\n                  },\n                  number: {\n                      label: {\n                          fontSize: 12,\n                          fontFamily: 'EAGNA Pioneer',\n                          formatter: function (params) {\n                          return params.value.toString().toUpperCase();\n                          },\n                      },\n                  },\n              },\n          },\n\n        };\n      this.chartTheme = [base]; */\n  }\n\n  private _setUserPreferences(forFiltersOrColumns: \"both\" | \"filters\" | \"columns\" = \"both\", debugFrom?: string): void {\n    if(this.isDebug){console.log(\"_setUserPreferences\", debugFrom);}\n\n    if(!this.skipUserPref){\n        if((this.enableSaveColumnsAndFilters && this.enableSideBar) /* || this.enableFiltersAndColumnsMemory */){\n            let savedColumns = null;\n            let savedFilters: any;\n            let newFilters: {\n                [p: string]: apiFilter;\n            } = {};\n\n            if(this.userPref && this.gridParams && this.gridParams?.api){\n                //this.gridParams?.api?.refreshHeader();\n                if([\"both\", \"columns\"].includes(forFiltersOrColumns)){\n                    savedColumns = <GridPrefColumns>this._extractUserPref(\"columns\");\n                    if(this.isDebug){console.log({savedColumns});}\n\n                    if(this._helper.isNotEmpty(savedColumns) && this._helper.isNotEmpty(savedColumns.state)){\n                        this._setUserColumns(savedColumns || { state: [] });\n                    } else {\n                        const _gridColState = this.gridParams?.columnApi.getColumnState();\n                        if(this.defaultColumns?.columns != undefined){\n                            /* const _colState: ColumnState[] = [];\n                            this.defaultColumns?.columns.state?.forEach(_defColState => {\n                                if(typeof _defColState == 'string'){\n                                    const _foundColState = _gridColState.find(_fc => _fc.colId == _defColState);\n                                    if(_foundColState){\n                                        _colState.push(_foundColState);\n                                    }\n                                } else{\n                                    _colState.push(_defColState);\n                                }\n                            });*/                         \n                            let _colState: ColumnState[] = [];\n                            if(this._helper.isArrayOfString(this.defaultColumns?.columns.state)){\n                                _colState = _gridColState.map(_gcs => {\n                                    const _hidden = !(<string[]>this.defaultColumns?.columns?.state).includes(_gcs.colId);\n                                    return {..._gcs, hide: _hidden};\n                                    });\n                            } else{\n                                _colState = this.defaultColumns?.columns.state || [];\n                            }\n                            const _state = _colState.map(_col => (!(this.defaultColumns?.hiddenCols || []).includes(_col.colId)) ? _col : {..._col, hide: true});\n                            this._setUserColumns({state: _state, groupState: this.gridParams?.columnApi.getColumnGroupState()}, true);\n                        } else if(this.gridParams?.columnApi){\n                            this._setUserColumns({state: _gridColState.map(_col => (!(this.defaultColumns?.hiddenCols || []).includes(_col.colId)) ? _col : {..._col, hide: true}), groupState: this.gridParams?.columnApi.getColumnGroupState()}, true);\n                        }\n                    }\n                }\n                //RT: added condition apply user filter only when columnDefs is available\n                if([\"both\", \"filters\"].includes(forFiltersOrColumns) && this._helper.isNotEmpty(this.columnDefs)){\n                    savedFilters = <GridPrefMultiFilters>this._extractUserPref(\"filters\");\n                    //TODO: when there's another filter logic\n                    newFilters = savedFilters;\n                    if (this._helper.isNotEmpty(newFilters)) {\n                        this._setUserFilters(newFilters);\n                    }\n                }\n            }\n        }\n    }\n  }\n\n    public stageEditableDataState(p?: GridReadyEvent<any> | undefined, rowNodes?: any[], reselect = false){\n        const params = p || this.gridParams;\n        let editableCols: any[];\n        const stageData = (node: RowNode, fromRowNode = false) => {\n            if(node.data){\n                node.data.isChanged = [];\n                if (editableCols && editableCols.length > 0) {\n                    editableCols.forEach((e: { colId: string; }) => {\n                        if(node.group != true){\n                            node.data[e.colId + \"_orig\"] = ((node.data[e.colId] || \"\") + \"\"); // just assign the value, not ref\n                        }\n                    });\n                }\n            }\n\n            if(fromRowNode){\n                params?.api?.redrawRows({rowNodes: [node]});\n                node.setSelected(reselect);\n            }\n        };\n\n        if (params?.columnApi) {\n            editableCols = params.columnApi.getAllGridColumns().filter((col: Column) => col.getColDef().editable);\n        }\n\n        if(this._helper.isNotEmpty(rowNodes)){\n            rowNodes?.forEach(node => {\n                stageData(node, true);\n            })\n        } else{\n            params?.api?.forEachNode((node: any) => {\n                stageData(node);\n            });\n        }\n    }\n\n    /**\n     * Call this method when to get the current row selections, returns [] if empty\n     */\n     public getSelectedNodes(filterFunc?: (node: any)=>boolean): any[] {\n        //console.trace(\"getSelectedNodes\", this._destroyed);\n        /* if(!this._destroyCalled){ */\n            /* if (this.gridParams && this.gridParams?.api && !this.gridParams?.api?.destroyCalled) { */\n                const sels = this.gridParams?.api?.getSelectedNodes() || [];\n                if(filterFunc && sels.length > 0){\n                    return sels.filter(filterFunc);\n                }\n                /* return sels; */\n            //}\n        /* }         */\n        return [];\n    }\n\n    /**\n     * Call this method when to get all rows, returns [] if empty\n     */\n    public getAllNodes(): any[]{\n        const allNodes: any[] = [];\n        if(this.gridParams && this.gridParams?.api){\n            this.gridParams?.api?.forEachNode(node => {\n                allNodes.push(node);\n            });\n        }\n        return allNodes;\n    }\n\n    /**\n     * Call this method to identify if Grid has any field that has isChanged: [col1, col2, etc.] row data\n     */\n    public isChanged(): boolean{\n        return this._doesGridHas(\"isChanged\");\n    }\n\n    /**\n     * Call this method to identify if Grid has any field that has _errors: [col1, col2, etc.] row data\n     */\n    public hasErrors(): boolean{\n        return this._doesGridHas(\"_errors\");\n    }\n\n    /**\n     * Call this method to identify if Grid has any field that has _duplicates: [col1, col2, etc.] row data\n     */\n    public hasDuplicates(): boolean{\n        return this._doesGridHas(\"_duplicates\");\n    }\n\n    private _doesGridHas(whichProperty: string): boolean{\n        let _isTrue = false;\n        if(this.gridParams !== undefined && this.gridParams?.api){\n            this.gridParams?.api?.forEachNode(node => {\n                if(!_isTrue && node.data && this._helper.isNotEmpty(node.data[whichProperty])){\n                    _isTrue = true;\n                }\n            });\n        }\n        return _isTrue;\n    }\n\n    public onPaginationChanged(p: any/*PaginationChangedEvent<any> */) {\n        if(this.rowModelType != \"clientSide\"){\n            this._nextPage = false;\n            const currPage = p.api?.paginationGetCurrentPage();\n            if(this._currentPage != currPage){\n                this._nextPage = true;\n            }\n\n            const lastPage = (p.api?.paginationProxy?.totalPages - 1) || 0;\n            this._jumpToLastPage = false;\n\n            if(currPage == lastPage && (this._currentPage < lastPage - 1)){\n                this._messageService.add({detail: Core.Localize('jumpToLastPageNotAllowed') , severity: MESSAGE_SEVERITY.WARN});\n                this.destroyAndLive();\n            } else{\n                this._currentPage = currPage;\n            }\n        }\n    }\n    \n    public onSortChanged(p: SortChangedEvent<any>) {\n        this._initSortModel = undefined;\n        this._sortChanged = true;\n    }\n\n  /**\n     * Instead of wondering how to refresh the currently loaded grid data for which GRID_TYPE\n     * Use this global method that applies to all\n     * Technically will do the refresh cache for non-CLIENTSIDE\n     * and will reinitiate the grid lifecycle for CLIENTSIDE.\n     * @param purge: turn this off normal refresh without purging the entire data\n     * @param route?: optionally provide route for grouped grid, e.g. ['Group1', 2, 'Group3']\n    */\n    public refresh(params: {\n        gridParams?: any,\n        redrawRows?: any[] | {refreshWithIds: any[], idField?: string } | ApiCallParams,\n        purge?: boolean,\n        route?: any[],\n        dontReselect?: boolean} = {purge: true}){\n\n        const gridParams = params.gridParams || this.gridParams;\n        //let dontReselect = false;\n\n        /* console.log({params}); */\n\n        if(params && params.purge !== false ){\n            params.purge = true;\n        }\n\n        //get previous selection first\n        let sel: {rowIndex: number, id?: number}[] = [];\n        //let sel: any[];\n        let isPreSelected = false;\n        if(this._currentSelections && this._currentSelections.length > 0 && !isPreSelected){\n            const currSelLength = (this._currentSelections.length * 1);\n            sel = JSON.parse(JSON.stringify([...this._currentSelections.slice(0, currSelLength)].map(node => ({rowIndex: node.rowIndex, id: (node.data ? node.data?.id : null)}))));\n            isPreSelected = true;\n        }\n\n        //deselect all\n        if(this._helper.isNotEmpty(sel) && !params.dontReselect){\n            if(this.rowModelType != \"clientSide\"){\n                gridParams?.api?.forEachNode( (node: { setSelected: (arg0: boolean) => void; },i: any) => {\n                    node.setSelected(false)\n                });\n                this._isRefreshed = true;\n            } else{\n                gridParams?.api?.deselectAll();\n            }\n        }\n\n        if (gridParams && gridParams?.api) {\n            const fullRefresh = (fail = false) => {\n                //refresh according to grid type\n                if(this.rowModelType == \"clientSide\"){\n                    //this.triggerOnwardChanges(true);\n                    if(this.apiCallParams){\n                        const refreshRef = this.apiCallParams.api(this.apiCallParams.params).subscribe({next: (res2: ResponseObj<GridResponse>) => {\n                            (<GridReadyEvent>gridParams).api?.setRowData(res2.content.results || []);\n                        }, error: err=>{\n                            refreshRef?.unsubscribe();\n                        }, complete: ()=>{\n                            gridParams?.api?.hideOverlay();\n                            setTimeout(() => { refreshRef?.unsubscribe(); });\n                        }});\n                        \n                    } else{\n                        this.destroyAndLive({timeout: 5});\n                    }\n\n                    \n                } else{\n                    if(!this._isFilterAndSortingApplied){\n                        gridParams?.api?.onFilterChanged();\n                        this._isFilterAndSortingApplied = true;\n                    } else {\n                        if(this.rowModelType == \"serverSide\"){\n                            if(!params.purge && gridParams?.api?.refreshServerSideStore){ //TODO: Test on grouped grid\n                                /* const blockStateBefore1 = Object.assign({}, gridParams?.api?.getCacheBlockState()); */\n                                gridParams?.api?.refreshServerSideStore({route: params.route, purge: params.purge});\n                            } else{\n                                /* const blockStateBefore2 = Object.assign({}, gridParams?.api?.getCacheBlockState()); */\n                                gridParams?.api?.refreshServerSide();\n                            }\n                        } else if(this.rowModelType == \"infinite\"){\n                            if(gridParams?.api?.getDisplayedRowCount() == 0 || params.purge) {\n                                gridParams?.api?.purgeInfiniteCache();\n                            } else{\n                                gridParams?.api?.refreshInfiniteCache();\n                            }\n                        }\n                    }\n                }\n            }\n\n            if(params && params.redrawRows){\n                gridParams?.api?.showLoadingOverlay(); //TODO replace with line loader\n                if(Array.isArray(params.redrawRows)){ //usually being called by simple grid (client side)\n                    this.stageEditableDataState(gridParams, params.redrawRows, true);\n                    //TODO: call refresh aggregations or observe 'clear' of newRowsAction\n                } else {\n                    let requery;\n                    if(!this._helper.isApiCallParams(params.redrawRows) && this.apiCallParams){\n                        requery = this.apiCallParams.api({...this.apiCallParams.params, aggs: true, [params.redrawRows.idField || \"id\"]: params.redrawRows.refreshWithIds});\n                    } else {\n                        if(this.rowModelType == \"clientSide\" && this._helper.isApiCallParams(params.redrawRows)){\n                            requery = params.redrawRows.api({...params.redrawRows.params, aggs: true});\n                        }\n                    }\n\n                    if(requery){\n                        const refreshRef = requery.subscribe({next: res2 => {\n                            if(res2){\n                                if(res2.data) {\n                                    let rowNodes: any[] | undefined = [];\n                                    gridParams?.api?.forEachNode((currentSelectionNode: { data: { id: any; }; setData: (arg0: any) => void; }) => {\n                                        if(currentSelectionNode.data){\n                                            const pairedResult = res2.data?.find((resData: { id: any; }) => resData?.id == currentSelectionNode.data?.id);\n                                            if(pairedResult){\n                                                currentSelectionNode.setData(pairedResult);\n                                                rowNodes?.push(currentSelectionNode);\n                                            }\n                                        }\n                                    });\n\n                                    if(rowNodes.length > 0){\n                                        this.stageEditableDataState(gridParams, rowNodes, true);\n\n                                        //add the new aggs upon rows refresh (technically refresh the aggs)\n                                        //const aggField = this._gridService.aggsValue;\n                                        /* RT TODO: if(this._helper.isNotEmpty(res2.aggs) && this._gridService.aggsValue){\n                                            for (const aggr in res2.aggs) {\n                                                if (res2.aggs.hasOwnProperty(aggr)) {\n                                                    const newAggr = res2.aggs[aggr];\n                                                    const currentAggr = this._gridService.aggsValue[aggr];\n                                                    if(this._helper.isNotEmpty(newAggr) && this._helper.isNotEmpty(currentAggr)){\n                                                        newAggr.forEach((eachBucket: any) => {\n                                                            if(!currentAggr.find(buck => buck == eachBucket)){\n                                                                currentAggr.push(eachBucket);\n                                                            }\n                                                        });\n                                                    }\n                                                }\n                                            }\n                                        } */\n                                    } else{\n                                        console.warn('no refresh done');\n                                        fullRefresh(true);\n                                    }\n                                } else{\n                                    fullRefresh(true);\n                                }\n                            } else{\n                                fullRefresh(true);\n                            }\n                        }, error: err=>{\n                            fullRefresh(true);\n                        }, complete: ()=>{\n                            gridParams?.api?.hideOverlay();\n                            setTimeout(() => { refreshRef?.unsubscribe(); });\n                        }});\n                    } else{\n                        fullRefresh(true);\n                    }\n                }\n            } else {\n                fullRefresh();\n            }\n\n            //then reselect after refresh\n            const selRef = this._selectionBeforeRefresh$.subscribe(s => {\n                if(sel && !params.dontReselect){\n                    gridParams?.api?.forEachNode( (node: { data: { id: number | undefined; }; rowIndex: number; setSelected: (arg0: boolean) => void; }, i: any) => {\n                        if(sel.find(selNode => (this._helper.isNotEmpty(selNode.id) && this._helper.isNotEmpty(node.data) && selNode.id == node.data?.id) || (!this._helper.isNotEmpty(selNode.id) && selNode.rowIndex == node.rowIndex) )){\n                            node.setSelected(true);\n                        }\n                    });\n                    setTimeout(() => {\n                        selRef.unsubscribe();\n                    });\n                /* const blockStateAfter = Object.assign({}, gridParams?.api?.getCacheBlockState()); */\n                }\n            });\n\n        }\n    }\n\n  public ngAfterViewInit(): void {\n    /*\n    if(typeof this.holder == \"string\"){\n        const _holder = document.getElementById(this.holder);\n        let hasFoundGrid = false;\n        let hasFoundHeight = false;\n        let topHeight = 0;\n\n        const recurChildNodes = (child: any) => {\n            if(!hasFoundGrid){\n                if((child?.childNodes || []).length > 0){\n                    child?.childNodes.forEach((childchild: any) => {\n                        recurChildNodes(childchild)\n                    })\n                } else{\n                    if(!hasFoundHeight && child?.clientHeight){\n                        hasFoundHeight = true;\n                        topHeight += parseInt(child?.clientHeight);\n                    }\n                    if((child?.tagName || '').toLowerCase() == 'AG-GRID-ANGULAR'){\n                        hasFoundGrid = true;\n                    }\n                }\n            }\n        }\n\n        (_holder?.childNodes || []).forEach(child => {\n            hasFoundHeight = false;\n            if(!hasFoundGrid){\n                recurChildNodes(child);\n            }\n        })\n\n        setTimeout(() => {\n            if(!this.agStyle && topHeight > 0){\n                this.agStyle = {width: '100%', height: `calc(100vh - ${(topHeight || 0)}px)`};\n            }\n            if(!this.agStyle){\n                this.agStyle = 'width: 100%; height: calc(100vh - 0px)';\n            }\n        });\n    } */\n    setTimeout(() => {\n        if(!this.agStyle){\n            this.agStyle = 'width: 100%; height: calc(100vh - 0px)';\n        }\n    })\n  }\n\n  public ngOnDestroy  (): void {\n    this.firstResult = undefined;\n    this.gridOptions?.api?.refreshServerSide({ route: undefined, purge: true });\n    this.gridOptions?.api?.purgeInfiniteCache();\n    this.gridOptions?.api?.destroy();\n    this.gridParams = undefined;\n\n    /* const g = (this.gridParams?.api as any); */\n    this._subscription.unsubscribe();\n  }\n\n  public ngAfterViewChecked(): void {\n    setTimeout(() => {\n        this.darkMode = this._coreService.isDarkMode;\n    });\n  }\n\n  ngDoCheck(): void {\n    if(this.rowModelType != 'clientSide'){\n        /**\n         * for nonClientSide, triggers of refresh \n         * 1. apiCallParams.params\n         */\n        if(this.hasRendered.gridReady){\n            /* if(this.isDebug){\n                console.log({_apiCallParamsParams: this._apiCallParamsParams, 'apiCallParams.params': this.apiCallParams?.params})\n            } */\n\n            if(this.searchQuery?.value != this._searchValueValue){\n                this._searchValueValue = this.searchQuery?.value;\n                this._isQuerying = true;\n                this._requery();\n            } else if(!deepEqual(this._apiCallParamsParams, this.apiCallParams?.params)){\n                /* if(this.isDebug){\n                    console.log(\"deepEqual true!!\");\n                } */\n                /* assign the current value to be observed by DoCheck */\n                this._apiCallParamsParams = Object.assign({}, this.apiCallParams?.params);\n                \n                /** \n                 * perform only the refresh when SEARCH is not being performed \n                 * since search also appends apiCallParams.params\n                 */\n                if(!this._isQuerying){\n                    this.destroyAndLive({timeout: 100});\n                }\n            }\n\n            /* if(!deepEqual(this._apiCallParamsParams, this.apiCallParams?.params)){\n                console.log({ngDoCheck: \"here 2\", _apiCallParamsParams: this._apiCallParamsParams});\n                // assign the current value to be observed by DoCheck\n                this._apiCallParamsParams = Object.assign({}, this.apiCallParams?.params);\n                \n                // * \n                //  * perform only the refresh when SEARCH is not being performed \n                //  * since search also appends apiCallParams.params\n                if(!this._isQuerying){\n                    this.destroyAndLive({timeout: 100});\n                }\n            } else if(this.searchQuery?.value != this._searchValueValue){\n                console.log({ngDoCheck: \"here 1\", searchQuery: this.searchQuery});\n\n                this._searchValueValue = this.searchQuery?.value;\n                this._isQuerying = true;\n                this._requery();\n            }  */\n        }\n    } else{\n        if(this.hasRendered.gridReady){\n            if(this.searchQuery?.value != this._searchValueValue){\n                this.gridParams?.api?.setQuickFilter(this.searchQuery?.value);\n                this._searchValueValue = this.searchQuery?.value;\n            }\n        }\n    }\n    //this._cdf.markForCheck();\n  }\n}\n","<!-- <ng-template [apploading]=\"appLoading?.hasOwnProperty('loader') ? appLoading.loader : appLoading == true\">\n    Hello\n</ng-template> -->\n\n<ng-container *ngIf=\"isDebug\">\n    <ng-container *ngIf=\"gridParams !== undefined\" [ngTemplateOutlet]=\"tests\" [ngTemplateOutletContext]=\"{isChanged: isChanged(), hasDuplicates: hasDuplicates(), hasErrors: hasErrors()}\"></ng-container>\n    <ng-template #tests let-isChanged=\"isChanged\" let-hasDuplicates=\"hasDuplicates\" let-hasErrors=\"hasErrors\">\n        <span style=\"margin-right: 4px\" #spanLabel>isChanged(): {{isChanged}}</span>\n        <span style=\"margin-right: 4px\" #spanLabel2>hasErrors(): {{hasErrors}}</span>\n        <span style=\"margin-right: 4px\" #spanLabel3>hasDuplicates(): {{hasDuplicates}}</span>\n        <button type=\"button\" pButton pRipple class=\"p-button p-button-primary\" icon=\"pi pi-refresh\" label=\"Refresh()\" (click)=\"refresh()\"></button>\n        <button #submitButton type=\"button\" pButton pRipple class=\"p-button-primary eg-m-x-4\" [icon]=\"picons.SAVE\" label=\"Submit\" [disabled]=\"!isChanged || hasDuplicates || hasErrors\"></button>\n        <button type=\"button\" pButton pRipple class=\"p-button-primary eg-m-x-4\" [icon]=\"picons.APPLE\" label=\"Apply Filters and Columns\" (click)=\"applyFilters()\"></button>\n        <p-message *ngIf=\"hasDuplicates || hasErrors\" severity=\"error\" [text]=\"'Some field(s) have ' + (hasErrors ? 'validation error(s)' : 'duplicate entries') + '.'\"></p-message>\n    </ng-template>\n    isDebug: {{ isDebug }}\n    isDarkMode: {{ darkMode }}\n    agTheme: {{agTheme}}\n    {{ gridParams?.api?.getColumnDef('id') | json }} {{ gridParams | isNotEmpty }} on {{on}} isDebug: {{ isDebug }}\n</ng-container>\n<ng-container [ngTemplateOutlet]=\"on ? gridTemplate : skeleton\" [ngTemplateOutletContext]=\"{agTheme: agTheme, dark: (darkMode), darkTheme: darkMode && ['balham', 'alpine'].includes(this.agTheme) ? '-dark' : ''}\"></ng-container>\n<ng-template #gridTemplate\n    let-agTheme=\"agTheme\" let-dark=\"dark\" let-darkTheme=\"darkTheme\">\n    <!-- <ng-template [apploading]=\"appLoading2.loader\" [refId]=\"gridId || 'gridId'\"> -->\n    <ag-grid-angular #agGrid \n        [style]=\"agStyle\"\n        [class]=\"dark + ' ag-theme-' + agTheme + darkTheme + ' ' + agClass\"\n        [columnDefs]=\"columnDefs\"\n        [defaultColDef]=\"defaultColDef\"\n        [rowData]=\"rowData\"\n        [rowModelType]=\"rowModelType\"\n        [components]=\"components\"\n        [sideBar]=\"sideBar\"\n        [gridOptions]=\"gridOptions\"\n        [columnTypes]=\"columnTypes\"\n        [icons]=\"icons\"\n        [pagination]=\"pagination\"    \n        [paginationPageSize]=\"paginationPageSize\"\n        [paginationAutoPageSize]=\"paginationAutoPageSize\"\n        [serverSideInfiniteScroll]=\"serverSideInfiniteScroll\"\n        [cacheOverflowSize]=\"cacheOverflowSize\"\n        [maxConcurrentDatasourceRequests]=\"maxConcurrentDatasourceRequests\"\n        [infiniteInitialRowCount]=\"infiniteInitialRowCount\"\n        [maxBlocksInCache]=\"maxBlocksInCache\"\n        [cacheBlockSize]=\"cacheBlockSize\"\n        [getRowId]=\"getRowId\"\n        [localeText]=\"localeText\"\n        [getLocaleText]=\"getLocaleText\"\n        [overlayLoadingTemplate]=\"tOverlay.loading\"\n        [overlayNoRowsTemplate]=\"tOverlay.noRows\"\n        (gridReady)=\"onGridReady($event)\"\n        (firstDataRendered)=\"onFirstDataRendered($event)\"\n        (selectionChanged)=\"onSelectionChanged($event)\"\n        (cellValueChanged)=\"onCellValueChanged($event)\"\n        (filterChanged)=\"onFilterChanged($event)\"\n        (paginationChanged)=\"onPaginationChanged($event)\"\n        (sortChanged)=\"onSortChanged($event)\"\n        (cellEditingStarted)=\"onCellEditingStarted($event)\"\n        (cellEditingStopped)=\"onCellEditingStopped($event)\"\n    ></ag-grid-angular>\n    <!-- </ng-template> -->\n</ng-template>\n\n<ng-template #skeleton>\n    <p-skeleton  width=\"100%\" height=\"100%\" ></p-skeleton>\n</ng-template>","import { AfterViewInit,Component,ViewChild,ViewContainerRef } from \"@angular/core\";\r\nimport { UntypedFormControl } from \"@angular/forms\";\r\nimport { ICellEditorAngularComp } from \"ag-grid-angular\";\r\n\r\n@Component({\r\n    selector: \"dropdown-multiselect-editor\",\r\n    template: `<div #container>\r\n        <span class=\"p-5 p-l-10 m-5\">\r\n\r\n        </span>\r\n    </div>\r\n    `,\r\n    styles: [\r\n        `\r\n        .flex-column{\r\n            display: flex;\r\n            flex-direction: column;\r\n        }\r\n      `,\r\n    ],\r\n})\r\nexport class DropdownMultiSelectEditorComponent implements ICellEditorAngularComp, AfterViewInit {\r\n    public params   : any;\r\n    public value    : any;\r\n    public formControl : any;\r\n\r\n    @ViewChild(\"container\", { read: ViewContainerRef }) public container: ViewContainerRef | undefined;\r\n\r\n    constructor() {\r\n        this.formControl = new UntypedFormControl();\r\n    }\r\n\r\n    // dont use afterGuiAttached for post gui events - hook into ngAfterViewInit instead for this\r\n    public ngAfterViewInit() {\r\n\r\n    }\r\n\r\n    public agInit(params: any): void {\r\n        this.params             = {isFromDropDownEditor: true, ...params};\r\n        this.value             = this.params.value;\r\n\r\n    }\r\n\r\n    public getValue(): any {\r\n        return this.value;\r\n    }\r\n\r\n    public isPopup(): boolean {\r\n        return false;\r\n    }\r\n\r\n    public onClick(src: string) {\r\n        if(!this.params.onSelect){\r\n            this.value = src;\r\n        } else{\r\n            const onSelectVal = this.params.onSelect(src);\r\n            if(onSelectVal && onSelectVal.srcChanged){\r\n                this.value = onSelectVal.newVal;\r\n            }\r\n        }\r\n        this.params.api.stopEditing();\r\n    }\r\n\r\n    public onKeyDown(event: any): void {\r\n        /* let key = event.which || event.keyCode;\r\n        if (\r\n          key == 37 || // left\r\n          key == 39\r\n        ) {\r\n          // right\r\n          this.toggleMood(); */\r\n        /* event.stopPropagation(); */\r\n        /* } */\r\n    }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { GridComponent } from './grid/grid.component';\nimport { CommonModule } from '@angular/common';\nimport { EagnaPipesModule } from '../pipes/eagna-pipes.module';\nimport { AgGridModule } from 'ag-grid-angular';\nimport { CustomToolsPanel } from './tool-panel/custom-tools-panel';\nimport { AnalysisToolPanel } from './tool-panel/analysis-tool-panel';\nimport { DatePickerEditorComponent } from './editor/datepicker-editor.component';\nimport { DropdownSelectEditorComponent } from './editor/dropdown-select-editor.component';\nimport { DropdownMultiSelectEditorComponent } from './editor/dropdown-multiselect-editor.component';\nimport { NumericEditorComponent } from './editor/numeric-editor.component';\nimport { MaskEditorComponent } from './editor/mask.editor.component';\nimport { BooleanFilter } from './custom-filter/boolean-filter';\nimport { CellCustomComponent } from './cell-custom/cell-custom.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PrimeNgModule } from '../prime-ng/prime-ng.module';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GenericModule } from '../generic/generic.module';\n\nconst components : any  = [\n                            GridComponent,\n                            CustomToolsPanel,\n                            AnalysisToolPanel,\n                            DatePickerEditorComponent,\n                            DropdownSelectEditorComponent,\n                            DropdownMultiSelectEditorComponent,\n                            NumericEditorComponent,\n                            MaskEditorComponent,\n                            BooleanFilter,\n                            CellCustomComponent\n                          ];\n\nconst modules    : any  = [\n                            CommonModule,\n                            TranslateModule,\n                            AgGridModule,\n                            FormsModule,\n                            ReactiveFormsModule,\n                            PrimeNgModule.forRoot(),\n                            EagnaPipesModule,\n                            GenericModule\n                          ];\n\n@NgModule({\n  declarations: [].concat(components),\n  imports     : [].concat(modules),\n  exports     : [].concat(modules, components)\n})\nexport class GridsModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ISideBar, MenuSideBarSettings } from './sidebar.interface';\n\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SideBarService {\n  constructor() { }\n\n  public sidebarSettings$!: BehaviorSubject<MenuSideBarSettings>;\n\n  public sidebarLoaderId!: string;\n\n  public sidebar$ : BehaviorSubject<ISideBar> = new BehaviorSubject<ISideBar>({\n    items: [],\n    isVisible: true,\n    sidebarLoaderId: undefined,\n    mode: \"compact\"\n  });\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { SideBarService} from '../navigation-api';\nimport { MenuItem } from 'primeng/api';\nimport { SubSink } from 'subsink2';\nimport { OverlayPanel } from 'primeng/overlaypanel';\nimport { Router } from '@angular/router';\nimport { HelperService } from '../../helper.service';\nimport { sideBarMode } from './sidebar.interface';\n\n\n@Component({\n  selector: 'eag-sidebar',\n  templateUrl: './sidebar.component.html',\n  styleUrls: ['./sidebar.component.scss']\n})\nexport class SidebarComponent implements OnInit, OnDestroy{\n\n  constructor(private _sb: SideBarService, private _router:Router, private _help: HelperService){}\n\n  public items      : MenuItem[] = [];\n  public isVisible  : boolean | undefined = true;\n  public mode       : sideBarMode | undefined = \"compact\";\n  public loaderId   !: string | undefined;\n  public isList     : boolean = false;\n  public isCompact  : boolean = false;\n  public isThin     : boolean = false;\n  public isExpanded : boolean = false;\n  public origMode   : sideBarMode | undefined;\n  private _subs     : SubSink = new SubSink();\n  public selectedData : any = [];\n  public selectedIdx  !: number;\n\n  /* @ViewChild('tieredMenu') tieredMenu !: TieredMenu; */\n  @ViewChild('op') overlaypanel !: OverlayPanel;\n\n  ngOnInit(): void {\n\n    this._subs.sink = this._sb.sidebar$.subscribe(res => {\n      this.items = res.items.map(e => {\n        e['expanded'] = false;\n        return e;\n      });\n\n      this.isVisible  = res.isVisible;\n      this.mode       = res.mode;\n      this.origMode   = res.mode;\n      this.loaderId   = res.sidebarLoaderId\n      this.isList     = (res.mode == 'list') ? true : false;\n      this.isCompact  = (res.mode == 'compact') ? true : false;\n      this.isThin     = (res.mode == 'thin') ? true : false;\n      this.isExpanded = (res.mode == 'list') ? true : false;\n\n    })\n  }\n\n\n\n  trackByFn(index:number, item:any) {\n    return item.id; // unique id corresponding to the item\n  }\n\n  public isParentRoute(parent_route:any){\n    if(parent_route.hasOwnProperty('routerLink') && parent_route.routerLink != null){\n      return (this._router.url.includes(parent_route?.routerLink[0]))\n    }else{\n      return false;\n    }\n  }\n\n  public showmenu(event:any, data:any){\n    this.selectedData = data.data;\n    this.selectedIdx = data.index;\n    if(!data?.data.disabled){\n      if(this.overlaypanel?.overlayVisible){\n        this.overlaypanel?.show(event)\n      }else{\n        this.overlaypanel?.show(event)\n      }\n    }\n  }\n\n\n  public expand(){\n\n    let _temp = this._sb.sidebar$.value;\n    if(this.origMode){\n      if(this.origMode == 'list'){\n        this.isExpanded = !this.isExpanded;\n        this.mode     = (this.isExpanded) ? 'list' : 'compact';\n        this.isList   = (this.isExpanded) ? true : false;\n        _temp['mode'] = this.mode;\n      }else{\n        this.isExpanded = !this.isExpanded;\n        this.mode     = (this.isExpanded) ? 'list' : this.origMode;\n        this.isList   = (this.isExpanded) ? true : false;\n        _temp['mode'] = this.mode;\n      }\n      /* if(this.overlaypanel?.overlayVisible){\n        this.overlaypanel?.hide();\n      } */\n      this._sb.sidebar$.next(_temp);\n    }\n\n\n\n\n  }\n\n  public itemToggle(item:any, isOverlay:boolean=false){\n\n    const _data = item.data;\n    const _idx = item.index;\n\n    if(_data.hasOwnProperty('items') && _data.items != null && _data.items.length > 0){\n      if(!isOverlay){\n        this.items[item.index].expanded = !item.data.expanded;\n      }else{\n        item.data.expanded = true;\n      }\n    }else{\n      this.overlaypanel?.hide();\n      this._help.gotoPage({pageName:_data.routerLink, extraParams:{}})\n\n    }\n\n\n\n  }\n\n  ngOnDestroy(): void {\n    this._subs.unsubscribe();\n  }\n\n\n}\n","<div  class=\"flex flex-column eag-sidebar-class h-full\"\n      [class.eag-sidebar-hide]=\"!isVisible\"\n      [class.w-8rem]=\"mode == 'compact' && !isExpanded\"\n      [class.w-5rem]=\"mode == 'thin' && !isExpanded\"\n      [class.w-18rem]=\"mode == 'list' || isExpanded\"\n      >\n\n      <!-- Sidebar Header -->\n      <div class=\"flex flex-grow-0 w-full p-2 \"\n          [class.justify-content-center]=\"!isList\"\n          [class.px-4]=\"isList\"\n          *ngIf=\"isVisible\">\n        <div class=\"\">\n          <ng-content select=\"[sbImage]\"></ng-content>\n        </div>\n        <div *ngIf=\"isList\" class=\" flex-grow-1 pl-2\" >\n          <ng-content select=\"[sbDetails]\"></ng-content>\n        </div>\n      </div>\n\n      <!-- Sidebar content -->\n      <div  class=\"flex-grow-1 overflow-hidden sidebar-content\" *ngIf=\"isVisible\">\n        <!-- Menu Sidebar -->\n\n        <ng-container *ngIf=\"isList || isExpanded\">\n          <p-scrollPanel styleClass=\"h-full\" class=\"h-full\">\n            <div *ngFor=\"let item of items;  trackBy: trackByFn; let idx=index\" class=\"px-2 pb-2 listMenuWrapper\">\n              <ng-container [ngTemplateOutlet]=\"sidebarListMenu\" [ngTemplateOutletContext]=\"{$implicit: {data:item, index:idx, isOverlay: false}}\"></ng-container>\n            </div>\n          </p-scrollPanel>\n         </ng-container>\n\n        <!-- Thin & Compact Sidebar -->\n        <ng-container  *ngIf=\"!isList\">\n          <p-scrollPanel styleClass=\"h-full\" class=\"h-full\">\n            <ng-container *ngFor=\"let a of items; trackBy: trackByFn; let idx = index\">\n\n              <div  *ngIf=\"a.hasOwnProperty('items') && a.items | isNotEmpty\"\n                    [class]=\"'flex flex-column align-items-center  sidebar-items'\"\n                    [ngClass]=\"{'compact':isCompact, 'thin':isThin}\"\n                    [class.active]=\"isParentRoute(a)\"\n                    [class.disabled]=\"a?.disabled\"\n                    (click)=\"showmenu($event, {data:a, index:idx})\">\n\n                  <div class=\" flex-grow-1 flex align-items-center\">\n                    <i [class]=\"a?.icon + ' icon'\"></i>\n                  </div>\n                  <div class=\"label\">\n                    <span [pTooltip]=\"a?.tooltip\" [innerHTML]=\"a?.label\"></span>\n                  </div>\n              </div>\n\n              <div  *ngIf=\"!(a.items | isNotEmpty)\"\n                    class=\"flex flex-column align-items-center  sidebar-items\"\n                    [class.disabled]=\"a?.disabled\"\n                    [ngClass]=\"{'compact':isCompact, 'thin':isThin}\"\n                    [routerLink]=\"a?.disabled? ['/'] :a?.routerLink\"\n                    [routerLinkActive]=\"'active'\"\n                    [routerLinkActiveOptions]=\"a?.routerLinkActiveOptions\">\n                  <div class=\" flex-grow-1 flex align-items-center\">\n                    <i [class]=\"a?.icon + ' icon'\"></i>\n                  </div>\n                  <div class=\"label\">\n                    <span [pTooltip]=\"a?.tooltip\" [innerHTML]=\"a?.label\"></span>\n                  </div>\n              </div>\n\n            </ng-container>\n        </p-scrollPanel>\n\n        <p-overlayPanel id=\"op\" #op\n                        [appendTo]=\"'body'\"\n                        styleClass=\"sidebarOverlayMenu h-full max-h-screen overflow-hidden\"\n                        [dismissable]=\"true\"\n                        [showTransitionOptions]=\"'0s cubic-bezier(0, 0, 0, 0)'\"\n                        [hideTransitionOptions]=\"'0s linear'\">\n          <ng-template pTemplate=\"content\">\n\n            <div class=\"flex flex-column h-full m-1 overflow-hidden\">\n              <!-- Overlay Panel Header -->\n              <div class=\"flex flex-grow-0 ml-3 mt-2\">\n                <i *ngIf=\"!(selectedData?.routerLink | isNotEmpty)\"\n                        [class]=\"selectedData?.icon + ' overlay-listmenu-header'\">\n                </i>\n                <span *ngIf=\"!(selectedData?.routerLink | isNotEmpty)\"\n                        class=\"ml-2 overlay-listmenu-header\" [innerHTML]=\"selectedData?.label\">\n                </span>\n\n                <a *ngIf=\"selectedData?.routerLink | isNotEmpty\"\n                    class=\"overlay-listmenu-header\"\n                    [routerLink]=\"selectedData?.disabled? ['/'] :selectedData?.routerLink\">\n\n                    <i [class]=\"selectedData?.icon + ' overlay-listmenu-header'\"> </i>\n                    <span class=\"ml-2 overlay-listmenu-header\"\n                          [innerHTML]=\"selectedData?.label\">\n                    </span>\n                </a>\n              </div>\n\n              <p-divider styleClass=\"overlay-listmenu-divider\"></p-divider>\n\n              <div class=\"flex-grow-1 overflow-hidden h-full\">\n                <p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 6rem)' }\">\n                  <div *ngFor=\"let item of selectedData?.items;  trackBy: trackByFn; let idx=index\" class=\"px-2 pb-2 listMenuWrapper\">\n                    <ng-container [ngTemplateOutlet]=\"sidebarListMenu\" [ngTemplateOutletContext]=\"{$implicit: {data:item, index:idx, isOverlay: true}}\"></ng-container>\n                  </div>\n\n                </p-scrollPanel>\n              </div>\n            </div>\n          </ng-template>\n        </p-overlayPanel>\n\n      </ng-container>\n\n\n      </div>\n\n      <!-- Sidebar Footer -->\n      <div *ngIf=\"isVisible\" class=\"flex-grow-0 align-self-center  w-full p-2 border-top-1 sidebar-border\">\n        <div class=\"sidebar-footer flex justify-content-center\" (click)=\"expand()\">\n          <span class=\"mr-2 align-self-center\" *ngIf=\"mode!='thin'\" [innerHTML]=\"('translations.' + (isExpanded ? 'collapse' : 'expand')) | translate\"></span>\n          <i class=\"align-self-center fa-solid fa-{{(isExpanded)?'angles-left':'angles-right'}}\"></i>\n        </div>\n      </div>\n\n</div>\n\n<ng-template #sidebarListMenu let-item>\n  <!-- Parent Node Top Menu -->\n  <div *ngIf=\"!item?.data.separator; else separator\"\n        class=\"listMenu flex flex-row p-3 text-base\"\n        [class.active]=\"item?.data.expanded || isParentRoute(item.data)\"\n        [class.listMenu-disabled]=\"item?.data.disabled\"\n        (click)=\"itemToggle(item, item.isOverlay)\"\n     >\n      <span class=\"icon align-items-center flex\">\n        <i [class]=\"'p-menuitem-icon ' +item?.data.icon\"></i>\n      </span>\n      <span class=\"align-items-center flex title p-menuitem-text flex-grow-1\" [pTooltip]=\"item?.data?.tooltip\" [innerHTML]=\"item?.data.label\"></span>\n\n      <i  *ngIf=\"item?.data.items\"\n          class=\"align-items-center flex order-1 fa-solid fa-{{item?.data.expanded == true ? 'angle-down' : 'angle-right'}}\">\n      </i>\n  </div>\n\n  <!-- IF It Needs  Seprator -->\n  <ng-template #separator>\n    <div class=\"listMenu-border my-2 \"></div>\n  </ng-template>\n\n  <!-- Recursive Child Menu Nodes For Each Parent -->\n  <div *ngIf=\"item.data.items && item.data.expanded\" class=\"sidebar-bg mt-2\">\n    <p-panelMenu\n          #menuSidebar\n          id=\"menuSidebar\"\n          styleClass=\"mt-2\"\n          [multiple]=\"false\"\n          [model]=\"item.data.items\">\n          <ng-template pTemplate=\"submenuicon\">\n            <span class=\"eg-icon eg-closed flex-order-1\">\n              <i class=\"fa-solid fa-angle-right\"></i>\n            </span>\n            <span class=\"eg-icon eg-open flex-order-1\">\n              <i class=\"fa-solid fa-angle-down\"></i>\n            </span>\n          </ng-template>\n    </p-panelMenu>\n  </div>\n</ng-template>\n\n\n\n<!-- Legacy Code -->\n<!-- <ng-template #menuItem let-item></ng-template> -->\n\n\n<!-- <p-panelMenu id=\"menuSidebar\"\n      styleClass=\"mt-2 overlay-listmenu-panelmenu\"\n      [multiple]=\"false\"\n      [model]=\"selectedData?.items\">\n</p-panelMenu> -->\n\n<!-- Legacy Menu which didn't work for scrolling -->\n\n<!-- <p-tieredMenu #tieredMenu\n              styleClass=\"bg-primary\"\n              [autoDisplay]=\"true\"\n              [autoZIndex]=\"false\"\n              [popup]=\"false\"\n              appendTo=\"body\"\n              *ngIf=\"!isList && !isExpanded\"\n              [id]=\"mode == 'compact' ? 'tieredSidebar' : 'tieredSidebarThin'\"\n              [model]=\"items\"\n              >\n              <ng-template pTemplate=\"submenuicon\">\n                <i class=\"pi pi-chevron-right p-element p-icon-wrapper anglerighticon\"></i>\n              </ng-template>\n  </p-tieredMenu> -->\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n/* import { SideBarComponent } from './side-bar/side-bar.component'; */\nimport { PrimeNgModule } from '../prime-ng/prime-ng.module';\nimport { EagnaPipesModule } from '../pipes/eagna-pipes.module';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\nconst components : any  = [\n                            SidebarComponent\n                          ]\n\nconst modules    : any  = [\n                            TranslateModule,\n                            CommonModule,\n                            EagnaPipesModule\n                          ]\nconst internal    : any = [\n                            PrimeNgModule\n                          ]\n\n@NgModule({\n  declarations: [].concat(components),\n  imports     : [].concat(modules, internal),\n  exports     : [].concat(modules, components)\n})\n\nexport class NavigationModule { }\n","import { CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { TitleCasePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { MenuItem, MessageService, PrimeIcons } from 'primeng/api';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { apiMethod, ConfirmDialogResult, laneItem, laneType, MESSAGE_SEVERITY, ResponseObj } from '../core.interface';\nimport { CoreService } from '../core.service';\n/* import { AddComponent } from '../generic/generic-api'; */\nimport { HelperService } from '../helper.service';\n\n@Component({\n  selector: 'eag-kanban',\n  templateUrl: './kanban.component.html',\n  styleUrls: ['./kanban.component.css']\n})\nexport class KanbanComponent implements OnInit, /* OnChanges, */ OnDestroy{\n\n  constructor(private _core: CoreService,\n    private _helper: HelperService,\n    private _messageService: MessageService,\n    private _dialogService: DialogService,\n    private _titleCase: TitleCasePipe\n    ) {}\n  \n  @Input()\n  public lanes: laneType[] = [];\n\n  @Output()\n  public lanesChange = new EventEmitter<laneType[]>();\n\n  @Input()\n  public laneDataApiService?: (p?: any, m?: apiMethod) => Observable<ResponseObj<any>>\n\n  @Input()\n  public laneApiService?: (p?: any, m?: apiMethod) => Observable<ResponseObj<any>>;\n\n  /* @Input()\n  public searchQuery = ''; */\n  \n  @Input()\n  containerConfig: any;\n\n  @Output()\n  containerConfigChange = new EventEmitter<any>();\n  \n  public dataHolder!: {[id: string]: any[]};\n  public activeLaneMenu?: laneType;\n  private _subscription = new Subscription();\n  public ref?: DynamicDialogRef;\n  public PI = PrimeIcons;\n  public toggleView: 'Grid' | 'Board' = 'Board';\n  private _boardLaneFields!: { [field: string]: string; }[];\n  private _boardDataFields!: { [field: string]: string; }[];\n  private _lanesSource = new BehaviorSubject<laneType[]>([]);\n  public collapsedAll = false;\n  public lanes$ = this._lanesSource.asObservable();\n\n  public laneMenu: MenuItem[] = [\n    {\n      label: 'Actions',\n      icon: this.PI.CLOCK,\n      items: [\n        {\n          label: 'Edit',\n          icon: this.PI.PENCIL,\n          command: (a) => {\n            this.addEditBoard();\n          },\n        }\n      ]\n    },\n    {\n      label: 'Insert New Lane',\n      icon: this.PI.UPLOAD,\n      items: [\n        {\n          label: 'Left',\n          icon: this.PI.ARROW_LEFT,\n          command: () => {\n            this.addEditBoard(true, 'left');\n          }\n        },\n        {\n          label: 'Right',\n          icon: this.PI.ARROW_RIGHT,\n          command: () => {\n            this.addEditBoard(true, 'right');\n          }\n        } \n      ]\n    }\n  ];\n\n  public ngOnInit(): void {\n    const that = this;\n    \n    this.containerConfig = {\n      hasHeader: true,\n      header: (this.toggleView == 'Grid' ? 'Grid View' : 'Kanban Board'),\n      subheader: \"\",\n      containerType: \"onecolumn\",\n      hasSearch: true,\n      menuType:'menubar',\n      menuDisplay:'text',\n      items: [\n        {\n          label: 'New',\n          icon: this.PI.PLUS,\n          onClick: (item?: any, parentIndex?: number) => {},\n          items: [\n            {\n              label: 'Board',\n              icon: this.PI.PLUS,\n              command: () => {\n                that.addEditBoard(true);\n              }\n            },\n          ]\n        },\n        {\n          label: 'Toggle',\n          icon: this.PI.EYE,\n          onClick: (item?: any, parentIndex?: number) => {},\n          items: [\n            {\n              label: (this.toggleView == 'Grid' ? 'Board' : 'Grid') + ' View',\n              icon: (this.toggleView == 'Grid' ? that.PI.LIST : this.PI.TABLE ),\n              command(p:any){\n                that.toggleView = (that.toggleView == 'Grid' ? 'Board' : 'Grid');\n                that.containerConfig.header = (that.toggleView == 'Grid' ? 'Grid View' : 'Kanban Board');\n\n                this.label = (that.toggleView == 'Grid' ? 'Board' : 'Grid') + ' View',\n                this.icon = (that.toggleView == 'Grid' ? that.PI.LIST : that.PI.TABLE )\n              }\n            },\n            {\n              label: (that.collapsedAll ? 'Expand' : 'Collapse') + ' All',\n              icon: (that.collapsedAll ? that.PI.ANGLE_RIGHT : that.PI.ANGLE_LEFT),\n              command(p: any){\n                that.collapsedAll = !that.collapsedAll;\n                \n                this.label = (that.collapsedAll ? 'Expand' : 'Collapse') + ' All';\n                this.icon = (that.collapsedAll ? that.PI.ANGLE_RIGHT : that.PI.ANGLE_LEFT);\n                that.toggleCollapse(that.collapsedAll);\n              }\n            },\n          ]\n        },\n        {\n          label: 'Filter by',\n          icon: this.PI.FILTER_FILL,\n          onClick: (item?: any, parentIndex?: number) => {},\n          items: [\n            {\n              label: 'Lane',\n              icon: this.PI.ALIGN_JUSTIFY,\n              command: (p: any) => {}\n            },\n            {\n              label: 'Tasks',\n              icon: this.PI.TICKET,\n              command: (event: any) => {}\n            }\n          ]\n        },\n        {\n          label: 'Clear Filters',\n          icon: this.PI.TRASH,\n          command: () => {\n            this._filterBy = {};\n            this._initSources();\n          }\n        }\n      ],\n      onSearch: (p: any, $e: any) => {\n        //this.loaded = false;\n        setTimeout(() => {\n          //this._setupLanes(p);\n          //this.searchQuery = p;\n          this._initSources({query: p});\n        })\n      }\n    };\n\n    this._initSources(this._filterBy ? {filter: this._filterBy} : {});\n\n    setTimeout(() => {\n      this.containerConfigChange.emit(this.containerConfig);\n    });\n  }\n\n  public isFiltered(){\n    for (const key in this._filterBy) {\n      if (Object.prototype.hasOwnProperty.call(this._filterBy, key)) {\n        const element = this._filterBy[key];\n        if(this._helper.isNotEmpty(element)){\n          return true;\n        }\n      }\n    } \n\n    return false;\n  }\n\n  public _filterBy: {[p: string]: string[]} = {\n    lane: [\n      'New', 'Commited',\n    ],\n    name: [\n      'Item 2'\n    ],\n    projects: [\n      'Project 1'\n    ]\n  };\n\n  private _initSources(q:any = {}, whichFilter?: 'lane' | 'fields'){\n    const that = this;\n    //console.log({isFilterd: this.isFiltered()});\n    \n    //if(!whichFilter || whichFilter == 'fields'){\n    this.dataHolder = {};\n    //}\n\n    if(/* !q?.query && !q?.filter */ !whichFilter || whichFilter == 'lane'){\n      this._subscription.add(this.laneApiService?.((q || {}))?.subscribe((res => {\n        this._boardLaneFields = res?.content?.fields;\n        \n        const _lanes = this._helper.arraySortBy({arr: (res?.content?.results || []).map((l: laneType, i: number) => (\n          <laneType>{...l, isHidden: (this._helper.isNotEmpty(this._filterBy?.['lane']) && !this._filterBy['lane'].includes(l.name)), position: (l?.position || i)})), byId: 'position'\n        });\n  \n        this._checkCollapsedAll(_lanes);\n        this._lanesSource.next(_lanes);\n        //TODO emit\n        setTimeout(() => {\n          this.lanesChange.emit(_lanes);\n        });\n  \n        let allAggs: any[] = [];\n        res.content?.aggs?.forEach((agg: any) => {\n          allAggs = [...allAggs, ...agg[\"name\"]?.map((eachAgg: any) => eachAgg?.[\"name\"]) ];\n        });\n    \n        const filterByLane = this.containerConfig?.items?.[2]?.items?.[0];\n        if(filterByLane){\n          const filterByLaneItemsMenu = allAggs?.map(agg => {\n            let icon = this.PI.CIRCLE;\n  \n            if(that._filterBy['lane']?.includes(agg)){\n              icon = this.PI.CIRCLE_FILL;\n            }\n            return {\n              id: 'lane',\n              label: agg,\n              state: {['lane']: agg},\n              icon,\n              command(p: any){\n                const _i2 = that._filterBy['lane']?.findIndex(_f => _f == agg);\n                if(_i2 >= 0){\n                  that._filterBy['lane']?.splice(_i2, 1);\n                } else{\n                  if(!that._filterBy['lane']){\n                    that._filterBy['lane'] = [agg];\n                  } else{\n                    that._filterBy['lane'].push(agg);\n                  }\n                }\n  \n                //that?.onFilter({filter: {'lane': that._filterBy['lane']}}, 'lane');\n                that?.onFilter({filter: that._filterBy}, 'lane');\n              }\n            };\n          });\n          filterByLane.items = filterByLaneItemsMenu;\n        }\n      })));\n    }\n\n    this._subscription.add(this.laneDataApiService?.((q || {}))?.subscribe(res => {\n      this._boardDataFields = res?.content?.fields;\n  \n      const laneResults = this._helper.arraySortBy({arr: res?.content?.results || [], byId: 'position'});\n      laneResults.forEach( laneItem => {\n        this._insertLaneItem(laneItem);\n      });\n\n      //ammend the menu to toggle filtered ones\n      //if(whichFilter == 'fields'){\n      const filterByBoardDataMenu = this.containerConfig?.items?.[2]?.items?.[1];\n      if(filterByBoardDataMenu){\n        filterByBoardDataMenu.items = [];\n  \n        res.content?.aggs?.forEach((agg: any) => {\n          let icon1 = this.PI.CIRCLE;\n\n          const _objKey = Object.keys(agg)?.[0];\n\n          const _keyName = this._titleCase.transform(_objKey || '');\n          const _keyArrayValues: string[] = agg[_objKey]?.map((eachAgg: any) => eachAgg?.[_objKey]);\n\n          if(that._filterBy[_objKey]?.find(_f => {\n            return _keyArrayValues.includes(_f);\n          })){\n            icon1 = this.PI.CIRCLE_FILL;\n          }\n          filterByBoardDataMenu.items.push({\n            label: _keyName,\n            icon: icon1,\n            items: (_keyArrayValues || []).map((_k: any) => {\n              let icon2 = this.PI.CIRCLE;\n              const _i2 = that._filterBy[_objKey]?.findIndex(_f => _f == _k);\n              //if(that._filled[_objKey]?.includes(_k)){\n              if(_i2 >= 0){\n                icon2 = this.PI.CIRCLE_FILL;\n              }\n              return {\n                id: _objKey,\n                label: _k,\n                state: {[_objKey]: _k},\n                icon: icon2,\n                command(p: any){\n                  if(_i2 >= 0){\n                    that._filterBy[_objKey]?.splice(_i2, 1);\n                  } else{\n                    if(!that._filterBy[_objKey]){\n                      that._filterBy[_objKey] = [_k];\n                    } else{\n                      that._filterBy[_objKey].push(_k);\n                    }\n                  }\n                  /* const _tmpFilters = Object.assign({}, that._filterBy);\n                  delete _tmpFilters['lane'];\n                  that?.onFilter({filter: _tmpFilters}, 'fields'); */\n                  that?.onFilter({filter: that._filterBy}, 'fields');\n                }\n              }\n            })\n          });\n        });\n        //this.containerConfigChange.emit(this.containerConfig);\n      }\n      //}\n    }));\n  }\n\n  private _insertLaneItem(laneItem: laneItem){\n    laneItem.position = (this.dataHolder[laneItem.laneId]?.length || 0);\n\n    if(this.dataHolder[laneItem.laneId]){\n      this.dataHolder[laneItem.laneId] = [...this.dataHolder[laneItem.laneId], ...[laneItem]];\n    } else{\n      this.dataHolder[laneItem.laneId] = [laneItem];\n    }\n  }\n\n  private _checkCollapsedAll(_lanes: laneType[]){\n    this.collapsedAll = true;\n\n    _lanes.forEach((lane: laneType) => {\n      if(!lane.isCollapsed){\n        this.collapsedAll = false;\n      }\n    });\n  }\n\n  public toggleCollapse(collapsedAll: boolean){\n    const _currentLanes = this._lanesSource.value || [];\n    _currentLanes.forEach((l: laneType) => {\n      l.isCollapsed = collapsedAll;\n    });\n    this._lanesSource.next(_currentLanes);\n    //TODO emit\n    this.lanesChange.emit(_currentLanes);\n\n    this._subscription.add(this.laneApiService?.(_currentLanes, \"patch\")?.subscribe({next: (lanes) => {console.log(\"successfully updated\", lanes);}, error: (err) => {\n        this._messageService.add({detail: err , severity: MESSAGE_SEVERITY.WARN});\n      }\n    }));\n  }\n\n  public getSortableLanes2(index: number, drag: CdkDrag, list: CdkDropList) {\n    const isLocked = list.getSortedItems()?.[index]?.data?.isLocked;\n    return !isLocked;\n  }\n\n  public getOtherLanes(lanes: laneType[], currentId: number): any[] {\n    return lanes.filter( l => (l?.id != currentId && !l?.isCollapsed)).map( l => 'lane' + l?.id);\n  }\n\n  public dropItem(event: CdkDragDrop<string[]>, _newLaneId: number) {\n    if (event.previousContainer === event.container) {\n      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n    } else {\n      transferArrayItem(\n        event.previousContainer.data,\n        event.container.data,\n        event.previousIndex,\n        event.currentIndex,\n      );\n    }\n    \n    const _oldLaneId = event.item.data.laneId;\n    const _mapPositionAndLaneId = (d: any, i: number, _l: number) => {\n      return {...d, position: i, laneId: _l };\n    }\n\n    const _fromData = event.previousContainer.data.map((d, i) => _mapPositionAndLaneId(d, i, (_oldLaneId != _newLaneId ? _oldLaneId : _newLaneId)));\n    let _toData = [];\n\n    if(_oldLaneId != _newLaneId){\n      _toData = (event.container.data || []).map( (d, i) => _mapPositionAndLaneId(d, i, _newLaneId));\n      this.dataHolder[_newLaneId] = _toData;\n    }\n    \n    const _fromToData = [..._fromData, ..._toData];\n    this._subscription.add(this.laneDataApiService?.(_fromToData, \"patch\")?.subscribe({next: (lanes: any) => {console.log(\"successfully saved\", lanes);}, error: (err: any) => {\n        this._messageService.add({detail: err , severity: MESSAGE_SEVERITY.WARN});\n      }\n    }));\n  }\n\n  /* private _addEdit(insertWhere?: 'L' | 'R'){\n    this.ref = this.dialogService.open(AddComponent, {\n      data: {\n        item: this.activeLaneMenu,\n        fields: this._boardLaneFields,\n        api: this.laneApiService,\n        //excludedFields: ['position'],\n        lockedFields: ['id', 'position'],\n        editMode: true\n        },\n        header: `Edit Board`,\n        width: '50vw'\n      });\n\n    this._subscription.add(this.ref?.onClose.subscribe(result => {\n      if ((<ConfirmDialogResult>result)?.isConfirmed) {\n        this._messageService.add({detail: `Successfully ${result?.isDeleted? 'deleted' : 'saved.'}` , severity: MESSAGE_SEVERITY.SUCCESS});\n        //this._crm.refreshPage();\n      }\n    }));\n  } */\n\n  public addEditBoard(isAdd = false, insertWhere?: 'left' | 'right'){\n    let item: any = {position: (insertWhere ? (insertWhere == 'left' ? this.activeLaneMenu?.position : ((this.activeLaneMenu?.position || 0) + 1) ) : (this.lanes?.length || 0))};\n\n    if(!isAdd){\n      item = this.activeLaneMenu;\n    }\n\n    /* this.ref = this._dialogService.open(AddComponent, {\n      data: {\n        editMode: !isAdd,\n        item,\n        fields: this._boardLaneFields,\n        api: (p: any, m: apiMethod) => {\n          if(!isAdd){\n            //m = 'patch';\n          } else if(insertWhere){\n            p.insert = true;\n          }\n          return this.laneApiService?.(p, m)\n        },\n        lockedFields: ['position'],\n        excludedFields: ['id'],\n      },\n      header: isAdd ? `Add New Board ${insertWhere ? '(Insert '+ insertWhere + ')' : ''}` : 'Edit Board',\n      width: '50vw'\n    });\n    this._subscription.add(this.ref?.onClose.subscribe(result => {\n      if ((<ConfirmDialogResult>result)?.isConfirmed) {\n        this._core.refreshPage();\n        //this.activeLaneMenu = {...this.activeLaneMenu, ...result?.rawData}\n        \n        setTimeout(() => {\n          this._messageService.add({detail: 'Successfully saved.' , severity: MESSAGE_SEVERITY.SUCCESS});\n        });\n      }\n    })); */\n  }\n\n  public addNew(lane: laneType) {\n    if(lane?.id){\n      this.dataHolder[lane?.id] = [{laneId: lane.id, name: 'New', position: 0}].concat((this.dataHolder[lane.id] || []).map((l, i) => ({...l, position: (i + 1)})))\n    }\n  }\n\n  public dropHorizontal(event: CdkDragDrop<string[]>, lanes: any[]) {\n    moveItemInArray(lanes, event.previousIndex, event.currentIndex);\n    setTimeout(() => {\n      const _toNext = lanes.map((l, i) => ({...l, position: i}));\n      this.laneApiService?.(_toNext, \"patch\")?.subscribe({next: (lanes) => {console.log(\"successfully saved\", lanes)}, error: (err) => {\n          this._messageService.add({detail: err , severity: MESSAGE_SEVERITY.WARN});\n        }\n      });\n    });\n  }\n\n  public onPopupShow(lData: laneType, index: number) {\n    this.activeLaneMenu= {...lData, position: index};\n  }\n\n  public editItem($event: MouseEvent, item: laneItem, index: number) {\n    $event.stopImmediatePropagation();\n    $event.stopPropagation();\n    $event.preventDefault();\n\n    /* this.ref = this._dialogService.open(AddComponent, {\n      data: {\n        item: {...item, position: index},\n        fields: this._boardDataFields,\n        api: this.laneDataApiService,\n        editMode: (item?.id > 0),\n        lockedFields: ['id', 'laneId', 'position'],\n        //excludedFields: [],\n      },\n      header: `Edit ${item?.name}`,\n      width: '50vw'\n    });\n    this._subscription.add(this.ref?.onClose.subscribe(result => {\n      if ((<ConfirmDialogResult>result)?.isConfirmed) {\n        this._messageService.add({detail: 'Successfully saved.' , severity: MESSAGE_SEVERITY.SUCCESS});\n        //TODO: refresh?\n      }\n    })); */\n  }\n\n  public collapseExpand(_lane: laneType, _lanes: laneType[]){\n    _lane.isCollapsed = !_lane?.isCollapsed;\n    this.laneApiService?.(_lane, \"patch\")?.subscribe({next: (lanes) => {console.log(\"successfully updated\", lanes)}, error: (err) => {\n        this._messageService.add({detail: err , severity: MESSAGE_SEVERITY.WARN});\n      }\n    });\n  }\n\n  /* public onFilter(filterBy: MenuItem){\n    const _toFilter = filterBy?.state || {[ filterBy?.id || 'filter' ]: filterBy?.label}; */\n  public onFilter(filterBy: any, whichFilter?: 'lane' | 'fields'){\n    //const _toFilter = filterBy?.state || {[ filterBy?.id || 'filter' ]: filterBy?.label};\n    this._initSources(filterBy, whichFilter);\n  }\n\n  /* public ngOnChanges(changes: SimpleChanges): void { \n    if(!changes['searchQuery']?.firstChange && changes['searchQuery']?.currentValue != changes['searchQuery']?.previousValue){\n      this._initSources({query: changes['searchQuery']?.currentValue});\n    }\n  } */\n\n  ngOnDestroy(): void {\n    this._subscription.unsubscribe();\n  }\n}\n","<div cdkDropList cdkDropListOrientation=\"horizontal\" class=\"eg-bg-grey lane-container flex flex-row full-height\" (cdkDropListDropped)=\"dropHorizontal($event, lanes)\" [cdkDropListSortPredicate]=\"getSortableLanes2\">\n    <!-- [class.example-container]=\"!lData?.isCollapsed\" -->\n    <ng-container [ngTemplateOutlet]=\"lanesPanel\" [ngTemplateOutletContext]=\"{lanes: (lanes$ | async)}\"></ng-container>\n    <ng-template #lanesPanel let-lanes=\"lanes\">\n        <ng-container *ngFor=\"let lData of lanes; let i=index\">\n            <div *ngIf=\"!lData?.isHidden\" [class]=\"'example-container'\" [class.cursor-move]=\"!lData?.isLocked\" [style]=\"lData?.isCollapsed ? {'width' : '52px'} : {}\"\n                cdkDrag [cdkDragDisabled]=\"lData?.isLocked\" [cdkDragData]=\"lData\"> <!-- [style]=\"lData?.isCollapsed ? {'width' : '52px'} : {}\" [style.order]=\"l?.position || (i + 1)\" -->\n                <ng-container [ngTemplateOutlet]=\"lanesData\" [ngTemplateOutletContext]=\"{fData: (dataHolder[(lData?.id || 0)] || [])}\"></ng-container>\n        \n                <ng-template #lanesData let-fData=\"fData\">\n                    <div class=\"full-width flex bg-white eg-p-x-4 align-items-center\" [class.center]=\"lData?.isCollapsed\"> <!-- [class.cursor-move]=\"!lData?.isLocked\" -->\n                        <span *ngIf=\"!lData?.isCollapsed\" class=\"align-items-center flex flex-1\">\n                            <h2 [innerHTML]=\"lData?.name\"></h2>\n                            <button *ngIf=\"lData?.isNew\" pButton pRipple type=\"button\" [icon]=\"PI.PLUS\" class=\"p-button-rounded eg-m-x-4 valign-middle\" (click)=\"addNew(lData)\"></button>    \n                        </span>\n                        <button pButton pRipple type=\"button\" [icon]=\"lData.isCollapsed ? PI.ANGLE_RIGHT : PI.ANGLE_LEFT\" [pTooltip]=\"lData.isCollapsed ? 'Expand' : 'Collapse'\" class=\"p-button-rounded p-button-text valign-middle\" (click)=\"collapseExpand(lData, lanes)\"></button>\n                        <button *ngIf=\"!lData?.isCollapsed\" pButton pRipple type=\"button\" [icon]=\"PI.ELLIPSIS_V\" pTooltip=\"More Options\" class=\"p-button-rounded p-button-text valign-middle\" (click)=\"menu.toggle($event)\"></button>\n                        <p-menu #menu [popup]=\"true\" [model]=\"laneMenu\" (onHide)=\"activeLaneMenu=undefined\" (onShow)=\"onPopupShow(lData, i)\"></p-menu>\n                    </div>\n        \n                    <div *ngIf=\"lData?.isCollapsed\" \n                        class=\"lane-item flex full-width \" style=\"transform: rotate(-90deg); line-height: 20; width: 2rem; white-space: nowrap\" [innerHTML]=\"lData?.name\"></div>\n                    <div *ngIf=\"!lData?.isCollapsed\"\n                        cdkDropList\n                        #lane=\"cdkDropList\"\n                        [id]=\"'lane' + lData?.id\"\n                        [cdkDropListData]=\"fData\"\n                        [cdkDropListConnectedTo]=\"getOtherLanes(lanes, (lData?.id || 0))\"\n                        class=\"example-list eg-w-260\"\n                        (cdkDropListDropped)=\"dropItem($event, (lData?.id || 0))\"> \n                        <div class=\"example-box\" *ngFor=\"let item of fData; let j = index\" cdkDrag [cdkDragData]=\"item\">\n                            <eag-card class=\"align-items-center flex full-width\" [item]=\"item\" (editItem)=\"editItem($event.mouseEvent, item, j)\"></eag-card>\n                        </div>\n                    </div>\n                </ng-template>\n            </div>\n        </ng-container>\n    </ng-template>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { KanbanComponent } from './kanban.component';\nimport { PrimeNgModule } from '../prime-ng/prime-ng.module';\nimport { GenericModule } from '../generic/generic.module';\n\nconst components: any[] = [KanbanComponent];\n\n@NgModule({\n  declarations: components,\n  imports: [CommonModule, PrimeNgModule, GenericModule],\n  exports: components\n})\nexport class KanbanModule {}\n","import { LOCALE_ID, NgModule } from '@angular/core';\nimport { registerLocaleData } from '@angular/common';\nimport localeDe from '@angular/common/locales/de';\nimport localeDeExtra from '@angular/common/locales/extra/de';\nimport { GenericModule } from './generic/generic.module';\nimport { GridsModule } from './grids/grids.module';\nimport { NavigationModule } from './navigation/navigation.module';\nimport { EagnaPipesModule } from '../lib/pipes/eagna-pipes.module';\nimport { PrimeNgModule } from './prime-ng/prime-ng.module';\nimport { SharedService } from './shared.service';\nimport { KanbanModule } from './kanban/kanban.module';\nimport { EditorModule } from \"@tinymce/tinymce-angular\";\n\nregisterLocaleData(localeDe, localeDeExtra);\n/* registerLocaleData(localeFr, localeFrExtra); */\nconst modules: any = [\n                    EditorModule,\n                    NavigationModule,\n                    GenericModule,\n                    GridsModule,\n                    EagnaPipesModule,\n                    PrimeNgModule,\n                    KanbanModule\n                  ];\nconst providers   : any = [\n  /* { provide: ApiCallService, multi: true}, */\n  { provide: LOCALE_ID, useValue: SharedService.defaultLocaleConf.locale}\n];\n\n/* window.console.log=function(){};\nwindow.console.warn=function(){};\nwindow.console.table=function(){}; */\n\n@NgModule({\n  imports       : [].concat(modules),\n  exports       : [].concat(modules),\n  providers     : [].concat(providers)\n})\nexport class CoreModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from \"@angular/core\";\nimport { SharedService } from \"./shared.service\";\nimport { LicenseManager } from  'ag-grid-enterprise'\n\n/* This is Shared Module Providing Shared Services */\n@NgModule({\n    imports       : [CommonModule]\n  })\nexport class SharedModule {\n  constructor(@Optional() @SkipSelf() parentModule?: SharedModule) {\n    if (parentModule) {\n      throw new Error(\n        'SharedModule is already loaded. Import it in the AppModule only');\n    }\n  }\n  static forRoot(config: { sharedService: SharedService}): ModuleWithProviders<SharedModule> {\n\n    return {\n      ngModule: SharedModule,\n      providers: [\n        { provide: SharedService, useValue: config.sharedService },\n      ]\n    };\n  }\n}\n","import { Injectable, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, Data, NavigationEnd, Params, Router } from '@angular/router';\nimport { filter, pairwise, startWith, Subscription } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport abstract class RouteObserverService implements OnDestroy{\n\n  public subscription = new Subscription();\n  public snapshotLoaded = false;\n  \n  private _snapshot!: ActivatedRouteSnapshot;\n  private _snapshotData!: Data;\n  private _snapshotParams!: Params;\n\n  public get snapshotParams(): Params {\n    return this._snapshotParams;\n  }\n  public set snapshotParams(value: Params) {\n    this._snapshotParams = value;\n  }\n\n  public get snapshotData(): Data {\n    return this._snapshotData;\n  }\n  public set snapshotData(value: Data) {\n    this._snapshotData = value;\n  }\n    \n  public get snapshot(): ActivatedRouteSnapshot {\n    return this._snapshot;\n  }\n\n  public set snapshot(value: ActivatedRouteSnapshot) {\n    this._snapshot = value;\n  }\n\n  constructor(\n    public activatedRoute: ActivatedRoute,\n    public router: Router){\n      const _recur = (route: ActivatedRoute) => {\n        if(route){\n          for (const child of route.children) {\n            this.snapshotData = {...this.snapshotData, ...child?.snapshot?.data};\n            this.snapshotParams = {...this.snapshotParams, ...child?.snapshot?.params};\n            _recur(child)\n          } \n        }\n      }\n\n      try{\n        this.subscription.add(this.router.events.pipe(\n          filter(event => event instanceof NavigationEnd),\n          startWith(null),\n          pairwise(),\n          ).subscribe((e: any[]) => {\n            this.snapshot = this.activatedRoute.snapshot;\n            this.snapshotData = this.snapshot.data;\n            this.snapshotParams = this.snapshot.params;\n            _recur(this.activatedRoute.root);\n            \n            this.onRouteReady(e, this.snapshot, this.snapshotData);\n\n            if(this.snapshotLoaded){\n              setTimeout(() => {\n                this.onRouteReloaded(e?.find(_e => _e instanceof NavigationEnd), this.snapshot, this.snapshotData);\n              })\n            }\n          })\n        );\n      } catch(e){\n          console.warn('RouteObserver error', e);\n      }\n      _recur(this.activatedRoute.root);\n      this.snapshot = activatedRoute.snapshot;\n  }\n\n  /* ngOnInit(): void {\n    this.snapshot = this.activatedRoute.snapshot;\n    this.onSnapshotReady(this.snapshot);\n    this._loaded = true;\n  } */\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n    this.snapshotLoaded = false;\n  }\n\n  abstract onRouteReady(event?: any[], snapshot?: ActivatedRouteSnapshot, rootData?: Data, rootParams?: Params): void;\n  abstract onRouteReloaded(event?: NavigationEnd, snapshot?: ActivatedRouteSnapshot, rootData?: Data, rootParams?: Params): void;\n}\n\n","/*\n * Public API Surface of core\n */\nexport * from './lib/abstract-core';\nexport * from './lib/core.interface';\nexport * from './lib/core.module';\nexport * from './lib/core.service';\nexport * from './lib/core.static';\nexport * from './lib/grids/grids-api';\nexport * from './lib/generic/generic-api';\nexport * from './lib/helper.service';\nexport * from './lib/kanban/kanban-api';\nexport * from './lib/navigation/navigation-api';\nexport * from './lib/pipes/eagna-pipes-api';\nexport * from './lib/prime-ng/prime-ng-api';\nexport * from './lib/shared.module';\nexport * from './lib/shared.service';\nexport * from './lib/services/services-api';\nexport * from 'subsink2'\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i4","i6","i2","i2.GetInitialsPipe","i2.CustomPluralPipe","i2.IsNotEmptyPipe","i2.ObjToArrayPipe","i2.ArrayToObjPipe","i1.SharedService","i2.HelperService","i5","i2.CoreService","i1.LoadingService","SharedModule","i1.SplashScreenStateService","components","modules","i3.CoreService","i1.HelperService","i7","i8","i9.CustomPluralPipe","i9.IsNotEmptyPipe","filter","i4.SharedService","i9","i11","i9.AbstractCoreService","i8.ApiCallService","i10","i14","i3.IsNotEmptyPipe","i1.SideBarService","i3.HelperService","i12.IsNotEmptyPipe","i1.CoreService","i11.CardComponent"],"mappings":"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"}