import { OnDestroy, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { ActivatedRoute, QueryParamsHandling, Router } from '@angular/router'; import { ResultOf, TypedDocumentNode, VariablesOf } from '@graphql-typed-document-node/core'; import { BehaviorSubject, Observable, Subject } from 'rxjs'; import { DataService } from '../data/providers/data.service'; import { QueryResult } from '../data/query-result'; import { ServerConfigService } from '../data/server-config'; import { DataTableConfigService } from '../providers/data-table/data-table-config.service'; import { DataTableFilterCollection } from '../providers/data-table/data-table-filter-collection'; import { DataTableSortCollection } from '../providers/data-table/data-table-sort-collection'; import { PermissionsService } from '../providers/permissions/permissions.service'; import { DataTable2ColumnComponent } from '../shared/components/data-table-2/data-table-column.component'; import { DataTableCustomFieldColumnComponent } from '../shared/components/data-table-2/data-table-custom-field-column.component'; import { CustomFieldConfig, CustomFields, LanguageCode } from './generated-types'; import { SelectionManager } from './utilities/selection-manager'; import * as i0 from "@angular/core"; export type ListQueryFn = (take: number, skip: number, ...args: any[]) => QueryResult; export type MappingFn = (result: R) => { items: T[]; totalItems: number; }; export type OnPageChangeFn = (skip: number, take: number) => V; /** * Unwraps a query that returns a paginated list with an "items" property, * returning the type of one of the items in the array. */ export type ItemOf = T[K] extends { items: infer R; } ? R extends any[] ? R[number] : R : never; /** * @description * This is a base class which implements the logic required to fetch and manipulate * a list of data from a query which returns a PaginatedList type. * * It is normally used in combination with the {@link DataTable2Component}. * * @docsCategory list-detail-views */ export declare class BaseListComponent = any> implements OnInit, OnDestroy { protected router: Router; protected route: ActivatedRoute; searchTermControl: FormControl; selectionManager: SelectionManager; result$: Observable; items$: Observable; totalItems$: Observable; itemsPerPage$: Observable; currentPage$: Observable; protected destroy$: Subject; private listQuery; private listQueryFn; private mappingFn; private onPageChangeFn; protected refresh$: BehaviorSubject; private defaults; protected visibleCustomFieldColumnChange$: Subject[]>; constructor(router: Router, route: ActivatedRoute); /** * @description * Sets the fetch function for the list being implemented. */ setQueryFn(listQueryFn: ListQueryFn, mappingFn: MappingFn, onPageChangeFn?: OnPageChangeFn, defaults?: { take: number; skip: number; }): void; /** @internal */ ngOnInit(): void; /** * @description * Accepts a list of Observables which will trigger a refresh of the list when any of them emit. */ protected refreshListOnChanges(...streams: Array>): void; /** @internal */ ngOnDestroy(): void; /** * @description * Sets the current page number in the url. */ setPageNumber(page: number): void; /** * @description * Sets the number of items per page in the url. */ setItemsPerPage(perPage: number): void; setVisibleColumns(columns: Array>): void; /** * @description * Re-fetch the current page of results. */ refresh(): void; protected setQueryParam(hash: { [key: string]: any; }, options?: { replaceUrl?: boolean; queryParamsHandling?: QueryParamsHandling; }): any; protected setQueryParam(key: string, value: any, options?: { replaceUrl?: boolean; queryParamsHandling?: QueryParamsHandling; }): any; static ɵfac: i0.ɵɵFactoryDeclaration, never>; static ɵdir: i0.ɵɵDirectiveDeclaration, never, never, {}, {}, never, never, true, never>; } /** * @description * A version of the {@link BaseListComponent} which is designed to be used with a * [TypedDocumentNode](https://the-guild.dev/graphql/codegen/plugins/typescript/typed-document-node). * * @docsCategory list-detail-views */ export declare class TypedBaseListComponent, Field extends keyof ResultOf, Vars extends { options: { filter: any; sort: any; }; } = VariablesOf> extends BaseListComponent, ItemOf, Field>, VariablesOf> implements OnInit { availableLanguages$: Observable; contentLanguage$: Observable; protected dataService: DataService; protected router: Router; protected serverConfigService: ServerConfigService; protected permissionsService: PermissionsService; protected dataTableConfigService: DataTableConfigService; /** * This was introduced to allow us to more easily manage the relation between the * DataTableComponent and the BaseListComponent. It allows the base class to * correctly look up the currently-visible custom field columns, which can then * be passed to the `dataService.query()` method. */ protected dataTableListId: string | undefined; private refreshStreams; private collections; constructor(); protected configure(config: { document: T; getItems: (data: ResultOf) => { items: Array, Field>>; totalItems: number; }; setVariables?: (skip: number, take: number) => VariablesOf; refreshListOnChanges?: Array>; }): void; ngOnInit(): void; createFilterCollection(): DataTableFilterCollection['filter']>>; createSortCollection(): DataTableSortCollection['sort']>>; setLanguage(code: LanguageCode): void; getCustomFieldConfig(key: Exclude | string): CustomFieldConfig[]; static ɵfac: i0.ɵɵFactoryDeclaration, never>; static ɵdir: i0.ɵɵDirectiveDeclaration, never, never, {}, {}, never, never, true, never>; }