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

@@ -37,4 +37,8 @@ export default class DynamicFilterAbstructor {
}
});
};
getModel() {
return this.model;
}
}

View File

@@ -346,4 +346,12 @@ export default abstract class DynamicFilterAbstructor
this.relationFields.push(field.relationKey);
}
};
getModel() {
return this.model;
}
onInitialize() {
}
}

View File

@@ -1,12 +1,12 @@
import { omit } from 'lodash';
import { IView, IViewRole } from 'interfaces';
import DynamicFilterRoleAbstructor from 'lib/DynamicFilter/DynamicFilterRoleAbstructor';
import { buildFilterQuery } from 'lib/ViewRolesBuilder';
import DynamicFilterRoleAbstructor from './DynamicFilterRoleAbstructor';
export default class DynamicFilterViews extends DynamicFilterRoleAbstructor {
viewId: number;
logicExpression: string;
filterRoles: IViewRole[];
private viewSlug: string;
private logicExpression: string;
private filterRoles: IViewRole[];
private viewColumns = [];
/**
* Constructor method.
@@ -15,8 +15,9 @@ export default class DynamicFilterViews extends DynamicFilterRoleAbstructor {
constructor(view: IView) {
super();
this.viewId = view.id;
this.viewSlug = view.slug;
this.filterRoles = view.roles;
this.viewColumns = view.columns;
this.logicExpression = view.rolesLogicExpression
.replace('AND', '&&')
.replace('OR', '||');
@@ -24,19 +25,12 @@ export default class DynamicFilterViews extends DynamicFilterRoleAbstructor {
this.setResponseMeta();
}
/**
* Retrieve logic expression.
*/
buildLogicExpression() {
return this.logicExpression;
}
/**
* Builds database query of view roles.
*/
buildQuery() {
public buildQuery() {
return (builder) => {
buildFilterQuery(
this.buildFilterQuery(
this.model,
this.filterRoles,
this.logicExpression
@@ -47,14 +41,15 @@ export default class DynamicFilterViews extends DynamicFilterRoleAbstructor {
/**
* Sets response meta.
*/
setResponseMeta() {
public setResponseMeta() {
this.responseMeta = {
view: {
logicExpression: this.logicExpression,
filterRoles: this.filterRoles.map((filterRole) => ({
...omit(filterRole, ['id', 'viewId']),
})),
customViewId: this.viewId,
viewSlug: this.viewSlug,
viewColumns: this.viewColumns,
},
};
}