| name | 
|---|
| Button | 
<SimplePropsTable props={{ color: { required: false, description: "the button's color", typeName: "string", typeTip: "green | blue", defaultValue: "green" } }} />
| // tslint:disable:no-submodule-imports | |
| // tslint:disable:no-reserved-keywords | |
| // tslint:disable:no-any | |
| // tslint:disable:strict-boolean-expressions | |
| // tslint:disable:no-null-keyword | |
| // tslint:disable:no-unsafe-any | |
| import { withMDXComponents } from "@mdx-js/tag/dist/mdx-provider"; | |
| import capitalize from "capitalize"; | |
| import { get } from "lodash/fp"; | |
| import React, { ComponentType, CSSProperties, Fragment, SFC } from "react"; | |
| export interface StylesMap { | |
| [s: string]: CSSProperties; | |
| } | |
| const styles: StylesMap = { | |
| thead: { | |
| textAlign: "left", | |
| }, | |
| }; | |
| export type TooltipComponent = React.ComponentType<{ | |
| text: React.ReactNode; | |
| children: React.ReactNode; | |
| }>; | |
| export type SimplePropsTable = { | |
| props?: Record< | |
| string, | |
| { | |
| description?: string; | |
| required?: boolean; | |
| typeName: string; | |
| typeTip?: string; | |
| defaultValue?: string; | |
| } | |
| >; | |
| components: { | |
| [key: string]: ComponentType<any>; | |
| }; | |
| }; | |
| const BaseSimplePropsTable: SFC<SimplePropsTable> = ({ components, props }) => { | |
| if (props === undefined) { | |
| return null; | |
| } | |
| const hasDescription = Object.keys(props).some((name: string) => { | |
| const description = get(`${name}.description`, props); | |
| return Boolean(description) && Boolean(get("length", description)); | |
| }); | |
| const Table = components.table || "table"; | |
| const Thead = components.thead || "thead"; | |
| const Tr = components.tr || "tr"; | |
| const Th = components.th || "th"; | |
| const Tbody = components.tbody || "tbody"; | |
| const Td = components.td || "td"; | |
| const Tooltip: TooltipComponent = components.tooltip; | |
| return ( | |
| <Fragment> | |
| <Table className="PropsTable"> | |
| <Thead style={styles.thead}> | |
| <Tr> | |
| <Th className="PropsTable--property">Property</Th> | |
| <Th className="PropsTable--type">Type</Th> | |
| <Th className="PropsTable--required">Required</Th> | |
| <Th className="PropsTable--default">Default</Th> | |
| {hasDescription && ( | |
| <Th width="40%" className="PropsTable--description"> | |
| Description | |
| </Th> | |
| )} | |
| </Tr> | |
| </Thead> | |
| <Tbody> | |
| {props && | |
| Object.keys(props).map((name: string) => { | |
| const prop = props[name]; | |
| if (!prop.typeName) { | |
| return null; | |
| } | |
| return ( | |
| <Tr key={name}> | |
| <Td>{name}</Td> | |
| <Td> | |
| {prop.typeTip ? ( | |
| <Tooltip text={prop.typeTip}> | |
| {capitalize(prop.typeName)} | |
| </Tooltip> | |
| ) : ( | |
| capitalize(prop.typeName) | |
| )} | |
| </Td> | |
| <Td>{prop.required ? String(prop.required) : 'false'}</Td> | |
| {!prop.defaultValue ? ( | |
| <Td> | |
| <em>-</em> | |
| </Td> | |
| ) : ( | |
| <Td> | |
| {prop.defaultValue === "''" ? ( | |
| <em>[Empty String]</em> | |
| ) : ( | |
| prop.defaultValue.replace(/\'/g, "") | |
| )} | |
| </Td> | |
| )} | |
| {hasDescription && ( | |
| <Td>{prop.description && prop.description}</Td> | |
| )} | |
| </Tr> | |
| ); | |
| })} | |
| </Tbody> | |
| </Table> | |
| </Fragment> | |
| ); | |
| }; | |
| export const SimplePropsTable = withMDXComponents(BaseSimplePropsTable); |