{"version":3,"file":"ngtreegrid.mjs","sources":["../../../projects/ngtreegrid/src/lib/ngtreegrid.service.ts","../../../projects/ngtreegrid/src/lib/store/store.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-view/default/tree-cell-view.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-view/default/tree-cell-view.component.html","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-view/custom/custom-tree-cell.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-editor/default/default-editor.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-editor/custom/custom-tree-cell-Editor.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-editor/default/cell-editor/tree-cell-editor.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-editor/default/cell-editor/tree-cell-editor.component.html","../../../projects/ngtreegrid/src/lib/modules/cell/tree-cell.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/tree-cell.component.html","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-actions/tree-cell-actions.component.ts","../../../projects/ngtreegrid/src/lib/modules/cell/components/tree-cell-actions/tree-cell-actions.component.html","../../../projects/ngtreegrid/src/lib/modules/body/components/add-row/add-row.component.ts","../../../projects/ngtreegrid/src/lib/modules/body/components/add-row/add-row.component.html","../../../projects/ngtreegrid/src/lib/modules/body/components/filter-row/filter-row.component.ts","../../../projects/ngtreegrid/src/lib/modules/body/components/filter-row/filter-row.component.html","../../../projects/ngtreegrid/src/lib/modules/body/components/tree-body/tree-body.component.ts","../../../projects/ngtreegrid/src/lib/modules/body/components/tree-body/tree-body.component.html","../../../projects/ngtreegrid/src/lib/modules/head/components/tree-head/tree-head.component.ts","../../../projects/ngtreegrid/src/lib/modules/head/components/tree-head/tree-head.component.html","../../../projects/ngtreegrid/src/lib/ngtreegrid.component.ts","../../../projects/ngtreegrid/src/lib/ngtreegrid.component.html","../../../projects/ngtreegrid/src/lib/modules/cell/cell.module.ts","../../../projects/ngtreegrid/src/lib/modules/body/body.module.ts","../../../projects/ngtreegrid/src/lib/modules/head/head.module.ts","../../../projects/ngtreegrid/src/lib/ngtreegrid.module.ts","../../../projects/ngtreegrid/src/public-api.ts","../../../projects/ngtreegrid/src/ngtreegrid.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class NgtreegridService {\n  private display_data_observable = new Subject<any[]>();\n  display_data_observable$ = this.display_data_observable.asObservable();\n\n  constructor() {}\n\n  updateDisplayDataObservable(display_data: any[]) {\n    this.display_data_observable.next(display_data);\n  }\n\n  isEmpty(value: any) {\n    return value === \"\" || value === undefined || value === \"undefined\";\n  }\n\n  expandAll(expand_tracker: any) {\n    for (const key in expand_tracker) {\n      if (expand_tracker.hasOwnProperty(key)) {\n        expand_tracker[key] = true;\n      }\n    }\n  }\n\n  collapseAll(expand_tracker: any) {\n    for (const key in expand_tracker) {\n      if (expand_tracker.hasOwnProperty(key)) {\n        expand_tracker[key] = false;\n      }\n    }\n    expand_tracker[\"data\"] = true;\n  }\n}\n","import { NgtreegridService } from \"../ngtreegrid.service\";\nimport { Configs } from \"../models/Configs.model\";\n\nexport class Store {\n  processed_data: any[] = [];\n  raw_data: any[] = ([] = []);\n  display_data: any[] = [];\n  configs!: Configs;\n  group_keys: any = {}; // Contains all group keys.\n  processed_tree_data: Object = {}; // Contains all group keys.\n  keyString = '-key';\n\n  constructor(private ngTreeGridService: NgtreegridService) {}\n\n  getRawData() {\n    return this.raw_data;\n  }\n\n  setRawData(raw_data: any) {\n    this.raw_data = raw_data;\n  }\n\n  getProcessedData(processed_data: any) {\n    return this.processed_data;\n  }\n\n  setProcessedData(processed_data: any) {\n    this.processed_data = processed_data;\n    this.setDisplayData([...processed_data]);\n  }\n\n  getDisplayData() {\n    return this.display_data;\n  }\n\n  setDisplayData(display_data: any) {\n    this.display_data = display_data;\n    this.ngTreeGridService.updateDisplayDataObservable(this.display_data);\n  }\n\n  filterBy(fields: any[], search_values: any) {\n    this.display_data = this.processed_data.filter((record) => {\n      if (record.parent) {\n        return true;\n      }\n\n      let found = true;\n      for (let index = 0; index < fields.length; index++) {\n        let field_value = record[fields[index]];\n        let search_value = search_values[index];\n\n        // If blank then continue.\n        if (!search_value) {\n          continue;\n        }\n\n        if (typeof field_value === \"number\") {\n          if (field_value !== parseInt(search_value, 10)) {\n            found = false;\n          }\n        } else {\n          const column = this.configs.columns[index];\n          if (!column.case_sensitive_filter) {\n            field_value = field_value.toLowerCase();\n            search_value = search_value.toLowerCase();\n          }\n          if (field_value.indexOf(search_value) === -1) {\n            found = false;\n          }\n        }\n      }\n      return found;\n    });\n    this.ngTreeGridService.updateDisplayDataObservable(this.display_data);\n  }\n\n  selectAll() {\n    this.display_data.forEach((data) => {\n      data.row_selected = true;\n    });\n  }\n\n  deSelectAll() {\n    this.display_data.forEach((data) => {\n      data.row_selected = false;\n    });\n  }\n\n  /**\n   * Find path from root and assgn grouped data\n   *\n   * @param temp_traversed_paths It is the traversed path for the current group by key.\n   * @param index Current index of the leaf node\n   * @param group_by_data Generated group by data for the current leaf node\n   */\n  traverseRootData(\n    temp_traversed_paths: string[],\n    index: number,\n    group_by_data: any\n  ) {\n    const paths = temp_traversed_paths[index].split(\".\");\n    let root_keys: any = this.processed_tree_data;\n\n    for (let i = 0; i < paths.length - 1; i++) {\n      const path = paths[i];\n      root_keys = root_keys[path];\n    }\n\n    // Set in last object to keep the reference.\n    root_keys[paths[paths.length - 1]] = group_by_data;\n  }\n\n  groupData(\n    data: any,\n    configs: Configs,\n    internal_configs: any,\n    edit_tracker: any,\n    expand_tracker: any\n  ) {\n    if (configs.sort_by && configs.sort_by.length > 0) {\n      data.sort(function (a: any, b: any) {\n        var first = a[configs.sort_by!];\n        var second = b[configs.sort_by!];\n        first = typeof first === \"string\" ? first.toLowerCase().trim() : first;\n        second =\n          typeof second === \"string\" ? second.toLowerCase().trim() : second;\n        if (first < second) {\n          return -1;\n        } else {\n          return 1;\n        }\n      });\n    }\n\n    const group_by = configs.group_by;\n\n    // It is an array of leaf nodes.\n    let last_group_data = [data];\n\n    // It represents the path to the leaf nodes.\n    let traversed_paths: string[] = [\"data\"];\n    this.processed_tree_data = { data: \"\" };\n\n    group_by.forEach((key) => {\n      const temp_traversed_paths: string[] = [];\n      const temp_last_group_data: any = [];\n      let group_keys: string[] = [];\n\n      // Number of records in traversed_paths and last_group_data are same.\n      for (let index = 0; index < last_group_data.length; index++) {\n        const group_data = last_group_data[index];\n        const group_by_data: any = this.groupByKey(group_data, key);\n\n        this.traverseRootData(traversed_paths, index, group_by_data);\n\n        const new_group_keys = Object.keys(group_by_data).map(key => key.split(this.keyString)[0]);\n\n        const traversed_group_key: string = traversed_paths[index];\n\n        // Get list of grouped data for the current group by in an array.\n        new_group_keys.forEach((new_group_key) => {\n          // Make keys separated by dots for all group by. Example 'data.book.type'\n          temp_traversed_paths.push(traversed_group_key + \".\" + new_group_key);\n          temp_last_group_data.push(group_by_data[new_group_key]);\n        });\n\n        group_keys.push(...new_group_keys);\n      }\n\n      traversed_paths = temp_traversed_paths;\n      last_group_data = temp_last_group_data;\n\n      // Remove duplicates and blanks.\n      group_keys = group_keys.filter((item, pos) => {\n        return (\n          !this.ngTreeGridService.isEmpty(item) &&\n          group_keys.indexOf(item) === pos\n        );\n      });\n\n      this.group_keys[key] = group_keys;\n    });\n\n    if (internal_configs.current_sorted_column) {\n      this.processData(\n        internal_configs.current_sorted_column.sort_type,\n        internal_configs.current_sorted_column.name,\n        edit_tracker,\n        expand_tracker\n      );\n    } else {\n      this.processData(null, null, edit_tracker, expand_tracker);\n    }\n\n    this.setRawData(data);\n    this.configs = configs;\n  }\n\n  groupByKey(data: any, group_by: any) {\n    const group_by_data: any = {};\n\n    // Make an array of group by key.\n    data.forEach((item: any) => {\n\n      //Add key to make it a string.\n      const group_key = String(item[group_by]) + this.keyString;\n      // Check if group by key is already an array or not.\n      if (!group_by_data[group_key]) {\n        group_by_data[group_key] = [];\n      }\n      group_by_data[group_key].push(item);\n    });\n\n    return group_by_data;\n  }\n\n  processData(\n    sort_type: any,\n    sort_by: any,\n    edit_tracker: any,\n    expand_tracker: any\n  ) {\n    this.processed_data = [];\n    let index = 0;\n\n    // Make recursive call to generate records.\n    this.generateData(\n      sort_type,\n      sort_by,\n      this.processed_tree_data,\n      0,\n      null,\n      expand_tracker\n    );\n\n    this.processed_data.shift();\n\n    // Add index to all records.\n    this.processed_data.forEach((data) => {\n      data.idx = index++;\n      edit_tracker[data.idx] = false;\n    });\n\n    // Expand root so that first level shows up.\n    expand_tracker[\"data\"] = 1;\n\n    this.setProcessedData(this.processed_data);\n  }\n\n  generateData(\n    sort_type: any,\n    sort_by: any,\n    group_data: any,\n    level: any,\n    parent_key: any,\n    expand_tracker: any\n  ) {\n    const group_keys = Object.keys(group_data);\n\n    group_keys.forEach((key) => {\n      const items = group_data[key];\n      const cleanKey = key.includes(this.keyString) ? key.split(this.keyString)[0] : key;\n      const composite_key = parent_key ? parent_key + \".\" + key : key;\n\n      // If items is not an array then it has more group by arrays. So make recursive call.\n      if (!Array.isArray(items)) {\n        // Create an array of children ids.\n        const children = Object.keys(items);\n        const children_id: any = [];\n        children.forEach((child) => {\n          // Add child id to the composite key.\n          children_id.push(composite_key + \".\" + child);\n        });\n        this.processed_data.push({\n          parent_id: parent_key,\n          node_id: composite_key,\n          node_text: cleanKey,\n          parent: true,\n          last_parent: false,\n          children: children_id,\n          level: level,\n        });\n        expand_tracker[composite_key] = 0;\n\n        // Increase level to mark the level.\n        this.generateData(\n          sort_type,\n          sort_by,\n          items,\n          level + 1,\n          composite_key,\n          expand_tracker\n        );\n      } else {\n        // Set Parent object.\n        this.processed_data.push({\n          parent_id: parent_key,\n          node_id: composite_key,\n          node_text: cleanKey,\n          parent: true,\n          last_parent: true,\n          level: level,\n        });\n        expand_tracker[composite_key] = 0;\n\n        // Sort Items\n        if (sort_type !== null) {\n          sort_type\n            ? items.sort((a, b) =>\n                a[sort_by] > b[sort_by] ? 1 : b[sort_by] > a[sort_by] ? -1 : 0\n              )\n            : items.sort((a, b) =>\n                a[sort_by] < b[sort_by] ? 1 : b[sort_by] < a[sort_by] ? -1 : 0\n              );\n        }\n\n        // Set Child object.\n        items.forEach((item) => {\n          item.parent = false;\n          item.parent_id = composite_key;\n          this.processed_data.push(item);\n        });\n      }\n    });\n  }\n\n  refreshDisplayData() {\n    this.display_data = this.processed_data;\n    this.ngTreeGridService.updateDisplayDataObservable(this.display_data);\n  }\n}\n","import {\n  Component,\n  OnInit,\n  Input,\n  EventEmitter,\n  Output,\n  OnChanges,\n} from \"@angular/core\";\nimport { Column } from \"../../../../../models/Column.model\";\n\n@Component({\n  selector: \"db-tree-cell-view\",\n  templateUrl: \"./tree-cell-view.component.html\",\n  styleUrls: [\"./tree-cell-view.component.css\"],\n})\nexport class TreeCellViewComponent implements OnInit {\n  @Input()\n  cell_value!: string;\n\n  @Input()\n  row_data: any;\n\n  @Input()\n  column!: Column | undefined;\n\n  @Output() cellclick: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n","<div (click)=\"cellclick.emit($event)\">{{column?.renderer ? column?.renderer(cell_value, row_data) : cell_value}}</div>","import {\n  Component,\n  Input,\n  ComponentFactoryResolver,\n  ViewChild,\n  ViewContainerRef,\n  OnInit,\n  OnDestroy,\n} from \"@angular/core\";\nimport { Column } from \"../../../../../models/Column.model\";\n\n@Component({\n  selector: \"db-custom-cell-component\",\n  template: ` <ng-template #customView></ng-template> `,\n})\nexport class CustomCellViewComponent implements OnInit, OnDestroy {\n  custom_component: any;\n  @Input() column!: Column | undefined;\n  @Input() cell_value = \"\";\n  @Input() row_data: any = [];\n  @ViewChild(\"customView\", { read: ViewContainerRef, static: true })\n  custom_view: any;\n\n  constructor(private resolver: ComponentFactoryResolver) {}\n\n  ngOnInit() {\n    if (this.column?.component && !this.custom_component) {\n      this.createCustomComponent();\n      this.callOnComponentInit();\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.custom_component) {\n      this.custom_component.destroy();\n    }\n  }\n\n  protected createCustomComponent() {\n    const componentFactory = this.resolver.resolveComponentFactory(\n      this.column?.component\n    );\n    this.custom_component = this.custom_view.createComponent(componentFactory);\n  }\n\n  protected callOnComponentInit() {\n    this.column?.on_component_init &&\n      this.column.on_component_init(this.custom_component.instance);\n\n    this.custom_component.instance.cell_value = this.cell_value;\n    this.custom_component.instance.row_data = this.row_data;\n  }\n}\n","import { Output, EventEmitter, Component } from '@angular/core';\n\n@Component({\n    selector: '',\n    template: '',\n})\nexport class DefaultEditor implements Editor {\n    @Output() canceledit = new EventEmitter<any>();\n    @Output() editcomplete = new EventEmitter<any>();\n    @Output() cellclick = new EventEmitter<any>();\n}\n\nexport interface Editor {\n    canceledit: EventEmitter<any>;\n    editcomplete: EventEmitter<any>;\n    cellclick: EventEmitter<any>;\n}\n","import {\n  Component,\n  Input,\n  ComponentFactoryResolver,\n  ViewChild,\n  ViewContainerRef,\n  OnInit,\n  OnDestroy,\n} from \"@angular/core\";\nimport { Column } from \"../../../../../models/Column.model\";\nimport { DefaultEditor } from \"../default/default-editor.component\";\n\n@Component({\n  selector: \"db-custom-cell-editor-component\",\n  template: ` <ng-template #customView></ng-template> `,\n})\nexport class CustomCellEditorComponent\n  extends DefaultEditor\n  implements OnInit, OnDestroy\n{\n  custom_component: any;\n  @Input() column!: Column | undefined;\n  @Input() cell_value = \"\";\n  @Input() row_data = [];\n  @ViewChild(\"customView\", { read: ViewContainerRef, static: true })\n  custom_view: any;\n\n  constructor(private resolver: ComponentFactoryResolver) {\n    super();\n  }\n\n  ngOnInit() {\n    if (this.column?.editor && !this.custom_component) {\n      this.createCustomComponent();\n      this.callOnComponentInit();\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.custom_component) {\n      this.custom_component.destroy();\n    }\n  }\n\n  protected createCustomComponent() {\n    const componentFactory = this.resolver.resolveComponentFactory(\n      this.column?.editor\n    );\n    this.custom_component = this.custom_view.createComponent(componentFactory);\n  }\n\n  protected callOnComponentInit() {\n    this.column?.on_component_init &&\n      this.column.on_component_init(this.custom_component.instance);\n\n    this.custom_component.instance.cell_value = this.cell_value;\n    this.custom_component.instance.row_data = this.row_data;\n    this.custom_component.instance.column = this.column;\n\n    this.custom_component.instance.editcomplete.subscribe((event: any) =>\n      this.editcomplete.emit(event)\n    );\n    this.custom_component.instance.canceledit.subscribe((event: any) =>\n      this.canceledit.emit(event)\n    );\n    this.custom_component.instance.cellclick.subscribe((event: any) =>\n      this.cellclick.emit(event)\n    );\n  }\n}\n","import { Component, OnInit, Input } from \"@angular/core\";\nimport { Column } from \"../../../../../../models/Column.model\";\nimport { DefaultEditor } from \"../default-editor.component\";\n\n@Component({\n  selector: \"db-tree-cell-editor\",\n  templateUrl: \"./tree-cell-editor.component.html\",\n  styleUrls: [\"./tree-cell-editor.component.css\"],\n})\nexport class TreeCellEditorComponent extends DefaultEditor implements OnInit {\n  @Input()\n  cell_value!: string;\n\n  @Input()\n  row_data: any;\n\n  @Input()\n  column!: Column | undefined;\n\n  constructor() {\n    super();\n  }\n\n  ngOnInit() {}\n}\n","<input type=\"text\" [(ngModel)]=\"row_data[column?.name!]\" class=\"cell-default\" (click)=\"cellclick.emit($event)\"\n    (keydown.enter)=\"editcomplete.emit($event)\" (keydown.esc)=\"canceledit.emit()\">","import {\n  Component,\n  OnInit,\n  Input,\n  EventEmitter,\n  Output,\n  OnChanges,\n} from \"@angular/core\";\nimport { Column } from \"../../models/Column.model\";\n\n@Component({\n  selector: \"db-tree-cell\",\n  templateUrl: \"./tree-cell.component.html\",\n})\nexport class TreeCellComponent implements OnInit {\n  @Input()\n  cell_value!: string;\n\n  @Input()\n  row_data: any;\n\n  @Input()\n  column!: Column | undefined;\n\n  @Input()\n  edit_on: any;\n\n  @Input()\n  cellclick!: EventEmitter<any>;\n\n  @Output() canceledit: EventEmitter<any> = new EventEmitter();\n  @Output() editcomplete: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  onCellClick(rec: any, column: Column | undefined) {\n    this.cellclick.emit({ row: rec, column: column });\n  }\n\n  onEditComplete($event: any) {\n    this.editcomplete.emit({ event: $event, data: this.row_data });\n  }\n}\n","<ng-container>\n    <div [ngSwitch]=\"column?.type\" *ngIf=\"!edit_on || !column?.editable\">\n        <db-custom-cell-component *ngSwitchCase=\"'custom'\" [cell_value]=\"cell_value\" [column]=\"column\"\n            [row_data]=\"row_data\" (click)=\"onCellClick(row_data, column)\">\n        </db-custom-cell-component>\n        <db-tree-cell-view *ngSwitchDefault (cellclick)=\"onCellClick(row_data, column)\" [cell_value]=\"cell_value\"\n            [column]=\"column\" [row_data]=\"row_data\">\n        </db-tree-cell-view>\n    </div>\n    <div *ngIf=\"edit_on && column?.editable\">\n        <db-custom-cell-editor-component *ngIf=\"column?.editor\" [cell_value]=\"cell_value\" [column]=\"column\"\n            [row_data]=\"row_data\" (canceledit)=\"canceledit.emit(row_data['idx'])\"\n            (editcomplete)=\"onEditComplete($event)\">\n        </db-custom-cell-editor-component>\n        <db-tree-cell-editor *ngIf=\"!column?.editor\" [cell_value]=\"cell_value\" [row_data]=\"row_data\" [column]=\"column\"\n            (canceledit)=\"canceledit.emit(row_data['idx'])\" (editcomplete)=\"onEditComplete($event)\">\n        </db-tree-cell-editor>\n    </div>\n</ng-container>","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\nimport { Configs } from \"../../../../models/Configs.model\";\nimport { Store } from \"../../../../store/store\";\n\n@Component({\n  selector: \"[db-tree-cell-actions]\",\n  templateUrl: \"./tree-cell-actions.component.html\",\n  styleUrls: [\"./tree-cell-actions.component.scss\"],\n})\nexport class TreeCellActionsComponent implements OnInit {\n  @Input()\n  store!: Store;\n\n  @Input()\n  edit_tracker!: any;\n\n  @Input()\n  configs!: Configs;\n\n  @Input()\n  rowdelete!: EventEmitter<any>;\n\n  @Input()\n  data: any;\n\n  @Input()\n  internal_configs: any;\n\n  @Output() editcomplete: EventEmitter<any> = new EventEmitter();\n  @Output() canceledit: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  enableEdit(row_data: any) {\n    const index = row_data[\"idx\"];\n    this.edit_tracker[index] = true;\n    this.internal_configs.current_edited_row = { ...row_data };\n  }\n\n  findRecordIndex(idx: any) {\n    for (let index = 0; index < this.store.processed_data.length; index++) {\n      if (this.store.processed_data[index].idx === idx) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  deleteRecord(rec: any) {\n    if (this.configs.actions?.resolve_delete) {\n      const promise = new Promise((resolve, reject) => {\n        this.rowdelete.emit({\n          data: rec,\n          resolve: resolve,\n        });\n      });\n\n      promise\n        .then(() => {\n          this.store.processed_data.splice(this.findRecordIndex(rec.idx), 1);\n          this.store.refreshDisplayData();\n        })\n        .catch((err) => {});\n    } else {\n      this.store.processed_data.splice(this.findRecordIndex(rec.idx), 1);\n      this.store.refreshDisplayData();\n      this.rowdelete.emit(rec);\n    }\n  }\n\n  saveRecord($event: any) {\n    this.editcomplete.emit({ event: $event, data: this.data });\n  }\n}\n","<ng-container *ngIf=\"configs.actions?.edit && configs?.row_edit_function(data)\">\n  <div *ngIf=\"!edit_tracker[data['idx']]\" class=\"icon-container\">\n    <i (click)=\"enableEdit(data)\" *ngIf=\"configs.css.edit_class\" title=\"Edit row\"\n      class=\"{{this.configs.css.edit_class}}\" aria-hidden=\"true\"></i>\n    <svg (click)=\"enableEdit(data)\" *ngIf=\"!configs.css.edit_class\" xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\">\n      <title>Edit row</title>\n      <g data-name=\"Layer 2\">\n        <g data-name=\"edit\">\n          <rect width=\"24\" height=\"24\" opacity=\"0\" />\n          <path\n            d=\"M19.4 7.34L16.66 4.6A2 2 0 0 0 14 4.53l-9 9a2 2 0 0 0-.57 1.21L4 18.91a1 1 0 0 0 .29.8A1 1 0 0 0 5 20h.09l4.17-.38a2 2 0 0 0 1.21-.57l9-9a1.92 1.92 0 0 0-.07-2.71zM9.08 17.62l-3 .28.27-3L12 9.32l2.7 2.7zM16 10.68L13.32 8l1.95-2L18 8.73z\" />\n        </g>\n      </g>\n    </svg>\n  </div>\n  <ng-container *ngIf=\"edit_tracker[data['idx']]\">\n    <div class=\"icon-container\">\n      <i (click)=\"saveRecord($event)\" *ngIf=\"configs.css.save_class\" title=\"Save row\"\n        class=\"{{this.configs.css.save_class}}\" aria-hidden=\"true\"></i>\n      <svg (click)=\"saveRecord($event)\" title=\"Save row\" *ngIf=\"!configs.css.save_class\"\n        xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <title>Save row</title>\n        <g data-name=\"Layer 2\">\n          <g data-name=\"save\">\n            <rect width=\"24\" height=\"24\" opacity=\"0\" />\n            <path\n              d=\"M20.12 8.71l-4.83-4.83A3 3 0 0 0 13.17 3H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-7.17a3 3 0 0 0-.88-2.12zM10 19v-2h4v2zm9-1a1 1 0 0 1-1 1h-2v-3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3H6a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h2v5a1 1 0 0 0 1 1h4a1 1 0 0 0 0-2h-3V5h3.17a1.05 1.05 0 0 1 .71.29l4.83 4.83a1 1 0 0 1 .29.71z\" />\n          </g>\n        </g>\n      </svg>\n    </div>\n    <div class=\"icon-container\">\n      <i (click)=\"canceledit.emit(data)\" *ngIf=\"configs.css.cancel_class\" title=\"Cancel row\"\n        class=\"{{this.configs.css.cancel_class}}\" aria-hidden=\"true\"></i>\n      <svg (click)=\"canceledit.emit(data)\" *ngIf=\"!configs.css.cancel_class\" title=\"Cancel row\"\n        xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <title>Cancel row</title>\n        <g data-name=\"Layer 2\">\n          <g data-name=\"close\">\n            <rect width=\"24\" height=\"24\" transform=\"rotate(180 12 12)\" opacity=\"0\" />\n            <path\n              d=\"M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z\" />\n          </g>\n        </g>\n      </svg>\n    </div>\n  </ng-container>\n</ng-container>\n<div *ngIf=\"configs.actions?.delete && !edit_tracker[data['idx']] && configs?.row_delete_function(data)\"\n  class=\"icon-container\">\n  <i *ngIf=\"configs.css.delete_class\" title=\"Delete row\" (click)=\"deleteRecord(data)\"\n    class=\"{{this.configs.css.delete_class}}\" aria-hidden=\"true\"></i>\n  <svg *ngIf=\"!configs.css.delete_class\" title=\"Delete row\" (click)=\"deleteRecord(data)\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n    <title>Delete row</title>\n    <g data-name=\"Layer 2\">\n      <g data-name=\"trash-2\">\n        <rect width=\"24\" height=\"24\" opacity=\"0\" />\n        <path\n          d=\"M21 6h-5V4.33A2.42 2.42 0 0 0 13.5 2h-3A2.42 2.42 0 0 0 8 4.33V6H3a1 1 0 0 0 0 2h1v11a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V8h1a1 1 0 0 0 0-2zM10 4.33c0-.16.21-.33.5-.33h3c.29 0 .5.17.5.33V6h-4zM18 19a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8h12z\" />\n        <path d=\"M9 17a1 1 0 0 0 1-1v-4a1 1 0 0 0-2 0v4a1 1 0 0 0 1 1z\" />\n        <path d=\"M15 17a1 1 0 0 0 1-1v-4a1 1 0 0 0-2 0v4a1 1 0 0 0 1 1z\" />\n      </g>\n    </g>\n  </svg>\n</div>","import {\n  Component,\n  OnInit,\n  Output,\n  EventEmitter,\n  Input,\n  ViewEncapsulation,\n} from \"@angular/core\";\nimport { Column } from \"../../../../models/Column.model\";\nimport { Configs } from \"../../../../models/Configs.model\";\nimport { Store } from \"../../../../store/store\";\n\n@Component({\n  selector: \"[db-add-row]\",\n  templateUrl: \"./add-row.component.html\",\n  styleUrls: [\"./add-row.component.scss\"],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AddRowComponent implements OnInit {\n  row_data: any = {};\n\n  @Input()\n  store!: Store;\n\n  @Input()\n  columns!: Column[];\n\n  @Input()\n  configs!: Configs;\n\n  @Input()\n  internal_configs: any;\n\n  @Output() rowadd: EventEmitter<any> = new EventEmitter();\n  @Output() canceledit: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {\n    this.columns.forEach((column) => {\n      this.row_data[column.name] = \"\";\n    });\n  }\n\n  saveAddRecord(e: any) {\n    // const add_column = {};\n    const index = this.store.processed_data.length;\n    // this.columns.forEach(column => {\n    //   if (column.editable) {\n    //     add_column[column.name] = (document.getElementById(index + column.name) as HTMLInputElement).value;\n    //   } else {\n    //     add_column[column.name] = '';\n    //   }\n    // });\n\n    this.configs.group_by.forEach((key) => {\n      this.row_data[key] = (\n        document.getElementById(index + key) as HTMLInputElement\n      ).value;\n    });\n\n    this.store.raw_data.push(this.row_data);\n    this.internal_configs.show_add_row = false;\n\n    this.rowadd.emit(this.row_data);\n  }\n\n  cancelAddEdit() {\n    this.internal_configs.show_add_row = false;\n  }\n}\n","<td *ngIf=\"configs.multi_select\"></td>\n<td>\n  <div class=\"icon-container\">\n    <i (click)=\"saveAddRecord($event)\" *ngIf=\"configs.css.save_class\" title=\"Save row\"\n      class=\"{{this.configs.css.save_class}}\" aria-hidden=\"true\"></i>\n    <svg (click)=\"saveAddRecord($event)\" title=\"Save row\" *ngIf=\"!configs.css.save_class\"\n      xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <title>Save row</title>\n      <g data-name=\"Layer 2\">\n        <g data-name=\"save\">\n          <rect width=\"24\" height=\"24\" opacity=\"0\" />\n          <path\n            d=\"M20.12 8.71l-4.83-4.83A3 3 0 0 0 13.17 3H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-7.17a3 3 0 0 0-.88-2.12zM10 19v-2h4v2zm9-1a1 1 0 0 1-1 1h-2v-3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3H6a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h2v5a1 1 0 0 0 1 1h4a1 1 0 0 0 0-2h-3V5h3.17a1.05 1.05 0 0 1 .71.29l4.83 4.83a1 1 0 0 1 .29.71z\" />\n        </g>\n      </g>\n    </svg>\n  </div>\n  <div class=\"icon-container\">\n    <i (click)=\"cancelAddEdit()\" *ngIf=\"configs.css.cancel_class\" title=\"Cancel row\"\n      class=\"{{this.configs.css.cancel_class}}\" aria-hidden=\"true\"></i>\n    <svg (click)=\"cancelAddEdit()\" *ngIf=\"!configs.css.cancel_class\" title=\"Cancel row\"\n      xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <title>Cancel row</title>\n      <g data-name=\"Layer 2\">\n        <g data-name=\"close\">\n          <rect width=\"24\" height=\"24\" transform=\"rotate(180 12 12)\" opacity=\"0\" />\n          <path\n            d=\"M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z\" />\n        </g>\n      </g>\n    </svg>\n  </div>\n</td>\n<td *ngFor=\"let group_by of configs.group_by\">\n  <select [attr.id]=\"store.processed_data.length+group_by\">\n    <option *ngFor=\"let key of store.group_keys[group_by]\">\n      {{key}}\n    </option>\n  </select>\n</td>\n<td *ngFor=\"let column of columns\" [ngClass]=\"{'column-hide': column.hidden}\">\n  <div *ngIf=\"column.editable\">\n    <db-custom-cell-editor-component *ngIf=\"column.editor\" cell_value=\"\" [column]=\"column\" [row_data]=\"row_data\"\n      (canceledit)=\"cancelAddEdit()\" (editcomplete)=\"saveAddRecord($event)\">\n    </db-custom-cell-editor-component>\n    <db-tree-cell-editor *ngIf=\"!column.editor\" cell_value=\"\" [row_data]=\"row_data\" [column]=\"column\"\n      (canceledit)=\"cancelAddEdit()\" (editcomplete)=\"saveAddRecord($event)\">\n    </db-tree-cell-editor>\n  </div>\n</td>","import { Component, OnInit, Input } from \"@angular/core\";\nimport { Column } from \"../../../../models/Column.model\";\nimport { Configs } from \"../../../../models/Configs.model\";\nimport { Store } from \"../../../../store/store\";\nimport { NgtreegridService } from \"../../../../ngtreegrid.service\";\n\n@Component({\n  selector: \"[db-filter-row]\",\n  templateUrl: \"./filter-row.component.html\",\n  styleUrls: [\"./filter-row.component.scss\"],\n})\nexport class FilterRowComponent implements OnInit {\n  search_values: any = {};\n\n  @Input()\n  store!: Store;\n\n  @Input()\n  columns!: Column[];\n\n  @Input()\n  expand_tracker: any;\n\n  @Input()\n  configs!: Configs;\n\n  @Input()\n  internal_configs: any;\n\n  constructor(private ngTreeGridService: NgtreegridService) {}\n\n  ngOnInit() {\n    this.columns.forEach((column) => {\n      this.search_values[column.name] = \"\";\n    });\n  }\n\n  filter() {\n    this.store.filterBy(\n      this.columns.map((column) => column.name),\n      Object.values(this.search_values)\n    );\n    this.ngTreeGridService.expandAll(this.expand_tracker);\n  }\n}\n","<td *ngIf=\"configs.multi_select\"></td>\n<td *ngIf=\"(configs.actions?.edit || configs.actions?.delete || configs.actions?.add)\"></td>\n<td *ngFor=\"let group_by of configs.group_by\"></td>\n<td *ngFor=\"let column of columns\">\n  <div *ngIf=\"column.filter\">\n    <input type=\"text\" (keyup)=\"filter()\" [(ngModel)]=\"search_values[column.name]\">\n  </div>\n</td>","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\nimport { Column } from \"../../../../models/Column.model\";\nimport { Configs } from \"../../../../models/Configs.model\";\nimport { Store } from \"../../../../store/store\";\n\n@Component({\n  selector: \"[db-tree-body]\",\n  templateUrl: \"./tree-body.component.html\",\n  styleUrls: [\"./tree-body.component.scss\"],\n})\nexport class TreeBodyComponent implements OnInit {\n  @Input()\n  store!: Store;\n\n  @Input()\n  expand_tracker!: any;\n\n  @Input()\n  edit_tracker!: any;\n\n  @Input()\n  columns!: Column[];\n\n  @Input()\n  configs!: Configs;\n\n  @Input()\n  internal_configs: any;\n\n  @Input()\n  rowdelete!: EventEmitter<any>;\n\n  @Input()\n  rowsave!: EventEmitter<any>;\n\n  @Input()\n  rowdeselect!: EventEmitter<any>;\n\n  @Input()\n  cellclick!: EventEmitter<any>;\n\n  loadingColspanCount = 0;\n\n  @Output() rowadd: EventEmitter<any> = new EventEmitter();\n  @Output() rowexpand: EventEmitter<any> = new EventEmitter();\n  @Output() rowcollapse: EventEmitter<any> = new EventEmitter();\n  @Output() rowselect: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {\n    this.loadingColspanCount = this.columns.length + 1;\n\n    if (this.configs.multi_select) {\n      this.loadingColspanCount++;\n    }\n\n    if (\n      this.configs.actions?.edit ||\n      this.configs.actions?.add ||\n      this.configs.actions?.delete\n    ) {\n      this.loadingColspanCount++;\n    }\n  }\n\n  fetchTraversedPaths(traversed_paths: any) {\n    const paths = traversed_paths.split(\".\");\n    let intermediate: any = this.store.processed_tree_data;\n\n    for (let i = 0; i < paths.length; i++) {\n      const path = paths[i];\n      intermediate = intermediate[path];\n    }\n\n    return intermediate;\n  }\n\n  expandRow(id: any, row: any) {\n    this.expand_tracker[id] = 1;\n\n    // If children is a parent and its value is empty then expand it automatically.\n    row.children &&\n      row.children.forEach((child: any) => {\n        const ids = child.split(\".\");\n        const last_child = ids[ids.length - 1];\n\n        // If empty!\n        if (this.isEmpty(last_child)) {\n          this.expand_tracker[child] = 1;\n        }\n      });\n\n    this.rowexpand.emit(row);\n  }\n\n  collapseRow(id: any, rec: any) {\n    this.expand_tracker[id] = 0;\n\n    // Collapse all of its children.\n    const keys = Object.keys(this.expand_tracker);\n    keys.forEach((key) => {\n      if (key.indexOf(id) !== -1) {\n        this.expand_tracker[key] = 0;\n      }\n    });\n    this.rowcollapse.emit(rec);\n  }\n\n  isEmpty(value: any) {\n    return value === \"\" || value === undefined || value === \"undefined\";\n  }\n\n  range(end: any) {\n    const array = [];\n    let current = 1;\n\n    while (current < end) {\n      array.push(current);\n      current += 1;\n    }\n    return array;\n  }\n\n  rowAdd(row: any) {\n    this.rowadd.emit(row);\n  }\n\n  saveRecord($event: any) {\n    const rec = $event.data;\n\n    if (this.configs.actions?.resolve_edit) {\n      const promise = new Promise((resolve, reject) => {\n        this.rowsave.emit({\n          data: rec,\n          resolve: resolve,\n        });\n      });\n\n      promise\n        .then(() => {\n          this.edit_tracker[rec[\"idx\"]] = false;\n        })\n        .catch((err) => {});\n    } else {\n      this.edit_tracker[rec[\"idx\"]] = false;\n      this.rowsave.emit(rec);\n    }\n  }\n\n  cancelEdit(row_data: any) {\n    const index = row_data[\"idx\"];\n    this.edit_tracker[index] = false;\n\n    // Cancel all changes ie copy from back up.\n    Object.assign(row_data, this.internal_configs.current_edited_row);\n  }\n\n  prepareRowClass(data: any) {\n    const row_class: any = { child: !data.parent };\n    if (this.configs.css?.parent_class) {\n      row_class[this.configs.css?.parent_class] = data.parent;\n    }\n    if (this.configs.css?.row_selection_class) {\n      row_class[this.configs.css?.row_selection_class] = data.row_selected;\n    }\n\n    return row_class;\n  }\n\n  selectRow(row_data: any, event: any) {\n    // Don't run if Multi select is enabled.\n    if (this.configs.multi_select) {\n      return;\n    }\n\n    if (row_data.parent) {\n      return;\n    }\n\n    this.store.processed_data.forEach((data) => {\n      data.row_selected = false;\n    });\n    row_data.row_selected = true;\n    this.rowselect.emit({ data: row_data, event: event });\n  }\n\n  selectRowOnCheck(row_data: any, event: any) {\n    if (!row_data.row_selected) {\n      row_data.row_selected = true;\n      this.rowselect.emit({ data: row_data, event: event });\n    } else {\n      row_data.row_selected = false;\n      this.rowdeselect.emit({ data: row_data, event: event });\n    }\n\n    this.setSelectAllConfig();\n  }\n\n  /**\n   * Set Select All config on Select change.\n   *\n   */\n  setSelectAllConfig() {\n    let select_all = true;\n\n    this.store.getDisplayData().forEach((data) => {\n      if (!data.row_selected) {\n        select_all = false;\n      }\n    });\n\n    this.internal_configs.all_selected = select_all;\n  }\n\n  showSelectBox(row_data: any) {\n    if (this.configs.row_select_function) {\n      return this.configs.row_select_function(row_data);\n    } else {\n      return true;\n    }\n  }\n}\n","<tr *ngIf=\"store.raw_data.length==0\">\n  <td [innerHTML]=\"configs.data_loading_text\" [attr.colspan]=\"loadingColspanCount\" style=\"text-align: center\"></td>\n</tr>\n<tr db-filter-row [columns]=\"columns\" [configs]=\"configs\" [store]=\"store\" [internal_configs]=\"internal_configs\"\n  *ngIf=\"configs.filter\" [expand_tracker]=\"expand_tracker\" [ngClass]=\"configs.css.row_filter_class\">\n</tr>\n<tr db-add-row [columns]=\"columns\" [configs]=\"configs\" [internal_configs]=\"internal_configs\" [store]=\"store\"\n  (rowadd)=\"rowAdd($event)\" *ngIf=\"internal_configs.show_add_row\">\n</tr>\n\n<tr *ngFor=\"let data of store.display_data\" [ngClass]=\"prepareRowClass(data)\" [attr.id]=\"data['idx']\"\n  (click)=\"selectRow(data, $event)\" class=\"{{configs?.row_class_function(data)}}\">\n\n  <!-- If parent text is empty then hide -->\n  <ng-container *ngIf=\"expand_tracker[data.parent_id] && data.parent && !isEmpty(data.node_text)\">\n    <td *ngIf=\"configs.multi_select\" class=\"checkbox_column\">\n      <!-- <input type=\"checkbox\" [checked]=\"data.row_selected\" (click)=\"selectRowOnCheck(data, $event)\"> -->\n    </td>\n    <td *ngIf=\"(configs.actions?.edit || configs.actions?.add || configs.actions?.delete)\"></td>\n    <!-- Leave left td for down level parents -->\n    <td *ngFor=\"let level of range(data.level)\" class=\"clear-right-border clear-left-border\"></td>\n    <td *ngIf=\"!expand_tracker[data.node_id]\" [ngClass]=\"{\n          'clear-right-border': true, \n          'clear-left-border': (configs.actions?.edit || configs.actions?.add || configs.actions?.delete)\n        }\">\n      <table class=\"expand-column-table\">\n        <tr>\n          <td>\n            <span (click)=\"expandRow(data.node_id, data)\" class=\"expand-icon-container\" title=\"Expand row\">\n              <i class=\"{{this.configs.css.expand_class}}\" aria-hidden=\"true\"></i>\n            </span>\n          </td>\n          <td>\n            <div class=\"parent-container\">\n              <db-tree-cell [cell_value]=\"data.node_text\" [row_data]=\"data\" [column]=\"configs.group_by_column\">\n              </db-tree-cell>\n            </div>\n          </td>\n        </tr>\n      </table>\n    </td>\n    <td *ngIf=\"expand_tracker[data.node_id]\" [ngClass]=\"{\n          'clear-right-border': true, \n          'clear-left-border': (configs.actions?.edit || configs.actions?.add || configs.actions?.delete)\n        }\">\n      <table class=\"expand-column-table\">\n        <tr>\n          <td>\n            <span (click)=\"collapseRow(data.node_id, data)\" class=\"expand-icon-container\" title=\"Collapse row\">\n              <i class=\"{{this.configs.css.collapse_class}}\" aria-hidden=\"true\"></i>\n            </span>\n          </td>\n          <td>\n            <div class=\"parent-container\">\n              <db-tree-cell [cell_value]=\"data.node_text\" [row_data]=\"data\" [column]=\"configs.group_by_column\">\n              </db-tree-cell>\n            </div>\n          </td>\n        </tr>\n      </table>\n    </td>\n    <!-- For parent levels add extra tds -->\n    <td *ngFor=\"let level of range(configs.group_by.length - data.level + 1)\"\n      class=\"clear-right-border clear-left-border\">\n    </td>\n    <td *ngFor=\"let column of columns\" [ngClass]=\"{'column-hide': column.hidden}\">\n      <ng-container *ngIf=\"column.group_aggregator && data.last_parent\">\n        <span [innerHTML]=\"column.group_aggregator(fetchTraversedPaths(data.node_id))\"></span>\n      </ng-container>\n      <ng-container *ngIf=\"column.group_component && data.last_parent\">\n        <db-tree-cell [cell_value]=\"data\" [row_data]=\"fetchTraversedPaths(data.node_id)\"\n          [column]=\"column.group_component\">\n        </db-tree-cell>\n      </ng-container>\n    </td>\n  </ng-container>\n  <ng-container *ngIf=\"expand_tracker[data.parent_id] && !data.parent\">\n    <td *ngIf=\"configs.multi_select\" class=\"checkbox_column\" (click)=\"selectRowOnCheck(data, $event)\">\n      <input type=\"checkbox\" [checked]=\"data.row_selected\" *ngIf=\"showSelectBox(data)\">\n    </td>\n    <td db-tree-cell-actions *ngIf=\"configs.actions?.edit || configs.actions?.delete || configs.actions?.add\"\n      [data]=\"data\" [configs]=\"configs\" [store]=\"store\" [edit_tracker]=\"edit_tracker\" [rowdelete]=\"rowdelete\"\n      [internal_configs]=\"internal_configs\" (canceledit)=\"cancelEdit($event)\" (editcomplete)=\"saveRecord($event)\">\n    </td>\n    <td [ngClass]=\"{\n        'clear-right-border': true, \n        'clear-left-border': (configs.actions?.edit || configs.actions?.add || configs.actions?.delete)\n      }\" *ngFor=\"let header of configs.group_by\">\n    </td>\n    <td class=\"clear-left-border\" *ngFor=\"let column of columns\" [ngClass]=\"{'column-hide': column.hidden}\">\n      <db-tree-cell [cell_value]=\"data[column.name]\" [row_data]=\"data\" [column]=\"column\" [cellclick]=\"cellclick\"\n        [edit_on]=\"edit_tracker[data['idx']]\" (canceledit)=\"cancelEdit($event)\" (editcomplete)=\"saveRecord($event)\">\n      </db-tree-cell>\n    </td>\n  </ng-container>\n\n</tr>","import { Component, OnInit, Input, EventEmitter, Output } from \"@angular/core\";\nimport { Column } from \"../../../../models/Column.model\";\nimport { Configs } from \"../../../../models/Configs.model\";\nimport { Store } from \"../../../../store/store\";\n\n@Component({\n  selector: \"[db-tree-head]\",\n  templateUrl: \"./tree-head.component.html\",\n  styleUrls: [\"./tree-head.component.scss\"],\n})\nexport class TreeHeadComponent implements OnInit {\n  @Input()\n  store!: Store;\n\n  @Input()\n  columns!: Column[];\n\n  @Input()\n  configs!: Configs;\n\n  @Input()\n  internal_configs: any;\n\n  @Output() sortcolumn: EventEmitter<any> = new EventEmitter();\n\n  show_add_row: boolean = false;\n\n  @Input()\n  rowselectall!: EventEmitter<any>;\n\n  @Input()\n  rowdeselectall!: EventEmitter<any>;\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  addRow() {\n    this.internal_configs.show_add_row = true;\n  }\n\n  sortColumn(column: Column) {\n    this.sortcolumn.emit(column);\n  }\n\n  selectAll(e: any) {\n    if (e.target.checked) {\n      this.store.selectAll();\n      this.rowselectall.emit(e);\n    } else {\n      this.store.deSelectAll();\n      this.rowdeselectall.emit(e);\n    }\n  }\n}\n","<tr [ngClass]=\"configs.css.header_class\">\n  <th *ngIf=\"configs.multi_select\" class=\"checkbox_column\" [attr.width]=\"configs.multi_select_width\">\n    <input type=\"checkbox\" (click)=\"selectAll($event)\" [checked]=\"this.internal_configs.all_selected\">\n  </th>\n  <th *ngIf=\"configs.actions?.add || configs.actions?.edit || configs.actions?.delete\" class=\"action-column\"\n    width=\"{{configs.action_column_width}}\" (click)=\"addRow()\">\n    <span class=\"icon-container\">\n      <i *ngIf=\"!internal_configs.show_add_row && configs.actions?.add\" [ngClass]=\"configs.css.add_class\"\n        aria-hidden=\"true\" title=\"Add a row\"></i>\n      <span *ngIf=\"internal_configs.show_add_row || !configs.actions?.add\">Actions</span>\n    </span>\n  </th>\n  <th class=\"clear-right-border group-by-column\" [attr.width]=\"configs.group_by_width && configs!.group_by_width[i]\"\n    *ngFor=\"let header of configs.group_by_header; let i = index\">\n    {{header}}\n  </th>\n  <th *ngFor=\"let column of columns\" (click)=\"sortColumn(column)\" [attr.width]=\"column.width\"\n    [ngClass]=\"{'sorted': column.sorted,'sortable': column.sortable, 'column-hide': column.hidden}\">\n    <span>{{column.header}}</span>\n    <span *ngIf=\"column.sortable\"\n      [ngClass]=\"column.sorted && column.sort_type == false?'arrow-down active':'arrow-down'\"></span>\n    <span *ngIf=\"column.sortable\"\n      [ngClass]=\"column.sorted && column.sort_type == true?'arrow-up active':'arrow-up'\"></span>\n  </th>\n</tr>","import {\n  Component,\n  Input,\n  OnChanges,\n  EventEmitter,\n  Output,\n} from \"@angular/core\";\nimport { Column } from \"./models/Column.model\";\nimport { Configs } from \"./models/Configs.model\";\nimport { NgtreegridService } from \"./ngtreegrid.service\";\nimport { Store } from \"./store/store\";\n\n@Component({\n  selector: \"db-ngtreegrid\",\n  templateUrl: \"./ngtreegrid.component.html\",\n  styleUrls: [\"./ngtreegrid.component.scss\"],\n})\nexport class NgtreegridComponent implements OnChanges {\n  expand_tracker: Object = {}; // Track Expand or collapse.\n  columns: Column[] = []; // Contains all column objects.\n  edit_tracker: Object = {}; // Track Edit options.\n  internal_configs: any = {\n    show_add_row: false,\n  };\n  default_configs: Configs = {\n    columns: [],\n    css: {\n      expand_class: \"plus\",\n      collapse_class: \"minus\",\n      add_class: \"plus\",\n      edit_class: \"\",\n      delete_class: \"\",\n      save_class: \"\",\n      cancel_class: \"\",\n      row_selection_class: \"selected\",\n      header_class: \"\",\n      parent_class: \"parent\",\n      row_filter_class: \"\",\n    },\n    actions: {\n      edit: false,\n      add: false,\n      delete: false,\n      resolve_edit: false,\n      resolve_add: false,\n      resolve_delete: false,\n    },\n    data_loading_text: \"Loading...\",\n    group_by: [],\n    group_by_header: [],\n    action_column_width: \"50px\",\n    filter: false,\n    multi_select: false,\n    group_by_width: [],\n    multi_select_width: \"auto\",\n    row_class_function: () => \"\",\n    row_edit_function: () => true,\n    row_delete_function: () => true,\n    row_select_function: () => true,\n  };\n  default_column_config: Column = {\n    name: \"\",\n    sorted: 0,\n    sort_type: null,\n    editable: false,\n    hidden: false,\n    filter: true,\n    case_sensitive_filter: false,\n    sortable: true,\n  };\n  store = new Store(this.ngtreegridService);\n\n  @Output() expand: EventEmitter<any> = new EventEmitter();\n  @Output() collapse: EventEmitter<any> = new EventEmitter();\n  @Output() cellclick: EventEmitter<any> = new EventEmitter();\n  @Output() rowselect: EventEmitter<any> = new EventEmitter();\n  @Output() rowdeselect: EventEmitter<any> = new EventEmitter();\n  @Output() rowselectall: EventEmitter<any> = new EventEmitter();\n  @Output() rowdeselectall: EventEmitter<any> = new EventEmitter();\n  @Output() rowadd: EventEmitter<any> = new EventEmitter();\n  @Output() rowsave: EventEmitter<any> = new EventEmitter();\n  @Output() rowdelete: EventEmitter<any> = new EventEmitter();\n\n  @Input()\n  data: any[] = [];\n\n  @Input()\n  configs!: Configs;\n\n  constructor(private ngtreegridService: NgtreegridService) {}\n\n  ngOnChanges() {\n    this.setDefaultConfigs();\n    this.setColumnNames();\n\n    // If there is no data then do nothing.\n    if (!(this.data && this.data.length > 0)) {\n      window.console.warn(\"Data should not be empty!\");\n      return;\n    }\n\n    this.store.groupData(\n      this.data,\n      this.configs,\n      this.internal_configs,\n      this.edit_tracker,\n      this.expand_tracker\n    );\n  }\n\n  setDefaultConfigs() {\n    this.store.processed_data = [];\n    this.store.processed_tree_data = {};\n    this.configs = Object.assign({}, this.default_configs, this.configs);\n\n    // Deep clone.\n    this.configs.actions = Object.assign(\n      {},\n      this.default_configs.actions,\n      this.configs.actions\n    );\n    this.configs.css = Object.assign(\n      {},\n      this.default_configs.css,\n      this.configs.css\n    );\n\n    if (!this.configs.group_by) {\n      window.console.error(\"group_by field is mandatory!\");\n    } else if (!Array.isArray(this.configs.group_by)) {\n      this.configs.group_by = [this.configs.group_by];\n    }\n\n    // Set default header for group_by field.\n    if (!this.configs.group_by_header) {\n      this.configs.group_by_header = this.configs.group_by;\n    } else {\n      if (!Array.isArray(this.configs.group_by_header)) {\n        this.configs.group_by_header = [this.configs.group_by_header];\n      }\n\n      if (\n        this.configs.group_by_header.length !== this.configs.group_by.length\n      ) {\n        this.configs.group_by_header = this.configs.group_by;\n      }\n    }\n\n    // Set default width for group_by field.\n    if (!this.configs.group_by_width) {\n      this.configs.group_by_width = this.configs.group_by.map((_) => \"auto\");\n    } else {\n      if (!Array.isArray(this.configs.group_by_width)) {\n        this.configs.group_by_width = [this.configs.group_by_width];\n      }\n\n      if (this.configs.group_by_width.length !== this.configs.group_by.length) {\n        this.configs.group_by_width = this.configs.group_by.map((_) => \"auto\");\n      }\n    }\n  }\n\n  setColumnNames() {\n    this.columns = this.configs.columns ? this.configs.columns : [];\n\n    // If columns doesn't exist in user's object.\n    if (!this.configs.columns) {\n      const column_keys = Object.keys(this.data[0]);\n\n      // Remove group by key.\n      this.configs.group_by.forEach((key) => {\n        column_keys.splice(column_keys.indexOf(key), 1);\n      });\n\n      // Insert Header and default configuration.\n      column_keys.forEach((key) => {\n        this.columns.push(\n          Object.assign({ header: key, name: key }, this.default_column_config)\n        );\n      });\n    } else {\n      // Insert Header and default configuration.\n      for (let i = 0; i < this.columns.length; i++) {\n        this.columns[i] = Object.assign(\n          {},\n          this.default_column_config,\n          this.columns[i]\n        );\n      }\n    }\n\n    if (!this.configs.group_by_column) {\n      this.configs.group_by_column = Object.assign(\n        {},\n        this.default_column_config\n      );\n    }\n  }\n\n  onExpandRow(row: any) {\n    this.expand.emit(row);\n  }\n\n  onCollapseRow(rec: any) {\n    this.collapse.emit(rec);\n  }\n\n  onRowSelect(row: any) {\n    this.rowselect.emit(row);\n  }\n\n  sortColumn(column: Column) {\n    if (!column.sortable) {\n      return;\n    }\n    // If already sorted then reverse.\n    column.sort_type = column.sorted ? !column.sort_type : true;\n    column.sorted = 1;\n\n    this.internal_configs.current_sorted_column = column;\n\n    // Sort array.\n    this.store.processData(\n      column.sort_type,\n      column.name,\n      this.edit_tracker,\n      this.expand_tracker\n    );\n  }\n\n  addRowToGrid() {\n    this.store.processed_tree_data = {};\n    this.edit_tracker = {};\n    this.store.groupData(\n      this.data,\n      this.configs,\n      this.internal_configs,\n      this.edit_tracker,\n      this.expand_tracker\n    );\n  }\n\n  onRowAdd(rec: any) {\n    if (this.configs?.actions?.resolve_delete) {\n      const promise = new Promise((resolve, reject) => {\n        this.rowadd.emit({\n          data: rec,\n          resolve: resolve,\n        });\n      });\n\n      promise\n        .then(() => {\n          this.addRowToGrid();\n        })\n        .catch((err) => {});\n    } else {\n      this.addRowToGrid();\n      this.rowadd.emit(rec);\n    }\n  }\n\n  expandAll() {\n    this.ngtreegridService.expandAll(this.expand_tracker);\n  }\n\n  collapseAll() {\n    this.ngtreegridService.collapseAll(this.expand_tracker);\n  }\n\n  selectAll() {\n    this.store.selectAll();\n    this.internal_configs.all_selected = true;\n  }\n\n  deSelectAll() {\n    this.store.deSelectAll();\n    this.internal_configs.all_selected = false;\n  }\n}\n","<table class=\"db-tree-grid\">\n    <thead db-tree-head\n      [columns]=\"columns\" \n      [configs]=\"configs\" \n      [internal_configs]=\"internal_configs\"\n      [store]=\"store\"\n      [rowselectall]=\"rowselectall\"\n      [rowdeselectall]=\"rowdeselectall\"\n      (sortcolumn)=\"sortColumn($event)\">\n    </thead>\n    \n    <tbody db-tree-body\n      [columns]=\"columns\" \n      [configs]=\"configs\" \n      [internal_configs]=\"internal_configs\"\n      [store]=\"store\"\n      [expand_tracker]=\"expand_tracker\" \n      [edit_tracker]=\"edit_tracker\"\n      [rowsave]=\"rowsave\"\n      [rowdelete]=\"rowdelete\"\n      [cellclick]=\"cellclick\"\n      (rowselect)=\"onRowSelect($event)\"\n      [rowdeselect]=\"rowdeselect\"\n      (rowexpand)=\"onExpandRow($event)\"\n      (rowcollapse)=\"onCollapseRow($event)\"\n      (rowadd)=\"onRowAdd($event)\">\n    </tbody>   \n    \n  </table>\n  ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TreeCellViewComponent } from './components/tree-cell-view/default/tree-cell-view.component';\nimport { CustomCellViewComponent } from './components/tree-cell-view/custom/custom-tree-cell.component';\nimport { CustomCellEditorComponent } from './components/tree-cell-editor/custom/custom-tree-cell-Editor.component';\nimport { TreeCellEditorComponent } from './components/tree-cell-editor/default/cell-editor/tree-cell-editor.component';\nimport { TreeCellActionsComponent } from './components/tree-cell-actions/tree-cell-actions.component';\nimport { TreeCellComponent } from './tree-cell.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  declarations: [\n    TreeCellComponent,\n    TreeCellViewComponent,\n    CustomCellViewComponent,\n    CustomCellEditorComponent,\n    TreeCellEditorComponent,\n    TreeCellActionsComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    TreeCellComponent,\n    CustomCellViewComponent,\n    CustomCellEditorComponent,\n    TreeCellEditorComponent,\n    TreeCellActionsComponent\n  ]\n})\nexport class CellModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeBodyComponent } from './components/tree-body/tree-body.component';\nimport { CellModule } from '../cell/cell.module';\nimport { AddRowComponent } from './components/add-row/add-row.component';\nimport { FilterRowComponent } from './components/filter-row/filter-row.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n  declarations: [TreeBodyComponent, AddRowComponent, FilterRowComponent],\n  imports: [\n    CommonModule,\n    CellModule,\n    FormsModule\n  ],\n  exports: [TreeBodyComponent, AddRowComponent]\n})\nexport class BodyModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeHeadComponent } from './components/tree-head/tree-head.component';\n\n@NgModule({\n  declarations: [TreeHeadComponent],\n  imports: [\n    CommonModule\n  ],\n  exports: [TreeHeadComponent]\n})\nexport class HeadModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtreegridComponent } from './ngtreegrid.component';\nimport { BodyModule } from './modules/body/body.module';\nimport { HeadModule } from './modules/head/head.module';\n\n@NgModule({\n  declarations: [NgtreegridComponent],\n  imports: [\n    CommonModule,\n    BodyModule,\n    HeadModule\n  ],\n  exports: [NgtreegridComponent]\n})\nexport class NgtreegridModule { }\n\nexport {DefaultEditor} from './modules/cell/components/tree-cell-editor/default/default-editor.component';\n","/*\n * Public API Surface of ngtreegrid\n */\n\nexport * from './lib/ngtreegrid.service';\nexport * from './lib/ngtreegrid.component';\nexport * from './lib/ngtreegrid.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TreeCellViewComponent","i3.CustomCellViewComponent","i4.CustomCellEditorComponent","i5.TreeCellEditorComponent","i2.CustomCellEditorComponent","i3.TreeCellEditorComponent","i4","i1.NgtreegridService","i2","i3","i2.TreeCellComponent","i3.TreeCellActionsComponent","i4.AddRowComponent","i5.FilterRowComponent","i2.TreeBodyComponent","i3.TreeHeadComponent"],"mappings":"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"}