import * as React from "react"; /** * Crate single function component with optional name * @param name Optional name */ function createFunctionComponent(name?: string): React.FunctionComponent { const UnnamedFunctionComponent: React.FunctionComponent = function(props) { if (props.children !== undefined) { return {props.children}; } else { return null; } }; if (name !== undefined) { Object.defineProperty(UnnamedFunctionComponent, "name", { value: name }); UnnamedFunctionComponent.displayName = name; } return UnnamedFunctionComponent; } /** * Crate single class component with optional name * @param name Optional name */ function createClassComponent(name?: string): React.ComponentClass { const UnnamedClassComponent: React.ComponentClass = class extends React.Component { render() { if (this.props.children !== undefined) { return this.props.children; } else { return null; } } }; if (name !== undefined) { Object.defineProperty(UnnamedClassComponent, "name", { value: name }); UnnamedClassComponent.displayName = name; } return UnnamedClassComponent; } /** * Create n number of functionalComponents * given either count or array of names */ function createFunctionComponents( count: number ): Array; function createFunctionComponents( names: Array ): Array; function createFunctionComponents( countOrNames: number | Array = 1 ): Array { if (typeof countOrNames === "number") { const returnArr: Array = []; for (let index = 0; index < countOrNames; index++) { const newComp = createFunctionComponent(); returnArr.push(newComp); } return returnArr; } else if (Array.isArray(countOrNames)) { const returnArr: Array = []; for (let index = 0; index < countOrNames.length; index++) { const compName = countOrNames[index]; const newComp = createFunctionComponent(compName); returnArr.push(newComp); } // Handle other invalid inputs return returnArr; } throw new TypeError("Input is not valid"); } /** * Create n number of classComponents * given either count or array of names */ function createClassComponents(count: number): Array; function createClassComponents( names: Array ): Array; function createClassComponents( countOrNames: number | Array = 1 ): Array { if (typeof countOrNames === "number") { const returnArr: Array = []; for (let index = 0; index < countOrNames; index++) { const newComp = createClassComponent(); returnArr.push(newComp); } return returnArr; } else if (Array.isArray(countOrNames)) { const returnArr: Array = []; for (let index = 0; index < countOrNames.length; index++) { const compName = countOrNames[index]; const newComp = createClassComponent(compName); returnArr.push(newComp); } return returnArr; } // Handle other invalid inputs throw new TypeError("Input is not valid"); } export { createFunctionComponent, createFunctionComponents, createClassComponent, createClassComponents };