@bd-innovations/abstract-section
Version:
A bunch of abstract logic for the section
171 lines (170 loc) • 5.95 kB
TypeScript
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;
}