// @flow import * as React from "react"; import cn from "classnames"; import { Button } from "tabler-react"; import "./ComponentDemo.css"; import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; import { prism } from "react-syntax-highlighter/dist/styles/prism"; import reactElementToJSXString from "./react-element-to-jsx-string"; type Props = {| +children: React.Element, +className?: string, +asString?: string, |}; type State = {| codeOpen: boolean, |}; class ComponentDemo extends React.PureComponent { state = { codeOpen: false, }; handleSourceButtonOnClick = (e: SyntheticMouseEvent) => { e.preventDefault(); this.setState(s => ({ codeOpen: !s.codeOpen })); }; render() { const { className, children, asString } = this.props; const { codeOpen } = this.state; const classes = cn("ComponentDemo", className); return (
{children}
{codeOpen && (
{asString || reactElementToJSXString(children)}
)}
); } } export default ComponentDemo;