mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
feat: custom view dynamic filter.
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user