UNPKG

@kassdoug/tableadv

Version:

Componente Angular 16+ para criação de uma table com amis recursos. Projeto com base na ideia da lib DataTables

314 lines 70.4 kB
import { Component, Input, Output, EventEmitter, ViewChildren, QueryList, ViewEncapsulation, } from '@angular/core'; import * as Notiflix from 'notiflix'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/forms"; import * as i3 from "../cell/cell.component"; import * as i4 from "../IndividualFilterInput/IndividualFilterInput.component"; export class TableComponent { /** Constructor -------------------------------------------------------------------- */ constructor(renderer) { this.renderer = renderer; this.driver = 'laravel-eloquent'; // chave simbolica para determinar o uso do componente com backend em laravel com eloquent this.version = '1.2.3'; this.message = ''; /** Define o estado da tabela maximizado ou normal */ this.screenMaximize = false; /** Registra o total de paginas geradas */ this.totalPages = 0; this.totalPagesArray = []; /** Registra a pagina atual */ this.actualPage = 1; /** Registra a última pagina */ this.lastPage = 0; /** Quantidade de links a exibir na navegação para frente e tras em relação a pagina atual */ this.navigationLimitPages = 3; /** Registra o total de registros na tabela */ this.totalRegisters = 0; /** Total de registros POR página */ this.totalRegisterPerPage = 5; /** Total de registros NA página */ this.totalRegisterInPage = 0; /** Determina se o header da tabela é fixo ou não */ this.isFixed = false; /** Define o total de registros por pagina inicial */ this.registers_per_page_initial = 5; /** Filtros dos dados para o backend */ this.orderby = { db: 'id' }; this.orderdirection = 'asc'; this.whereColumn = null; this.whereValue = null; this.whereIndividual = []; /** Dados externos */ this.data = null; this.gridHeader = null; /** Envia solicitação */ this.onGetData = new EventEmitter(); this.elementsOrder = new QueryList(); } /** Cycles -------------------------------------------------------------------- */ ngOnInit() { this.totalRegisterPerPage = this.registers_per_page_initial; } ngOnChanges(changes) { this.data = changes['data'].currentValue; if (this.data !== null && this.data !== undefined) this.config(); // this.CONSOLE(); } ngAfterViewInit() { this.emitGetData(); } /** Methods -------------------------------------------------------------------- */ /** Debug de todas props */ CONSOLE() { console.log(`---------------------------CONSOLE TABLE ${this.id}---------------------------`); console.log('data', this.data); console.log('driver', this.driver); console.log('screenMaximize', this.screenMaximize); console.log('totalPages', this.totalPages); console.log('totalPagesArray', this.totalPagesArray); console.log('actualPage', this.actualPage); console.log('lastPage', this.lastPage); console.log('totalRegisters', this.totalRegisters); console.log('totalRegisterPerPage', this.totalRegisterPerPage); console.log('navigationLimitPages', this.navigationLimitPages); console.log('gridHeader', this.gridHeader); console.log('isFixed', this.isFixed); console.log('orderby', this.orderby); console.log('orderdirection', this.orderdirection); console.log('whereColumn', this.whereColumn); console.log('whereValue', this.whereValue); console.log('whereIndividual', this.whereIndividual); console.log('---------------------------FIM CONSOLE TABLE---------------------------'); } /** Adiciona um loader */ loading() { this.message = ''; Notiflix.Block.init({ svgColor: '#4551cc', backgroundColor: 'rgba(255, 255, 255, .7)', }); Notiflix.Block.dots(`#gd-container-${this.id}`); } /** Remove o loader */ removeLoading() { setTimeout(() => { Notiflix.Block.remove(`#gd-container-${this.id}`); if (this.data == null) { this.data = null; this.totalRegisters = 0; this.totalRegisterInPage = 0; this.message = 'Nenhuma informação carregada'; } }, 2000); } /** Configura os dados */ config() { if (this.data.hasOwnProperty('data')) { if (this.data.data.length == 0) { this.data = null; this.totalRegisters = 0; this.totalRegisterInPage = 0; this.message = 'Nenhuma informação carregada'; } else { this.totalRegisters = this.data.total; this.totalRegisterInPage = this.data.length; } this.setTotalPages(); } } /** Emit um evento para carregar os dados */ emitGetData() { this.loading(); let offset = this.totalRegisterPerPage == this.totalRegisterInPage ? this.actualPage * this.totalRegisterInPage - this.totalRegisterInPage : this.actualPage * this.totalRegisterPerPage - this.totalRegisterPerPage; this.onGetData.emit({ id: this.id, limit: this.totalRegisterPerPage, offset: offset, orderby: this.orderby, orderdirection: this.orderdirection, whereColumn: this.whereColumn, whereValue: this.whereValue, whereIndividual: this.whereIndividual, }); this.removeLoading(); } /** Evento de maximizar a tela e voltar ao normal */ maximizeToggle() { this.screenMaximize = !this.screenMaximize; if (this.screenMaximize) { this.renderer.setStyle(document.body, 'overflow', 'hidden'); } else { this.renderer.removeStyle(document.body, 'overflow'); } } /** Gera um array com o total de paginas */ setTotalPages() { let tot = this.totalRegisters / this.totalRegisterPerPage; this.totalPages = tot <= 1 ? 1 : Math.ceil(tot); this.lastPage = this.totalPages; this.totalPagesArray = Array.from({ length: this.totalPages }, (_, i) => i + 1); this.totalPagesArray = this.totalPagesArray.filter((pg) => { if (pg < this.actualPage && pg >= this.actualPage - this.navigationLimitPages) { return pg; } if (this.actualPage == pg) { return pg; } if (pg > this.actualPage && pg <= this.actualPage + this.navigationLimitPages) { return pg; } return null; }); } /** Seta a pagina atual */ setActualPage(page) { this.actualPage = page; this.setTotalPages(); this.emitGetData(); } /** Seta na primeira página */ setFirstPage() { this.actualPage = 1; this.setTotalPages(); this.emitGetData(); } /** Seta para a página anterior */ setBeforePage() { this.actualPage = this.actualPage - 1; this.setTotalPages(); this.emitGetData(); } /** Seta para a proxiuma página */ setNextPage() { this.actualPage = this.actualPage + 1; this.setTotalPages(); this.emitGetData(); } /** Seta para a ulimta página */ setLastPage() { this.actualPage = this.lastPage; this.setTotalPages(); this.emitGetData(); } /** Atualiza a quantidade a exiebir por pagina */ setRegistrsPerPage() { this.actualPage = 1; this.setTotalPages(); this.emitGetData(); } /** Fixa o header ao rolar o scroll */ fixeHeader(isFixed) { this.isFixed = isFixed; } onSearch() { let columnsSearched = this.gridHeader .map((col) => { if (col.search) return col.search; return undefined; }) .filter((value) => value !== undefined); this.whereColumn = columnsSearched; if (this.whereValue == null || this.whereColumn == '') return; if (this.whereValue.length >= 2 || this.whereValue.length == 0) { this.actualPage = 1; this.emitGetData(); } } onIndividualSearch(search) { console.log(search); console.log(this.whereValue); } /** Limpa a pesquisa e reset os dados */ onCleanSearch() { if (this.whereValue == null && this.whereIndividual.length == 0) return; this.whereColumn = null; this.whereValue = null; this.whereIndividual = []; this.actualPage = 1; this.emitGetData(); } /** Evento ao reordenar uma coluna */ onReorder(data) { this.orderby = data; this.elementsOrder.forEach((elm) => { let id = elm.nativeElement.id; if (id == 'order_' + data.db) { if (elm.nativeElement.classList.contains('fa-sort')) { elm.nativeElement.classList.remove('fa-sort'); elm.nativeElement.classList.add('fa-sort-up'); this.orderdirection = 'asc'; } else if (elm.nativeElement.classList.contains('fa-sort-up')) { elm.nativeElement.classList.remove('fa-sort-up'); elm.nativeElement.classList.add('fa-sort-down'); this.orderdirection = 'desc'; } else if (elm.nativeElement.classList.contains('fa-sort-down')) { elm.nativeElement.classList.remove('fa-sort-down'); elm.nativeElement.classList.add('fa-sort'); this.orderby = { db: 'id' }; this.orderdirection = 'asc'; } } else { elm.nativeElement.classList.remove('fa-sort-up', 'fa-sort-down', 'fa-sort'); elm.nativeElement.classList.add('fa-sort'); } }); this.emitGetData(); } /** Metodo para verificar existencia do atritubo individualfilter */ CheckIsShowRowSearch(gridHeader) { const objFilter = gridHeader.filter((col) => { if (col.individualfilter) return col; }); if (objFilter.length) return true; else return false; } /** Metodo para aplicar individualfilter */ addIndividualFilter(newFilter) { this.whereIndividual = this.whereIndividual.filter((item) => { return item.field !== newFilter.field || item.model !== newFilter.model; }); if (newFilter.value !== '' && newFilter.value !== null) this.whereIndividual.push(newFilter); this.emitGetData(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TableComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TableComponent, selector: "tableadv", inputs: { id: "id", isFixed: "isFixed", registers_per_page_initial: "registers_per_page_initial", data: "data", gridHeader: "gridHeader" }, outputs: { onGetData: "onGetData" }, viewQueries: [{ propertyName: "elementsOrder", predicate: ["elementOrder"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"\" [ngClass]=\"{'gd-backdrop': screenMaximize}\"></div>\r\n\r\n<div id=\"gd-container-{{id}}\" class='gd-container' [ngClass]=\"{'fullscreen':screenMaximize}\">\r\n\r\n <small class=\"gd-version\"> {{version}} </small>\r\n\r\n <!-- header -->\r\n <div class=\"gd-header\">\r\n\r\n <div class=\"gd-form-group\">\r\n\r\n <input class='gd-input-search' placeholder=\"Pesquisar Geral...\" [(ngModel)]=\"whereValue\" (keyup.enter)=\"onSearch()\">\r\n <button class='gd-btn' (click)=\"onSearch()\" gd-tooltip=\"Faz a pesquisa solicitada\">\r\n <i class=\"fa-solid fa-magnifying-glass\" ></i>\r\n </button>\r\n <button class='gd-btn' (click)=\"onCleanSearch()\" gd-tooltip=\"Limpa a pesquisa e reseta os dados\">\r\n <i class=\"fa-solid fa-broom\"></i>\r\n </button>\r\n\r\n <span gd-tooltip=\"Quantidade de registros por p\u00E1gina\">\r\n <select class=\"gd-select-qntreg\" [(ngModel)]=\"totalRegisterPerPage\" (change)=\"setRegistrsPerPage()\" >\r\n <option value=5>05</option>\r\n <option value=10>10</option>\r\n <option value=50>50</option>\r\n <option value=100>100</option>\r\n <option value=150>150</option>\r\n </select>\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"gd-controls\">\r\n\r\n <button (click)=\"emitGetData()\" gd-tooltip=\"Atualiza os dados\">\r\n <i class=\"fa-solid fa-rotate\"></i>\r\n </button>\r\n\r\n <button (click)=\"maximizeToggle()\" gd-tooltip=\"Maximiza e minimiza\">\r\n <i *ngIf=\"!screenMaximize\" class=\"fa-solid fa-maximize\"></i>\r\n <i *ngIf=\"screenMaximize\" class=\"fa-solid fa-minimize\"></i>\r\n </button>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <!-- body -->\r\n <div class=\"gd-body\" appScrollListener (fixedHeader)=\"fixeHeader($event)\">\r\n\r\n <div *ngIf=\"data == null\" class=\"not-reg\">{{message}}</div>\r\n <button *ngIf=\"data == null\" class=\"p-2 btn btn-sm btn-outline-dark\" (click)=\"onCleanSearch()\">Recarregar <i class=\"fa-solid fa-broom\"></i></button>\r\n\r\n <table *ngIf=\"data != null\">\r\n <tr class=\"gd-header-row\" [ngClass]=\"{'fixed': isFixed}\">\r\n\r\n <th class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <div>\r\n {{col.label}}\r\n\r\n <i *ngIf=\"col.order\" style=\"cursor: pointer;\" #elementOrder\r\n class=\"icon-order fa-solid fa-sort opacity-50 mx-2 px-1 btn-tabledata-order\" id='order_{{col.order.db}}'\r\n (click)=\"onReorder(col.order)\">\r\n </i>\r\n </div>\r\n </th>\r\n </tr>\r\n\r\n <tr *ngIf=\"CheckIsShowRowSearch(gridHeader)\">\r\n <th class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <InputIndividualSearch\r\n (addFilterEvent)=\"addIndividualFilter($event)\"\r\n [search]=\"col.search\"\r\n *ngIf=\"col.individualfilter\"\r\n ></InputIndividualSearch>\r\n </th>\r\n </tr>\r\n\r\n <tr class=\"gd-body-row\" *ngFor=\"let row of data.data; let i = index\" [ngClass]=\"{'even': i % 2 !== 0}\">\r\n <td class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <gd-cell [row]=\"row\" [col]=\"col\"></gd-cell>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n <!-- footer -->\r\n <div class=\"gd-footer\" *ngIf=\"data !== null\">\r\n\r\n <div class=\"gd-info\">\r\n <div>Exibindo p\u00E1gina <strong>{{actualPage}}</strong> de <strong>{{lastPage}}</strong></div>\r\n <div>Total de registros <strong>{{totalRegisters}}</strong></div>\r\n </div>\r\n\r\n <div class=\"gd-pagination\">\r\n\r\n <button [disabled]=\"1 == actualPage\" [ngClass]=\"{'disabled': 1 == actualPage}\" (click)=\"setFirstPage()\"> <i class=\"fa-solid fa-backward\"></i> </button>\r\n <button [disabled]=\"1 == actualPage\" [ngClass]=\"{'disabled': 1 == actualPage}\" (click)=\"setBeforePage()\"> <i class=\"fa-solid fa-caret-left\"></i> </button>\r\n\r\n <button [disabled]=\"page == actualPage\" [ngClass]=\"{'bg-selected': page == actualPage}\" *ngFor=\"let page of totalPagesArray\" (click)=\"setActualPage(page)\"> {{page}} </button>\r\n\r\n <button [disabled]=\"lastPage== actualPage\" [ngClass]=\"{'disabled': lastPage == actualPage}\" (click)=\"setNextPage()\"> <i class=\"fa-solid fa-caret-right\"></i> </button>\r\n <button [disabled]=\"lastPage == actualPage\" [ngClass]=\"{'disabled': lastPage == actualPage}\" (click)=\"setLastPage()\"> <i class=\"fa-solid fa-forward\"></i> </button>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</div>\r\n", styles: ["@import\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\";.gd-version{opacity:.2;font-size:.6rem;position:absolute;right:10px;bottom:5px}.gd-backdrop{background-color:#153c4b80;width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:2500;filter:blur()}body~.gd-container.fullscreen{overflow:hidden}.gd-container{background-color:#fff;width:100%;border-radius:5px;box-shadow:-1px 12px 19px -3px #00000026;font-family:Quicksand,sans-serif;position:relative;display:flex;flex-direction:column;align-items:center}.gd-container.fullscreen{width:95vw;height:95vh;position:fixed;left:2.5vw;top:2.5vh;padding:0;z-index:3000;max-width:100vw}.gd-container.fullscreen .gd-header{max-height:70px}.gd-container.fullscreen .gd-body{height:calc(100% - 140px);max-height:100%}.gd-container.fullscreen .gd-footer{height:70px;position:absolute}.gd-container .gd-header{width:100%;box-sizing:border-box;padding:15px;height:20%;border-bottom:1px solid #e4e4e4;display:flex;justify-content:space-between}.gd-container .gd-header .gd-form-group{width:80%;display:flex;align-items:center;border-radius:5px 0 0 5px;position:relative;height:30px}.gd-container .gd-header .gd-form-group .gd-btn{cursor:pointer;border:1px solid rgba(204,204,204,.2588235294);padding:5px 10px;background-color:#f7f7f700;color:#bdbdbd;opacity:.7;height:100%;min-height:30px}.gd-container .gd-header .gd-form-group .gd-btn:hover{opacity:1;color:#818181;border-color:#7777775d}.gd-container .gd-header .gd-form-group .gd-input-search{border:1px solid rgba(204,204,204,.2588235294);border-radius:5px 0 0 5px;min-height:28px;padding:0 6px;min-width:150px;max-width:300px;height:29px;position:relative;font-size:.8rem}.gd-container .gd-header .gd-form-group .gd-input-search:focus{outline-color:#7777775d}@media screen and (min-width: 768px){.gd-container .gd-header .gd-form-group .gd-input-search{min-width:300px}}.gd-container .gd-header .gd-form-group .gd-select-qntreg{border:1px solid rgba(204,204,204,.2588235294);border-radius:0 5px 5px 0;min-height:30px;padding:3px;height:100%}.gd-container .gd-header .gd-form-group .gd-select-qntreg:focus{outline-color:#7777775d}.gd-container .gd-header .gd-controls{display:flex;justify-content:space-between;align-items:center}.gd-container .gd-header .gd-controls button{background-color:transparent;border:none;padding:5px;margin:0 5px}.gd-container .gd-header .gd-controls button i{cursor:pointer;opacity:.5;transition:all ease-in-out .3s;font-size:1rem}.gd-container .gd-header .gd-controls button i:hover{opacity:1}.gd-container .gd-body{width:100%;max-width:100vw;max-height:700px;min-height:100px;height:auto;box-sizing:border-box;padding:15px;overflow:auto;scrollbar-width:thin;scrollbar-color:#aaaaaa #FFFFFF}.gd-container .gd-body table{width:100%}.gd-container .gd-body .icon-order{opacity:.2;width:15px;display:flex;justify-content:center;align-items:center;border-radius:5px}.gd-container .gd-body .icon-order:hover{opacity:1}.gd-container .gd-body::-webkit-scrollbar{width:5px;height:5px}.gd-container .gd-body::-webkit-scrollbar-track{border-radius:8px;background-color:#fff;border:2px solid #FFFFFF}.gd-container .gd-body::-webkit-scrollbar-track:hover{background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-track:active{background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-thumb{border-radius:5px;background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-thumb:hover{background-color:#113441}.gd-container .gd-body::-webkit-scrollbar-thumb:active{background-color:#2f5d6e}.gd-container .gd-body .not-reg{opacity:.5;width:100%;min-height:150px;font-size:1.2rem;font-weight:700;display:flex;align-items:center;justify-content:center}.gd-container .gd-body .gd-header-row{position:relative;font-size:.9rem}.gd-container .gd-body .gd-header-row.fixed{background-color:#fff;position:sticky;top:-15px;left:0;z-index:100;width:100%;overflow:auto}.gd-container .gd-body .gd-header-row.fixed .gd-col{border-bottom:1px solid #535353}.gd-container .gd-body .gd-header-row .gd-col{border-bottom:1px solid rgba(221,221,221,.8274509804);font-weight:700;text-align:left}.gd-container .gd-body .gd-body-row{transition:all ease-in-out .2s;font-size:.8rem;width:100%}.gd-container .gd-body .gd-body-row:hover{background-color:#ebebeb!important}.gd-container .gd-body .gd-body-row.even{background-color:#f0f0f080}.gd-container .gd-body .gd-body-row .gd-col{border-bottom:1px solid rgba(221,221,221,.2588235294)}.gd-container .gd-body .gd-header-row .gd-col,.gd-container .gd-body .gd-body-row .gd-col{width:auto;min-width:100px;padding:10px 0;position:relative;margin:0 5px}.gd-container .gd-body .gd-header-row .gd-col>div,.gd-container .gd-body .gd-body-row .gd-col>div{display:flex;justify-content:space-between;padding:0 15px 0 0}.gd-container .gd-footer{box-sizing:border-box;padding:15px;position:relative;bottom:0;width:100%;height:20%;border-top:1px solid #e4e4e4;display:flex;justify-content:space-between;align-items:center;max-height:70px}.gd-container .gd-footer .gd-info{font-size:.8rem;opacity:.7}.gd-container .gd-footer .gd-pagination{display:flex;justify-content:center;align-items:center}.gd-container .gd-footer .gd-pagination button{min-width:25px;height:30px;margin:0 5px;padding:5px;border:none;background-color:#ececec23;border-radius:5px;cursor:pointer;transition:all ease-in-out .2s}.gd-container .gd-footer .gd-pagination button.bg-selected{background-color:#48a2cc;color:#fff}.gd-container .gd-footer .gd-pagination button:hover{background-color:#cfcfcf}[gd-tooltip]{position:relative}[gd-tooltip]:after{font-size:.8rem;white-space:nowrap;min-width:100px;text-align:center;background-color:#4d4d4d;box-shadow:-1px 12px 19px -3px #00000026;color:#fff;box-sizing:border-box;content:attr(gd-tooltip);display:none;padding:10px;position:absolute;top:-35px;left:-300%;z-index:10;border-radius:5px}[gd-tooltip]:hover:after{display:inline}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.CellComponent, selector: "gd-cell", inputs: ["row", "col"] }, { kind: "component", type: i4.IndividualFilterInputComponent, selector: "InputIndividualSearch", inputs: ["search"], outputs: ["addFilterEvent"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TableComponent, decorators: [{ type: Component, args: [{ selector: 'tableadv', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"\" [ngClass]=\"{'gd-backdrop': screenMaximize}\"></div>\r\n\r\n<div id=\"gd-container-{{id}}\" class='gd-container' [ngClass]=\"{'fullscreen':screenMaximize}\">\r\n\r\n <small class=\"gd-version\"> {{version}} </small>\r\n\r\n <!-- header -->\r\n <div class=\"gd-header\">\r\n\r\n <div class=\"gd-form-group\">\r\n\r\n <input class='gd-input-search' placeholder=\"Pesquisar Geral...\" [(ngModel)]=\"whereValue\" (keyup.enter)=\"onSearch()\">\r\n <button class='gd-btn' (click)=\"onSearch()\" gd-tooltip=\"Faz a pesquisa solicitada\">\r\n <i class=\"fa-solid fa-magnifying-glass\" ></i>\r\n </button>\r\n <button class='gd-btn' (click)=\"onCleanSearch()\" gd-tooltip=\"Limpa a pesquisa e reseta os dados\">\r\n <i class=\"fa-solid fa-broom\"></i>\r\n </button>\r\n\r\n <span gd-tooltip=\"Quantidade de registros por p\u00E1gina\">\r\n <select class=\"gd-select-qntreg\" [(ngModel)]=\"totalRegisterPerPage\" (change)=\"setRegistrsPerPage()\" >\r\n <option value=5>05</option>\r\n <option value=10>10</option>\r\n <option value=50>50</option>\r\n <option value=100>100</option>\r\n <option value=150>150</option>\r\n </select>\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"gd-controls\">\r\n\r\n <button (click)=\"emitGetData()\" gd-tooltip=\"Atualiza os dados\">\r\n <i class=\"fa-solid fa-rotate\"></i>\r\n </button>\r\n\r\n <button (click)=\"maximizeToggle()\" gd-tooltip=\"Maximiza e minimiza\">\r\n <i *ngIf=\"!screenMaximize\" class=\"fa-solid fa-maximize\"></i>\r\n <i *ngIf=\"screenMaximize\" class=\"fa-solid fa-minimize\"></i>\r\n </button>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n <!-- body -->\r\n <div class=\"gd-body\" appScrollListener (fixedHeader)=\"fixeHeader($event)\">\r\n\r\n <div *ngIf=\"data == null\" class=\"not-reg\">{{message}}</div>\r\n <button *ngIf=\"data == null\" class=\"p-2 btn btn-sm btn-outline-dark\" (click)=\"onCleanSearch()\">Recarregar <i class=\"fa-solid fa-broom\"></i></button>\r\n\r\n <table *ngIf=\"data != null\">\r\n <tr class=\"gd-header-row\" [ngClass]=\"{'fixed': isFixed}\">\r\n\r\n <th class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <div>\r\n {{col.label}}\r\n\r\n <i *ngIf=\"col.order\" style=\"cursor: pointer;\" #elementOrder\r\n class=\"icon-order fa-solid fa-sort opacity-50 mx-2 px-1 btn-tabledata-order\" id='order_{{col.order.db}}'\r\n (click)=\"onReorder(col.order)\">\r\n </i>\r\n </div>\r\n </th>\r\n </tr>\r\n\r\n <tr *ngIf=\"CheckIsShowRowSearch(gridHeader)\">\r\n <th class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <InputIndividualSearch\r\n (addFilterEvent)=\"addIndividualFilter($event)\"\r\n [search]=\"col.search\"\r\n *ngIf=\"col.individualfilter\"\r\n ></InputIndividualSearch>\r\n </th>\r\n </tr>\r\n\r\n <tr class=\"gd-body-row\" *ngFor=\"let row of data.data; let i = index\" [ngClass]=\"{'even': i % 2 !== 0}\">\r\n <td class=\"gd-col\" *ngFor=\"let col of gridHeader\" [style.width]=\"col.width\">\r\n <gd-cell [row]=\"row\" [col]=\"col\"></gd-cell>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n <!-- footer -->\r\n <div class=\"gd-footer\" *ngIf=\"data !== null\">\r\n\r\n <div class=\"gd-info\">\r\n <div>Exibindo p\u00E1gina <strong>{{actualPage}}</strong> de <strong>{{lastPage}}</strong></div>\r\n <div>Total de registros <strong>{{totalRegisters}}</strong></div>\r\n </div>\r\n\r\n <div class=\"gd-pagination\">\r\n\r\n <button [disabled]=\"1 == actualPage\" [ngClass]=\"{'disabled': 1 == actualPage}\" (click)=\"setFirstPage()\"> <i class=\"fa-solid fa-backward\"></i> </button>\r\n <button [disabled]=\"1 == actualPage\" [ngClass]=\"{'disabled': 1 == actualPage}\" (click)=\"setBeforePage()\"> <i class=\"fa-solid fa-caret-left\"></i> </button>\r\n\r\n <button [disabled]=\"page == actualPage\" [ngClass]=\"{'bg-selected': page == actualPage}\" *ngFor=\"let page of totalPagesArray\" (click)=\"setActualPage(page)\"> {{page}} </button>\r\n\r\n <button [disabled]=\"lastPage== actualPage\" [ngClass]=\"{'disabled': lastPage == actualPage}\" (click)=\"setNextPage()\"> <i class=\"fa-solid fa-caret-right\"></i> </button>\r\n <button [disabled]=\"lastPage == actualPage\" [ngClass]=\"{'disabled': lastPage == actualPage}\" (click)=\"setLastPage()\"> <i class=\"fa-solid fa-forward\"></i> </button>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</div>\r\n", styles: ["@import\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\";.gd-version{opacity:.2;font-size:.6rem;position:absolute;right:10px;bottom:5px}.gd-backdrop{background-color:#153c4b80;width:100vw;height:100vh;position:fixed;top:0;left:0;z-index:2500;filter:blur()}body~.gd-container.fullscreen{overflow:hidden}.gd-container{background-color:#fff;width:100%;border-radius:5px;box-shadow:-1px 12px 19px -3px #00000026;font-family:Quicksand,sans-serif;position:relative;display:flex;flex-direction:column;align-items:center}.gd-container.fullscreen{width:95vw;height:95vh;position:fixed;left:2.5vw;top:2.5vh;padding:0;z-index:3000;max-width:100vw}.gd-container.fullscreen .gd-header{max-height:70px}.gd-container.fullscreen .gd-body{height:calc(100% - 140px);max-height:100%}.gd-container.fullscreen .gd-footer{height:70px;position:absolute}.gd-container .gd-header{width:100%;box-sizing:border-box;padding:15px;height:20%;border-bottom:1px solid #e4e4e4;display:flex;justify-content:space-between}.gd-container .gd-header .gd-form-group{width:80%;display:flex;align-items:center;border-radius:5px 0 0 5px;position:relative;height:30px}.gd-container .gd-header .gd-form-group .gd-btn{cursor:pointer;border:1px solid rgba(204,204,204,.2588235294);padding:5px 10px;background-color:#f7f7f700;color:#bdbdbd;opacity:.7;height:100%;min-height:30px}.gd-container .gd-header .gd-form-group .gd-btn:hover{opacity:1;color:#818181;border-color:#7777775d}.gd-container .gd-header .gd-form-group .gd-input-search{border:1px solid rgba(204,204,204,.2588235294);border-radius:5px 0 0 5px;min-height:28px;padding:0 6px;min-width:150px;max-width:300px;height:29px;position:relative;font-size:.8rem}.gd-container .gd-header .gd-form-group .gd-input-search:focus{outline-color:#7777775d}@media screen and (min-width: 768px){.gd-container .gd-header .gd-form-group .gd-input-search{min-width:300px}}.gd-container .gd-header .gd-form-group .gd-select-qntreg{border:1px solid rgba(204,204,204,.2588235294);border-radius:0 5px 5px 0;min-height:30px;padding:3px;height:100%}.gd-container .gd-header .gd-form-group .gd-select-qntreg:focus{outline-color:#7777775d}.gd-container .gd-header .gd-controls{display:flex;justify-content:space-between;align-items:center}.gd-container .gd-header .gd-controls button{background-color:transparent;border:none;padding:5px;margin:0 5px}.gd-container .gd-header .gd-controls button i{cursor:pointer;opacity:.5;transition:all ease-in-out .3s;font-size:1rem}.gd-container .gd-header .gd-controls button i:hover{opacity:1}.gd-container .gd-body{width:100%;max-width:100vw;max-height:700px;min-height:100px;height:auto;box-sizing:border-box;padding:15px;overflow:auto;scrollbar-width:thin;scrollbar-color:#aaaaaa #FFFFFF}.gd-container .gd-body table{width:100%}.gd-container .gd-body .icon-order{opacity:.2;width:15px;display:flex;justify-content:center;align-items:center;border-radius:5px}.gd-container .gd-body .icon-order:hover{opacity:1}.gd-container .gd-body::-webkit-scrollbar{width:5px;height:5px}.gd-container .gd-body::-webkit-scrollbar-track{border-radius:8px;background-color:#fff;border:2px solid #FFFFFF}.gd-container .gd-body::-webkit-scrollbar-track:hover{background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-track:active{background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-thumb{border-radius:5px;background-color:#2f5d6e}.gd-container .gd-body::-webkit-scrollbar-thumb:hover{background-color:#113441}.gd-container .gd-body::-webkit-scrollbar-thumb:active{background-color:#2f5d6e}.gd-container .gd-body .not-reg{opacity:.5;width:100%;min-height:150px;font-size:1.2rem;font-weight:700;display:flex;align-items:center;justify-content:center}.gd-container .gd-body .gd-header-row{position:relative;font-size:.9rem}.gd-container .gd-body .gd-header-row.fixed{background-color:#fff;position:sticky;top:-15px;left:0;z-index:100;width:100%;overflow:auto}.gd-container .gd-body .gd-header-row.fixed .gd-col{border-bottom:1px solid #535353}.gd-container .gd-body .gd-header-row .gd-col{border-bottom:1px solid rgba(221,221,221,.8274509804);font-weight:700;text-align:left}.gd-container .gd-body .gd-body-row{transition:all ease-in-out .2s;font-size:.8rem;width:100%}.gd-container .gd-body .gd-body-row:hover{background-color:#ebebeb!important}.gd-container .gd-body .gd-body-row.even{background-color:#f0f0f080}.gd-container .gd-body .gd-body-row .gd-col{border-bottom:1px solid rgba(221,221,221,.2588235294)}.gd-container .gd-body .gd-header-row .gd-col,.gd-container .gd-body .gd-body-row .gd-col{width:auto;min-width:100px;padding:10px 0;position:relative;margin:0 5px}.gd-container .gd-body .gd-header-row .gd-col>div,.gd-container .gd-body .gd-body-row .gd-col>div{display:flex;justify-content:space-between;padding:0 15px 0 0}.gd-container .gd-footer{box-sizing:border-box;padding:15px;position:relative;bottom:0;width:100%;height:20%;border-top:1px solid #e4e4e4;display:flex;justify-content:space-between;align-items:center;max-height:70px}.gd-container .gd-footer .gd-info{font-size:.8rem;opacity:.7}.gd-container .gd-footer .gd-pagination{display:flex;justify-content:center;align-items:center}.gd-container .gd-footer .gd-pagination button{min-width:25px;height:30px;margin:0 5px;padding:5px;border:none;background-color:#ececec23;border-radius:5px;cursor:pointer;transition:all ease-in-out .2s}.gd-container .gd-footer .gd-pagination button.bg-selected{background-color:#48a2cc;color:#fff}.gd-container .gd-footer .gd-pagination button:hover{background-color:#cfcfcf}[gd-tooltip]{position:relative}[gd-tooltip]:after{font-size:.8rem;white-space:nowrap;min-width:100px;text-align:center;background-color:#4d4d4d;box-shadow:-1px 12px 19px -3px #00000026;color:#fff;box-sizing:border-box;content:attr(gd-tooltip);display:none;padding:10px;position:absolute;top:-35px;left:-300%;z-index:10;border-radius:5px}[gd-tooltip]:hover:after{display:inline}\n"] }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { id: [{ type: Input }], isFixed: [{ type: Input }], registers_per_page_initial: [{ type: Input }], data: [{ type: Input }], gridHeader: [{ type: Input }], onGetData: [{ type: Output }], elementsOrder: [{ type: ViewChildren, args: ['elementOrder'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fzc2RvdWcvdGFibGVhZHYvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fzc2RvdWcvdGFibGVhZHYvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBR0wsTUFBTSxFQUNOLFlBQVksRUFFWixZQUFZLEVBQ1osU0FBUyxFQUVULGlCQUFpQixHQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBUXJDLE1BQU0sT0FBTyxjQUFjO0lBeUR6Qix1RkFBdUY7SUFFdkYsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXREdkMsV0FBTSxHQUFXLGtCQUFrQixDQUFDLENBQUMsMEZBQTBGO1FBQy9ILFlBQU8sR0FBVyxPQUFPLENBQUM7UUFDMUIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQixxREFBcUQ7UUFDckQsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMsMENBQTBDO1FBQzFDLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsb0JBQWUsR0FBa0IsRUFBRSxDQUFDO1FBRXBDLCtCQUErQjtRQUMvQixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBRXZCLGdDQUFnQztRQUNoQyxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRXJCLDhGQUE4RjtRQUM5Rix5QkFBb0IsR0FBVyxDQUFDLENBQUM7UUFFakMsOENBQThDO1FBQzlDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRTNCLG9DQUFvQztRQUNwQyx5QkFBb0IsR0FBVyxDQUFDLENBQUM7UUFFakMsbUNB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M0MsbUJBQW1CLENBQUMsU0FBYztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLElBQUk7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7OEdBcldVLGNBQWM7a0dBQWQsY0FBYyx3VkN2QjNCLHVySkFrSEE7OzJGRDNGYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFVBQVUsaUJBR0wsaUJBQWlCLENBQUMsUUFBUTtnR0FLaEMsRUFBRTtzQkFBVixLQUFLO2dCQWdDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQVVHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU07Z0JBRXVCLGFBQWE7c0JBQTFDLFlBQVk7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgTm90aWZsaXggZnJvbSAnbm90aWZsaXgnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0YWJsZWFkdicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi4vLi4vYXNzZXRzL3N0eWxlLnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIC8qKiBQcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xyXG5cclxuICBkcml2ZXI6IHN0cmluZyA9ICdsYXJhdmVsLWVsb3F1ZW50JzsgLy8gY2hhdmUgc2ltYm9saWNhIHBhcmEgZGV0ZXJtaW5hciBvIHVzbyBkbyBjb21wb25lbnRlIGNvbSBiYWNrZW5kIGVtIGxhcmF2ZWwgY29tIGVsb3F1ZW50XHJcbiAgdmVyc2lvbjogc3RyaW5nID0gJzEuMi4zJztcclxuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIERlZmluZSBvIGVzdGFkbyBkYSB0YWJlbGEgbWF4aW1pemFkbyBvdSBub3JtYWwgKi9cclxuICBzY3JlZW5NYXhpbWl6ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogUmVnaXN0cmEgbyB0b3RhbCBkZSBwYWdpbmFzIGdlcmFkYXMgKi9cclxuICB0b3RhbFBhZ2VzOiBudW1iZXIgPSAwO1xyX