Skip to content

Commit e2bb6bd

Browse files
committed
Adds Expander component
1 parent f34959f commit e2bb6bd

File tree

7 files changed

+84
-66
lines changed

7 files changed

+84
-66
lines changed

packages/pretty-proptypes/src/LayoutRenderer/index.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import { FC, type ComponentType } from 'react';
66

77
import type { CommonProps } from '../types';
8+
import type { Components } from '../components';
9+
810
import getPropTypes from '../getPropTypes';
911
import renderPropType from '../renderPropType';
1012
import PrettyPropType from '../PrettyConvert';
@@ -29,12 +31,13 @@ export type LayoutRendererProps = {
2931
component?: Obj | Inter
3032
},
3133
component?: ComponentType<any>,
34+
components?: Components,
3235
renderType: CommonProps => ComponentType<CommonProps>
3336
};
3437

3538
const getProps = props => (props && props.component ? getPropTypes(props.component) : null);
3639

37-
const LayoutRenderer: FC<LayoutRendererProps> = ({ props, component, ...rest }) => {
40+
const LayoutRenderer: FC<LayoutRendererProps> = ({ props, component, components, ...rest }) => {
3841
let resolvedProps = props;
3942
if (component) {
4043
/* $FlowFixMe the component prop is typed as a component because
@@ -53,7 +56,11 @@ const LayoutRenderer: FC<LayoutRendererProps> = ({ props, component, ...rest })
5356
}
5457

5558
return getProps(resolvedProps).map(propType =>
56-
renderPropType(propType, { ...rest, components: { PropType: PrettyPropType } }, rest.renderType)
59+
renderPropType(
60+
propType,
61+
{ ...rest, components: { ...components, PropType: PrettyPropType } },
62+
rest.renderType
63+
)
5764
);
5865
};
5966

packages/pretty-proptypes/src/PrettyConvert/AddBrackets.js

Lines changed: 15 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,14 @@
11
// @flow
22
/** @jsx jsx */
3-
import { jsx, css } from '@emotion/core';
4-
import { Component, Fragment, type Node } from 'react';
5-
import { colors } from '../components/constants';
6-
7-
const StateBit = ({
8-
isHovered,
9-
onMouseEnter,
10-
onMouseLeave,
11-
onClick,
12-
children
13-
}: {
14-
isHovered: boolean,
15-
onMouseEnter: () => mixed,
16-
onMouseLeave: () => mixed,
17-
onClick: () => mixed,
18-
children: Node
19-
}) => (
20-
<button
21-
type="button"
22-
onClick={onClick}
23-
css={css`
24-
background-color: ${isHovered ? colors.P300 : colors.N20};
25-
color: ${isHovered ? 'white' : colors.subtleText};
26-
border: 0;
27-
fonts-size: 14px;
28-
fonts-family: sans-serif;
29-
line-height: 20px;
30-
width: auto;
31-
margin: 2px 0;
32-
padding: 0 0.2em;
33-
:hover {
34-
cursor: pointer;
35-
}
36-
`}
37-
onMouseEnter={onMouseEnter}
38-
onMouseLeave={onMouseLeave}
39-
>
40-
{children}
41-
</button>
42-
);
3+
import { jsx } from '@emotion/core';
4+
import { Component, ComponentType, Fragment, type Node } from 'react';
5+
import ExpanderDefault from '../Components/Expander';
436

447
type Props = {
458
openBracket: string,
469
closeBracket: string,
47-
children: Node | void
10+
children: Node | void,
11+
Expander: ComponentType<any>
4812
};
4913

5014
type State = {
@@ -55,7 +19,8 @@ type State = {
5519
export default class AddBrackets extends Component<Props, State> {
5620
static defaultProps = {
5721
openBracket: '(',
58-
closeBracket: ')'
22+
closeBracket: ')',
23+
Expander: ExpanderDefault
5924
};
6025

6126
state = { isHovered: false, isShown: true };
@@ -64,39 +29,39 @@ export default class AddBrackets extends Component<Props, State> {
6429
isNotHovered = () => this.setState({ isHovered: false });
6530

6631
render() {
67-
let { openBracket, closeBracket, children } = this.props;
68-
let { isHovered, isShown } = this.state;
32+
const { openBracket, closeBracket, children, Expander } = this.props;
33+
const { isHovered, isShown } = this.state;
6934

7035
return (
7136
<Fragment>
72-
<StateBit
37+
<Expander
7338
isHovered={isHovered}
7439
onClick={() => this.setState({ isShown: !isShown })}
7540
onMouseEnter={this.isHovered}
7641
onMouseLeave={this.isNotHovered}
7742
>
7843
{openBracket}
79-
</StateBit>
44+
</Expander>
8045
{isShown ? (
8146
children
8247
) : (
83-
<StateBit
48+
<Expander
8449
isHovered={isHovered}
8550
onClick={() => this.setState({ isShown: true, isHovered: false })}
8651
onMouseEnter={this.isHovered}
8752
onMouseLeave={this.isNotHovered}
8853
>
8954
...
90-
</StateBit>
55+
</Expander>
9156
)}
92-
<StateBit
57+
<Expander
9358
isHovered={isHovered}
9459
onClick={() => this.setState({ isShown: !isShown })}
9560
onMouseEnter={this.isHovered}
9661
onMouseLeave={this.isNotHovered}
9762
>
9863
{closeBracket}
99-
</StateBit>
64+
</Expander>
10065
</Fragment>
10166
);
10267
}

packages/pretty-proptypes/src/PrettyConvert/converters.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export const converters: { [string]: ?Function } = {
8686
return (
8787
<span>
8888
<components.TypeMeta>{convert(type.value)}</components.TypeMeta>
89-
<AddBrackets openBracket="<" closeBracket=">">
89+
<AddBrackets openBracket="<" closeBracket=">" Expander={components.Expander}>
9090
{type.typeParams &&
9191
type.typeParams.params.map((param, index, array) => (
9292
<span key={index}>
@@ -120,7 +120,7 @@ export const converters: { [string]: ?Function } = {
120120

121121
return (
122122
<span>
123-
<AddBrackets BracketStyler={components.TypeMeta} openBracket="{" closeBracket="}">
123+
<AddBrackets openBracket="{" closeBracket="}" Expander={components.Expander}>
124124
<components.Indent>
125125
{type.members
126126
.filter(p => p)
@@ -147,7 +147,7 @@ export const converters: { [string]: ?Function } = {
147147
return (
148148
<span>
149149
<components.TypeMeta>Array</components.TypeMeta>
150-
<AddBrackets BracketStyler={components.TypeMeta} openBracket="<" closeBracket=">">
150+
<AddBrackets openBracket="<" closeBracket=">" Expander={components.Expander}>
151151
<components.Indent>{prettyConvert(type.type, components, depth)}</components.Indent>
152152
</AddBrackets>
153153
</span>
@@ -168,7 +168,7 @@ export const converters: { [string]: ?Function } = {
168168
union: (type: K.Union, components: Components, depth: number) => (
169169
<span>
170170
<components.TypeMeta>One of </components.TypeMeta>
171-
<AddBrackets BracketStyler={components.TypeMeta} openBracket="<" closeBracket=">">
171+
<AddBrackets openBracket="<" closeBracket=">" Expander={components.Expander}>
172172
<components.Indent>
173173
{type.types.map((t, index, array) => (
174174
<div key={index}>
@@ -198,7 +198,7 @@ export const converters: { [string]: ?Function } = {
198198
} else if (simpleParameters || type.parameters.length < 2) {
199199
return (
200200
<span>
201-
<AddBrackets BracketStyler={components.FunctionType}>
201+
<AddBrackets Expander={components.Expander}>
202202
{type.parameters.map((param, index, array) => [
203203
prettyConvert(param, components, depth),
204204
array.length - 1 === index ? '' : ', '
@@ -212,7 +212,7 @@ export const converters: { [string]: ?Function } = {
212212
return (
213213
<span>
214214
<components.TypeMeta>function </components.TypeMeta>
215-
<AddBrackets BracketStyler={components.FunctionType}>
215+
<AddBrackets Expander={components.Expander}>
216216
<components.Indent>
217217
{type.parameters.map((param, index, array) => (
218218
<div key={convert(param.value)}>
@@ -228,9 +228,9 @@ export const converters: { [string]: ?Function } = {
228228
);
229229
}
230230
},
231-
param: (type: K.Param, components, depth) => {
232-
return <span key={convert(type.value)}>{prettyConvert(type.value, components, depth)}</span>;
233-
},
231+
param: (type: K.Param, components, depth) => (
232+
<span key={convert(type.value)}>{prettyConvert(type.value, components, depth)}</span>
233+
),
234234
typeof: (type: K.Typeof, components, depth) => prettyConvert(type.type, components, depth)
235235
};
236236

packages/pretty-proptypes/src/PrettyConvert/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ const Wrapper = (props: { children: Node }) => (
2121
/>
2222
);
2323

24-
// const printFunc = type => null;
25-
2624
type PrettyPropTypeProps = {
2725
typeValue: Object,
2826
shouldCollapse?: boolean,
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// @flow
2+
/** @jsx jsx */
3+
import { jsx, css } from '@emotion/core';
4+
import { type Node } from 'react';
5+
import { colors } from './constants';
6+
7+
const Expander = ({
8+
isHovered,
9+
onMouseEnter,
10+
onMouseLeave,
11+
onClick,
12+
children
13+
}: {
14+
isHovered: boolean,
15+
onMouseEnter: () => mixed,
16+
onMouseLeave: () => mixed,
17+
onClick: () => mixed,
18+
children: Node
19+
}) => (
20+
<button
21+
type="button"
22+
onClick={onClick}
23+
css={css`
24+
background-color: ${isHovered ? colors.P300 : colors.N20};
25+
color: ${isHovered ? 'white' : colors.subtleText};
26+
border: 0;
27+
border-radius: 3px;
28+
font-size: 14px;
29+
font-family: sans-serif;
30+
line-height: 20px;
31+
width: auto;
32+
margin: 2px 0;
33+
padding: 0 0.2em;
34+
:hover {
35+
cursor: pointer;
36+
}
37+
`}
38+
onMouseEnter={onMouseEnter}
39+
onMouseLeave={onMouseLeave}
40+
>
41+
{children}
42+
</button>
43+
);
44+
45+
export default Expander;

packages/pretty-proptypes/src/components/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Outline from './Outline';
55
import Required from './Required';
66
import Description from './Description';
77
import Button from './Button';
8+
import Expander from './Expander';
89
import Type, { StringType, TypeMeta, FunctionType } from './Type';
910

1011
const components = {
@@ -16,7 +17,8 @@ const components = {
1617
TypeMeta,
1718
Description,
1819
Button,
19-
FunctionType
20+
FunctionType,
21+
Expander
2022
};
2123

2224
export default components;
@@ -30,5 +32,6 @@ export type Components = {
3032
TypeMeta: ComponentType<any>,
3133
Description: ComponentType<any>,
3234
Button: ComponentType<any>,
33-
FunctionType: ComponentType<any>
35+
FunctionType: ComponentType<any>,
36+
Expander: ComponentType<any>
3437
};

stories/layout/LayoutRenderer.stories.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Base.args = {
121121
<HeadingType>{type}</HeadingType>
122122
</span>
123123
<span>
124-
<components.PropType typeValue={typeValue} />
124+
<components.PropType typeValue={typeValue} components={components} />
125125
</span>
126126
</td>
127127
</tr>

0 commit comments

Comments
 (0)