@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
JavaScript
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