Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Commit e00e12f

Browse files
authored
Merge branch 'master' into fix/support-nested-structure
2 parents 0b5e0e3 + bd18398 commit e00e12f

File tree

3 files changed

+1455
-1305
lines changed

3 files changed

+1455
-1305
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
node_modules/
22
dist
33
settings.json
4+
.idea

src/index.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,15 @@ typeKnobsMap.forEach(({ name, knob, args = [] }, weight) => addKnobResolver({
4242
}))
4343

4444
const optionsReducer = (res, value) => ({ ...res, [value]: value })
45-
const withDefaultOption = (options) => ({ '': '--', ...options })
46-
const createSelect = (propName, elements, defaultProps) => {
45+
const withDefaultOption = (options) => ({ '--': undefined, ...options })
46+
const createSelect = (propName, elements, defaultProps, isRequired) => {
4747
try {
4848
const options = elements
4949
// Cleanup string quotes, if any.
5050
.map(value => value.value.replace(/^['"](.*)['"]$/, '$1'))
5151
.reduce(optionsReducer, {})
52-
return select(propName, withDefaultOption(options), defaultProps[propName])
52+
const value = defaultProps[propName] || (isRequired && Object.values(options)[0]) || undefined
53+
return select(propName, isRequired ? options : withDefaultOption(options), value)
5354
}
5455
catch (e) { }
5556
}
@@ -59,11 +60,11 @@ addKnobResolver({
5960
name: 'PropTypes.oneOf',
6061
resolver: (propName, propType, value, propTypes, defaultProps) => {
6162
if (propType.type.name === 'enum' && propType.type.value.length) {
62-
return createSelect(propName, propType.type.value, defaultProps)
63+
return createSelect(propName, propType.type.value, defaultProps, propType.required)
6364
}
6465
// for flow support
6566
if (propType.type.name === 'union' && propType.type.elements) {
66-
return createSelect(propName, propType.type.elements, defaultProps)
67+
return createSelect(propName, propType.type.elements, defaultProps, propType.required)
6768
}
6869
}
6970
})

0 commit comments

Comments
 (0)