This repository was archived by the owner on Mar 4, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathcomponentGenerators.ts
More file actions
121 lines (107 loc) · 3.35 KB
/
componentGenerators.ts
File metadata and controls
121 lines (107 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import { useSelectKnob, useStringKnob } from '@fluentui/docs-components'
import {
AvatarProps,
BoxProps,
ButtonProps,
DialogProps,
DividerProps,
EmbedProps,
IconProps,
ImageProps,
SliderProps,
StatusProps,
VideoProps,
} from '@fluentui/react'
import * as _ from 'lodash'
import * as faker from 'faker'
import { KnobComponentGenerators } from '../../types'
import { number } from '../ComponentPlayground/typeGenerators'
export const Avatar: KnobComponentGenerators<AvatarProps> = {
name: ({ propName }) => ({
hook: useStringKnob,
name: propName,
initialValue: _.capitalize(`${faker.name.firstName()} ${faker.name.lastName()}`),
}),
// TODO: fix support for composed components
image: () => null,
label: () => null,
status: () => null,
}
export const Box: KnobComponentGenerators<BoxProps> = {
// TODO: fix support for boxes
children: () => null,
}
export const Button: KnobComponentGenerators<ButtonProps> = {
// TODO: fix support for composed components
icon: () => null,
}
export const Dialog: KnobComponentGenerators<DialogProps> = {
footer: () => null,
}
export const Divider: KnobComponentGenerators<DividerProps> = {
// Workaround for `Divider` component that supports size in different way
size: number,
}
export const Embed: KnobComponentGenerators<EmbedProps> = {
placeholder: ({ componentInfo, propName }) => ({
hook: useStringKnob,
name: propName,
initialValue:
'https://raw.githubusercontent.com/bower-media-samples/big-buck-bunny-480p-5s/master/poster.jpg',
}),
// Hack until `size` prop will not supported
variables: () => ({
hook: () => [{ width: '480px' }],
name: 'variables',
}),
}
export const Icon: KnobComponentGenerators<IconProps> = {
name: ({ componentInfo, propDef, propName, theme }) => {
const values = Object.keys(theme.icons).slice(0, 10)
// This generator can be used for shorthands via recursion.
// Due wrong type definitions on `Icon` the `name` prop there is neither required, nor does not
// have default value.
// TODO: remove this hack once we will clarify types for Icon component
const isIconComponent = propName === 'name'
return {
hook: useSelectKnob,
name: propName,
allowsNone: _.isNil(propDef.defaultValue) && !isIconComponent,
initialValue: isIconComponent ? values[0] : propDef.defaultValue,
values,
}
},
}
export const Image: KnobComponentGenerators<ImageProps> = {
src: ({ propName }) => ({
hook: useStringKnob,
name: propName,
initialValue: faker.image.avatar(),
}),
}
export const Slider: KnobComponentGenerators<SliderProps> = {
// TODO: fix support for composed components
input: () => null,
}
export const Status: KnobComponentGenerators<StatusProps> = {
// TODO: fix support for composed components
icon: () => null,
}
export const Video: KnobComponentGenerators<VideoProps> = {
poster: ({ componentInfo, propName }) => ({
hook: useStringKnob,
name: propName,
initialValue: 'public/images/tears-of-steel.jpg',
}),
src: ({ propName }) => ({
hook: useStringKnob,
name: propName,
initialValue:
'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/TearsOfSteel.mp4',
}),
// Hack until `size` prop will not supported
variables: () => ({
hook: () => [{ height: '300px', width: '720px' }],
name: 'variables',
}),
}