Home Reference Source

src/utils/linkResolver.js

import { get, isNumber, isString } from 'lodash';
import evalExpression, { parseExpression } from './evalExpression';

/**
 * Получение значения по ссылке и выражению.
 * @param state
 * @param link
 * @param value
 * @returns {*}
 */
export default function linkResolver(state, { link, value }) {
  if (!link && !value) return;

  if (isNumber(value)) return value;
  const context = get(state, link);
  if (!value && link) return context;

  const json = JSON.stringify(value);
  const str = JSON.parse(json, (k, val) => {
    const parsedValue = parseExpression(val);
    return parsedValue ? evalExpression(parsedValue, context) : val;
  });
  return str;
}