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
};