src/core/api.js
import _ from 'lodash';
import flatten from 'flat';
import queryString from 'query-string';
import request from '../utils/request';
import { generateFlatQuery } from '../tools/helpers';
export const API_PREFIX = 'n2o';
export const BASE_PATH_METADATA = '/page';
export const BASE_PATH_DATA = '/data/';
export const BASE_PATH_VALIDATION = '/validation';
export const BASE_PATH_CONFIG = '/config';
export const FETCH_APP_CONFIG = 'FETCH_APP_CONFIG';
export const FETCH_PAGE_METADATA = 'FETCH_PAGE_METADATA';
export const FETCH_WIDGET_DATA = 'FETCH_WIDGET_DATA';
export const FETCH_INVOKE_DATA = 'FETCH_INVOKE_DATA';
export const FETCH_VALIDATE = 'FETCH_VALIDATE';
function clearEmptyParams(obj) {
return _(obj)
.pickBy(_.identity)
.pickBy(_.isObject)
.omitBy(_.isEmpty)
.assign(
_(obj)
.pickBy(_.identity)
.omitBy(_.isObject)
.value()
)
.value();
}
export default function apiProvider(type, options) {
switch (type) {
case FETCH_APP_CONFIG:
return request(
[
API_PREFIX,
BASE_PATH_CONFIG,
'?',
queryString.stringify(
flatten(clearEmptyParams(options), { safe: true })
),
].join('')
);
case FETCH_PAGE_METADATA:
return request(
[API_PREFIX, BASE_PATH_METADATA, options.pageUrl].join('')
);
case FETCH_WIDGET_DATA:
return request(
[
options.basePath,
'?',
queryString.stringify(
flatten(clearEmptyParams(options.baseQuery), { safe: true })
),
].join('')
);
case FETCH_INVOKE_DATA:
return request(
[
options.basePath,
'?',
queryString.stringify(
flatten(clearEmptyParams(options.baseQuery), { safe: true })
),
].join(''),
{
method: options.baseMethod || 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(options.model || {}),
}
);
case FETCH_VALIDATE:
return request(
[
API_PREFIX,
BASE_PATH_VALIDATION,
'?',
queryString.stringify(
flatten(clearEmptyParams(options), { safe: true })
),
].join('')
);
default:
return Promise.reject('Неверно задан тип для apiProvider!');
}
}
export function fetchInputSelectData(
options,
model,
settings = { apiPrefix: API_PREFIX, basePath: BASE_PATH_DATA }
) {
return request(
[
settings.apiPrefix,
settings.basePath,
generateFlatQuery(options, '', {}, '.'),
].join('')
);
}