ngm-tree-grid
Version:
A tree grid that supports editable fields like Inputs and Checkboxes.
1 lines • 23.3 kB
Source Map (JSON)
{"version":3,"file":"ngm-tree-grid.mjs","sources":["../../../projects/ngm-tree-grid/src/lib/ngm-tree-grid.service.ts","../../../projects/ngm-tree-grid/src/lib/directive/cell-host.directive.ts","../../../projects/ngm-tree-grid/src/lib/components/tree-grid-item/tree-grid-item.component.ts","../../../projects/ngm-tree-grid/src/lib/components/tree-grid-item/tree-grid-item.component.html","../../../projects/ngm-tree-grid/src/lib/components/tree-grid/tree-grid.component.ts","../../../projects/ngm-tree-grid/src/lib/components/tree-grid/tree-grid.component.html","../../../projects/ngm-tree-grid/src/lib/ngm-tree-grid.module.ts","../../../projects/ngm-tree-grid/src/lib/model/datasource-model.ts","../../../projects/ngm-tree-grid/src/public-api.ts","../../../projects/ngm-tree-grid/src/ngm-tree-grid.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgmTreeGridService {\r\n\r\n constructor() { }\r\n}\r\n","import { Directive, ViewContainerRef, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ngmCellHost]'\r\n})\r\nexport class CellHostDirective {\r\n\r\n constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) { }\r\n\r\n}\r\n","import { AfterContentInit, Component, EventEmitter, Input, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { CellHostDirective } from '../../directive/cell-host.directive';\r\nimport { INgmExpansion, INgmTreeGridConfig } from '../../model';\r\n\r\n@Component({\r\n selector: 'ngm-tree-grid-item',\r\n templateUrl: './tree-grid-item.component.html',\r\n styleUrls: ['./tree-grid-item.component.scss']\r\n})\r\nexport class TreeGridItemComponent implements AfterContentInit {\r\n /** The level of node */\r\n @Input() level = 1;\r\n @Input() data: any[] = [];\r\n @Input()\r\n config: INgmTreeGridConfig = {\r\n hasSearch: true,\r\n columns: [],\r\n searchFn: (obj: any, txt: string) => {\r\n return Object.values(obj)\r\n .filter((x: any) => (typeof x === 'string' || typeof x === 'number'))\r\n .map(x => String(x))\r\n .some((y: string) => y.includes(txt))\r\n }\r\n }\r\n @Input() getChildrenFn: (obj: any) => any[] = (obj: any) => {\r\n return obj['children'];\r\n };\r\n\r\n @Output()\r\n expand = new EventEmitter<INgmExpansion>();\r\n\r\n @Output()\r\n collapse = new EventEmitter<INgmExpansion>();\r\n\r\n @Input() cellInputs: any;\r\n\r\n\r\n @ViewChildren(CellHostDirective) cellPanes!: QueryList<CellHostDirective>;\r\n\r\n\r\n constructor() { }\r\n\r\n openItem(item: any) {\r\n item['isOpen'] = true;\r\n this.expand.emit({\r\n item,\r\n level: this.level\r\n })\r\n }\r\n closeItem(item: any) {\r\n item['isOpen'] = false;\r\n this.collapse.emit({\r\n item,\r\n level: this.level\r\n })\r\n }\r\n\r\n onExpand(e: INgmExpansion) {\r\n this.expand.emit(e)\r\n }\r\n\r\n onCollapse(e: INgmExpansion) {\r\n this.collapse.emit(e)\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n setTimeout(() => {\r\n this.cellPanes.forEach((x, i) => {\r\n x.viewContainerRef.clear();\r\n x.viewContainerRef.createEmbeddedView(this.cellInputs.get(i % this.cellInputs.length)!, {\r\n $implicit: this.data[Math.floor(i / this.cellInputs.length)]\r\n })\r\n });\r\n }, 10);\r\n }\r\n\r\n\r\n}\r\n","<ng-container>\r\n <div *ngFor=\"let item of data\">\r\n <div class=\"ngm-tree-grid-row\">\r\n <div class=\"ngm-tree-grid-items\">\r\n <div\r\n class=\"ngm-tree-grid-cell\"\r\n *ngFor=\"let column of cellInputs.toArray(); let first = first; let index = index\"\r\n [ngStyle]=\"{\r\n width: config.columns[index].width ? config.columns[index].width + '%' : 100 / (cellInputs.toArray().length) + '%'\r\n }\"\r\n >\r\n <div\r\n class=\"ngm-tree-grid-main\"\r\n *ngIf=\"first\"\r\n [ngStyle]=\"{ 'margin-left': level * 20 + 'px' }\"\r\n >\r\n <div\r\n class=\"ngm-tree-grid-main-icon arrow_up\"\r\n *ngIf=\"\r\n getChildrenFn(item) &&\r\n getChildrenFn(item).length > 0 &&\r\n item.isOpen\r\n \"\r\n (click)=\"closeItem(item)\"\r\n ></div>\r\n <div\r\n *ngIf=\"\r\n getChildrenFn(item) &&\r\n getChildrenFn(item).length > 0 &&\r\n !item.isOpen\r\n \"\r\n (click)=\"openItem(item)\"\r\n class=\"ngm-tree-grid-main-icon arrow_right\"\r\n ></div>\r\n <div\r\n *ngIf=\"!getChildrenFn(item) || getChildrenFn(item).length == 0\"\r\n class=\"ngm-tree-grid-main-icon dash\"\r\n ></div>\r\n <ng-template ngmCellHost></ng-template>\r\n <!-- </span> -->\r\n </div>\r\n <ng-template ngmCellHost *ngIf=\"!first\"></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getChildrenFn(item) && item.isOpen\">\r\n <ngm-tree-grid-item\r\n [data]=\"getChildrenFn(item)\"\r\n [config]=\"config\"\r\n [level]=\"level + 1\"\r\n [getChildrenFn]=\"getChildrenFn\"\r\n (expand)=\"onExpand($event)\"\r\n (collapse)=\"onCollapse($event)\"\r\n [cellInputs]=\"cellInputs\"\r\n ></ngm-tree-grid-item>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { Component, ContentChildren, EventEmitter, Input, Output, QueryList, TemplateRef, ViewChildren } from '@angular/core';\r\nimport { CellHostDirective } from '../../directive';\r\nimport { INgmExpansion } from '../../model';\r\nimport { INgmDataSource } from './../../model/datasource-model';\r\nimport { INgmTreeGridConfig } from './../../model/tree-grid-config';\r\n\r\n@Component({\r\n selector: 'ngm-tree-grid',\r\n templateUrl: './tree-grid.component.html',\r\n styleUrls: ['./tree-grid.component.scss']\r\n})\r\nexport class TreeGridComponent<T> {\r\n /** When user clicks on arrow to expand a row, this emitter emits an event */\r\n @Output()\r\n expand = new EventEmitter<INgmExpansion>();\r\n\r\n /** When user clicks on arrow to collapse a row, this emitter emits an event */\r\n @Output()\r\n collapse = new EventEmitter<INgmExpansion>();\r\n\r\n @Input()\r\n dataSource!: INgmDataSource<T>;\r\n\r\n @Input()\r\n config: INgmTreeGridConfig = {\r\n hasSearch: true,\r\n columns: [],\r\n searchPlaceHolder: 'Search',\r\n searchFn: (obj: any, txt: string) => {\r\n return Object.values(obj)\r\n .filter((x: any) => (typeof x === 'string' || typeof x === 'number'))\r\n .map(x => String(x))\r\n .some((y: string) => y.includes(txt))\r\n }\r\n }\r\n\r\n @ContentChildren('treeGridCell') cellContents!: QueryList<TemplateRef<any>>;\r\n @ContentChildren('treeGridHeader') headerContents?: QueryList<TemplateRef<any>>;\r\n @ViewChildren(CellHostDirective) headerPanes!: QueryList<CellHostDirective>;\r\n\r\n filterText = '';\r\n filteredData: T[] = [];\r\n\r\n showGrid = true;\r\n\r\n constructor() { }\r\n\r\n ngAfterContentInit(): void {\r\n setTimeout(() => {\r\n if(this.headerContents) {\r\n this.headerPanes.forEach((x, i) => {\r\n x.viewContainerRef.clear();\r\n x.viewContainerRef.createEmbeddedView(this.headerContents!.get(i % this.headerContents!.length)!)\r\n });\r\n }\r\n }, 10);\r\n }\r\n\r\n onExpand(e: INgmExpansion) {\r\n this.expand.emit(e)\r\n }\r\n\r\n onCollapse(e: INgmExpansion) {\r\n this.collapse.emit(e)\r\n }\r\n\r\n refreshGrid() {\r\n this.showGrid = false;\r\n setTimeout(() => {\r\n this.showGrid = true\r\n }, 0);\r\n }\r\n\r\n onSearch(text: string) {\r\n if (typeof text === 'string' && text != '') {\r\n this.filterText = text\r\n } else {\r\n this.filterText = ''\r\n }\r\n if (!this.config.searchFn) {\r\n throw new Error('You should Provide searchFn')\r\n }\r\n this.refreshGrid();\r\n this.filterTree();\r\n }\r\n\r\n ///////////////////////////////////////////////////////////////////////////\r\n /////////////////////********************************/////////////////////\r\n ///////////********** Start Filtering **********///////////\r\n /**\r\n * There are two important things to consider in a tree search..\r\n * If a node contains that search, It should be in final result.\r\n * If a node doesn't contain the searched text, but its children do, It should also be in final result.\r\n * Otherwise it should be filtered out of the result.\r\n */\r\n filterTree() {\r\n if (this.dataSource.data && this.filterText) {\r\n this.filteredData = [...this.dataSource.data]\r\n .filter((item) =>\r\n this.hasIncludedSearchTextInChildren(item, this.filterText)\r\n )\r\n .map((item) => this.filtering(item, this.filterText));\r\n } else {\r\n this.filteredData = [...this.dataSource.data];\r\n }\r\n }\r\n\r\n filtering(node: T, text: string): T {\r\n return {\r\n ...node,\r\n isOpen: true,\r\n show: true,\r\n nodes: this.dataSource.getChildrenFn(node)\r\n ?.filter((item) => this.hasIncludedSearchTextInChildren(item, text))\r\n .map((item) => this.filtering(item, text)),\r\n };\r\n }\r\n\r\n hasIncludedSearchTextInChildren(node: any, searchText: string): boolean {\r\n if (this.config.searchFn!(node, searchText)) {\r\n return true;\r\n }\r\n if (this.dataSource.getChildrenFn(node)) {\r\n return this.dataSource.getChildrenFn(node).some((child: any) =>\r\n this.hasIncludedSearchTextInChildren(child, searchText)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /////////////********** End Filtering **********////////////\r\n /////////////////////********************************/////////////////////\r\n //////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\r\n}\r\n","<div class=\"ngm-tree-grid\">\r\n <header>\r\n <div class=\"tree-grid-search\" *ngIf=\"config.hasSearch\">\r\n <ngm-live-search\r\n [searchLabel]=\"config.searchPlaceHolder ?? 'Search'\"\r\n (search)=\"onSearch($event)\"\r\n >\r\n </ngm-live-search>\r\n </div>\r\n </header>\r\n <main>\r\n <div class=\"tree-grid-titles\">\r\n <ng-container *ngIf=\"headerContents\">\r\n <div *ngFor=\"let head of headerContents; index as i\"\r\n [ngStyle]=\"{\r\n width: config.columns[i].width\r\n ? config.columns[i].width + '%'\r\n : 100 / config.columns.length + '%'\r\n }\">\r\n <ng-template ngmCellHost></ng-template>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!headerContents\">\r\n <div\r\n *ngFor=\"let head of config.columns; let first = first\"\r\n [ngStyle]=\"{\r\n width: head.width\r\n ? head.width + '%'\r\n : 100 / config.columns.length + '%'\r\n }\"\r\n >\r\n {{ head.header }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ngm-tree-grid-item\r\n *ngIf=\"showGrid\"\r\n [data]=\"filterText === '' ? dataSource.data : filteredData\"\r\n [config]=\"config\"\r\n (expand)=\"onExpand($event)\"\r\n (collapse)=\"onCollapse($event)\"\r\n [getChildrenFn]=\"dataSource.getChildrenFn\"\r\n [cellInputs]=\"cellContents\"\r\n >\r\n </ngm-tree-grid-item>\r\n </main>\r\n <footer></footer>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { NgmLiveSearchModule } from 'ngm-live-search';\r\nimport { TreeGridItemComponent } from './components/tree-grid-item/tree-grid-item.component';\r\nimport { TreeGridComponent } from './components/tree-grid/tree-grid.component';\r\nimport { CellHostDirective } from './directive/cell-host.directive';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n TreeGridComponent,\r\n TreeGridItemComponent,\r\n CellHostDirective\r\n ],\r\n imports: [\r\n CommonModule,\r\n NgmLiveSearchModule\r\n ],\r\n exports: [\r\n TreeGridComponent,\r\n TreeGridItemComponent\r\n ]\r\n})\r\nexport class NgmTreeGridModule { }\r\n","export interface INgmDataSource<T = {}> {\r\n data: T[];\r\n getChildrenFn: (obj: T) => T[];\r\n}\r\n\r\n\r\nexport class NgmDataSource<T> implements INgmDataSource<T> {\r\n data: T[] = [];\r\n getChildrenFn: (obj: T) => T[] = (obj: any) => {\r\n return obj['children'];\r\n };\r\n\r\n constructor(data?: T[], getChildrenFn?: (obj: T) => T[]) {\r\n if (isNotFalsy(data))\r\n this.data = data;\r\n if (isNotFalsy(getChildrenFn))\r\n this.getChildrenFn = getChildrenFn;\r\n }\r\n}\r\n\r\n\r\nexport function isNotFalsy<T>(value: T | undefined): value is T {\r\n return !!value;\r\n}\r\n","/*\r\n * Public API Surface of ngm-tree-grid\r\n */\r\n\r\nexport * from './lib/ngm-tree-grid.service';\r\nexport * from './lib/ngm-tree-grid.module';\r\nexport * from './lib/components';\r\nexport * from './lib/directive';\r\nexport * from './lib/model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CellHostDirective","i3.TreeGridItemComponent","i4.CellHostDirective"],"mappings":"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"}