renderNode.tsx 664 Bytes
import React, { ComponentType, ReactNode } from 'react';

const renderNode = (
  Component: ComponentType,
  content: ReactNode,
  defaultProps: any
) => {
  if (content == null || content === false) {
    return null;
  }
  if (React.isValidElement(content)) {
    return content;
  }
  if (typeof content === 'function') {
    return content();
  }
  // Just in case
  if (content === true) {
    return <Component {...defaultProps} />;
  }
  if (typeof content === 'string' || typeof content === 'number') {
    return <Component {...defaultProps}>{content}</Component>;
  }
  return <Component {...defaultProps} {...content} />;
};

export default renderNode;