feat: custom view dynamic filter.

This commit is contained in:
a.bouhuolia
2021-08-04 15:01:43 +02:00
parent 3fc30d5240
commit 2822270ac3
42 changed files with 647 additions and 97 deletions

View File

@@ -3,8 +3,8 @@ import DynamicListAbstruct from './DynamicListAbstruct';
import DynamicFilterViews from 'lib/DynamicFilter/DynamicFilterViews';
import { ServiceError } from 'exceptions';
import HasTenancyService from 'services/Tenancy/TenancyService';
import {ERRORS } from './constants';
import { IModel }from 'interfaces';
import { ERRORS } from './constants';
import { IModel } from 'interfaces';
@Service()
export default class DynamicListCustomView extends DynamicListAbstruct {
@@ -19,16 +19,18 @@ export default class DynamicListCustomView extends DynamicListAbstruct {
*/
private getCustomViewOrThrowError = async (
tenantId: number,
viewId: number,
viewSlug: string,
model: IModel
) => {
const { viewRepository } = this.tenancy.repositories(tenantId);
const view = await viewRepository.findOneById(viewId, 'roles');
const { View } = this.tenancy.models(tenantId);
if (!view || view.resourceModel !== model.name) {
// Finds the default view by the given view slug.
const defaultView = model.getDefaultViewBySlug(viewSlug);
if (!defaultView) {
throw new ServiceError(ERRORS.VIEW_NOT_FOUND);
}
return view;
return defaultView;
};
/**
@@ -38,14 +40,17 @@ export default class DynamicListCustomView extends DynamicListAbstruct {
* @returns
*/
public dynamicListCustomView = async (
tenantId: number,
model,
customViewId: number
dynamicFilter: any,
customViewSlug: string,
tenantId: number
) => {
const model = dynamicFilter.getModel();
// Retrieve the custom view or throw not found.
const view = await this.getCustomViewOrThrowError(
tenantId,
customViewId,
model
customViewSlug,
model,
);
return new DynamicFilterViews(view);
};

View File

@@ -30,16 +30,18 @@ export default class DynamicListService implements IDynamicListService {
/**
* Parses filter DTO.
* @param {IMode} model -
* @param {} filterDTO -
* @param {IMode} model -
* @param {} filterDTO -
*/
private parseFilterObject = (model, filterDTO) => {
return {
// Merges the default properties with filter object.
...model.defaultSort ? {
sortOrder: model.defaultSort.sortOrder,
columnSortBy: model.defaultSort.sortOrder,
} : {},
...(model.defaultSort
? {
sortOrder: model.defaultSort.sortOrder,
columnSortBy: model.defaultSort.sortOrder,
}
: {}),
...filterDTO,
};
};
@@ -61,17 +63,21 @@ export default class DynamicListService implements IDynamicListService {
const parsedFilter = this.parseFilterObject(model, filter);
// Custom view filter roles.
// if (filter.customViewId) {
// const dynamicListCustomView = this.dynamicListView.dynamicListCustomView();
// dynamicFilter.setFilter(dynamicListCustomView);
// }
if (filter.viewSlug) {
const dynamicListCustomView =
await this.dynamicListView.dynamicListCustomView(
dynamicFilter,
filter.viewSlug,
tenantId
);
dynamicFilter.setFilter(dynamicListCustomView);
}
// Sort by the given column.
if (parsedFilter.columnSortBy) {
const dynmaicListSortBy = this.dynamicListSortBy.dynamicSortBy(
model,
parsedFilter.columnSortBy,
parsedFilter.sortOrder,
parsedFilter.sortOrder
);
dynamicFilter.setFilter(dynmaicListSortBy);
}