ng-firebase-table-kxp 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-firebase-table-kxp.mjs","sources":["../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.component.ts","../../../projects/ng-firebase-table-kxp/src/lib/services/table.service.ts","../../../projects/ng-firebase-table-kxp/src/lib/components/table/table.component.ts","../../../projects/ng-firebase-table-kxp/src/lib/components/table/table.component.html","../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.module.ts","../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.service.ts","../../../projects/ng-firebase-table-kxp/src/public-api.ts","../../../projects/ng-firebase-table-kxp/src/ng-firebase-table-kxp.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ng-firebase-table-kxp',\n template: ` <p>ng-firebase-table-kxp works!</p> `,\n styles: [],\n})\nexport class NgFirebaseTableKxpComponent {}\n","import { Injectable, Optional } from '@angular/core';\nimport {\n AngularFirestore,\n CollectionReference,\n QueryDocumentSnapshot,\n} from '@angular/fire/compat/firestore';\nimport firebase from 'firebase/compat/app';\nimport { Arrange, Condition, Pagination } from '../types/Table';\nimport { firstValueFrom } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ToastrService } from 'ngx-toastr';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport * as moment from 'moment';\n\ninterface PaginationResult {\n items: any[];\n filterLength: number | null;\n firstDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null;\n lastDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null;\n hasNextPage: boolean;\n hasPreviousPage?: boolean;\n currentClientPageIndex?: number;\n totalPages?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TableService {\n constructor(\n @Optional() private ngFire: AngularFirestore,\n @Optional() private dialog: MatDialog,\n @Optional() private toastr: ToastrService\n ) {}\n\n async getItems(collection: CollectionReference<unknown>): Promise<any[]> {\n try {\n const querySnapshot = await collection.get();\n return querySnapshot.docs.map(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n return { ...(doc.data() as any), id: doc.id };\n }\n );\n } catch (error) {\n console.warn('Collection não encontrada:', error);\n return [];\n }\n }\n\n private async executeQuery(params: Pagination): Promise<PaginationResult> {\n if (params.filterFn) {\n // Lógica com filtro no cliente (filterFn)\n const BATCH_FETCH_SIZE = params.batchSize;\n const GOAL_SIZE = params.batchSize + 1;\n\n if (params.navigation === 'forward' || params.navigation === 'reload') {\n if (params.navigation === 'reload' && params.doc) {\n params.doc.lastDoc = null;\n }\n\n let lastDocCursor: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n params.doc ? params.doc.lastDoc : null;\n let pageResults: any[] = [];\n let allFetchedDocs: firebase.firestore.QueryDocumentSnapshot<unknown>[] =\n [];\n let hasMoreDocsInDb = true;\n\n while (pageResults.length < GOAL_SIZE && hasMoreDocsInDb) {\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n if (lastDocCursor) {\n query = query.startAfter(lastDocCursor);\n }\n query = query.limit(BATCH_FETCH_SIZE);\n\n const snapshot = await query.get();\n\n if (snapshot.empty) {\n hasMoreDocsInDb = false;\n break;\n }\n\n lastDocCursor = snapshot.docs[snapshot.docs.length - 1];\n allFetchedDocs.push(...snapshot.docs);\n\n const batchUsers = snapshot.docs\n .map((doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter(params.filterFn);\n\n pageResults.push(...batchUsers);\n\n if (snapshot.size < BATCH_FETCH_SIZE) {\n hasMoreDocsInDb = false;\n }\n }\n\n const hasNextPage = pageResults.length > params.batchSize;\n const finalItems = pageResults.slice(0, params.batchSize);\n\n const firstDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[0]?.id\n ) || null;\n const lastDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[finalItems.length - 1]?.id\n ) || null;\n\n return {\n items: finalItems,\n filterLength: null,\n firstDoc: firstDocOfPage,\n lastDoc: lastDocOfPage,\n hasNextPage: hasNextPage,\n hasPreviousPage:\n !!(params.doc && params.doc.lastDoc) &&\n params.navigation !== 'reload',\n currentClientPageIndex: undefined,\n };\n }\n // Lógica para trás (backward)\n else if (params.navigation === 'backward') {\n if (!params.doc || !params.doc.firstDoc) {\n return {\n items: [],\n filterLength: null,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: true,\n hasPreviousPage: false,\n currentClientPageIndex: undefined,\n };\n }\n\n let pageResults: any[] = [];\n let allFetchedDocs: firebase.firestore.QueryDocumentSnapshot<unknown>[] =\n [];\n let hasMoreDocsInDb = true;\n\n let boundaryDoc = params.doc.firstDoc;\n\n while (pageResults.length < GOAL_SIZE && hasMoreDocsInDb) {\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n query = query.endBefore(boundaryDoc);\n query = query.limitToLast(BATCH_FETCH_SIZE);\n\n const snapshot = await query.get();\n\n if (snapshot.empty) {\n hasMoreDocsInDb = false;\n break;\n }\n\n boundaryDoc = snapshot.docs[0] as any;\n\n allFetchedDocs = [...snapshot.docs, ...allFetchedDocs];\n\n const batchUsers = snapshot.docs\n .map((doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter(params.filterFn);\n\n pageResults = [...batchUsers, ...pageResults];\n\n if (snapshot.size < BATCH_FETCH_SIZE) {\n hasMoreDocsInDb = false;\n }\n }\n\n const finalItems = pageResults.slice(0, params.batchSize);\n\n const firstDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[0]?.id\n ) || null;\n const lastDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[finalItems.length - 1]?.id\n ) || null;\n\n return {\n items: finalItems,\n filterLength: null,\n firstDoc: firstDocOfPage,\n lastDoc: lastDocOfPage,\n hasNextPage: true,\n currentClientPageIndex: undefined,\n };\n }\n } else {\n let items: any[] = [];\n let docs: firebase.firestore.QueryDocumentSnapshot<unknown>[] = [];\n let hasNextPage = false;\n let filterLength: null | number = null;\n\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n if (params.conditions) {\n params.conditions.forEach((c: Condition) => {\n if (c.operator === '!=') {\n query = query.orderBy(c.firestoreProperty);\n }\n });\n }\n\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n if (params.navigation === 'reload') {\n query = query.limit(params.batchSize + 1);\n if (params.doc && params.doc.firstDoc) {\n query = query.startAt(params.doc.firstDoc);\n }\n } else if (params.navigation === 'forward') {\n query = query.limit(params.batchSize + 1);\n\n if (params.doc && params.doc.lastDoc) {\n query = query.startAfter(params.doc.lastDoc);\n }\n } else {\n // backward\n query = query.limitToLast(params.batchSize + 1);\n if (params.doc && params.doc.firstDoc) {\n query = query.endBefore(params.doc.firstDoc);\n }\n }\n\n const itemCol = await query.get();\n itemCol.docs.forEach(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n docs.push(doc)\n );\n const itemPromises = docs.map(\n async (item: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n const itemData = item.data() as any;\n items.push({ id: item.id, ...itemData });\n }\n );\n\n let lastDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n docs[docs.length - 1] || null;\n let firstDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n docs[0];\n\n if (\n (items.length > params.batchSize && params.navigation === 'forward') ||\n (params.navigation === 'reload' && items.length > params.batchSize)\n ) {\n lastDoc = docs[docs.length - 2] || null;\n items.pop();\n hasNextPage = true;\n }\n if (items.length > params.batchSize && params.navigation === 'backward') {\n firstDoc = docs[1];\n items.shift();\n hasNextPage = true;\n }\n\n await Promise.all(itemPromises);\n return {\n items,\n filterLength,\n lastDoc,\n firstDoc,\n hasNextPage,\n currentClientPageIndex: undefined,\n };\n }\n\n // Fallback para garantir que sempre retornamos algo\n return {\n items: [],\n filterLength: null,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n currentClientPageIndex: undefined,\n };\n }\n\n applyFilters(\n query: firebase.firestore.Query<unknown>,\n arrange: Arrange,\n conditions: Condition[] | undefined\n ): firebase.firestore.Query<unknown> {\n if (conditions) {\n conditions.map((cond: Condition) => {\n query = query.where(\n cond.firestoreProperty,\n cond.operator,\n cond.dashProperty\n );\n });\n }\n\n let hasFilterSpecificOrderBy = false;\n let appliedOrderByField: string | null = null;\n\n const equalsFilters = arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n const otherFilters = arrange.filters.filter(\n (f: any) => f.arrange !== 'equals'\n );\n\n const equalsGroupedByProperty = equalsFilters.reduce(\n (acc: any, current: any) => {\n const prop = current.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(current.filter.filtering);\n return acc;\n },\n {}\n );\n\n for (const prop in equalsGroupedByProperty) {\n const values = equalsGroupedByProperty[prop];\n if (values.length > 0) {\n query = query.where(prop, 'in', values);\n }\n }\n\n otherFilters.forEach((filterItem: any) => {\n // Aplicar filtragem por busca\n if (\n filterItem.filter?.filtering &&\n filterItem.filter?.property !== '' &&\n filterItem.arrange === 'filter'\n ) {\n query = query\n .where(\n filterItem.filter.property,\n '>=',\n filterItem.filter.filtering.trim().toUpperCase()\n )\n .where(\n filterItem.filter.property,\n '<=',\n filterItem.filter.filtering.trim().toUpperCase() + '\\uf8ff'\n );\n if (!hasFilterSpecificOrderBy) {\n query = query.orderBy(filterItem.filter.property);\n hasFilterSpecificOrderBy = true;\n appliedOrderByField = filterItem.filter.property;\n }\n }\n\n // Aplicar filtro do tipo \"filterByDate\"\n if (filterItem.dateFilter && filterItem.arrange === 'filterByDate') {\n query = query\n .where(arrange.sortBy.field, '>=', filterItem.dateFilter.initial)\n .where(arrange.sortBy.field, '<=', filterItem.dateFilter.final);\n if (!hasFilterSpecificOrderBy) {\n query = query.orderBy(arrange.sortBy.field);\n hasFilterSpecificOrderBy = true;\n appliedOrderByField = arrange.sortBy.field;\n }\n }\n });\n\n // Aplicar sortBy\n if (arrange.sortBy && arrange.sortBy.field && arrange.sortBy.order) {\n if (appliedOrderByField !== arrange.sortBy.field) {\n query = query.orderBy(arrange.sortBy.field, arrange.sortBy.order);\n }\n }\n return query;\n }\n\n private getIdFilter(params: Pagination): string | null {\n if (!params.arrange?.filters) return null;\n\n const idFilter = params.arrange.filters.find(\n (f: any) =>\n f.arrange === 'filter' &&\n f.filter?.property === 'id' &&\n f.filter?.filtering\n );\n\n return idFilter?.filter?.filtering?.trim() || null;\n }\n\n private async getDocumentById(\n collection: string,\n docId: string\n ): Promise<any | null> {\n try {\n const docRef = this.ngFire.collection(collection).doc(docId);\n const docSnapshot = await docRef.get().toPromise();\n\n if (docSnapshot && docSnapshot.exists) {\n return {\n id: docSnapshot.id,\n ...(docSnapshot.data() as any),\n };\n }\n return null;\n } catch (error) {\n console.warn('Erro ao buscar documento por ID:', error);\n return null;\n }\n }\n\n private async searchByIdPartial(\n params: Pagination,\n searchTerm: string\n ): Promise<PaginationResult> {\n const exactMatch = await this.getDocumentById(\n params.collection,\n searchTerm\n );\n\n if (exactMatch) {\n if (params.conditions) {\n const operators = this.operators;\n const passesConditions = params.conditions.every((cond) => {\n const operatorFn = operators[cond.operator as keyof typeof operators];\n return operatorFn\n ? operatorFn(exactMatch[cond.firestoreProperty], cond.dashProperty)\n : false;\n });\n\n if (!passesConditions) {\n return {\n items: [],\n filterLength: 0,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 0,\n };\n }\n }\n\n if (params.filterFn && !params.filterFn(exactMatch)) {\n return {\n items: [],\n filterLength: 0,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 0,\n };\n }\n\n return {\n items: [exactMatch],\n filterLength: 1,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 1,\n };\n }\n\n const searchTermLower = searchTerm.toLowerCase();\n\n const paramsWithoutIdFilter = {\n ...params,\n arrange: {\n ...params.arrange,\n filters: params.arrange.filters.filter(\n (f: any) => !(f.arrange === 'filter' && f.filter?.property === 'id')\n ),\n },\n };\n\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n // Aplicar conditions\n if (params.conditions) {\n params.conditions.forEach((cond) => {\n query = query.where(\n cond.firestoreProperty,\n cond.operator,\n cond.dashProperty\n );\n });\n }\n\n // Aplicar sortBy\n if (params.arrange?.sortBy?.field && params.arrange?.sortBy?.order) {\n query = query.orderBy(\n params.arrange.sortBy.field,\n params.arrange.sortBy.order\n );\n }\n\n const snapshot = await query.get();\n let items = snapshot.docs\n .map((doc) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter((item) => item.id.toLowerCase().includes(searchTermLower));\n\n // Separar equals filters e outros filtros\n const equalsFilters = paramsWithoutIdFilter.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n const otherFilters = paramsWithoutIdFilter.arrange.filters.filter(\n (f: any) =>\n f.arrange !== 'equals' &&\n (f.arrange !== 'filter' || f.filter?.property !== 'id')\n );\n\n // Aplicar equals filters com lógica OR dentro de cada propriedade\n if (equalsFilters.length > 0) {\n // Agrupar por propriedade para aplicar OR\n const groupedByProperty = equalsFilters.reduce((acc: any, f: any) => {\n const prop = f.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(f.filter.filtering);\n return acc;\n }, {});\n\n // Filtrar: item deve ter pelo menos um valor de CADA propriedade\n items = items.filter((item: any) => {\n return Object.entries(groupedByProperty).every(([prop, values]) => {\n return (values as any[]).includes(item[prop]);\n });\n });\n }\n\n // Aplicar outros filtros\n otherFilters.forEach((filterItem: any) => {\n if (\n filterItem.arrange === 'filter' &&\n filterItem.filter?.filtering &&\n filterItem.filter?.property\n ) {\n const filterValue = String(filterItem.filter.filtering)\n .trim()\n .toLowerCase();\n items = items.filter((item: any) => {\n const itemValue = String(\n item[filterItem.filter.property]\n ).toLowerCase();\n return itemValue.includes(filterValue);\n });\n }\n });\n\n // Aplicar filterFn se existir\n if (params.filterFn) {\n items = items.filter(params.filterFn);\n }\n\n // Paginação\n const pageSize = params.batchSize;\n let currentClientPageIndex = 0;\n\n if (params.navigation === 'reload') {\n currentClientPageIndex = 0;\n } else {\n // Usar o índice passado pelo componente sem incrementar/decrementar\n currentClientPageIndex = params.clientPageIndex || 0;\n }\n\n const startIndex = currentClientPageIndex * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = items.slice(startIndex, endIndex);\n\n const totalPages = Math.ceil(items.length / pageSize);\n const hasNextPage = currentClientPageIndex < totalPages - 1;\n const hasPreviousPage = currentClientPageIndex > 0;\n\n return {\n items: paginatedItems,\n filterLength: items.length,\n firstDoc: null,\n lastDoc: null,\n hasNextPage,\n hasPreviousPage,\n currentClientPageIndex,\n totalPages,\n };\n }\n\n private shouldUseClientSideFallback(params: Pagination): boolean {\n const hasConditions = params.conditions && params.conditions.length > 0;\n const hasArrangeFilters =\n params.arrange?.filters && params.arrange.filters.length > 0;\n const hasSortBy = params.arrange?.sortBy?.field;\n\n if (params.filterFn) {\n return false;\n }\n\n if (hasArrangeFilters) {\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n if (equalsFilters.length > 0) {\n const propertiesSet = new Set(\n equalsFilters.map((f: any) => f.filter.property)\n );\n\n if (propertiesSet.size > 1) {\n return true;\n }\n }\n }\n\n if (hasConditions && hasArrangeFilters && hasSortBy) {\n return true;\n }\n\n if (hasConditions && hasArrangeFilters) {\n return true;\n }\n\n if (hasArrangeFilters && params.arrange.filters.length > 1 && hasSortBy) {\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n if (equalsFilters.length > 0) {\n const propertiesSet = new Set(\n equalsFilters.map((f: any) => f.filter.property)\n );\n if (\n propertiesSet.size === 1 &&\n equalsFilters.length === params.arrange.filters.length\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n async getPaginated(params: Pagination): Promise<PaginationResult> {\n const idFilterValue = this.getIdFilter(params);\n if (idFilterValue) {\n const result = await this.searchByIdPartial(params, idFilterValue);\n return result;\n }\n\n // Detectar preventivamente se deve usar fallback\n if (this.shouldUseClientSideFallback(params)) {\n await this.trackMissingIndexPreventive(\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log('📊 [TABLE] Resultados paginados via fallback client-side:', {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n });\n return result;\n }\n\n try {\n const result = await this.executeQuery(params);\n console.log('📊 [TABLE] Resultados paginados via Firestore:', {\n totalItems: result.filterLength || 'N/A',\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n });\n return result;\n } catch (error: any) {\n if (error && error.code === 'failed-precondition') {\n await this.trackMissingIndex(\n error,\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log(\n '📊 [TABLE] Resultados paginados via fallback (erro de index):',\n {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n }\n );\n return result;\n } else if (error && error.code === 'invalid-argument') {\n await this.trackMissingIndex(\n error,\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log(\n '📊 [TABLE] Resultados paginados via fallback (argumento inválido):',\n {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n }\n );\n return result;\n } else {\n throw error;\n }\n }\n }\n\n async executeClientSideQuery(params: Pagination): Promise<PaginationResult> {\n // Otimizar usando pelo menos uma cláusula .where() quando possível\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n let appliedCondition: Condition | null = null;\n let hasAppliedWhereClause = false;\n\n // Primeiro, tenta aplicar condições simples\n if (params.conditions && params.conditions.length > 0) {\n const simpleCondition = params.conditions.find((cond: Condition) =>\n ['==', '>', '<', '>=', '<=', 'in', 'array-contains'].includes(\n cond.operator\n )\n );\n\n if (simpleCondition) {\n query = query.where(\n simpleCondition.firestoreProperty,\n simpleCondition.operator,\n simpleCondition.dashProperty\n );\n appliedCondition = simpleCondition;\n hasAppliedWhereClause = true;\n }\n }\n\n // Se não há condições disponíveis, tenta aplicar filtros do arrange\n let appliedFirestoreFilter: any = null;\n if (!hasAppliedWhereClause && params.arrange?.filters) {\n // Agrupar equals filters por propriedade\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n const equalsGroupedByProperty = equalsFilters.reduce(\n (acc: any, current: any) => {\n const prop = current.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(current.filter.filtering);\n return acc;\n },\n {}\n );\n\n // Se há apenas UMA propriedade com múltiplos valores, aplicar no Firestore com 'in'\n const properties = Object.keys(equalsGroupedByProperty);\n if (properties.length === 1 && equalsFilters.length > 0) {\n const prop = properties[0];\n const values = equalsGroupedByProperty[prop];\n query = query.where(prop, 'in', values);\n hasAppliedWhereClause = true;\n // Marcar TODOS os equals filters dessa propriedade como aplicados\n appliedFirestoreFilter = 'all-equals';\n } else if (properties.length === 0) {\n const otherFilter = params.arrange.filters.find(\n (f: any) =>\n (f.arrange === 'filter' &&\n f.filter?.filtering &&\n f.filter?.property) ||\n (f.arrange === 'filterByDate' &&\n f.dateFilter?.initial &&\n f.dateFilter?.final)\n );\n\n if (otherFilter) {\n if (otherFilter.arrange === 'filter' && otherFilter.filter) {\n const filterValue = otherFilter.filter.filtering\n .trim()\n .toUpperCase();\n query = query\n .where(otherFilter.filter.property, '>=', filterValue)\n .where(otherFilter.filter.property, '<=', filterValue + '\\uf8ff');\n hasAppliedWhereClause = true;\n appliedFirestoreFilter = otherFilter;\n } else if (\n otherFilter.arrange === 'filterByDate' &&\n otherFilter.dateFilter &&\n params.arrange.sortBy?.field\n ) {\n query = query\n .where(\n params.arrange.sortBy.field,\n '>=',\n otherFilter.dateFilter.initial\n )\n .where(\n params.arrange.sortBy.field,\n '<=',\n otherFilter.dateFilter.final\n );\n hasAppliedWhereClause = true;\n appliedFirestoreFilter = otherFilter;\n }\n }\n }\n }\n\n const allDocsSnapshot = await query.get();\n let items = allDocsSnapshot.docs.map(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n })\n );\n\n // Aplicar condições restantes\n if (params.conditions) {\n const remainingConditions = params.conditions.filter(\n (cond: Condition) => cond !== appliedCondition\n );\n if (remainingConditions.length > 0) {\n const operators = this.operators;\n items = items.filter((item: any) => {\n return remainingConditions.every((cond: Condition) => {\n const operatorFn =\n operators[cond.operator as keyof typeof operators];\n return operatorFn\n ? operatorFn(item[cond.firestoreProperty], cond.dashProperty)\n : false;\n });\n });\n }\n }\n\n const { filters, sortBy } = params.arrange;\n\n // Track which filter was already applied in Firestore to avoid double filtering\n if (hasAppliedWhereClause && !appliedCondition && params.arrange?.filters) {\n const equalsFilter = params.arrange.filters.find(\n (f: any) => f.arrange === 'equals' && f.filter?.filtering\n );\n if (equalsFilter) {\n appliedFirestoreFilter = equalsFilter;\n } else {\n appliedFirestoreFilter = params.arrange.filters.find(\n (f: any) =>\n (f.arrange === 'filter' &&\n f.filter?.filtering &&\n f.filter?.property) ||\n (f.arrange === 'filterByDate' &&\n f.dateFilter?.initial &&\n f.dateFilter?.final)\n );\n }\n }\n\n const equalsFilters = filters.filter((f: any) => f.arrange === 'equals');\n const otherFilters = filters.filter((f: any) => f.arrange !== 'equals');\n\n // Aplicar equals filters no client-side apenas se não foram aplicados no Firestore\n if (appliedFirestoreFilter !== 'all-equals' && equalsFilters.length > 0) {\n // Agrupar por propriedade para aplicar OR dentro de cada propriedade\n const groupedByProperty = equalsFilters.reduce((acc: any, f: any) => {\n const prop = f.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(f.filter.filtering);\n return acc;\n }, {});\n\n // Filtrar: item deve ter pelo menos um valor de CADA propriedade\n // (AND entre propriedades, OR dentro de cada propriedade)\n items = items.filter((item: any) => {\n return Object.entries(groupedByProperty).every(([prop, values]) => {\n return (values as any[]).includes(item[prop]);\n });\n });\n }\n\n otherFilters.forEach((filterItem: any) => {\n if (appliedFirestoreFilter === filterItem) {\n return;\n }\n\n if (\n filterItem.arrange === 'filter' &&\n filterItem.filter?.filtering &&\n filterItem.filter?.property\n ) {\n const filterValue = String(filterItem.filter.filtering)\n .trim()\n .toLowerCase();\n items = items.filter((item: any) => {\n const itemValue = String(\n item[filterItem.filter.property]\n ).toLowerCase();\n return itemValue.includes(filterValue);\n });\n }\n\n if (\n filterItem.arrange === 'filterByDate' &&\n filterItem.dateFilter?.initial &&\n filterItem.dateFilter?.final &&\n sortBy.field\n ) {\n items = items.filter((item: any) => {\n try {\n const fieldValue = item[sortBy.field];\n\n if (!fieldValue) {\n return false;\n }\n\n let itemDate;\n if (typeof fieldValue.toDate === 'function') {\n itemDate = fieldValue.toDate();\n } else if (fieldValue instanceof Date) {\n itemDate = fieldValue;\n } else if (typeof fieldValue === 'string') {\n itemDate = new Date(fieldValue);\n if (isNaN(itemDate.getTime())) {\n return false;\n }\n } else if (typeof fieldValue === 'number') {\n itemDate = new Date(fieldValue);\n } else {\n return false;\n }\n\n return (\n itemDate >= filterItem.dateFilter.initial &&\n itemDate <= filterItem.dateFilter.final\n );\n } catch (error) {\n console.warn(\n 'Erro ao processar filtro de data para o item:',\n item.id,\n error\n );\n return false;\n }\n });\n }\n });\n\n // Aplicar filterFn se existir\n if (params.filterFn) {\n items = items.filter(params.filterFn);\n }\n\n if (sortBy && sortBy.field && sortBy.order) {\n items.sort((a: any, b: any) => {\n const valA = a[sortBy.field];\n const valB = b[sortBy.field];\n\n if (valA < valB) {\n return sortBy.order === 'asc' ? -1 : 1;\n }\n if (valA > valB) {\n return sortBy.order === 'asc' ? 1 : -1;\n }\n return 0;\n });\n }\n\n // Implementação adequada da paginação\n let currentClientPageIndex = 0;\n\n // Determinar a página atual baseada na navegação\n if (params.navigation === 'reload') {\n currentClientPageIndex = 0;\n } else {\n currentClientPageIndex = params.clientPageIndex || 0;\n }\n\n const pageSize = params.batchSize;\n const startIndex = currentClientPageIndex * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = items.slice(startIndex, endIndex);\n\n const totalPages = Math.ceil(items.length / pageSize);\n const hasNextPage = currentClientPageIndex < totalPages - 1;\n const hasPreviousPage = currentClientPageIndex > 0;\n\n return {\n items: paginatedItems,\n filterLength: items.length,\n lastDoc: null,\n firstDoc: null,\n hasNextPage: hasNextPage,\n hasPreviousPage: hasPreviousPage,\n currentClientPageIndex: currentClientPageIndex,\n totalPages: totalPages,\n };\n }\n\n async getItemsData(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<any[]> {\n try {\n let query: firebase.firestore.Query<unknown> =\n this.ngFire.collection(collection).ref;\n\n query = this.applyFilters(query, arrange, conditions);\n const snapshot = await query.get();\n return await Promise.all(\n snapshot.docs.map(\n async (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n const data = doc.data() as any;\n const id = doc.id;\n return {\n id,\n ...data,\n };\n }\n )\n );\n } catch (e) {\n throw e;\n }\n }\n\n public operators = {\n '==': (a: any, b: any): boolean => a === b,\n '!=': (a: any, b: any): boolean => a !== b,\n '>': (a: any, b: any): boolean => a > b,\n '<': (a: any, b: any): boolean => a < b,\n '>=': (a: any, b: any): boolean => a >= b,\n '<=': (a: any, b: any): boolean => a <= b,\n in: (a: any, b: any): boolean => Array.isArray(b) && b.includes(a),\n 'not-in': (a: any, b: any): boolean => Array.isArray(b) && !b.includes(a),\n 'array-contains': (a: any, b: any): boolean =>\n Array.isArray(a) && a.includes(b),\n 'array-contains-any': (a: any, b: any): boolean =>\n Array.isArray(a) &&\n Array.isArray(b) &&\n b.some((item: any) => a.includes(item)),\n includes: (a: any, b: any): any => a.includes(b), // Para strings ou arrays\n };\n\n async deleteIndex(id: string, col: string): Promise<boolean> {\n try {\n const batch = this.ngFire.firestore.batch();\n\n const docRef = this.ngFire.collection(col).doc(id);\n const docSnapshot = (await firstValueFrom(\n docRef.get()\n )) as firebase.firestore.DocumentSnapshot<unknown>;\n const doc = docSnapshot.data() as any;\n batch.delete(docRef.ref);\n if (doc && typeof doc.index === 'number') {\n await this.reindex(doc.index, col, batch);\n }\n await batch.commit();\n\n this.toastr.success('Item excluído com sucesso!');\n return true;\n } catch (e) {\n const error = e as any;\n console.error('Erro ao deletar item:', error);\n this.toastr.error('Erro ao deletar item.');\n return false;\n }\n }\n\n async reindex(\n index: number,\n col: string,\n batch: firebase.firestore.WriteBatch\n ): Promise<void> {\n try {\n const snapshot = (await firstValueFrom(\n this.ngFire.collection(col).get()\n )) as firebase.firestore.QuerySnapshot<unknown>;\n const docs = snapshot.docs;\n for (let doc of docs) {\n const data = doc.data() as any;\n if (data && typeof data.index === 'number' && data.index > index) {\n data.index--;\n const docRef = this.ngFire.collection(col).doc(doc.id).ref;\n batch.update(docRef, data);\n }\n }\n } catch (error) {\n console.error('Erro ao reindexar:', error);\n }\n return;\n }\n\n dateFormatValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if (!control.value) {\n return null;\n }\n\n const dateStr = control.value.trim();\n const datePattern = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/;\n\n if (!datePattern.test(dateStr)) {\n return { invalidFormat: true };\n }\n\n const parts = dateStr.split('/');\n const day = parts[0].padStart(2, '0');\n const month = parts[1].padStart(2, '0');\n const year = parts[2];\n const normalizedDate = `${day}/${month}/${year}`;\n\n const date = moment(normalizedDate, 'DD/MM/YYYY', true);\n\n if (!date.isValid()) {\n return { invalidDate: true };\n }\n\n return null;\n };\n }\n\n async updateIndex(index: number, id: string, col: string): Promise<void> {\n await this.ngFire.collection(col).doc(id).update({ index });\n }\n\n /**\n * Extrai o link de criação de índice da mensagem de erro do Firestore\n */\n private extractIndexLink(error: any): string | null {\n if (!error || !error.message) return null;\n\n const linkMatch = error.message.match(\n /(https:\\/\\/console\\.firebase\\.google\\.com\\/[^\\s]+)/\n );\n return linkMatch ? linkMatch[1] : null;\n }\n\n /**\n * Rastreia índices ausentes ao usar fallback preventivo\n */\n private async trackMissingIndexPreventive(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<void> {\n try {\n const querySignature = this.generateQuerySignature(\n collection,\n arrange,\n conditions\n );\n const docId = `${collection}_${querySignature}`;\n\n const indexLink = this.generateIndexLink(collection, arrange, conditions);\n\n const indexInstructions = this.generateIndexInstructions(\n collection,\n arrange,\n conditions\n );\n\n const trackingData: any = {\n collection,\n indexLink,\n indexInstructions,\n arrange: {\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n dateField:\n f.arrange === 'filterByDate' ? arrange.sortBy?.field : null,\n })) || [],\n },\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n errorMessage: `Fallback preventivo usado para a collection ${collection}. A query exigiria índice composto.`,\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n };\n\n console.log('📄 [INDEX LINK] Dados que serão salvos no documento:', {\n docId,\n collection: trackingData.collection,\n indexLink: trackingData.indexLink,\n arrange: trackingData.arrange,\n conditions: trackingData.conditions,\n errorMessage: trackingData.errorMessage,\n });\n\n const docRef = this.ngFire.collection('missingIndexes').doc(docId);\n const doc = await docRef.get().toPromise();\n\n if (doc && doc.exists) {\n await docRef.update({\n count: firebase.firestore.FieldValue.increment(1),\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n lastError: trackingData.errorMessage,\n });\n } else {\n await docRef.set({\n ...trackingData,\n count: 1,\n createdAt: firebase.firestore.FieldValue.serverTimestamp(),\n });\n }\n } catch (trackingError) {\n console.warn('Falha ao rastrear fallback preventivo:', trackingError);\n }\n }\n\n /**\n * Gera uma assinatura única para uma query\n */\n private generateQuerySignature(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): string {\n const signature = {\n collection,\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n })) || [],\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n };\n\n return btoa(JSON.stringify(signature))\n .replace(/[^a-zA-Z0-9]/g, '')\n .substring(0, 20);\n }\n\n /**\n * Gera instruções claras para criar o índice manualmente\n */\n private generateIndexInstructions(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): any {\n const instructions: any = {\n summary: '',\n collection: collection,\n fields: [] as any[],\n queryExample: '',\n stepByStep: [] as string[],\n notes: [] as string[],\n };\n\n const fields: any[] = [];\n\n if (conditions && conditions.length > 0) {\n conditions.forEach((condition: Condition) => {\n if (condition.firestoreProperty) {\n fields.push({\n field: condition.firestoreProperty,\n order: 'Ascending',\n type: 'WHERE clause',\n operator: condition.operator,\n description: `Filtrar por ${condition.firestoreProperty} usando operador ${condition.operator}`,\n });\n }\n });\n }\n\n if (arrange.filters && arrange.filters.length > 0) {\n arrange.filters.forEach((filter: any) => {\n if (filter.filter?.property) {\n fields.push({\n field: filter.filter.property,\n order: 'Ascending',\n type: 'WHERE clause (filter)',\n operator: filter.arrange === 'filter' ? 'CONTAINS' : 'RANGE',\n description: `Filtrar por ${filter.filter.property} usando filtro ${filter.arrange}`,\n });\n }\n });\n }\n\n if (arrange.sortBy?.field) {\n fields.push({\n field: arrange.sortBy.field,\n order: arrange.sortBy.order === 'desc' ? 'Descending' : 'Ascending',\n type: 'ORDER BY clause',\n operator: 'N/A',\n description: `Ordenar resultados por ${arrange.sortBy.field} em ordem ${arrange.sortBy.order}`,\n });\n }\n\n instructions.fields = fields;\n\n const fieldNames = fields.map((f: any) => f.field).join(' + ');\n instructions.summary = `Criar índice composto para ${collection}: ${fieldNames}`;\n\n let queryExample = `db.collection('${collection}')`;\n\n fields.forEach((field: any, index: number) => {\n if (field.type.includes('WHERE')) {\n if (field.operator === '==') {\n queryExample += `\\n .where('${field.field}', '==', 'value')`;\n } else if (field.operator === 'CONTAINS') {\n queryExample += `\\n .where('${field.field}', '>=', 'searchText')`;\n } else {\n queryExample += `\\n .where('${field.field}', '${field.operator}', 'value')`;\n }\n }\n });\n\n const orderByField = fields.find((f: any) => f.type.includes('ORDER BY'));\n if (orderByField) {\n queryExample += `\\n .orderBy('${\n orderByField.field\n }', '${orderByField.order.toLowerCase()}')`;\n }\n\n instructions.queryExample = queryExample;\n\n instructions.stepByStep = [\n '1. Ir para Firebase Console → Firestore → Indexes',\n '2. Clicar em \"Create Index\"',\n `3. Definir Collection ID: ${collection}`,\n '4. Configurar campos nesta ORDEM EXATA:',\n ...fields.map(\n (field: any, index: number) =>\n ` ${index + 1}. Campo: ${field.field}, Order: ${\n field.order\n }, Array: No`\n ),\n '5. Definir Query scopes: Collection',\n '6. Clicar em \"Create\" e aguardar conclusão',\n ];\n\n instructions.notes = [\n '⚠️ A ordem dos campos é CRÍTICA - deve corresponder exatamente à ordem da query',\n '⚠️ As cláusulas WHERE devem vir ANTES do campo ORDER BY',\n '⚠️ Este índice só funcionará para queries com esta combinação EXATA de campos',\n '⚠️ A criação do índice pode levar vários minutos',\n ];\n\n return instructions;\n }\n\n /**\n * Gera um link de índice baseado na estrutura da query\n */\n private generateIndexLink(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): string | null {\n try {\n const indexFields: string[] = [];\n\n if (conditions && conditions.length > 0) {\n conditions.forEach((condition: Condition) => {\n if (condition.firestoreProperty) {\n indexFields.push(condition.firestoreProperty);\n }\n });\n }\n\n if (arrange.filters && arrange.filters.length > 0) {\n arrange.filters.forEach((filter: any) => {\n if (filter.filter?.property) {\n indexFields.push(filter.filter.property);\n }\n });\n }\n\n if (arrange.sortBy?.field) {\n indexFields.push(arrange.sortBy.field);\n }\n\n if (indexFields.length > 1) {\n const baseUrl =\n 'https://console.firebase.google.com/project/toppayy-dev/firestore/indexes';\n const queryParams = new URLSearchParams({\n create_composite: `collection=${collection}&fields=${indexFields.join(\n ','\n )}`,\n });\n\n const finalLink = `${baseUrl}?${queryParams.toString()}`;\n return finalLink;\n }\n\n return null;\n } catch (error) {\n console.warn('Falha ao gerar link de índice:', error);\n return null;\n }\n }\n\n private async trackMissingIndex(\n error: any,\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<void> {\n try {\n const indexLink = this.extractIndexLink(error);\n if (!indexLink) return;\n\n const linkHash = btoa(indexLink)\n .replace(/[^a-zA-Z0-9]/g, '')\n .substring(0, 20);\n const docId = `${collection}_${linkHash}`;\n\n const indexInstructions = this.generateIndexInstructions(\n collection,\n arrange,\n conditions\n );\n\n const trackingData: any = {\n collection,\n indexLink,\n indexInstructions,\n arrange: {\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n dateField:\n f.arrange === 'filterByDate' ? arrange.sortBy?.field : null,\n })) || [],\n },\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n errorMessage: error.message,\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n };\n\n const docRef = this.ngFire.collection('missingIndexes').doc(docId);\n const doc = await docRef.get().toPromise();\n\n if (doc && doc.exists) {\n await docRef.update({\n count: firebase.firestore.FieldValue.increment(1),\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n lastError: error.message,\n });\n } else {\n await docRef.set({\n ...trackingData,\n count: 1,\n createdAt: firebase.firestore.FieldValue.serverTimestamp(),\n });\n }\n } catch (trackingError) {\n console.warn('Falha ao rastrear índice ausente:', trackingError);\n }\n }\n}\n","import { Arrange, Condition, Tab, TabData, TableData } from '../../types/Table';\nimport { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport {\n AngularFirestore,\n QueryDocumentSnapshot,\n} from '@angular/fire/compat/firestore';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { TableService } from '../../services/table.service';\nimport { debounceTime, firstValueFrom, Subject } from 'rxjs';\nimport { OrderByDirection } from 'firebase/firestore';\nimport firebase from 'firebase/compat';\nimport WhereFilterOp = firebase.firestore.WhereFilterOp;\nimport firestore = firebase.firestore;\nimport { FormControl, FormArray, FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'lib-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class TableComponent implements OnInit {\n // INPUTS\n @Input() data!: TableData;\n @Input() downloadTable?: (arrange: Arrange, conditions: Condition[]) => void;\n arrange: Arrange | null = null;\n // VARIABLES\n dataSource!: MatTableDataSource<any>;\n currentPageNumber = 1;\n currentClientPageIndex = 0;\n\n public items: any[] = [];\n public filteredItems: any[] = []; // Dados filtrados para modo não paginado (público para acesso externo)\n public isLoading = false;\n private lastDoc: QueryDocumentSnapshot<any> | null = null;\n private firstDoc: QueryDocumentSnapshot<any> | null = null;\n private sortBy: { field: string; order: OrderByDirection } = {\n field: 'createdAt',\n order: 'desc',\n };\n public columnProperties: string[] = [];\n\n filtersForm: FormArray;\n\n selectSort: FormControl = new FormControl('');\n currentArrange = '';\n\n hasNextPage: boolean = false;\n\n dropdownItems: any[] = [];\n sortableDropdownItems: any[] = [];\n pageSize = 25;\n totalItems = 0;\n pageEvent?: PageEvent;\n filterValue: string | null = null;\n\n hasFilterableColumn: boolean = false;\n hasSortableColumn: boolean = false;\n filterPredicate: ((data: any, filter: string) => boolean) | undefined;\n private filterSubject = new Subject<string>();\n private readonly debounceTimeMs = 500;\n\n selectedTab: number = 0;\n\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n\n // Propriedades para controle do tooltip\n hoveredCell: { row: any; col: any } | null = null;\n showTooltip: boolean = false;\n tooltipTimeout: any;\n tooltipContent: string = '';\n tooltipPosition: { x: number; y: number } = { x: 0, y: 0 };\n\n // CONSTRUCTOR\n constructor(\n private router: Router,\n private tableService: TableService,\n private firestore: AngularFirestore\n ) {\n this.filtersForm = new FormArray([this.createFilterGroup()]);\n }\n\n createFilterGroup(): FormGroup {\n return new FormGroup({\n selectFilter: new FormControl(''),\n typeFilter: new FormControl(''),\n selectItem: new FormControl(''),\n initialDate: new FormControl('', this.tableService.dateFormatValidator()),\n finalDate: new FormControl('', this.tableService.dateFormatValidator()),\n });\n }\n\n addFilter(filterData?: {\n selectFilter: any;\n typeFilter?: string;\n selectItem?: any[];\n initialDate?: string;\n finalDate?: string;\n }): void {\n const newFilterGroup = this.createFilterGroup();\n\n if (filterData) {\n if (filterData.selectFilter) {\n newFilterGroup.get('selectFilter')?.setValue(filterData.selectFilter);\n }\n if (filterData.typeFilter) {\n newFilterGroup.get('typeFilter')?.setValue(filterData.typeFilter);\n }\n if (filterData.selectItem) {\n newFilterGroup.get('selectItem')?.setValue(filterData.selectItem);\n }\n if (filterData.initialDate) {\n newFilterGroup.get('initialDate')?.setValue(filterData.initialDate);\n }\n if (filterData.finalDate) {\n newFilterGroup.get('finalDate')?.setValue(filterData.finalDate);\n }\n }\n\n this.filtersForm.push(newFilterGroup);\n }\n\n onSelectFilterChange() {\n const lastIndex = this.filtersForm.length - 1;\n const lastFilter = this.filtersForm.at(lastIndex);\n if (lastFilter.get('selectFilter')?.value) {\n this.addFilter();\n }\n }\n\n removeFilter(index: number): void {\n this.filtersForm.removeAt(index);\n if (this.filtersForm.length === 0) {\n this.addFilter();\n }\n }\n\n removeAllFilters(): void {\n this.filtersForm.clear();\n this.addFilter();\n this.resetFilter();\n }\n\n // METHODS\n public async ngOnInit() {\n if (!this.data.color)\n this.data.color = { bg: 'bg-primary', text: 'text-black' };\n this.columnProperties = this.data.displayedColumns.map((column) => {\n return column.property;\n });\n\n if (this.data.actionButton && !this.data.actionButton.condition) {\n this.data.actionButton.condition = (_row?: any) => true;\n }\n\n this.data.displayedColumns.forEach((col) => {\n if (col.isFilterable) {\n if (this.hasFilterableColumn === false) this.hasFilterableColumn = true;\n\n this.dropdownItems.push({\n ...col,\n arrange: 'filter',\n title: col.title,\n });\n }\n if (col.isSortable) {\n if (this.hasSortableColumn === false) this.hasSortableColumn = true;\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'ascending',\n title: col.title + ': crescente',\n });\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'descending',\n title: col.title + ': decrescente',\n });\n }\n if (col.isFilterableByDate) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filterByDate',\n title: col.title + ': filtro por data',\n });\n }\n });\n if (\n this.data.filterableOptions &&\n Array.isArray(this.data.filterableOptions) &&\n this.data.filterableOptions.length > 0\n ) {\n this.data.filterableOptions.forEach((option) =>\n this.dropdownItems.push({ ...option, arrange: 'equals' })\n );\n }\n\n // Sem paginação\n if (this.data.pagination === false) {\n await this.loadItems();\n }\n // Com paginação\n if (this.data.pagination === true) {\n if (this.data.sortBy)\n this.sortBy = {\n field: this.data.sortBy.field,\n order: this.data.sortBy.order,\n };\n this.filterSubject\n .pipe(debounceTime(this.debounceTimeMs))\n .subscribe(() => {\n this.loadItemsPaginated('reload', true);\n });\n\n this.isLoading = true;\n await this.loadItemsPaginated('reload', true);\n\n this.sort.active = 'createdAt';\n this.sort.direction = 'desc';\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n this.totalItems = 0;\n if (this.data.totalRef) {\n for (const totalRef of this.data.totalRef) {\n const totalRefDoc = await totalRef.ref.get();\n const docData = totalRefDoc.data() as any;\n if (docData && docData[totalRef.field])\n this.totalItems = (this.totalItems +\n docData[totalRef.field]) as number;\n }\n }\n this.isLoading = false;\n }\n }\n\n getDisplayValue(col: any, row: any, withinLimit: boolean = false): string {\n let value: any;\n\n if (col.calculateValue) {\n value = col.calculateValue(row);\n } else {\n value = this.getNestedValue(row, col.property);\n }\n\n if (Array.isArray(value) && col.arrayField) {\n value = this.formatArrayValue(value, col.arrayField);\n }\n\n if (col.queryLength && row[col.property]) {\n value = row[col.property];\n }\n\n value = col.pipe ? col.pipe.transform(value) : value;\n\n if (value === null || value === undefined) {\n value = '';\n } else {\n value = String(value);\n }\n\n if (typeof value !== 'string') {\n value = '';\n }\n\n if (withinLimit || !col.charLimit) {\n return value;\n }\n\n return value.substring(0, col.charLimit) + '...';\n }\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return undefined;\n const properties = path.split('.');\n return properties.reduce(\n (acc, currentPart) => acc && acc[currentPart],\n obj\n );\n }\n\n private formatArrayValue(array: any[], field: string): string {\n if (!Array.isArray(array) || array.length === 0) {\n return '';\n }\n\n const values = array\n .map((item) => {\n if (typeof item === 'object' && item !== null) {\n return item[field] || '';\n }\n return String(item);\n })\n .filter((value) => value !== '' && value !== null && value !== undefined);\n\n return values.join(', ');\n }\n\n // Métodos sem paginação\n private async loadItems() {\n this.items = await this.tableService.getItems(this.data.collectionRef);\n if (this.data.conditions) {\n this.filterItems();\n }\n await this.loadRelations();\n await this.loadQueryLengths();\n this.totalItems = this.items.length;\n\n // Inicializar arrange para tabelas não paginadas\n this.arrange = {\n filters: [],\n sortBy: this.data.sortBy || {\n field: 'createdAt',\n order: 'desc',\n },\n };\n this.sortBy = this.data.sortBy || {\n field: 'createdAt',\n order: 'desc',\n };\n\n // Aplicar filtros client-side se existirem\n let itemsToDisplay = [...this.items];\n itemsToDisplay = this.applyClientSideFilters(itemsToDisplay);\n this.filteredItems = itemsToDisplay; // Armazenar dados filtrados\n\n this.dataSource = new MatTableDataSource(itemsToDisplay);\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n if (this.data.sortBy) {\n this.dataSource.sort.active = this.data.sortBy.field;\n this.dataSource.sort.direction = this.data.sortBy.order;\n this.dataSource.sort.sortChange.emit();\n }\n\n this.dataSource.filterPredicate = (data, filter: string) => {\n return this.data.displayedColumns.some((col): boolean => {\n if (col.filterPredicates) {\n return col.filterPredicates.some((predicate): boolean => {\n const propertyValue = data[col.property];\n if (!propertyValue || typeof propertyValue !== 'object') {\n return false;\n }\n\n const predicateValue = propertyValue[predicate];\n if (predicateValue === null || predicateValue === undefined) {\n return false;\n }\n\n return String(predicateValue)\n .trim()\n .toLocaleLowerCase()\n .includes(filter);\n });\n }\n\n if (col.property && col.isFilterable) {\n const propertyValue = data[col.property];\n if (propertyValue === null || propertyValue === undefined) {\n return false;\n }\n\n return String(propertyValue)\n .trim()\n .toLocaleLowerCase()\n .includes(filter);\n }\n return false;\n });\n };\n this.filterPredicate = this.dataSource.filterPredicate;\n }\n\n // Aplicar filtros client-side (filtros por data)\n private applyClientSideFilters(items: any[]): any[] {\n let filteredItems = [...items];\n\n // Agrupar filtros de data por propriedade\n const dateFiltersByProperty: Record<\n string,\n Array<{ initial: Date; final: Date }>\n > = {};\n const otherFilters: Array<{\n group: FormGroup;\n selectedFilter: any;\n arrange: string;\n }> = [];\n\n // Primeira passada: separar filtros de data dos outros filtros\n this.filtersForm.controls.forEach((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return;\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n\n // Só aplicar filtro se ambas as datas estiverem preenchidas\n if (initial && final && initial.trim() && final.trim()) {\n try {\n // Validar formato da data (DD/MM/AAAA)\n const datePattern = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/;\n if (!datePattern.test(initial) || !datePattern.test(final)) {\n return; // Ignorar se formato inválido\n }\n\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n\n // Validar se as datas são válidas\n if (isNaN(initialDate.getTime()) || isNaN(finalDate.getTime())) {\n return; // Ignorar se datas inválidas\n }\n\n // Usar o campo da coluna ou o sortBy.field como padrão\n const dateField = selectedFilter.property || this.sortBy.field;\n\n if (!dateFiltersByProperty[dateField]) {\n dateFiltersByProperty[dateField] = [];\n }\n\n dateFiltersByProperty[dateField].push({\n initial: initialDate,\n final: finalDate,\n });\n } catch (error) {\n console.warn('Erro ao processar datas do filtro:', error);\n }\n }\n } else {\n // Outros tipos de filtros (texto, equals, etc)\n otherFilters.push({ group, selectedFilter, arrange });\n }\n });\n\n // Aplicar filtros de data com OR lógico para o mesmo campo\n Object.keys(dateFiltersByProperty).forEach((dateField) => {\n const intervals = dateFiltersByProperty[dateField];\n\n filteredItems = filteredItems.filter((item: any) => {\n try {\n const fieldValue = item[dateField];\n\n if (!fieldValue) {\n return false;\n }\n\n let itemDate: Date;\n if (typeof fieldValue.toDate === 'function') {\n itemDate = fieldValue.toDate();\n } else if (fieldValue instanceof Date) {\n itemDate = fieldValue;\n } else if (typeof fieldValue === 'string') {\n itemDate = new Date(fieldValue);\n if (isNaN(itemDate.getTime())) {\n return false;\n }\n } else if (typeof fieldValue === 'number') {\n itemDate = new Date(fieldValue);\n } else {\n return false;\n }\n\n // OR lógico: item deve estar em QUALQUER um dos intervalos\n return intervals.some(\n (interval) => itemDate >= interval.initial && itemDate <= interval.final\n );\n } catch (error) {\n console.warn(\n 'Erro ao processar filtro de data para o item:',\n item.id,\n error\n );\n return false;\n }\n });\n });\n\n // Aplicar outros filtros (texto, equals, etc) - AND lógico entre diferentes tipos\n otherFilters.forEach(({ group, selectedFilter, arrange }) => {\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (filterValue && filterValue.trim()) {\n const property = selectedFilter.property;\n filteredItems = filteredItems.filter((item: any) => {\n const value = String(item[property] || '')\n .trim()\n .toLocaleLowerCase();\n return value.includes(filterValue.trim().toLocaleLowerCase());\n });\n }\n } else if (\n selectedFilter.hasOwnProperty('items') &&\n arrange === 'equals'\n ) {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n const values = selectedItems.map((item: any) => item.value);\n filteredItems = filteredItems.filter((item: any) => {\n return selectedItems.some((selectedItem: any) => {\n const itemValue = item[selectedItem.property];\n return itemValue === selectedItem.value;\n });\n });\n }\n }\n });\n\n return filteredItems;\n }\n\n // Handler para mudanças de data no filtro\n onDateFilterChange(): void {\n if (this.data.pagination === false) {\n // Atualizar arrange com os filtros ativos\n this.arrange = this.buildArrangeFromFilters();\n // Aplicar filtros (ou remover se campos estiverem vazios)\n this.applyFiltersToDataSource();\n }\n }\n\n // Aplicar filtros ao dataSource quando não há paginação\n private applyFiltersToDataSource(): void {\n if (!this.dataSource) return;\n\n let filteredItems = this.applyClientSideFilters([...this.items]);\n this.dataSource.data = filteredItems;\n // Atualizar filteredItems com os dados filtrados (será atualizado novamente no handleDownload com filteredData)\n this.filteredItems = filteredItems;\n this.totalItems = filteredItems.length;\n }\n\n // Métodos com paginação\n private async loadItemsPaginated(\n navigation: string = 'reload',\n reset: boolean = false\n ) {\n if (reset && ['forward', 'reload'].includes(navigation)) {\n this.lastDoc = null;\n this.currentClientPageIndex = 0;\n }\n if (reset && ['backward', 'reload'].includes(navigation)) {\n this.firstDoc = null;\n this.currentClientPageIndex = 0;\n }\n\n const activeFilters = this.filtersForm.controls\n .flatMap((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return [];\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (!filterValue) return [];\n return {\n arrange,\n filter: {\n property: selectedFilter.property,\n filtering: filterValue,\n },\n dateFilter: undefined,\n };\n }\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n if (initial && final) {\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n return {\n arrange,\n filter: undefined,\n dateFilter: {\n initial: initialDate,\n final: finalDate,\n },\n };\n }\n return [];\n }\n\n if (selectedFilter.hasOwnProperty('items') && arrange === 'equals') {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n return selectedItems.map((item) => ({\n arrange,\n filter: {\n property: item.property,\n filtering: item.value,\n },\n dateFilter: undefined,\n }));\n }\n }\n\n return [];\n })\n .filter((f) => f && (f.filter?.filtering !== undefined || f.dateFilter));\n\n this.arrange = {\n filters: activeFilters,\n sortBy: this.sortBy,\n };\n\n const paginated: any = {\n batchSize: this.pageSize,\n collection: this.data.collection,\n doc: { lastDoc: this.lastDoc, firstDoc: this.firstDoc },\n navigation,\n arrange: this.arrange,\n conditions: this.data.conditions,\n size: this.totalItems,\n filterFn: this.data.filterFn,\n clientPageIndex: this.currentClientPageIndex,\n };\n\n const result = await this.tableService.getPaginated(paginated);\n this.items = result.items;\n await this.loadRelations();\n await this.loadQueryLengths();\n this.lastDoc = result.lastDoc as any;\n this.firstDoc = result.firstDoc as any;\n\n // Atualizar currentClientPageIndex se retornado pelo fallback\n if (result.currentClientPageIndex !== undefined) {\n this.currentClientPageIndex = result.currentClientPageIndex;\n }\n\n let sum = 0;\n if (this.data.totalRef) {\n for (const totalRef of this.data.totalRef) {\n const totalRefDoc = await totalRef.ref.get();\n const docData = totalRefDoc.data() as any;\n if (docData || result.filterLength) {\n sum =\n result.filterLength ??\n ((sum + (docData ? docData[totalRef.field] : 0)) as number);\n }\n }\n this.totalItems = sum;\n }\n\n this.hasNextPage = result.hasNextPage;\n this.dataSource = new MatTableDataSource(this.items);\n this.filterPredicate = this.dataSource.filterPredicate;\n }\n\n async onPageChange(event?: PageEvent) {\n if (this.data.pagination === true && event) {\n this.isLoading = true;\n\n const previousPageIndex = event.previousPageIndex ?? 0;\n const pageIndex = event.pageIndex;\n const currentComponentPageSize = this.pageSize;\n const eventPageSize = event.pageSize;\n const totalItems = this.totalItems;\n\n let navigationDirection: string;\n let resetDocs = false;\n let originalPageSize: number | null = null;\n\n const lastPageIndex = Math.max(\n 0,\n Math.ceil(totalItems / eventPageSize) - 1\n );\n\n // Atualizar currentClientPageIndex sempre para o fallback\n this.currentClientPageIndex = pageIndex;\n\n if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {\n this.currentPageNumber++;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n this.currentPageNumber = Math.max(1, this.currentPageNumber - 1);\n }\n\n if (eventPageSize !== currentComponentPageSize) {\n console.log('Alterou a quantidade de elementos exibidos por página');\n this.pageSize = eventPageSize;\n navigationDirection = 'forward';\n resetDocs = true;\n this.currentClientPageIndex = 0;\n } else if (\n pageIndex === 0 &&\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n console.log('Pulou para a primeira página');\n navigationDirection = 'forward';\n this.currentPageNumber = 1;\n this.currentClientPageIndex = 0;\n resetDocs = true;\n } else if (\n pageIndex === lastPageIndex &&\n previousPageIndex !== undefined &&\n pageIndex > previousPageIndex &&\n pageIndex - previousPageIndex > 1\n ) {\n console.log('Pulou para a ultima página');\n navigationDirection = 'backward';\n resetDocs = true;\n\n const itemsExpectedInLastPage =\n totalItems - lastPageIndex * eventPageSize;\n\n if (\n itemsExpectedInLastPage > 0 &&\n itemsExpectedInLastPage < eventPageSize\n ) {\n originalPageSize = this.pageSize;\n this.pageSize = itemsExpectedInLastPage;\n }\n } else if (\n previousPageIndex !== undefined &&\n pageIndex > previousPageIndex\n ) {\n console.log('Procedendo');\n navigationDirection = 'forward';\n resetDocs = false;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n console.log('Retrocedendo.');\n navigationDirection = 'backward';\n resetDocs = false;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex === previousPageIndex\n ) {\n console.log('Recarregando.');\n navigationDirection = 'reload';\n resetDocs = false;\n } else if (previousPageIndex === undefined && pageIndex === 0) {\n console.log(\n 'Evento inicial do paginador para pág 0. ngOnInit carregou.'\n );\n this.isLoading = false;\n if (event) this.pageEvent = event;\n return;\n } else {\n console.warn('INESPERADO! Condição de navegação não tratada:', event);\n this.isLoading = false;\n if (event) this.pageEvent = event;\n return;\n }\n\n if (navigationDirection) {\n try {\n await this.loadItemsPaginated(navigationDirection, resetDocs);\n } catch (error) {\n console.error('Erro ao carregar itens paginados:', error);\n } finally {\n if (originalPageSize !== null) {\n this.pageSize = originalPageSize;\n }\n }\n }\n\n if (event) this.pageEvent = event;\n this.isLoading = false;\n }\n }\n\n // Outros métodos\n\n applyFilter(value: string) {\n // Sem paginação\n if (this.data.pagination === false) {\n this.dataSource.filter = String(value).trim().toLowerCase();\n }\n // Com paginação\n if (this.data.pagination === true) {\n this.filterValue = value;\n this.filterSubject.next(this.filterValue);\n }\n }\n\n goToDetails(row: any): void {\n if (this.data.isNotClickable) {\n return;\n }\n const urlPath = this.data.url || this.data.name;\n const url = this.router.serializeUrl(\n this.router.createUrlTree([`/${urlPath}`, row.id])\n );\n window.open(url, '_blank');\n }\n\n async getRelation(params: {\n id: any;\n collection: string;\n newProperty: string;\n }): Promise<string> {\n try {\n let snapshot: firestore.DocumentSnapshot<unknown> | undefined;\n if (\n params.id !== '' &&\n params.id !== undefined &&\n params.collection !== undefined &&\n params.collection !== ''\n ) {\n snapshot = await firstValueFrom(\n this.firestore.collection(params.collection).doc(params.id).get()\n );\n }\n if (snapshot && snapshot.exists) {\n const data = snapshot.data() as any;\n return data?.[params.newProperty] ?? '';\n }\n return '';\n } catch (e) {\n console.log(e);\n return '';\n }\n }\n\n private async loadRelations() {\n const relationPromises = this.data.displayedColumns\n .filter((col) => col.relation)\n .flatMap((col) =>\n this.items.map(async (item) => {\n if (col.relation) {\n item[col.property] = await this.getRelation({\n id: item[col.relation.property],\n collection: col.relation.collection,\n newProperty: col.relation.newProperty,\n });\n }\n })\n );\n\n await Promise.all(relationPromises);\n }\n\n async getQueryLength(params: {\n item: any;\n relation: {\n collection: string;\n property: string;\n operator: WhereFilterOp;\n value: string;\n };\n }) {\n const snapshot = await this.firestore\n .collection(params.relation.collection)\n .ref.where(\n params.relation.property,\n params.relation.operator,\n params.item[params.relation.value]\n )\n .get();\n return snapshot.size;\n }\n\n private async loadQueryLengths() {\n const lengthPromises = this.data.displayedColumns\n .filter((col) => col.queryLength)\n .flatMap((col) =>\n this.items.map(async (item) => {\n if (col.queryLength) {\n item[col.property] = await this.getQueryLength({\n item: item,\n relation: col.queryLength,\n });\n }\n })\n );\n await Promise.all(lengthPromises);\n }\n\n private filterItems() {\n if (this.data.conditions) {\n this.data.conditions.forEach((cond) => {\n this.items = this.items.filter((item) => {\n const operatorFunction = (this.tableService.operators as any)[\n cond.operator\n ];\n if (operatorFunction) {\n return operatorFunction(\n item[cond.firestoreProperty],\n cond.dashProperty\n );\n }\n return false;\n });\n });\n }\n }\n\n private buildArrangeFromFilters(): Arrange {\n const activeFilters = this.filtersForm.controls\n .flatMap((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return [];\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (!filterValue) return [];\n return {\n arrange,\n filter: {\n property: selectedFilter.property,\n filtering: filterValue,\n },\n dateFilter: undefined,\n };\n }\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n if (initial && final) {\n try {\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n return {\n arrange,\n filter: undefined,\n dateFilter: {\n initial: initialDate,\n final: finalDate,\n },\n };\n } catch (error) {\n return [];\n }\n }\n return [];\n }\n\n if (selectedFilter.hasOwnProperty('items') && arrange === 'equals') {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n return selectedItems.map((item) => ({\n arrange,\n filter: {\n property: item.property,\n filtering: item.value,\n },\n dateFilter: undefined,\n }));\n }\n }\n\n return [];\n })\n .filter((f) => f && (f.filter?.filtering !== undefined || f.dateFilter));\n\n return {\n filters: activeFilters,\n sortBy: this.sortBy,\n };\n }\n\n // Filtro de data\n async search() {\n if (this.selectSort.value) {\n if (this.selectSort.value.arrange === 'ascending') {\n this.sortBy = {\n field: this.selectSort.value.property,\n order: 'asc',\n };\n }\n if (this.selectSort.value.arrange === 'descending') {\n this.sortBy = {\n field: this.selectSort.value.property,\n order: 'desc',\n };\n }\n }\n\n // Sem paginação: aplicar filtros client-side\n if (this.data.pagination === false) {\n // Atualizar arrange com os filtros ativos\n this.arrange = this.buildArrangeFromFilters();\n this.applyFiltersToDataSource();\n this.currentArrange =\n this.filtersForm.length > 0\n ? this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? ''\n : '';\n } else {\n // Com paginação: comportamento original\n await this.loadItemsPaginated('reload', true);\n this.currentArrange =\n this.filtersForm.length > 0\n ? this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? ''\n : '';\n this.paginator.firstPage();\n }\n }\n\n async resetFilter() {\n this.dataSource.filter = '';\n if (this.filterPredicate) {\n this.dataSource.filterPredicate = this.filterPredicate;\n }\n\n this.filtersForm.clear();\n this.addFilter();\n this.selectSort.patchValue('');\n this.sortBy = {\n order: this.data.sortBy ? this.data.sortBy.order : 'desc',\n field: this.data.sortBy ? this.data.sortBy.field : 'createdAt',\n };\n\n // Sem paginação: recarregar itens originais\n if (this.data.pagination === false) {\n // Resetar arrange para valores padrão\n this.arrange = {\n filters: [],\n sortBy: this.sortBy,\n };\n this.dataSource.data = [...this.items];\n this.totalItems = this.items.length;\n this.currentArrange = '';\n } else {\n // Com paginação: comportamento original\n await this.loadItemsPaginated('reload', true);\n this.currentArrange = '';\n this.paginator.firstPage();\n }\n }\n\n // Método público para recarregar a tabela\n async reloadTable() {\n if (this.data.pagination) {\n await this.loadItemsPaginated('reload', true);\n this.paginator.firstPage();\n } else {\n await this.loadItems();\n }\n }\n\n updateDisplayedColumns() {\n if (this.dataSource) {\n this.dataSource = new MatTableDataSource<any>([]);\n }\n\n this.columnProperties = this.data.displayedColumns.map((column) => {\n return column.property;\n });\n\n this.dropdownItems = [];\n this.sortableDropdownItems = [];\n\n this.data.displayedColumns.forEach((col) => {\n if (col.isFilterable) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filter',\n title: col.title,\n });\n }\n if (col.isSortable) {\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'ascending',\n title: col.title + ': crescente',\n });\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'descending',\n title: col.title + ': decrescente',\n });\n }\n if (col.isFilterableByDate) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filterByDate',\n title: col.title + ': filtro por data',\n });\n }\n });\n\n if (\n this.data.filterableOptions &&\n Array.isArray(this.data.filterableOptions)\n ) {\n this.data.filterableOptions.forEach((option) =>\n this.dropdownItems.push({ ...option, arrange: 'equals' })\n );\n }\n }\n\n isString(value: any): boolean {\n return typeof value === 'string';\n }\n\n // Métodos para controle do tooltip\n onCellMouseEnter(event: MouseEvent, row: any, col: any): void {\n // Só mostrar tooltip se a coluna tiver charLimit definido\n if (!col.charLimit) {\n return;\n }\n\n const fullValue = this.getDisplayValue(col, row, true);\n\n // Só mostrar tooltip se o valor completo for maior que o limite\n if (fullValue.length <= col.charLimit) {\n return;\n }\n\n this.hoveredCell = { row, col };\n this.tooltipContent = fullValue;\n\n // Definir posição do tooltip\n this.tooltipPosition = {\n x: event.clientX + 10,\n y: event.clientY - 10,\n };\n\n // Timeout para mostrar o tooltip\n this.tooltipTimeout = setTimeout(() => {\n if (\n this.hoveredCell &&\n this.hoveredCell.row === row &&\n this.hoveredCell.col === col\n ) {\n this.showTooltip = true;\n }\n }, 500);\n }\n\n onCellMouseLeave(): void {\n if (this.tooltipTimeout) {\n clearTimeout(this.tooltipTimeout);\n this.tooltipTimeout = null;\n }\n\n this.showTooltip = false;\n this.hoveredCell = null;\n this.tooltipContent = '';\n }\n\n onCellMouseMove(event: MouseEvent): void {\n if (this.showTooltip) {\n this.tooltipPosition = {\n x: event.clientX + 10,\n y: event.clientY - 10,\n };\n }\n }\n\n // Métodos para inversão vertical dos tabs\n getTabGroups(tabs: any[]): number[] {\n if (!tabs || tabs.length === 0) return [];\n\n const totalGroups = Math.ceil(tabs.length / 6);\n const groups: number[] = [];\n\n // Criar array de índices invertidos (último grupo primeiro)\n for (let i = totalGroups - 1; i >= 0; i--) {\n groups.push(i);\n }\n\n return groups;\n }\n\n getTabGroup(tabs: any[], groupIndex: number): any[] {\n if (!tabs || tabs.length === 0) return [];\n\n const startIndex = groupIndex * 6;\n const endIndex = Math.min(startIndex + 6, tabs.length);\n\n return tabs.slice(startIndex, endIndex);\n }\n\n getRealTabIndex(groupIndex: number, tabIndexInGroup: number): number {\n if (!this.data.tabs?.tabsData) return 0;\n const totalGroups = Math.ceil(this.data.tabs.tabsData.length / 6);\n const realGroupIndex = totalGroups - 1 - groupIndex;\n return realGroupIndex * 6 + tabIndexInGroup;\n }\n\n onTableSelected(i: number, j: number) {\n if (!this.data.tabs?.tabsData || !this.data.tabs.method) return;\n this.selectedTab = this.getRealTabIndex(i, j);\n const tab = this.data.tabs.tabsData[this.selectedTab];\n if (tab) {\n this.data.tabs.method(tab, this.selectedTab);\n }\n }\n\n isTabSelected(originalIndex: number): boolean {\n return this.selectedTab === originalIndex;\n }\n\n shouldShowActionButton(): boolean {\n if (!this.data?.actionButton) {\n return false;\n }\n\n if (!this.data.actionButton.condition) {\n return true;\n }\n\n try {\n return this.data.actionButton.condition(null) ?? true;\n } catch {\n return true;\n }\n }\n\n // Método para lidar com download (diferente para paginado e não paginado)\n handleDownload(): void {\n if (!this.downloadTable) return;\n\n // Se não há paginação, usar dados filtrados do dataSource\n if (this.data.pagination === false) {\n // Atualizar filteredItems com os dados filtrados do dataSource\n // (que já inclui filtro de texto aplicado via filterPredicate)\n if (this.dataSource && this.dataSource.filteredData) {\n this.filteredItems = [...this.dataSource.filteredData];\n }\n\n // Construir arrange com os filtros ativos (se houver)\n const arrange = this.buildArrangeFromFilters();\n this.downloadTable(arrange, this.data.conditions || []);\n } else {\n // Modo paginado: usar arrange existente (comportamento original)\n if (this.arrange) {\n this.downloadTable(this.arrange, this.data.conditions || []);\n }\n }\n }\n}\n","<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title, Custom Action, and Global Actions -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e Ações</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"\n (data.actionButton.colorClass || 'bg-blue-500') +\n ' flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70'\n \"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 rounded-lg border border-gray-200 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option *ngFor=\"let item of dropdownItems\" [value]=\"item\">\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search()\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search()\"\n formControlName=\"initialDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n (keyup.enter)=\"search()\"\n matInput\n formControlName=\"finalDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Sort -->\n <div\n class=\"-mb-2 flex flex-col items-center justify-between gap-4 border-t border-gray-200 pt-4 sm:flex-row\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Sort Dropdown -->\n <div\n class=\"w-full sm:w-auto sm:min-w-[250px]\"\n *ngIf=\"sortableDropdownItems.length > 0\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Ordenar por</mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH (for non-paginated tables) -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"data.pagination === false && hasFilterableColumn === true\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search()\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n <button\n *ngIf=\"data.actionButton\"\n [ngClass]=\"\n (data.actionButton.colorClass || 'bg-blue-500') +\n ' float-right flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70'\n \"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i *ngIf=\"data.actionButton.icon\" [class]=\"data.actionButton.icon\"></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n\n <!-- FILTERS PANEL (for non-paginated tables) -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"data.pagination === false && dropdownItems.length > 0\"\n >\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 rounded-lg border border-gray-200 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option *ngFor=\"let item of dropdownItems\" [value]=\"item\">\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search()\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search()\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n (keyup.enter)=\"search()\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex flex-col items-center justify-between gap-4 border-t border-gray-200 pt-4 sm:flex-row\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex flex-wrap gap-3\">\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Aplicar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <div\n class=\"mx-auto flex flex-col\"\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n >\n <!-- Calcular quantos grupos de 6 tabs existem -->\n <ng-container\n *ngFor=\"\n let groupIndex of getTabGroups(data.tabs.tabsData);\n let i = index\n \"\n >\n <div class=\"mx-auto flex flex-row\">\n <ng-container\n *ngFor=\"\n let tab of getTabGroup(data.tabs.tabsData, groupIndex);\n let j = index\n \"\n >\n <button\n class=\"border-2 border-gray-300 bg-gray-200 px-4 py-2 font-medium transition hover:brightness-95\"\n [ngClass]=\"\n isTabSelected(getRealTabIndex(i, j))\n ? 'border-b-0 brightness-110'\n : ''\n \"\n (click)=\"onTableSelected(i, j)\"\n >\n {{ tab.label }}\n <span\n *ngIf=\"tab.counter !== undefined\"\n class=\"ml-2 text-xs font-bold\"\n [ngClass]=\"tab.counterClass\"\n >\n {{ tab.counter }}\n </span>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n [ngClass]=\"\n (data.color?.bg ? ' ' + $any(data.color).bg : '') +\n (data.color?.text ? ' ' + $any(data.color).text : '')\n \"\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n [ngClass]=\"\n (data.color?.bg ? ' ' + $any(data.color).bg : '') +\n (data.color?.text ? ' ' + $any(data.color).text : '')\n \"\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <img\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n alt=\"Imagem\"\n />\n <img\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n alt=\"Imagem\"\n />\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"{\n 'example-element-row': data.isNotClickable === true,\n 'example-element-row cursor-pointer': !data.isNotClickable\n }\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!isLoading\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"{\n 'hide-length':\n ['filter', 'filterByDate', 'equals'].includes(\n this.currentArrange\n ) || this.data.filterFn,\n 'hide-next-button': !hasNextPage && data.pagination === true,\n 'hide-last-button':\n (!hasNextPage && data.pagination === true) || this.data.filterFn\n }\"\n >\n </mat-paginator>\n <div\n *ngIf=\"\n !isLoading &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <div\n *ngIf=\"showTooltip\"\n class=\"fixed z-50 max-w-md break-words rounded-lg bg-gray-800 px-3 py-2 text-sm text-white shadow-lg\"\n [style.left.px]=\"tooltipPosition.x\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.pointer-events]=\"'none'\"\n >\n {{ tooltipContent }}\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\n// Angular Material\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialogModule } from '@angular/material/dialog';\n\n// Third-party\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\n\n// Components\nimport { NgFirebaseTableKxpComponent } from './ng-firebase-table-kxp.component';\nimport { TableComponent } from './components/table/table.component';\n\n// Services\nimport { TableService } from './services/table.service';\n\n@NgModule({\n declarations: [NgFirebaseTableKxpComponent, TableComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n RouterModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n MatIconModule,\n MatDialogModule,\n NgxMaskDirective,\n NgxMaskPipe,\n ],\n exports: [NgFirebaseTableKxpComponent, TableComponent],\n providers: [provideNgxMask()],\n})\nexport class NgFirebaseTableKxpModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFirebaseTableKxpService {\n constructor() {}\n}\n","/*\n * Public API Surface of ng-firebase-table-kxp\n */\n\n// Main module\nexport * from './lib/ng-firebase-table-kxp.module';\n\n// Legacy components (se existirem)\nexport * from './lib/ng-firebase-table-kxp.service';\nexport * from './lib/ng-firebase-table-kxp.component';\n\n// Components\nexport * from './lib/components/table/table.component';\n\n// Services\nexport * from './lib/services/table.service';\n\n// Types\nexport * from './lib/types/Table';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TableService","i3"],"mappings":"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"}
1
+ {"version":3,"file":"ng-firebase-table-kxp.mjs","sources":["../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.component.ts","../../../projects/ng-firebase-table-kxp/src/lib/services/table.service.ts","../../../projects/ng-firebase-table-kxp/src/lib/components/table/table.component.ts","../../../projects/ng-firebase-table-kxp/src/lib/components/table/table.component.html","../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.module.ts","../../../projects/ng-firebase-table-kxp/src/lib/ng-firebase-table-kxp.service.ts","../../../projects/ng-firebase-table-kxp/src/public-api.ts","../../../projects/ng-firebase-table-kxp/src/ng-firebase-table-kxp.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ng-firebase-table-kxp',\n template: ` <p>ng-firebase-table-kxp works!</p> `,\n styles: [],\n})\nexport class NgFirebaseTableKxpComponent {}\n","import { Injectable, Optional } from '@angular/core';\nimport {\n AngularFirestore,\n CollectionReference,\n QueryDocumentSnapshot,\n} from '@angular/fire/compat/firestore';\nimport firebase from 'firebase/compat/app';\nimport { Arrange, Condition, Pagination } from '../types/Table';\nimport { firstValueFrom } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ToastrService } from 'ngx-toastr';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport * as moment from 'moment';\n\ninterface PaginationResult {\n items: any[];\n filterLength: number | null;\n firstDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null;\n lastDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null;\n hasNextPage: boolean;\n hasPreviousPage?: boolean;\n currentClientPageIndex?: number;\n totalPages?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TableService {\n constructor(\n @Optional() private ngFire: AngularFirestore,\n @Optional() private dialog: MatDialog,\n @Optional() private toastr: ToastrService\n ) {}\n\n async getItems(collection: CollectionReference<unknown>): Promise<any[]> {\n try {\n const querySnapshot = await collection.get();\n return querySnapshot.docs.map(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n return { ...(doc.data() as any), id: doc.id };\n }\n );\n } catch (error) {\n console.warn('Collection não encontrada:', error);\n return [];\n }\n }\n\n private async executeQuery(params: Pagination): Promise<PaginationResult> {\n if (params.filterFn) {\n // Lógica com filtro no cliente (filterFn)\n const BATCH_FETCH_SIZE = params.batchSize;\n const GOAL_SIZE = params.batchSize + 1;\n\n if (params.navigation === 'forward' || params.navigation === 'reload') {\n if (params.navigation === 'reload' && params.doc) {\n params.doc.lastDoc = null;\n }\n\n let lastDocCursor: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n params.doc ? params.doc.lastDoc : null;\n let pageResults: any[] = [];\n let allFetchedDocs: firebase.firestore.QueryDocumentSnapshot<unknown>[] =\n [];\n let hasMoreDocsInDb = true;\n\n while (pageResults.length < GOAL_SIZE && hasMoreDocsInDb) {\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n if (lastDocCursor) {\n query = query.startAfter(lastDocCursor);\n }\n query = query.limit(BATCH_FETCH_SIZE);\n\n const snapshot = await query.get();\n\n if (snapshot.empty) {\n hasMoreDocsInDb = false;\n break;\n }\n\n lastDocCursor = snapshot.docs[snapshot.docs.length - 1];\n allFetchedDocs.push(...snapshot.docs);\n\n const batchUsers = snapshot.docs\n .map((doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter(params.filterFn);\n\n pageResults.push(...batchUsers);\n\n if (snapshot.size < BATCH_FETCH_SIZE) {\n hasMoreDocsInDb = false;\n }\n }\n\n const hasNextPage = pageResults.length > params.batchSize;\n const finalItems = pageResults.slice(0, params.batchSize);\n\n const firstDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[0]?.id\n ) || null;\n const lastDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[finalItems.length - 1]?.id\n ) || null;\n\n return {\n items: finalItems,\n filterLength: null,\n firstDoc: firstDocOfPage,\n lastDoc: lastDocOfPage,\n hasNextPage: hasNextPage,\n hasPreviousPage:\n !!(params.doc && params.doc.lastDoc) &&\n params.navigation !== 'reload',\n currentClientPageIndex: undefined,\n };\n }\n // Lógica para trás (backward)\n else if (params.navigation === 'backward') {\n if (!params.doc || !params.doc.firstDoc) {\n return {\n items: [],\n filterLength: null,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: true,\n hasPreviousPage: false,\n currentClientPageIndex: undefined,\n };\n }\n\n let pageResults: any[] = [];\n let allFetchedDocs: firebase.firestore.QueryDocumentSnapshot<unknown>[] =\n [];\n let hasMoreDocsInDb = true;\n\n let boundaryDoc = params.doc.firstDoc;\n\n while (pageResults.length < GOAL_SIZE && hasMoreDocsInDb) {\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n query = query.endBefore(boundaryDoc);\n query = query.limitToLast(BATCH_FETCH_SIZE);\n\n const snapshot = await query.get();\n\n if (snapshot.empty) {\n hasMoreDocsInDb = false;\n break;\n }\n\n boundaryDoc = snapshot.docs[0] as any;\n\n allFetchedDocs = [...snapshot.docs, ...allFetchedDocs];\n\n const batchUsers = snapshot.docs\n .map((doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter(params.filterFn);\n\n pageResults = [...batchUsers, ...pageResults];\n\n if (snapshot.size < BATCH_FETCH_SIZE) {\n hasMoreDocsInDb = false;\n }\n }\n\n const finalItems = pageResults.slice(0, params.batchSize);\n\n const firstDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[0]?.id\n ) || null;\n const lastDocOfPage =\n allFetchedDocs.find(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n doc.id === finalItems[finalItems.length - 1]?.id\n ) || null;\n\n return {\n items: finalItems,\n filterLength: null,\n firstDoc: firstDocOfPage,\n lastDoc: lastDocOfPage,\n hasNextPage: true,\n currentClientPageIndex: undefined,\n };\n }\n } else {\n let items: any[] = [];\n let docs: firebase.firestore.QueryDocumentSnapshot<unknown>[] = [];\n let hasNextPage = false;\n let filterLength: null | number = null;\n\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n if (params.conditions) {\n params.conditions.forEach((c: Condition) => {\n if (c.operator === '!=') {\n query = query.orderBy(c.firestoreProperty);\n }\n });\n }\n\n query = this.applyFilters(query, params.arrange, params.conditions);\n\n if (params.navigation === 'reload') {\n query = query.limit(params.batchSize + 1);\n if (params.doc && params.doc.firstDoc) {\n query = query.startAt(params.doc.firstDoc);\n }\n } else if (params.navigation === 'forward') {\n query = query.limit(params.batchSize + 1);\n\n if (params.doc && params.doc.lastDoc) {\n query = query.startAfter(params.doc.lastDoc);\n }\n } else {\n // backward\n query = query.limitToLast(params.batchSize + 1);\n if (params.doc && params.doc.firstDoc) {\n query = query.endBefore(params.doc.firstDoc);\n }\n }\n\n const itemCol = await query.get();\n itemCol.docs.forEach(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) =>\n docs.push(doc)\n );\n const itemPromises = docs.map(\n async (item: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n const itemData = item.data() as any;\n items.push({ id: item.id, ...itemData });\n }\n );\n\n let lastDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n docs[docs.length - 1] || null;\n let firstDoc: firebase.firestore.QueryDocumentSnapshot<unknown> | null =\n docs[0];\n\n if (\n (items.length > params.batchSize && params.navigation === 'forward') ||\n (params.navigation === 'reload' && items.length > params.batchSize)\n ) {\n lastDoc = docs[docs.length - 2] || null;\n items.pop();\n hasNextPage = true;\n }\n if (items.length > params.batchSize && params.navigation === 'backward') {\n firstDoc = docs[1];\n items.shift();\n hasNextPage = true;\n }\n\n await Promise.all(itemPromises);\n return {\n items,\n filterLength,\n lastDoc,\n firstDoc,\n hasNextPage,\n currentClientPageIndex: undefined,\n };\n }\n\n // Fallback para garantir que sempre retornamos algo\n return {\n items: [],\n filterLength: null,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n currentClientPageIndex: undefined,\n };\n }\n\n applyFilters(\n query: firebase.firestore.Query<unknown>,\n arrange: Arrange,\n conditions: Condition[] | undefined\n ): firebase.firestore.Query<unknown> {\n if (conditions) {\n conditions.map((cond: Condition) => {\n query = query.where(\n cond.firestoreProperty,\n cond.operator,\n cond.dashProperty\n );\n });\n }\n\n let hasFilterSpecificOrderBy = false;\n let appliedOrderByField: string | null = null;\n\n const equalsFilters = arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n const otherFilters = arrange.filters.filter(\n (f: any) => f.arrange !== 'equals'\n );\n\n const equalsGroupedByProperty = equalsFilters.reduce(\n (acc: any, current: any) => {\n const prop = current.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(current.filter.filtering);\n return acc;\n },\n {}\n );\n\n for (const prop in equalsGroupedByProperty) {\n const values = equalsGroupedByProperty[prop];\n if (values.length > 0) {\n query = query.where(prop, 'in', values);\n }\n }\n\n otherFilters.forEach((filterItem: any) => {\n // Aplicar filtragem por busca\n if (\n filterItem.filter?.filtering &&\n filterItem.filter?.property !== '' &&\n filterItem.arrange === 'filter'\n ) {\n query = query\n .where(\n filterItem.filter.property,\n '>=',\n filterItem.filter.filtering.trim().toUpperCase()\n )\n .where(\n filterItem.filter.property,\n '<=',\n filterItem.filter.filtering.trim().toUpperCase() + '\\uf8ff'\n );\n if (!hasFilterSpecificOrderBy) {\n query = query.orderBy(filterItem.filter.property);\n hasFilterSpecificOrderBy = true;\n appliedOrderByField = filterItem.filter.property;\n }\n }\n\n // Aplicar filtro do tipo \"filterByDate\"\n if (filterItem.dateFilter && filterItem.arrange === 'filterByDate') {\n query = query\n .where(arrange.sortBy.field, '>=', filterItem.dateFilter.initial)\n .where(arrange.sortBy.field, '<=', filterItem.dateFilter.final);\n if (!hasFilterSpecificOrderBy) {\n query = query.orderBy(arrange.sortBy.field);\n hasFilterSpecificOrderBy = true;\n appliedOrderByField = arrange.sortBy.field;\n }\n }\n });\n\n // Aplicar sortBy\n if (arrange.sortBy && arrange.sortBy.field && arrange.sortBy.order) {\n if (appliedOrderByField !== arrange.sortBy.field) {\n query = query.orderBy(arrange.sortBy.field, arrange.sortBy.order);\n }\n }\n return query;\n }\n\n private getIdFilter(params: Pagination): string | null {\n if (!params.arrange?.filters) return null;\n\n const idFilter = params.arrange.filters.find(\n (f: any) =>\n f.arrange === 'filter' &&\n f.filter?.property === 'id' &&\n f.filter?.filtering\n );\n\n return idFilter?.filter?.filtering?.trim() || null;\n }\n\n private async getDocumentById(\n collection: string,\n docId: string\n ): Promise<any | null> {\n try {\n const docRef = this.ngFire.collection(collection).doc(docId);\n const docSnapshot = await docRef.get().toPromise();\n\n if (docSnapshot && docSnapshot.exists) {\n return {\n id: docSnapshot.id,\n ...(docSnapshot.data() as any),\n };\n }\n return null;\n } catch (error) {\n console.warn('Erro ao buscar documento por ID:', error);\n return null;\n }\n }\n\n private async searchByIdPartial(\n params: Pagination,\n searchTerm: string\n ): Promise<PaginationResult> {\n const exactMatch = await this.getDocumentById(\n params.collection,\n searchTerm\n );\n\n if (exactMatch) {\n if (params.conditions) {\n const operators = this.operators;\n const passesConditions = params.conditions.every((cond) => {\n const operatorFn = operators[cond.operator as keyof typeof operators];\n return operatorFn\n ? operatorFn(exactMatch[cond.firestoreProperty], cond.dashProperty)\n : false;\n });\n\n if (!passesConditions) {\n return {\n items: [],\n filterLength: 0,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 0,\n };\n }\n }\n\n if (params.filterFn && !params.filterFn(exactMatch)) {\n return {\n items: [],\n filterLength: 0,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 0,\n };\n }\n\n return {\n items: [exactMatch],\n filterLength: 1,\n firstDoc: null,\n lastDoc: null,\n hasNextPage: false,\n hasPreviousPage: false,\n currentClientPageIndex: 0,\n totalPages: 1,\n };\n }\n\n const searchTermLower = searchTerm.toLowerCase();\n\n const paramsWithoutIdFilter = {\n ...params,\n arrange: {\n ...params.arrange,\n filters: params.arrange.filters.filter(\n (f: any) => !(f.arrange === 'filter' && f.filter?.property === 'id')\n ),\n },\n };\n\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n // Aplicar conditions\n if (params.conditions) {\n params.conditions.forEach((cond) => {\n query = query.where(\n cond.firestoreProperty,\n cond.operator,\n cond.dashProperty\n );\n });\n }\n\n // Aplicar sortBy\n if (params.arrange?.sortBy?.field && params.arrange?.sortBy?.order) {\n query = query.orderBy(\n params.arrange.sortBy.field,\n params.arrange.sortBy.order\n );\n }\n\n const snapshot = await query.get();\n let items = snapshot.docs\n .map((doc) => ({\n id: doc.id,\n ...(doc.data() as any),\n }))\n .filter((item) => item.id.toLowerCase().includes(searchTermLower));\n\n // Separar equals filters e outros filtros\n const equalsFilters = paramsWithoutIdFilter.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n const otherFilters = paramsWithoutIdFilter.arrange.filters.filter(\n (f: any) =>\n f.arrange !== 'equals' &&\n (f.arrange !== 'filter' || f.filter?.property !== 'id')\n );\n\n // Aplicar equals filters com lógica OR dentro de cada propriedade\n if (equalsFilters.length > 0) {\n // Agrupar por propriedade para aplicar OR\n const groupedByProperty = equalsFilters.reduce((acc: any, f: any) => {\n const prop = f.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(f.filter.filtering);\n return acc;\n }, {});\n\n // Filtrar: item deve ter pelo menos um valor de CADA propriedade\n items = items.filter((item: any) => {\n return Object.entries(groupedByProperty).every(([prop, values]) => {\n return (values as any[]).includes(item[prop]);\n });\n });\n }\n\n // Aplicar outros filtros\n otherFilters.forEach((filterItem: any) => {\n if (\n filterItem.arrange === 'filter' &&\n filterItem.filter?.filtering &&\n filterItem.filter?.property\n ) {\n const filterValue = String(filterItem.filter.filtering)\n .trim()\n .toLowerCase();\n items = items.filter((item: any) => {\n const itemValue = String(\n item[filterItem.filter.property]\n ).toLowerCase();\n return itemValue.includes(filterValue);\n });\n }\n });\n\n // Aplicar filterFn se existir\n if (params.filterFn) {\n items = items.filter(params.filterFn);\n }\n\n // Paginação\n const pageSize = params.batchSize;\n let currentClientPageIndex = 0;\n\n if (params.navigation === 'reload') {\n currentClientPageIndex = 0;\n } else {\n // Usar o índice passado pelo componente sem incrementar/decrementar\n currentClientPageIndex = params.clientPageIndex || 0;\n }\n\n const startIndex = currentClientPageIndex * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = items.slice(startIndex, endIndex);\n\n const totalPages = Math.ceil(items.length / pageSize);\n const hasNextPage = currentClientPageIndex < totalPages - 1;\n const hasPreviousPage = currentClientPageIndex > 0;\n\n return {\n items: paginatedItems,\n filterLength: items.length,\n firstDoc: null,\n lastDoc: null,\n hasNextPage,\n hasPreviousPage,\n currentClientPageIndex,\n totalPages,\n };\n }\n\n private shouldUseClientSideFallback(params: Pagination): boolean {\n const hasConditions = params.conditions && params.conditions.length > 0;\n const hasArrangeFilters =\n params.arrange?.filters && params.arrange.filters.length > 0;\n const hasSortBy = params.arrange?.sortBy?.field;\n\n if (params.filterFn) {\n return false;\n }\n\n if (hasArrangeFilters) {\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n if (equalsFilters.length > 0) {\n const propertiesSet = new Set(\n equalsFilters.map((f: any) => f.filter.property)\n );\n\n if (propertiesSet.size > 1) {\n return true;\n }\n }\n }\n\n if (hasConditions && hasArrangeFilters && hasSortBy) {\n return true;\n }\n\n if (hasConditions && hasArrangeFilters) {\n return true;\n }\n\n if (hasArrangeFilters && params.arrange.filters.length > 1 && hasSortBy) {\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n if (equalsFilters.length > 0) {\n const propertiesSet = new Set(\n equalsFilters.map((f: any) => f.filter.property)\n );\n if (\n propertiesSet.size === 1 &&\n equalsFilters.length === params.arrange.filters.length\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n async getPaginated(params: Pagination): Promise<PaginationResult> {\n const idFilterValue = this.getIdFilter(params);\n if (idFilterValue) {\n const result = await this.searchByIdPartial(params, idFilterValue);\n return result;\n }\n\n // Detectar preventivamente se deve usar fallback\n if (this.shouldUseClientSideFallback(params)) {\n await this.trackMissingIndexPreventive(\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log('📊 [TABLE] Resultados paginados via fallback client-side:', {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n });\n return result;\n }\n\n try {\n const result = await this.executeQuery(params);\n console.log('📊 [TABLE] Resultados paginados via Firestore:', {\n totalItems: result.filterLength || 'N/A',\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n });\n return result;\n } catch (error: any) {\n if (error && error.code === 'failed-precondition') {\n await this.trackMissingIndex(\n error,\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log(\n '📊 [TABLE] Resultados paginados via fallback (erro de index):',\n {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n }\n );\n return result;\n } else if (error && error.code === 'invalid-argument') {\n await this.trackMissingIndex(\n error,\n params.collection,\n params.arrange,\n params.conditions\n );\n\n const result = await this.executeClientSideQuery(params);\n console.log(\n '📊 [TABLE] Resultados paginados via fallback (argumento inválido):',\n {\n totalItems: result.filterLength,\n returnedItems: result.items.length,\n hasNextPage: result.hasNextPage,\n currentPage: (result.currentClientPageIndex || 0) + 1,\n }\n );\n return result;\n } else {\n throw error;\n }\n }\n }\n\n async executeClientSideQuery(params: Pagination): Promise<PaginationResult> {\n // Otimizar usando pelo menos uma cláusula .where() quando possível\n let query: firebase.firestore.Query<unknown> = this.ngFire.collection(\n params.collection\n ).ref;\n\n let appliedCondition: Condition | null = null;\n let hasAppliedWhereClause = false;\n\n // Primeiro, tenta aplicar condições simples\n if (params.conditions && params.conditions.length > 0) {\n const simpleCondition = params.conditions.find((cond: Condition) =>\n ['==', '>', '<', '>=', '<=', 'in', 'array-contains'].includes(\n cond.operator\n )\n );\n\n if (simpleCondition) {\n query = query.where(\n simpleCondition.firestoreProperty,\n simpleCondition.operator,\n simpleCondition.dashProperty\n );\n appliedCondition = simpleCondition;\n hasAppliedWhereClause = true;\n }\n }\n\n // Se não há condições disponíveis, tenta aplicar filtros do arrange\n let appliedFirestoreFilter: any = null;\n if (!hasAppliedWhereClause && params.arrange?.filters) {\n // Agrupar equals filters por propriedade\n const equalsFilters = params.arrange.filters.filter(\n (f: any) => f.arrange === 'equals' && f.filter\n );\n\n const equalsGroupedByProperty = equalsFilters.reduce(\n (acc: any, current: any) => {\n const prop = current.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(current.filter.filtering);\n return acc;\n },\n {}\n );\n\n // Se há apenas UMA propriedade com múltiplos valores, aplicar no Firestore com 'in'\n const properties = Object.keys(equalsGroupedByProperty);\n if (properties.length === 1 && equalsFilters.length > 0) {\n const prop = properties[0];\n const values = equalsGroupedByProperty[prop];\n query = query.where(prop, 'in', values);\n hasAppliedWhereClause = true;\n // Marcar TODOS os equals filters dessa propriedade como aplicados\n appliedFirestoreFilter = 'all-equals';\n } else if (properties.length === 0) {\n const otherFilter = params.arrange.filters.find(\n (f: any) =>\n (f.arrange === 'filter' &&\n f.filter?.filtering &&\n f.filter?.property) ||\n (f.arrange === 'filterByDate' &&\n f.dateFilter?.initial &&\n f.dateFilter?.final)\n );\n\n if (otherFilter) {\n if (otherFilter.arrange === 'filter' && otherFilter.filter) {\n const filterValue = otherFilter.filter.filtering\n .trim()\n .toUpperCase();\n query = query\n .where(otherFilter.filter.property, '>=', filterValue)\n .where(otherFilter.filter.property, '<=', filterValue + '\\uf8ff');\n hasAppliedWhereClause = true;\n appliedFirestoreFilter = otherFilter;\n } else if (\n otherFilter.arrange === 'filterByDate' &&\n otherFilter.dateFilter &&\n params.arrange.sortBy?.field\n ) {\n query = query\n .where(\n params.arrange.sortBy.field,\n '>=',\n otherFilter.dateFilter.initial\n )\n .where(\n params.arrange.sortBy.field,\n '<=',\n otherFilter.dateFilter.final\n );\n hasAppliedWhereClause = true;\n appliedFirestoreFilter = otherFilter;\n }\n }\n }\n }\n\n const allDocsSnapshot = await query.get();\n let items = allDocsSnapshot.docs.map(\n (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => ({\n id: doc.id,\n ...(doc.data() as any),\n })\n );\n\n // Aplicar condições restantes\n if (params.conditions) {\n const remainingConditions = params.conditions.filter(\n (cond: Condition) => cond !== appliedCondition\n );\n if (remainingConditions.length > 0) {\n const operators = this.operators;\n items = items.filter((item: any) => {\n return remainingConditions.every((cond: Condition) => {\n const operatorFn =\n operators[cond.operator as keyof typeof operators];\n return operatorFn\n ? operatorFn(item[cond.firestoreProperty], cond.dashProperty)\n : false;\n });\n });\n }\n }\n\n const { filters, sortBy } = params.arrange;\n\n // Track which filter was already applied in Firestore to avoid double filtering\n if (hasAppliedWhereClause && !appliedCondition && params.arrange?.filters) {\n const equalsFilter = params.arrange.filters.find(\n (f: any) => f.arrange === 'equals' && f.filter?.filtering\n );\n if (equalsFilter) {\n appliedFirestoreFilter = equalsFilter;\n } else {\n appliedFirestoreFilter = params.arrange.filters.find(\n (f: any) =>\n (f.arrange === 'filter' &&\n f.filter?.filtering &&\n f.filter?.property) ||\n (f.arrange === 'filterByDate' &&\n f.dateFilter?.initial &&\n f.dateFilter?.final)\n );\n }\n }\n\n const equalsFilters = filters.filter((f: any) => f.arrange === 'equals');\n const otherFilters = filters.filter((f: any) => f.arrange !== 'equals');\n\n // Aplicar equals filters no client-side apenas se não foram aplicados no Firestore\n if (appliedFirestoreFilter !== 'all-equals' && equalsFilters.length > 0) {\n // Agrupar por propriedade para aplicar OR dentro de cada propriedade\n const groupedByProperty = equalsFilters.reduce((acc: any, f: any) => {\n const prop = f.filter.property;\n if (!acc[prop]) {\n acc[prop] = [];\n }\n acc[prop].push(f.filter.filtering);\n return acc;\n }, {});\n\n // Filtrar: item deve ter pelo menos um valor de CADA propriedade\n // (AND entre propriedades, OR dentro de cada propriedade)\n items = items.filter((item: any) => {\n return Object.entries(groupedByProperty).every(([prop, values]) => {\n return (values as any[]).includes(item[prop]);\n });\n });\n }\n\n otherFilters.forEach((filterItem: any) => {\n if (appliedFirestoreFilter === filterItem) {\n return;\n }\n\n if (\n filterItem.arrange === 'filter' &&\n filterItem.filter?.filtering &&\n filterItem.filter?.property\n ) {\n const filterValue = String(filterItem.filter.filtering)\n .trim()\n .toLowerCase();\n items = items.filter((item: any) => {\n const itemValue = String(\n item[filterItem.filter.property]\n ).toLowerCase();\n return itemValue.includes(filterValue);\n });\n }\n\n if (\n filterItem.arrange === 'filterByDate' &&\n filterItem.dateFilter?.initial &&\n filterItem.dateFilter?.final &&\n sortBy.field\n ) {\n items = items.filter((item: any) => {\n try {\n const fieldValue = item[sortBy.field];\n\n if (!fieldValue) {\n return false;\n }\n\n let itemDate;\n if (typeof fieldValue.toDate === 'function') {\n itemDate = fieldValue.toDate();\n } else if (fieldValue instanceof Date) {\n itemDate = fieldValue;\n } else if (typeof fieldValue === 'string') {\n itemDate = new Date(fieldValue);\n if (isNaN(itemDate.getTime())) {\n return false;\n }\n } else if (typeof fieldValue === 'number') {\n itemDate = new Date(fieldValue);\n } else {\n return false;\n }\n\n return (\n itemDate >= filterItem.dateFilter.initial &&\n itemDate <= filterItem.dateFilter.final\n );\n } catch (error) {\n console.warn(\n 'Erro ao processar filtro de data para o item:',\n item.id,\n error\n );\n return false;\n }\n });\n }\n });\n\n // Aplicar filterFn se existir\n if (params.filterFn) {\n items = items.filter(params.filterFn);\n }\n\n if (sortBy && sortBy.field && sortBy.order) {\n items.sort((a: any, b: any) => {\n const valA = a[sortBy.field];\n const valB = b[sortBy.field];\n\n if (valA < valB) {\n return sortBy.order === 'asc' ? -1 : 1;\n }\n if (valA > valB) {\n return sortBy.order === 'asc' ? 1 : -1;\n }\n return 0;\n });\n }\n\n // Implementação adequada da paginação\n let currentClientPageIndex = 0;\n\n // Determinar a página atual baseada na navegação\n if (params.navigation === 'reload') {\n currentClientPageIndex = 0;\n } else {\n currentClientPageIndex = params.clientPageIndex || 0;\n }\n\n const pageSize = params.batchSize;\n const startIndex = currentClientPageIndex * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = items.slice(startIndex, endIndex);\n\n const totalPages = Math.ceil(items.length / pageSize);\n const hasNextPage = currentClientPageIndex < totalPages - 1;\n const hasPreviousPage = currentClientPageIndex > 0;\n\n return {\n items: paginatedItems,\n filterLength: items.length,\n lastDoc: null,\n firstDoc: null,\n hasNextPage: hasNextPage,\n hasPreviousPage: hasPreviousPage,\n currentClientPageIndex: currentClientPageIndex,\n totalPages: totalPages,\n };\n }\n\n async getItemsData(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<any[]> {\n try {\n let query: firebase.firestore.Query<unknown> =\n this.ngFire.collection(collection).ref;\n\n query = this.applyFilters(query, arrange, conditions);\n const snapshot = await query.get();\n return await Promise.all(\n snapshot.docs.map(\n async (doc: firebase.firestore.QueryDocumentSnapshot<unknown>) => {\n const data = doc.data() as any;\n const id = doc.id;\n return {\n id,\n ...data,\n };\n }\n )\n );\n } catch (e) {\n throw e;\n }\n }\n\n public operators = {\n '==': (a: any, b: any): boolean => a === b,\n '!=': (a: any, b: any): boolean => a !== b,\n '>': (a: any, b: any): boolean => a > b,\n '<': (a: any, b: any): boolean => a < b,\n '>=': (a: any, b: any): boolean => a >= b,\n '<=': (a: any, b: any): boolean => a <= b,\n in: (a: any, b: any): boolean => Array.isArray(b) && b.includes(a),\n 'not-in': (a: any, b: any): boolean => Array.isArray(b) && !b.includes(a),\n 'array-contains': (a: any, b: any): boolean =>\n Array.isArray(a) && a.includes(b),\n 'array-contains-any': (a: any, b: any): boolean =>\n Array.isArray(a) &&\n Array.isArray(b) &&\n b.some((item: any) => a.includes(item)),\n includes: (a: any, b: any): any => a.includes(b), // Para strings ou arrays\n };\n\n async deleteIndex(id: string, col: string): Promise<boolean> {\n try {\n const batch = this.ngFire.firestore.batch();\n\n const docRef = this.ngFire.collection(col).doc(id);\n const docSnapshot = (await firstValueFrom(\n docRef.get()\n )) as firebase.firestore.DocumentSnapshot<unknown>;\n const doc = docSnapshot.data() as any;\n batch.delete(docRef.ref);\n if (doc && typeof doc.index === 'number') {\n await this.reindex(doc.index, col, batch);\n }\n await batch.commit();\n\n this.toastr.success('Item excluído com sucesso!');\n return true;\n } catch (e) {\n const error = e as any;\n console.error('Erro ao deletar item:', error);\n this.toastr.error('Erro ao deletar item.');\n return false;\n }\n }\n\n async reindex(\n index: number,\n col: string,\n batch: firebase.firestore.WriteBatch\n ): Promise<void> {\n try {\n const snapshot = (await firstValueFrom(\n this.ngFire.collection(col).get()\n )) as firebase.firestore.QuerySnapshot<unknown>;\n const docs = snapshot.docs;\n for (let doc of docs) {\n const data = doc.data() as any;\n if (data && typeof data.index === 'number' && data.index > index) {\n data.index--;\n const docRef = this.ngFire.collection(col).doc(doc.id).ref;\n batch.update(docRef, data);\n }\n }\n } catch (error) {\n console.error('Erro ao reindexar:', error);\n }\n return;\n }\n\n dateFormatValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n if (!control.value) {\n return null;\n }\n\n const dateStr = control.value.trim();\n const datePattern = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/;\n\n if (!datePattern.test(dateStr)) {\n return { invalidFormat: true };\n }\n\n const parts = dateStr.split('/');\n const day = parts[0].padStart(2, '0');\n const month = parts[1].padStart(2, '0');\n const year = parts[2];\n const normalizedDate = `${day}/${month}/${year}`;\n\n const date = moment(normalizedDate, 'DD/MM/YYYY', true);\n\n if (!date.isValid()) {\n return { invalidDate: true };\n }\n\n return null;\n };\n }\n\n async updateIndex(index: number, id: string, col: string): Promise<void> {\n await this.ngFire.collection(col).doc(id).update({ index });\n }\n\n /**\n * Extrai o link de criação de índice da mensagem de erro do Firestore\n */\n private extractIndexLink(error: any): string | null {\n if (!error || !error.message) return null;\n\n const linkMatch = error.message.match(\n /(https:\\/\\/console\\.firebase\\.google\\.com\\/[^\\s]+)/\n );\n return linkMatch ? linkMatch[1] : null;\n }\n\n /**\n * Rastreia índices ausentes ao usar fallback preventivo\n */\n private async trackMissingIndexPreventive(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<void> {\n try {\n const querySignature = this.generateQuerySignature(\n collection,\n arrange,\n conditions\n );\n const docId = `${collection}_${querySignature}`;\n\n const indexLink = this.generateIndexLink(collection, arrange, conditions);\n\n const indexInstructions = this.generateIndexInstructions(\n collection,\n arrange,\n conditions\n );\n\n const trackingData: any = {\n collection,\n indexLink,\n indexInstructions,\n arrange: {\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n dateField:\n f.arrange === 'filterByDate' ? arrange.sortBy?.field : null,\n })) || [],\n },\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n errorMessage: `Fallback preventivo usado para a collection ${collection}. A query exigiria índice composto.`,\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n };\n\n console.log('📄 [INDEX LINK] Dados que serão salvos no documento:', {\n docId,\n collection: trackingData.collection,\n indexLink: trackingData.indexLink,\n arrange: trackingData.arrange,\n conditions: trackingData.conditions,\n errorMessage: trackingData.errorMessage,\n });\n\n const docRef = this.ngFire.collection('missingIndexes').doc(docId);\n const doc = await docRef.get().toPromise();\n\n if (doc && doc.exists) {\n await docRef.update({\n count: firebase.firestore.FieldValue.increment(1),\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n lastError: trackingData.errorMessage,\n });\n } else {\n await docRef.set({\n ...trackingData,\n count: 1,\n createdAt: firebase.firestore.FieldValue.serverTimestamp(),\n });\n }\n } catch (trackingError) {\n console.warn('Falha ao rastrear fallback preventivo:', trackingError);\n }\n }\n\n /**\n * Gera uma assinatura única para uma query\n */\n private generateQuerySignature(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): string {\n const signature = {\n collection,\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n })) || [],\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n };\n\n return btoa(JSON.stringify(signature))\n .replace(/[^a-zA-Z0-9]/g, '')\n .substring(0, 20);\n }\n\n /**\n * Gera instruções claras para criar o índice manualmente\n */\n private generateIndexInstructions(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): any {\n const instructions: any = {\n summary: '',\n collection: collection,\n fields: [] as any[],\n queryExample: '',\n stepByStep: [] as string[],\n notes: [] as string[],\n };\n\n const fields: any[] = [];\n\n if (conditions && conditions.length > 0) {\n conditions.forEach((condition: Condition) => {\n if (condition.firestoreProperty) {\n fields.push({\n field: condition.firestoreProperty,\n order: 'Ascending',\n type: 'WHERE clause',\n operator: condition.operator,\n description: `Filtrar por ${condition.firestoreProperty} usando operador ${condition.operator}`,\n });\n }\n });\n }\n\n if (arrange.filters && arrange.filters.length > 0) {\n arrange.filters.forEach((filter: any) => {\n if (filter.filter?.property) {\n fields.push({\n field: filter.filter.property,\n order: 'Ascending',\n type: 'WHERE clause (filter)',\n operator: filter.arrange === 'filter' ? 'CONTAINS' : 'RANGE',\n description: `Filtrar por ${filter.filter.property} usando filtro ${filter.arrange}`,\n });\n }\n });\n }\n\n if (arrange.sortBy?.field) {\n fields.push({\n field: arrange.sortBy.field,\n order: arrange.sortBy.order === 'desc' ? 'Descending' : 'Ascending',\n type: 'ORDER BY clause',\n operator: 'N/A',\n description: `Ordenar resultados por ${arrange.sortBy.field} em ordem ${arrange.sortBy.order}`,\n });\n }\n\n instructions.fields = fields;\n\n const fieldNames = fields.map((f: any) => f.field).join(' + ');\n instructions.summary = `Criar índice composto para ${collection}: ${fieldNames}`;\n\n let queryExample = `db.collection('${collection}')`;\n\n fields.forEach((field: any, index: number) => {\n if (field.type.includes('WHERE')) {\n if (field.operator === '==') {\n queryExample += `\\n .where('${field.field}', '==', 'value')`;\n } else if (field.operator === 'CONTAINS') {\n queryExample += `\\n .where('${field.field}', '>=', 'searchText')`;\n } else {\n queryExample += `\\n .where('${field.field}', '${field.operator}', 'value')`;\n }\n }\n });\n\n const orderByField = fields.find((f: any) => f.type.includes('ORDER BY'));\n if (orderByField) {\n queryExample += `\\n .orderBy('${\n orderByField.field\n }', '${orderByField.order.toLowerCase()}')`;\n }\n\n instructions.queryExample = queryExample;\n\n instructions.stepByStep = [\n '1. Ir para Firebase Console → Firestore → Indexes',\n '2. Clicar em \"Create Index\"',\n `3. Definir Collection ID: ${collection}`,\n '4. Configurar campos nesta ORDEM EXATA:',\n ...fields.map(\n (field: any, index: number) =>\n ` ${index + 1}. Campo: ${field.field}, Order: ${\n field.order\n }, Array: No`\n ),\n '5. Definir Query scopes: Collection',\n '6. Clicar em \"Create\" e aguardar conclusão',\n ];\n\n instructions.notes = [\n '⚠️ A ordem dos campos é CRÍTICA - deve corresponder exatamente à ordem da query',\n '⚠️ As cláusulas WHERE devem vir ANTES do campo ORDER BY',\n '⚠️ Este índice só funcionará para queries com esta combinação EXATA de campos',\n '⚠️ A criação do índice pode levar vários minutos',\n ];\n\n return instructions;\n }\n\n /**\n * Gera um link de índice baseado na estrutura da query\n */\n private generateIndexLink(\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): string | null {\n try {\n const indexFields: string[] = [];\n\n if (conditions && conditions.length > 0) {\n conditions.forEach((condition: Condition) => {\n if (condition.firestoreProperty) {\n indexFields.push(condition.firestoreProperty);\n }\n });\n }\n\n if (arrange.filters && arrange.filters.length > 0) {\n arrange.filters.forEach((filter: any) => {\n if (filter.filter?.property) {\n indexFields.push(filter.filter.property);\n }\n });\n }\n\n if (arrange.sortBy?.field) {\n indexFields.push(arrange.sortBy.field);\n }\n\n if (indexFields.length > 1) {\n const baseUrl =\n 'https://console.firebase.google.com/project/toppayy-dev/firestore/indexes';\n const queryParams = new URLSearchParams({\n create_composite: `collection=${collection}&fields=${indexFields.join(\n ','\n )}`,\n });\n\n const finalLink = `${baseUrl}?${queryParams.toString()}`;\n return finalLink;\n }\n\n return null;\n } catch (error) {\n console.warn('Falha ao gerar link de índice:', error);\n return null;\n }\n }\n\n private async trackMissingIndex(\n error: any,\n collection: string,\n arrange: Arrange,\n conditions: Condition[] | undefined = undefined\n ): Promise<void> {\n try {\n const indexLink = this.extractIndexLink(error);\n if (!indexLink) return;\n\n const linkHash = btoa(indexLink)\n .replace(/[^a-zA-Z0-9]/g, '')\n .substring(0, 20);\n const docId = `${collection}_${linkHash}`;\n\n const indexInstructions = this.generateIndexInstructions(\n collection,\n arrange,\n conditions\n );\n\n const trackingData: any = {\n collection,\n indexLink,\n indexInstructions,\n arrange: {\n sortBy: arrange.sortBy,\n filters:\n arrange.filters?.map((f: any) => ({\n arrange: f.arrange,\n property: f.filter?.property || null,\n dateField:\n f.arrange === 'filterByDate' ? arrange.sortBy?.field : null,\n })) || [],\n },\n conditions:\n conditions?.map((c: Condition) => ({\n property: c.firestoreProperty,\n operator: c.operator,\n })) || [],\n errorMessage: error.message,\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n };\n\n const docRef = this.ngFire.collection('missingIndexes').doc(docId);\n const doc = await docRef.get().toPromise();\n\n if (doc && doc.exists) {\n await docRef.update({\n count: firebase.firestore.FieldValue.increment(1),\n updatedAt: firebase.firestore.FieldValue.serverTimestamp(),\n lastError: error.message,\n });\n } else {\n await docRef.set({\n ...trackingData,\n count: 1,\n createdAt: firebase.firestore.FieldValue.serverTimestamp(),\n });\n }\n } catch (trackingError) {\n console.warn('Falha ao rastrear índice ausente:', trackingError);\n }\n }\n}\n","import { Arrange, Condition, Tab, TabData, TableData } from '../../types/Table';\nimport { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport {\n AngularFirestore,\n QueryDocumentSnapshot,\n} from '@angular/fire/compat/firestore';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Router } from '@angular/router';\nimport { TableService } from '../../services/table.service';\nimport { debounceTime, firstValueFrom, Subject } from 'rxjs';\nimport { OrderByDirection } from 'firebase/firestore';\nimport firebase from 'firebase/compat';\nimport WhereFilterOp = firebase.firestore.WhereFilterOp;\nimport firestore = firebase.firestore;\nimport { FormControl, FormArray, FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'lib-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class TableComponent implements OnInit {\n // INPUTS\n @Input() data!: TableData;\n @Input() downloadTable?: (arrange: Arrange, conditions: Condition[]) => void;\n arrange: Arrange | null = null;\n // VARIABLES\n dataSource!: MatTableDataSource<any>;\n currentPageNumber = 1;\n currentClientPageIndex = 0;\n\n public items: any[] = [];\n public filteredItems: any[] = []; // Dados filtrados para modo não paginado (público para acesso externo)\n public isLoading = false;\n private lastDoc: QueryDocumentSnapshot<any> | null = null;\n private firstDoc: QueryDocumentSnapshot<any> | null = null;\n private sortBy: { field: string; order: OrderByDirection } = {\n field: 'createdAt',\n order: 'desc',\n };\n public columnProperties: string[] = [];\n\n filtersForm: FormArray;\n\n selectSort: FormControl = new FormControl('');\n currentArrange = '';\n\n hasNextPage: boolean = false;\n\n dropdownItems: any[] = [];\n sortableDropdownItems: any[] = [];\n pageSize = 25;\n totalItems = 0;\n pageEvent?: PageEvent;\n filterValue: string | null = null;\n\n hasFilterableColumn: boolean = false;\n hasSortableColumn: boolean = false;\n filterPredicate: ((data: any, filter: string) => boolean) | undefined;\n private filterSubject = new Subject<string>();\n private readonly debounceTimeMs = 500;\n\n selectedTab: number = 0;\n\n @ViewChild(MatPaginator) paginator!: MatPaginator;\n @ViewChild(MatSort) sort!: MatSort;\n\n // Propriedades para controle do tooltip\n hoveredCell: { row: any; col: any } | null = null;\n showTooltip: boolean = false;\n tooltipTimeout: any;\n tooltipContent: string = '';\n tooltipPosition: { x: number; y: number } = { x: 0, y: 0 };\n\n // CONSTRUCTOR\n constructor(\n private router: Router,\n private tableService: TableService,\n private firestore: AngularFirestore\n ) {\n this.filtersForm = new FormArray([this.createFilterGroup()]);\n }\n\n createFilterGroup(): FormGroup {\n return new FormGroup({\n selectFilter: new FormControl(''),\n typeFilter: new FormControl(''),\n selectItem: new FormControl(''),\n initialDate: new FormControl('', [\n this.tableService.dateFormatValidator(),\n ]),\n finalDate: new FormControl('', [this.tableService.dateFormatValidator()]),\n });\n }\n\n addFilter(filterData?: {\n selectFilter: any;\n typeFilter?: string;\n selectItem?: any[];\n initialDate?: string;\n finalDate?: string;\n }): void {\n if (\n this.data.pagination === true &&\n this.hasActiveDateFilter() &&\n filterData?.selectFilter?.arrange === 'filterByDate'\n ) {\n // Não permitir adicionar novo filtro de data quando já existe um ativo\n return;\n }\n\n const newFilterGroup = this.createFilterGroup();\n\n if (filterData) {\n if (filterData.selectFilter) {\n newFilterGroup.get('selectFilter')?.setValue(filterData.selectFilter);\n }\n if (filterData.typeFilter) {\n newFilterGroup.get('typeFilter')?.setValue(filterData.typeFilter);\n }\n if (filterData.selectItem) {\n newFilterGroup.get('selectItem')?.setValue(filterData.selectItem);\n }\n if (filterData.initialDate) {\n newFilterGroup.get('initialDate')?.setValue(filterData.initialDate);\n }\n if (filterData.finalDate) {\n newFilterGroup.get('finalDate')?.setValue(filterData.finalDate);\n }\n }\n\n this.filtersForm.push(newFilterGroup);\n }\n\n hasActiveDateFilter(): boolean {\n return this.filtersForm.controls.some((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n return selectedFilter?.arrange === 'filterByDate';\n });\n }\n\n getAvailableFilterOptions(): any[] {\n if (this.data.pagination === true && this.hasActiveDateFilter()) {\n return this.dropdownItems.filter(\n (item) => item.arrange !== 'filterByDate'\n );\n }\n return this.dropdownItems;\n }\n\n onSelectFilterChange() {\n const lastIndex = this.filtersForm.length - 1;\n const lastFilter = this.filtersForm.at(lastIndex);\n const selectedFilter = lastFilter.get('selectFilter')?.value;\n\n if (selectedFilter) {\n if (\n selectedFilter.arrange === 'filterByDate' &&\n this.data.pagination === true\n ) {\n return;\n }\n\n this.addFilter();\n }\n }\n\n removeFilter(index: number): void {\n this.filtersForm.removeAt(index);\n if (this.filtersForm.length === 0) {\n this.addFilter();\n }\n }\n\n removeAllFilters(): void {\n this.filtersForm.clear();\n this.addFilter();\n this.resetFilter();\n }\n\n // METHODS\n public async ngOnInit() {\n if (!this.data.color)\n this.data.color = { bg: 'bg-primary', text: 'text-black' };\n this.columnProperties = this.data.displayedColumns.map((column) => {\n return column.property;\n });\n\n if (this.data.actionButton && !this.data.actionButton.condition) {\n this.data.actionButton.condition = (_row?: any) => true;\n }\n\n this.data.displayedColumns.forEach((col) => {\n if (col.isFilterable) {\n if (this.hasFilterableColumn === false) this.hasFilterableColumn = true;\n\n this.dropdownItems.push({\n ...col,\n arrange: 'filter',\n title: col.title,\n });\n }\n if (col.isSortable) {\n if (this.hasSortableColumn === false) this.hasSortableColumn = true;\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'ascending',\n title: col.title + ': crescente',\n });\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'descending',\n title: col.title + ': decrescente',\n });\n }\n if (col.isFilterableByDate) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filterByDate',\n title: col.title + ': filtro por data',\n });\n }\n });\n if (\n this.data.filterableOptions &&\n Array.isArray(this.data.filterableOptions) &&\n this.data.filterableOptions.length > 0\n ) {\n this.data.filterableOptions.forEach((option) =>\n this.dropdownItems.push({ ...option, arrange: 'equals' })\n );\n }\n\n // Sem paginação\n if (this.data.pagination === false) {\n await this.loadItems();\n }\n // Com paginação\n if (this.data.pagination === true) {\n if (this.data.sortBy)\n this.sortBy = {\n field: this.data.sortBy.field,\n order: this.data.sortBy.order,\n };\n this.filterSubject\n .pipe(debounceTime(this.debounceTimeMs))\n .subscribe(() => {\n this.loadItemsPaginated('reload', true);\n });\n\n this.isLoading = true;\n await this.loadItemsPaginated('reload', true);\n\n this.sort.active = 'createdAt';\n this.sort.direction = 'desc';\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n this.totalItems = 0;\n if (this.data.totalRef) {\n for (const totalRef of this.data.totalRef) {\n const totalRefDoc = await totalRef.ref.get();\n const docData = totalRefDoc.data() as any;\n if (docData && docData[totalRef.field])\n this.totalItems = (this.totalItems +\n docData[totalRef.field]) as number;\n }\n }\n this.isLoading = false;\n }\n }\n\n getDisplayValue(col: any, row: any, withinLimit: boolean = false): string {\n let value: any;\n\n if (col.calculateValue) {\n value = col.calculateValue(row);\n } else {\n value = this.getNestedValue(row, col.property);\n }\n\n if (Array.isArray(value) && col.arrayField) {\n value = this.formatArrayValue(value, col.arrayField);\n }\n\n if (col.queryLength && row[col.property]) {\n value = row[col.property];\n }\n\n value = col.pipe ? col.pipe.transform(value) : value;\n\n if (value === null || value === undefined) {\n value = '';\n } else {\n value = String(value);\n }\n\n if (typeof value !== 'string') {\n value = '';\n }\n\n if (withinLimit || !col.charLimit) {\n return value;\n }\n\n return value.substring(0, col.charLimit) + '...';\n }\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return undefined;\n const properties = path.split('.');\n return properties.reduce(\n (acc, currentPart) => acc && acc[currentPart],\n obj\n );\n }\n\n private formatArrayValue(array: any[], field: string): string {\n if (!Array.isArray(array) || array.length === 0) {\n return '';\n }\n\n const values = array\n .map((item) => {\n if (typeof item === 'object' && item !== null) {\n return item[field] || '';\n }\n return String(item);\n })\n .filter((value) => value !== '' && value !== null && value !== undefined);\n\n return values.join(', ');\n }\n\n // Métodos sem paginação\n private async loadItems() {\n this.items = await this.tableService.getItems(this.data.collectionRef);\n if (this.data.conditions) {\n this.filterItems();\n }\n await this.loadRelations();\n await this.loadQueryLengths();\n this.totalItems = this.items.length;\n\n // Inicializar arrange para tabelas não paginadas\n this.arrange = {\n filters: [],\n sortBy: this.data.sortBy || {\n field: 'createdAt',\n order: 'desc',\n },\n };\n this.sortBy = this.data.sortBy || {\n field: 'createdAt',\n order: 'desc',\n };\n\n // Aplicar filtros client-side se existirem\n let itemsToDisplay = [...this.items];\n itemsToDisplay = this.applyClientSideFilters(itemsToDisplay);\n this.filteredItems = itemsToDisplay; // Armazenar dados filtrados\n\n this.dataSource = new MatTableDataSource(itemsToDisplay);\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n if (this.data.sortBy) {\n this.dataSource.sort.active = this.data.sortBy.field;\n this.dataSource.sort.direction = this.data.sortBy.order;\n this.dataSource.sort.sortChange.emit();\n }\n\n this.dataSource.filterPredicate = (data, filter: string) => {\n return this.data.displayedColumns.some((col): boolean => {\n if (col.filterPredicates) {\n return col.filterPredicates.some((predicate): boolean => {\n const propertyValue = data[col.property];\n if (!propertyValue || typeof propertyValue !== 'object') {\n return false;\n }\n\n const predicateValue = propertyValue[predicate];\n if (predicateValue === null || predicateValue === undefined) {\n return false;\n }\n\n return String(predicateValue)\n .trim()\n .toLocaleLowerCase()\n .includes(filter);\n });\n }\n\n if (col.property && col.isFilterable) {\n const propertyValue = data[col.property];\n if (propertyValue === null || propertyValue === undefined) {\n return false;\n }\n\n return String(propertyValue)\n .trim()\n .toLocaleLowerCase()\n .includes(filter);\n }\n return false;\n });\n };\n this.filterPredicate = this.dataSource.filterPredicate;\n }\n\n // Aplicar filtros client-side (filtros por data)\n private applyClientSideFilters(items: any[]): any[] {\n let filteredItems = [...items];\n\n // Agrupar filtros de data por propriedade\n const dateFiltersByProperty: Record<\n string,\n Array<{ initial: Date; final: Date }>\n > = {};\n const otherFilters: Array<{\n group: FormGroup;\n selectedFilter: any;\n arrange: string;\n }> = [];\n\n this.filtersForm.controls.forEach((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return;\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n\n // Só aplicar filtro se ambas as datas estiverem preenchidas\n if (initial && final && initial.trim() && final.trim()) {\n try {\n // Validar formato da data (DD/MM/AAAA)\n const datePattern = /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/;\n if (!datePattern.test(initial) || !datePattern.test(final)) {\n return; // Ignorar se formato inválido\n }\n\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n\n // Validar se as datas são válidas\n if (isNaN(initialDate.getTime()) || isNaN(finalDate.getTime())) {\n return; // Ignorar se datas inválidas\n }\n\n // Usar o campo da coluna ou o sortBy.field como padrão\n const dateField = selectedFilter.property || this.sortBy.field;\n\n if (!dateFiltersByProperty[dateField]) {\n dateFiltersByProperty[dateField] = [];\n }\n\n dateFiltersByProperty[dateField].push({\n initial: initialDate,\n final: finalDate,\n });\n } catch (error) {\n console.warn('Erro ao processar datas do filtro:', error);\n }\n }\n } else {\n otherFilters.push({ group, selectedFilter, arrange });\n }\n });\n\n Object.keys(dateFiltersByProperty).forEach((dateField) => {\n const intervals = dateFiltersByProperty[dateField];\n\n filteredItems = filteredItems.filter((item: any) => {\n try {\n const fieldValue = item[dateField];\n\n if (!fieldValue) {\n return false;\n }\n\n let itemDate: Date;\n if (typeof fieldValue.toDate === 'function') {\n itemDate = fieldValue.toDate();\n } else if (fieldValue instanceof Date) {\n itemDate = fieldValue;\n } else if (typeof fieldValue === 'string') {\n itemDate = new Date(fieldValue);\n if (isNaN(itemDate.getTime())) {\n return false;\n }\n } else if (typeof fieldValue === 'number') {\n itemDate = new Date(fieldValue);\n } else {\n return false;\n }\n\n return intervals.some(\n (interval) =>\n itemDate >= interval.initial && itemDate <= interval.final\n );\n } catch (error) {\n console.warn(\n 'Erro ao processar filtro de data para o item:',\n item.id,\n error\n );\n return false;\n }\n });\n });\n\n otherFilters.forEach(({ group, selectedFilter, arrange }) => {\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (filterValue && filterValue.trim()) {\n const property = selectedFilter.property;\n filteredItems = filteredItems.filter((item: any) => {\n const value = String(item[property] || '')\n .trim()\n .toLocaleLowerCase();\n return value.includes(filterValue.trim().toLocaleLowerCase());\n });\n }\n } else if (\n selectedFilter.hasOwnProperty('items') &&\n arrange === 'equals'\n ) {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n const values = selectedItems.map((item: any) => item.value);\n filteredItems = filteredItems.filter((item: any) => {\n return selectedItems.some((selectedItem: any) => {\n const itemValue = item[selectedItem.property];\n return itemValue === selectedItem.value;\n });\n });\n }\n }\n });\n\n return filteredItems;\n }\n\n // Handler para mudanças de data no filtro\n onDateFilterChange(): void {\n if (this.data.pagination === false) {\n // Atualizar arrange com os filtros ativos\n this.arrange = this.buildArrangeFromFilters();\n // Aplicar filtros (ou remover se campos estiverem vazios)\n this.applyFiltersToDataSource();\n }\n }\n\n // Aplicar filtros ao dataSource quando não há paginação\n private applyFiltersToDataSource(): void {\n if (!this.dataSource) return;\n\n let filteredItems = this.applyClientSideFilters([...this.items]);\n this.dataSource.data = filteredItems;\n // Atualizar filteredItems com os dados filtrados (será atualizado novamente no handleDownload com filteredData)\n this.filteredItems = filteredItems;\n this.totalItems = filteredItems.length;\n }\n\n // Métodos com paginação\n private async loadItemsPaginated(\n navigation: string = 'reload',\n reset: boolean = false\n ) {\n if (reset && ['forward', 'reload'].includes(navigation)) {\n this.lastDoc = null;\n this.currentClientPageIndex = 0;\n }\n if (reset && ['backward', 'reload'].includes(navigation)) {\n this.firstDoc = null;\n this.currentClientPageIndex = 0;\n }\n\n const activeFilters = this.filtersForm.controls\n .flatMap((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return [];\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (!filterValue) return [];\n return {\n arrange,\n filter: {\n property: selectedFilter.property,\n filtering: filterValue,\n },\n dateFilter: undefined,\n };\n }\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n if (initial && final) {\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n return {\n arrange,\n filter: undefined,\n dateFilter: {\n initial: initialDate,\n final: finalDate,\n },\n };\n }\n return [];\n }\n\n if (selectedFilter.hasOwnProperty('items') && arrange === 'equals') {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n return selectedItems.map((item) => ({\n arrange,\n filter: {\n property: item.property,\n filtering: item.value,\n },\n dateFilter: undefined,\n }));\n }\n }\n\n return [];\n })\n .filter((f) => f && (f.filter?.filtering !== undefined || f.dateFilter));\n\n this.arrange = {\n filters: activeFilters,\n sortBy: this.sortBy,\n };\n\n const paginated: any = {\n batchSize: this.pageSize,\n collection: this.data.collection,\n doc: { lastDoc: this.lastDoc, firstDoc: this.firstDoc },\n navigation,\n arrange: this.arrange,\n conditions: this.data.conditions,\n size: this.totalItems,\n filterFn: this.data.filterFn,\n clientPageIndex: this.currentClientPageIndex,\n };\n\n const result = await this.tableService.getPaginated(paginated);\n this.items = result.items;\n await this.loadRelations();\n await this.loadQueryLengths();\n this.lastDoc = result.lastDoc as any;\n this.firstDoc = result.firstDoc as any;\n\n // Atualizar currentClientPageIndex se retornado pelo fallback\n if (result.currentClientPageIndex !== undefined) {\n this.currentClientPageIndex = result.currentClientPageIndex;\n }\n\n let sum = 0;\n if (this.data.totalRef) {\n for (const totalRef of this.data.totalRef) {\n const totalRefDoc = await totalRef.ref.get();\n const docData = totalRefDoc.data() as any;\n if (docData || result.filterLength) {\n sum =\n result.filterLength ??\n ((sum + (docData ? docData[totalRef.field] : 0)) as number);\n }\n }\n this.totalItems = sum;\n }\n\n this.hasNextPage = result.hasNextPage;\n this.dataSource = new MatTableDataSource(this.items);\n this.filterPredicate = this.dataSource.filterPredicate;\n }\n\n async onPageChange(event?: PageEvent) {\n if (this.data.pagination === true && event) {\n this.isLoading = true;\n\n const previousPageIndex = event.previousPageIndex ?? 0;\n const pageIndex = event.pageIndex;\n const currentComponentPageSize = this.pageSize;\n const eventPageSize = event.pageSize;\n const totalItems = this.totalItems;\n\n let navigationDirection: string;\n let resetDocs = false;\n let originalPageSize: number | null = null;\n\n const lastPageIndex = Math.max(\n 0,\n Math.ceil(totalItems / eventPageSize) - 1\n );\n\n // Atualizar currentClientPageIndex sempre para o fallback\n this.currentClientPageIndex = pageIndex;\n\n if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {\n this.currentPageNumber++;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n this.currentPageNumber = Math.max(1, this.currentPageNumber - 1);\n }\n\n if (eventPageSize !== currentComponentPageSize) {\n console.log('Alterou a quantidade de elementos exibidos por página');\n this.pageSize = eventPageSize;\n navigationDirection = 'forward';\n resetDocs = true;\n this.currentClientPageIndex = 0;\n } else if (\n pageIndex === 0 &&\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n console.log('Pulou para a primeira página');\n navigationDirection = 'forward';\n this.currentPageNumber = 1;\n this.currentClientPageIndex = 0;\n resetDocs = true;\n } else if (\n pageIndex === lastPageIndex &&\n previousPageIndex !== undefined &&\n pageIndex > previousPageIndex &&\n pageIndex - previousPageIndex > 1\n ) {\n console.log('Pulou para a ultima página');\n navigationDirection = 'backward';\n resetDocs = true;\n\n const itemsExpectedInLastPage =\n totalItems - lastPageIndex * eventPageSize;\n\n if (\n itemsExpectedInLastPage > 0 &&\n itemsExpectedInLastPage < eventPageSize\n ) {\n originalPageSize = this.pageSize;\n this.pageSize = itemsExpectedInLastPage;\n }\n } else if (\n previousPageIndex !== undefined &&\n pageIndex > previousPageIndex\n ) {\n console.log('Procedendo');\n navigationDirection = 'forward';\n resetDocs = false;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex < previousPageIndex\n ) {\n console.log('Retrocedendo.');\n navigationDirection = 'backward';\n resetDocs = false;\n } else if (\n previousPageIndex !== undefined &&\n pageIndex === previousPageIndex\n ) {\n console.log('Recarregando.');\n navigationDirection = 'reload';\n resetDocs = false;\n } else if (previousPageIndex === undefined && pageIndex === 0) {\n console.log(\n 'Evento inicial do paginador para pág 0. ngOnInit carregou.'\n );\n this.isLoading = false;\n if (event) this.pageEvent = event;\n return;\n } else {\n console.warn('INESPERADO! Condição de navegação não tratada:', event);\n this.isLoading = false;\n if (event) this.pageEvent = event;\n return;\n }\n\n if (navigationDirection) {\n try {\n await this.loadItemsPaginated(navigationDirection, resetDocs);\n } catch (error) {\n console.error('Erro ao carregar itens paginados:', error);\n } finally {\n if (originalPageSize !== null) {\n this.pageSize = originalPageSize;\n }\n }\n }\n\n if (event) this.pageEvent = event;\n this.isLoading = false;\n }\n }\n\n // Outros métodos\n\n applyFilter(value: string) {\n // Sem paginação\n if (this.data.pagination === false) {\n this.dataSource.filter = String(value).trim().toLowerCase();\n }\n // Com paginação\n if (this.data.pagination === true) {\n this.filterValue = value;\n this.filterSubject.next(this.filterValue);\n }\n }\n\n goToDetails(row: any): void {\n if (this.data.isNotClickable) {\n return;\n }\n const urlPath = this.data.url || this.data.name;\n const url = this.router.serializeUrl(\n this.router.createUrlTree([`/${urlPath}`, row.id])\n );\n window.open(url, '_blank');\n }\n\n async getRelation(params: {\n id: any;\n collection: string;\n newProperty: string;\n }): Promise<string> {\n try {\n let snapshot: firestore.DocumentSnapshot<unknown> | undefined;\n if (\n params.id !== '' &&\n params.id !== undefined &&\n params.collection !== undefined &&\n params.collection !== ''\n ) {\n snapshot = await firstValueFrom(\n this.firestore.collection(params.collection).doc(params.id).get()\n );\n }\n if (snapshot && snapshot.exists) {\n const data = snapshot.data() as any;\n return data?.[params.newProperty] ?? '';\n }\n return '';\n } catch (e) {\n console.log(e);\n return '';\n }\n }\n\n private async loadRelations() {\n const relationPromises = this.data.displayedColumns\n .filter((col) => col.relation)\n .flatMap((col) =>\n this.items.map(async (item) => {\n if (col.relation) {\n item[col.property] = await this.getRelation({\n id: item[col.relation.property],\n collection: col.relation.collection,\n newProperty: col.relation.newProperty,\n });\n }\n })\n );\n\n await Promise.all(relationPromises);\n }\n\n async getQueryLength(params: {\n item: any;\n relation: {\n collection: string;\n property: string;\n operator: WhereFilterOp;\n value: string;\n };\n }) {\n const snapshot = await this.firestore\n .collection(params.relation.collection)\n .ref.where(\n params.relation.property,\n params.relation.operator,\n params.item[params.relation.value]\n )\n .get();\n return snapshot.size;\n }\n\n private async loadQueryLengths() {\n const lengthPromises = this.data.displayedColumns\n .filter((col) => col.queryLength)\n .flatMap((col) =>\n this.items.map(async (item) => {\n if (col.queryLength) {\n item[col.property] = await this.getQueryLength({\n item: item,\n relation: col.queryLength,\n });\n }\n })\n );\n await Promise.all(lengthPromises);\n }\n\n private filterItems() {\n if (this.data.conditions) {\n this.data.conditions.forEach((cond) => {\n this.items = this.items.filter((item) => {\n const operatorFunction = (this.tableService.operators as any)[\n cond.operator\n ];\n if (operatorFunction) {\n return operatorFunction(\n item[cond.firestoreProperty],\n cond.dashProperty\n );\n }\n return false;\n });\n });\n }\n }\n\n private buildArrangeFromFilters(): Arrange {\n const activeFilters = this.filtersForm.controls\n .flatMap((control) => {\n const group = control as FormGroup;\n const selectedFilter = group.get('selectFilter')?.value;\n if (!selectedFilter) return [];\n\n const arrange = selectedFilter.arrange;\n\n if (arrange === 'filter') {\n const filterValue = group.get('typeFilter')?.value;\n if (!filterValue) return [];\n return {\n arrange,\n filter: {\n property: selectedFilter.property,\n filtering: filterValue,\n },\n dateFilter: undefined,\n };\n }\n\n if (arrange === 'filterByDate') {\n const initial = group.get('initialDate')?.value;\n const final = group.get('finalDate')?.value;\n if (initial && final) {\n try {\n const [dayI, monthI, yearI] = initial.split('/');\n const initialDate = new Date(`${monthI}/${dayI}/${yearI}`);\n const [dayF, monthF, yearF] = final.split('/');\n const finalDate = new Date(`${monthF}/${dayF}/${yearF}`);\n finalDate.setHours(23, 59, 59);\n return {\n arrange,\n filter: undefined,\n dateFilter: {\n initial: initialDate,\n final: finalDate,\n },\n };\n } catch (error) {\n return [];\n }\n }\n return [];\n }\n\n if (selectedFilter.hasOwnProperty('items') && arrange === 'equals') {\n const selectedItems = group.get('selectItem')?.value;\n if (Array.isArray(selectedItems) && selectedItems.length > 0) {\n return selectedItems.map((item) => ({\n arrange,\n filter: {\n property: item.property,\n filtering: item.value,\n },\n dateFilter: undefined,\n }));\n }\n }\n\n return [];\n })\n .filter((f) => f && (f.filter?.filtering !== undefined || f.dateFilter));\n\n return {\n filters: activeFilters,\n sortBy: this.sortBy,\n };\n }\n\n // Filtro de data\n async search(event?: Event) {\n // Prevenir comportamento padrão do formulário ao pressionar Enter\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.selectSort.value) {\n if (this.selectSort.value.arrange === 'ascending') {\n this.sortBy = {\n field: this.selectSort.value.property,\n order: 'asc',\n };\n }\n if (this.selectSort.value.arrange === 'descending') {\n this.sortBy = {\n field: this.selectSort.value.property,\n order: 'desc',\n };\n }\n }\n\n // Sem paginação: aplicar filtros client-side\n if (this.data.pagination === false) {\n // Atualizar arrange com os filtros ativos\n this.arrange = this.buildArrangeFromFilters();\n this.applyFiltersToDataSource();\n this.currentArrange =\n this.filtersForm.length > 0\n ? this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? ''\n : '';\n } else {\n // Com paginação: comportamento original\n await this.loadItemsPaginated('reload', true);\n this.currentArrange =\n this.filtersForm.length > 0\n ? this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? ''\n : '';\n this.paginator.firstPage();\n }\n }\n\n async resetFilter() {\n this.dataSource.filter = '';\n if (this.filterPredicate) {\n this.dataSource.filterPredicate = this.filterPredicate;\n }\n\n this.filtersForm.clear();\n this.addFilter();\n this.selectSort.patchValue('');\n this.sortBy = {\n order: this.data.sortBy ? this.data.sortBy.order : 'desc',\n field: this.data.sortBy ? this.data.sortBy.field : 'createdAt',\n };\n\n // Sem paginação: recarregar itens originais\n if (this.data.pagination === false) {\n // Resetar arrange para valores padrão\n this.arrange = {\n filters: [],\n sortBy: this.sortBy,\n };\n this.dataSource.data = [...this.items];\n this.totalItems = this.items.length;\n this.currentArrange = '';\n } else {\n // Com paginação: comportamento original\n await this.loadItemsPaginated('reload', true);\n this.currentArrange = '';\n this.paginator.firstPage();\n }\n }\n\n // Método público para recarregar a tabela\n async reloadTable() {\n if (this.data.pagination) {\n await this.loadItemsPaginated('reload', true);\n this.paginator.firstPage();\n } else {\n await this.loadItems();\n }\n }\n\n updateDisplayedColumns() {\n if (this.dataSource) {\n this.dataSource = new MatTableDataSource<any>([]);\n }\n\n this.columnProperties = this.data.displayedColumns.map((column) => {\n return column.property;\n });\n\n this.dropdownItems = [];\n this.sortableDropdownItems = [];\n\n this.data.displayedColumns.forEach((col) => {\n if (col.isFilterable) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filter',\n title: col.title,\n });\n }\n if (col.isSortable) {\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'ascending',\n title: col.title + ': crescente',\n });\n this.sortableDropdownItems.push({\n ...col,\n arrange: 'descending',\n title: col.title + ': decrescente',\n });\n }\n if (col.isFilterableByDate) {\n this.dropdownItems.push({\n ...col,\n arrange: 'filterByDate',\n title: col.title + ': filtro por data',\n });\n }\n });\n\n if (\n this.data.filterableOptions &&\n Array.isArray(this.data.filterableOptions)\n ) {\n this.data.filterableOptions.forEach((option) =>\n this.dropdownItems.push({ ...option, arrange: 'equals' })\n );\n }\n }\n\n isString(value: any): boolean {\n return typeof value === 'string';\n }\n\n // Métodos para controle do tooltip\n onCellMouseEnter(event: MouseEvent, row: any, col: any): void {\n // Só mostrar tooltip se a coluna tiver charLimit definido\n if (!col.charLimit) {\n return;\n }\n\n const fullValue = this.getDisplayValue(col, row, true);\n\n // Só mostrar tooltip se o valor completo for maior que o limite\n if (fullValue.length <= col.charLimit) {\n return;\n }\n\n this.hoveredCell = { row, col };\n this.tooltipContent = fullValue;\n\n // Definir posição do tooltip\n this.tooltipPosition = {\n x: event.clientX + 10,\n y: event.clientY - 10,\n };\n\n // Timeout para mostrar o tooltip\n this.tooltipTimeout = setTimeout(() => {\n if (\n this.hoveredCell &&\n this.hoveredCell.row === row &&\n this.hoveredCell.col === col\n ) {\n this.showTooltip = true;\n }\n }, 500);\n }\n\n onCellMouseLeave(): void {\n if (this.tooltipTimeout) {\n clearTimeout(this.tooltipTimeout);\n this.tooltipTimeout = null;\n }\n\n this.showTooltip = false;\n this.hoveredCell = null;\n this.tooltipContent = '';\n }\n\n onCellMouseMove(event: MouseEvent): void {\n if (this.showTooltip) {\n this.tooltipPosition = {\n x: event.clientX + 10,\n y: event.clientY - 10,\n };\n }\n }\n\n // Métodos para inversão vertical dos tabs\n getTabGroups(tabs: any[]): number[] {\n if (!tabs || tabs.length === 0) return [];\n\n const totalGroups = Math.ceil(tabs.length / 6);\n const groups: number[] = [];\n\n // Criar array de índices invertidos (último grupo primeiro)\n for (let i = totalGroups - 1; i >= 0; i--) {\n groups.push(i);\n }\n\n return groups;\n }\n\n getTabGroup(tabs: any[], groupIndex: number): any[] {\n if (!tabs || tabs.length === 0) return [];\n\n const startIndex = groupIndex * 6;\n const endIndex = Math.min(startIndex + 6, tabs.length);\n\n return tabs.slice(startIndex, endIndex);\n }\n\n getRealTabIndex(groupIndex: number, tabIndexInGroup: number): number {\n if (!this.data.tabs?.tabsData) return 0;\n const totalGroups = Math.ceil(this.data.tabs.tabsData.length / 6);\n const realGroupIndex = totalGroups - 1 - groupIndex;\n return realGroupIndex * 6 + tabIndexInGroup;\n }\n\n onTableSelected(i: number, j: number) {\n if (!this.data.tabs?.tabsData || !this.data.tabs.method) return;\n this.selectedTab = this.getRealTabIndex(i, j);\n const tab = this.data.tabs.tabsData[this.selectedTab];\n if (tab) {\n this.data.tabs.method(tab, this.selectedTab);\n }\n }\n\n isTabSelected(originalIndex: number): boolean {\n return this.selectedTab === originalIndex;\n }\n\n shouldShowActionButton(): boolean {\n if (!this.data?.actionButton) {\n return false;\n }\n\n if (!this.data.actionButton.condition) {\n return true;\n }\n\n try {\n return this.data.actionButton.condition(null) ?? true;\n } catch {\n return true;\n }\n }\n\n // Método para lidar com download (diferente para paginado e não paginado)\n handleDownload(): void {\n if (!this.downloadTable) return;\n\n // Se não há paginação, usar dados filtrados do dataSource\n if (this.data.pagination === false) {\n // Atualizar filteredItems com os dados filtrados do dataSource\n // (que já inclui filtro de texto aplicado via filterPredicate)\n if (this.dataSource && this.dataSource.filteredData) {\n this.filteredItems = [...this.dataSource.filteredData];\n }\n\n // Construir arrange com os filtros ativos (se houver)\n const arrange = this.buildArrangeFromFilters();\n this.downloadTable(arrange, this.data.conditions || []);\n } else {\n // Modo paginado: usar arrange existente (comportamento original)\n if (this.arrange) {\n this.downloadTable(this.arrange, this.data.conditions || []);\n }\n }\n }\n}\n","<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title, Custom Action, and Global Actions -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e Ações</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"\n (data.actionButton.colorClass || 'bg-blue-500') +\n ' flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70'\n \"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 rounded-lg border border-gray-200 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option *ngFor=\"let item of getAvailableFilterOptions()\" [value]=\"item\">\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n formControlName=\"initialDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n matInput\n formControlName=\"finalDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Sort -->\n <div\n class=\"-mb-2 flex flex-col items-center justify-between gap-4 border-t border-gray-200 pt-4 sm:flex-row\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Sort Dropdown -->\n <div\n class=\"w-full sm:w-auto sm:min-w-[250px]\"\n *ngIf=\"sortableDropdownItems.length > 0\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Ordenar por</mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH (for non-paginated tables) -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"data.pagination === false && hasFilterableColumn === true\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n <button\n *ngIf=\"data.actionButton\"\n [ngClass]=\"\n (data.actionButton.colorClass || 'bg-blue-500') +\n ' float-right flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70'\n \"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i *ngIf=\"data.actionButton.icon\" [class]=\"data.actionButton.icon\"></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n\n <!-- FILTERS PANEL (for non-paginated tables) -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"data.pagination === false && dropdownItems.length > 0\"\n >\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 rounded-lg border border-gray-200 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option *ngFor=\"let item of getAvailableFilterOptions()\" [value]=\"item\">\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n [dropSpecialCharacters]=\"false\"\n mask=\"d0/M0/0000\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex flex-col items-center justify-between gap-4 border-t border-gray-200 pt-4 sm:flex-row\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex flex-wrap gap-3\">\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Aplicar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <div\n class=\"mx-auto flex flex-col\"\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n >\n <!-- Calcular quantos grupos de 6 tabs existem -->\n <ng-container\n *ngFor=\"\n let groupIndex of getTabGroups(data.tabs.tabsData);\n let i = index\n \"\n >\n <div class=\"mx-auto flex flex-row\">\n <ng-container\n *ngFor=\"\n let tab of getTabGroup(data.tabs.tabsData, groupIndex);\n let j = index\n \"\n >\n <button\n class=\"border-2 border-gray-300 bg-gray-200 px-4 py-2 font-medium transition hover:brightness-95\"\n [ngClass]=\"\n isTabSelected(getRealTabIndex(i, j))\n ? 'border-b-0 brightness-110'\n : ''\n \"\n (click)=\"onTableSelected(i, j)\"\n >\n {{ tab.label }}\n <span\n *ngIf=\"tab.counter !== undefined\"\n class=\"ml-2 text-xs font-bold\"\n [ngClass]=\"tab.counterClass\"\n >\n {{ tab.counter }}\n </span>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n [ngClass]=\"\n (data.color?.bg ? ' ' + $any(data.color).bg : '') +\n (data.color?.text ? ' ' + $any(data.color).text : '')\n \"\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n [ngClass]=\"\n (data.color?.bg ? ' ' + $any(data.color).bg : '') +\n (data.color?.text ? ' ' + $any(data.color).text : '')\n \"\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <img\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n alt=\"Imagem\"\n />\n <img\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n alt=\"Imagem\"\n />\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"{\n 'example-element-row': data.isNotClickable === true,\n 'example-element-row cursor-pointer': !data.isNotClickable\n }\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!isLoading\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"{\n 'hide-length':\n ['filter', 'filterByDate', 'equals'].includes(\n this.currentArrange\n ) || this.data.filterFn,\n 'hide-next-button': !hasNextPage && data.pagination === true,\n 'hide-last-button':\n (!hasNextPage && data.pagination === true) || this.data.filterFn\n }\"\n >\n </mat-paginator>\n <div\n *ngIf=\"\n !isLoading &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <div\n *ngIf=\"showTooltip\"\n class=\"fixed z-50 max-w-md break-words rounded-lg bg-gray-800 px-3 py-2 text-sm text-white shadow-lg\"\n [style.left.px]=\"tooltipPosition.x\"\n [style.top.px]=\"tooltipPosition.y\"\n [style.pointer-events]=\"'none'\"\n >\n {{ tooltipContent }}\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\n// Angular Material\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialogModule } from '@angular/material/dialog';\n\n// Third-party\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\n\n// Components\nimport { NgFirebaseTableKxpComponent } from './ng-firebase-table-kxp.component';\nimport { TableComponent } from './components/table/table.component';\n\n// Services\nimport { TableService } from './services/table.service';\n\n@NgModule({\n declarations: [NgFirebaseTableKxpComponent, TableComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n RouterModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n MatIconModule,\n MatDialogModule,\n NgxMaskDirective,\n NgxMaskPipe,\n ],\n exports: [NgFirebaseTableKxpComponent, TableComponent],\n providers: [provideNgxMask()],\n})\nexport class NgFirebaseTableKxpModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFirebaseTableKxpService {\n constructor() {}\n}\n","/*\n * Public API Surface of ng-firebase-table-kxp\n */\n\n// Main module\nexport * from './lib/ng-firebase-table-kxp.module';\n\n// Legacy components (se existirem)\nexport * from './lib/ng-firebase-table-kxp.service';\nexport * from './lib/ng-firebase-table-kxp.component';\n\n// Components\nexport * from './lib/components/table/table.component';\n\n// Services\nexport * from './lib/services/table.service';\n\n// Types\nexport * from './lib/types/Table';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TableService","i3"],"mappings":"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"}