renderType()

in www/src/templates/component.js [137:195]


  renderType(prop) {
    let type = prop.type || {};
    let name = getDisplayTypeName(type.name);
    let doclets = prop.doclets || {};

    switch (name) {
      case 'node':
        return 'any';
      case 'function':
        return 'Function';
      case 'elementType':
        return 'ReactClass<any>';
      case 'dateFormat':
        return 'string | (date: Date, culture: ?string, localizer: Localizer) => string';
      case 'dateRangeFormat':
        return '(range: { start: Date, end: Date }, culture: ?string, localizer: Localizer) => string';
      case 'object':
      case 'Object':
        if (type.value)
          return (
            <pre className="shape-prop">
              {displayObj(renderObject(type.value))}
            </pre>
          );

        return name;
      case 'union':
        return type.value.reduce((current, val, i, list) => {
          val = typeof val === 'string' ? { name: val } : val;
          let item = this.renderType({ type: val });

          if (React.isValidElement(item)) {
            item = React.cloneElement(item, { key: i });
          }

          current = current.concat(item);

          return i === list.length - 1 ? current : current.concat(' | ');
        }, []);
      case 'array':
      case 'Array': {
        let child = this.renderType({ type: type.value });

        return (
          <span>
            {'Array<'}
            {child}
            {'>'}
          </span>
        );
      }
      case 'enum':
        return this.renderEnum(type);
      case 'custom':
        return cleanDocletValue(doclets.type || name);
      default:
        return name;
    }
  }