export function propToParam()

in website/src/utils/layer-params.js [9:64]


export function propToParam(key, propType, value) {
  if (blackList.indexOf(key) >= 0) {
    return null;
  }

  const param = {
    name: key,
    displayName: key,
    value
  };

  const type = !propType || propType.type === 'unknown' ? typeof value : propType.type;

  switch (type) {
    case 'boolean':
      return {...param, type: 'checkbox'};
    case 'number':
      param.min = propType && 'min' in propType ? propType.min : 0;
      param.max = propType && 'max' in propType ? propType.max : 100;
      return {...param, type: 'range', step: param.max === 100 ? 1 : 0.01};
    case 'accessor': {
      const result = {...param, type: 'function'};
      const altValue = propType.value;
      let altType = typeof altValue;
      if (Array.isArray(altValue) && key.endsWith('Color')) {
        altType = 'color';
      }
      if (altType === 'boolean' || altType === 'color') {
        result.altType = altType;
        result.altValue = altValue;
      }
      if (altType === 'number') {
        result.altType = 'range';
        result.altValue = altValue;
        result.step = 1;
        result.min = 0;
        result.max = 100;
      }
      return result;
    }
    case 'color':
      return {...param, type: 'color'};
    case 'url':
      return {...param, type: 'link'};
    case 'object':
      if (/mapping|domain|range/i.test(key)) {
        return {...param, type: 'json'};
      }
      if (propType && propType.async) {
        return {...param, type: 'link'};
      }
      break;
    default:
  }
  return null;
}