UNPKG

ice.fo.utils

Version:

82 lines (66 loc) 2.1 kB
/* eslint-disable no-await-in-loop */ import _set from 'lodash/set'; import mapData from './mapData'; import makeSvcAPI from './makeSvcAPI'; import getValue from '../Getter/getValue'; import formatStringValue from '../String/formatStringValue'; import convertToQueryObject from '../String/convertToQueryObject'; /** * Fetch items by API Binnding Connfig * * @param {object} dataMapConfig * @param {object} params * @param {{ $axios }} context * @returns */ export default async function fetchDataMap(dataMapConfig, params = {}, context = {}) { const { $axios } = context; dataMapConfig = dataMapConfig && (dataMapConfig.item || dataMapConfig); if (!dataMapConfig || !(dataMapConfig.api || dataMapConfig.baseApi)) { return null; } const parseValues = context; // call replated apis if (dataMapConfig.relatedApis && dataMapConfig.relatedApis.length) { for (const item of dataMapConfig.relatedApis) { try { const relatedResult = await fetchDataMap(item.relatedApi.item, params, parseValues); _set(parseValues, item.name, relatedResult); } catch (error) { console.error(error); } } } const apiUrl = getValue(dataMapConfig.api) || makeSvcAPI(dataMapConfig.baseApi); const { data } = await $axios.request({ url: formatStringValue(parseValues, apiUrl), method: 'get', // fetch data to display only support GET params: { ...params, ...convertToQueryObject({ text: dataMapConfig.apiParams, data: parseValues }), }, }); if (!data.currentPage) { data.currentPage = params.page; data.pageSize = params.pageSize; } if (!data.pageCount && data.totalCount != null) { data.pageCount = Math.ceil(data.totalCount / data.pageSize); } const item = data.item; const items = data.items; const result = mapData(dataMapConfig, items || [item]); if (items) { return { ...data, values: result, canFetchMore: data.currentPage < data.pageCount, }; } if (item) { return { ...data, value: result[0], }; } return null; }