mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
feat: remove SET_DASHBOARD_REQUEST_LOADING reducer.
feat: fix dropdown filter. feat: fix fetch resource data.
This commit is contained in:
@@ -70,8 +70,6 @@ export default class DynamicListService implements IDynamicListService {
|
||||
private validateRolesFieldsExistance(model: IModel, filterRoles: IFilterRole[]) {
|
||||
const invalidFieldsKeys = validateFilterRolesFieldsExistance(model, filterRoles);
|
||||
|
||||
console.log(invalidFieldsKeys);
|
||||
|
||||
if (invalidFieldsKeys.length > 0) {
|
||||
throw new ServiceError(ERRORS.FILTER_ROLES_FIELDS_NOT_FOUND);
|
||||
}
|
||||
@@ -86,8 +84,9 @@ export default class DynamicListService implements IDynamicListService {
|
||||
required: true,
|
||||
type: 'object',
|
||||
properties: {
|
||||
condition: { type: 'string' },
|
||||
fieldKey: { required: true, type: 'string' },
|
||||
value: { required: true, type: 'string' },
|
||||
value: { required: true },
|
||||
},
|
||||
});
|
||||
const invalidFields = filterRoles.filter((filterRole) => {
|
||||
@@ -126,12 +125,16 @@ export default class DynamicListService implements IDynamicListService {
|
||||
}
|
||||
// Filter roles.
|
||||
if (filter.filterRoles.length > 0) {
|
||||
this.validateFilterRolesSchema(filter.filterRoles);
|
||||
this.validateRolesFieldsExistance(model, filter.filterRoles);
|
||||
const filterRoles = filter.filterRoles.map((filterRole, index) => ({
|
||||
...filterRole,
|
||||
index: index + 1,
|
||||
}));
|
||||
this.validateFilterRolesSchema(filterRoles);
|
||||
this.validateRolesFieldsExistance(model, filterRoles);
|
||||
|
||||
// Validate the model resource fields.
|
||||
const filterRoles = new DynamicFilterFilterRoles(filter.filterRoles);
|
||||
dynamicFilter.setFilter(filterRoles);
|
||||
const dynamicFilterRoles = new DynamicFilterFilterRoles(filterRoles);
|
||||
dynamicFilter.setFilter(dynamicFilterRoles);
|
||||
}
|
||||
return dynamicFilter;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Service, Inject } from 'typedi';
|
||||
import { camelCase, upperFirst } from 'lodash';
|
||||
import pluralize from 'pluralize';
|
||||
import { buildFilter } from 'objection-filter';
|
||||
import { IModel } from 'interfaces';
|
||||
import {
|
||||
getModelFields,
|
||||
@@ -35,18 +36,42 @@ export default class ResourceService {
|
||||
const fields = getModelFields(Model);
|
||||
|
||||
return fields.map((field) => ({
|
||||
label: __(field.label, field.label),
|
||||
label: __(field.label),
|
||||
key: field.key,
|
||||
dataType: field.columnType,
|
||||
fieldType: field.fieldType,
|
||||
|
||||
...(field.options) ? {
|
||||
options: field.options.map((option) => ({
|
||||
...option, label: __(option.label),
|
||||
})),
|
||||
} : {},
|
||||
|
||||
...(field.optionsResource) ? {
|
||||
optionsResource: field.optionsResource,
|
||||
optionsKey: field.optionsKey,
|
||||
optionsLabel: field.optionsLabel,
|
||||
} : {},
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Should model be resource-able or throw service error.
|
||||
* @param {IModel} model
|
||||
*/
|
||||
private shouldModelBeResourceable(model: IModel) {
|
||||
if (!model.resourceable) {
|
||||
throw new ServiceError(ERRORS.RESOURCE_MODEL_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve resource fields from resource model name.
|
||||
* @param {string} resourceName
|
||||
*/
|
||||
public getResourceFields(tenantId: number, modelName: string) {
|
||||
const resourceModel = this.getResourceModel(tenantId, modelName);
|
||||
this.shouldModelBeResourceable(resourceModel);
|
||||
|
||||
return this.getModelFields(tenantId, resourceModel);
|
||||
}
|
||||
@@ -63,9 +88,18 @@ export default class ResourceService {
|
||||
if (!Models[modelName]) {
|
||||
throw new ServiceError(ERRORS.RESOURCE_MODEL_NOT_FOUND);
|
||||
}
|
||||
if (!Models[modelName].resourceable) {
|
||||
throw new ServiceError(ERRORS.RESOURCE_MODEL_NOT_FOUND);
|
||||
}
|
||||
return Models[modelName];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve resource data from the storage based on the given query.
|
||||
* @param {number} tenantId
|
||||
* @param {string} modelName
|
||||
*/
|
||||
public async getResourceData(tenantId: number, modelName: string, filter: any) {
|
||||
const resourceModel = this.getResourceModel(tenantId, modelName);
|
||||
this.shouldModelBeResourceable(resourceModel);
|
||||
|
||||
return buildFilter(resourceModel).build(filter);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user