UNPKG

@bd-innovations/abstract-section

Version:

A bunch of abstract logic for the section

171 lines (170 loc) 5.95 kB
import { OnDestroy } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import { AbstractComponent } from '../abstract.component'; import { AbstractService } from '../../providers/abstract.service'; import { ResponseTypeEnum } from '../../config/response-type.enum'; import { Observable } from 'rxjs'; import { ApiCallModel } from '../../config/api-call.model'; import { PaginationRequestModel } from '../../config/dynamic-table-models/api-request.model'; import { ComponentType } from '@angular/cdk/overlay'; import { AbstractEditComponent } from '../../abstract-dialog/abstract-edit/abstract-edit.component'; /** * @deprecated * */ export declare abstract class AbstractListComponent<T> extends AbstractComponent<T> implements OnDestroy { service: AbstractService<T>; dialog: MatDialog; router: Router; route: ActivatedRoute; /** * data: by default empty array, if Inputted from other component override ngOnInit, to disable get All request */ data: T[]; /** * parentUuId: if provided will call getAll API with request like GET 'model/{parentUuId}' * provide for child entities */ parentUuId: string; /** * override for child entities used for list & details * @example * ``` * get newElement() { * return {someoneUuId: this.parentUuId} * } * ``` */ get newElement(): {}; /** * listType: By default gets all, if need paginated override with ResponseTypeEnum.paginated/paginated_body/paginated_path */ listType: ResponseTypeEnum; /** * filters - object {key: value} that will be mapped into request * for paginated: &key=value */ filters: { [key: string]: any; }; /** * TABLE SETTINGS * sort - true by default, if sort is available * apiable - true by default, if search & pages change will call API * search - true by default, if search is available in table * paginator - by default pageSize = 25, pageIndex = 0, length = null */ sort: boolean; apiable: boolean; search: boolean; paginator: PaginationRequestModel; protected constructor(service: AbstractService<T>, dialog: MatDialog, router: Router, route: ActivatedRoute); ngOnDestroy(): void; returnNewComponentType(): ComponentType<AbstractEditComponent<T>>; /** * combines this.paginator, this filters & apiCallModel from arguments * @param obj - optional ApiCallModel */ getApiCallModel(obj?: ApiCallModel | any): ApiCallModel; /** * use for dynamic table @Output(apiRequest) * @param apiCall: ApiCallModel */ onApiRequestEmitted(apiCall: ApiCallModel | any): void; /** * calls getAllRequest() maps it with mapListResponse() and subscribes on result. * If request successful calls onSuccessfulDataInit(res), * on error calls onDataInitError(error) * @param apiCall: optional ApiCallModel */ getData(apiCall?: ApiCallModel | any): void; /** * depending on listType calls service's getAll() or one of getAllPaginated() * @param apiCall: ApiCallModel better format throw getApiCallModel(apiCall) before */ getAllRequest(apiCall: ApiCallModel): Observable<T[]>; /** * sets up length of received array & returns data list * is arrow function to survive this * @param pagination: Paginated Response Model * @param apiCall: Api call model */ mapPaginatedResponse(pagination: any, apiCall: ApiCallModel): any; /** * puts API response into data; * then calls afterDataInit() * @param res - API response */ onSuccessfulDataInit(res: T[]): void; /** * DETAILS */ /** * navigates to this.route/{element[keyValue]} * @param t: list element */ openDetails(t: T): void; /** NEW DIALOG */ /** * calls onBeforeOpen(), opens dialog & subscribes on result. Result is send to afterNewClosed() * */ openNew(): void; /** * calls from openNew() * setups dialog data, panelClasses & width * if newDialogWidth is undefined takes editDialogWidth * if newDialogPanelClass is undefined takes editDialogPanelClass */ onBeforeNewOpen(): void; /** * if submit true calls onSuccessfulCreateNew() * when false onNewCreateNewCancel() * @param submit: true when created/false when canceled */ afterNewClosed(submit: boolean): void; /** * calls getData() */ onSuccessfulCreateNew(): void; onCreateNewCancel(): void; /** EDIT DIALOG */ /** * calls onBeforeEditOpen() * opens dialog * subscribe on dialog afterClosed and emits value into afterEditClosed() * @param t: element */ openEdit(t: T): void; /** * if submit true calls onSuccessfulCreateNew() * when false onNewCreateNewCancel() * @param submit: true when edited/false when canceled */ afterEditClose(submit: boolean | any): void; /** * if submit true calls onSuccessfulDelete() * when false onDeleteCancel() * @param submit: true when edited/false when canceled * @param t: element to delete */ afterDeleteClose(submit: boolean, t: T | any): void; /** * calls getData() * @param submit: true when edited/false when canceled * @param t: element to delete */ onSuccessfulDelete(submit: any, t: any): void; /** * use for dynamic table @Output(actionRequest) * handles dynamic table events: edit, delete, open; * if do not need open override this way: * @example * > if ($event.type === 'open) return; * > super.actionHandler($event); * @param $event: dynamic table event: {type: string, entity: element} */ actionHandler($event: { type: string; entity: T; }): void; }