@tasolutions/express-core
Version:
All libs for express
63 lines (58 loc) • 2.5 kB
JavaScript
const _ = require('lodash');
const { apiGWInfo } = require('../../../config');
const { coverRequiredFields } = require('../utils/cover');
const { buildFieldListFromInterfaceCustom } = require('./fieldBuilderInterfaceCustom');
module.exports = {
createCustomSelectOptionInterface: (options, segment = '/') => {
const defaultOptions = {
api: {
method: null,
limit: null,
type: null,
content_type: null,
request_fields: null,
required_fields: null,
},
response_fields: null,
values: null,
field_submit: null,
field_display: null,
};
const mergedOptions = {
...defaultOptions,
...options,
api: {
...defaultOptions.api,
...options.api,
}
};
const fieldList = buildFieldListFromInterfaceCustom(mergedOptions.response_fields);
let requestFields = null;
if (mergedOptions.api.request_fields) {
requestFields = mergedOptions.api.request_fields;
} else {
requestFields = mergedOptions.api.required_fields
? fieldList.filter(field => mergedOptions.api.required_fields.includes(field.key))
: null;
}
if (mergedOptions.api.key_request_fields) {
requestFields = fieldList.filter(field => mergedOptions.api.key_request_fields.includes(field.key))
}
return {
api: {
path: mergedOptions.api.path ? `${apiGWInfo.prefix}${segment}${mergedOptions.api.path}` : null,
url: mergedOptions.api.path ? `${apiGWInfo.url}${segment}${mergedOptions.api.path}` : null,
method: mergedOptions.api.method,
limit: mergedOptions.api.limit,
type: mergedOptions.api.type,
content_type: mergedOptions.api.content_type,
request_fields: requestFields && requestFields.length ? requestFields : null,
required_fields: mergedOptions.api.required_fields ? coverRequiredFields(mergedOptions.api.required_fields) : null,
},
response_fields: fieldList && fieldList.length ? fieldList : null,
values: mergedOptions.values,
field_submit: mergedOptions.field_submit,
field_display: mergedOptions.field_display,
};
}
}