Skip to content

Commit e318d88

Browse files
committed
new Value api, tests, docs
1 parent 2d476c4 commit e318d88

File tree

3 files changed

+17
-11
lines changed

3 files changed

+17
-11
lines changed

docs/components/Value.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ import { Value } from 'react-powerplug'
88

99
```jsx
1010
<Value initial="React">
11-
{({ value, setValue }) => (
11+
{({ value, set }) => (
1212
<Select
1313
label="Choose one"
1414
options={['React', 'Preact', 'Vue']}
1515
value={value}
16-
onChange={setValue}
16+
onChange={set}
1717
/>
1818
)}
1919
</Value>
2020
```
2121

2222
```jsx
2323
<Value initial="first">
24-
{({ value, setValue }) => {
24+
{({ value, set }) => {
2525
const bindRadio = radioValue => ({
2626
selected: value === radioValue,
27-
onClick: () => setValue(radioValue),
27+
onClick: () => set(radioValue),
2828
})
2929

3030
return (
@@ -43,14 +43,17 @@ import { Value } from 'react-powerplug'
4343
**initial** _(required)_
4444
Specifies the initial value state.
4545

46+
**onChange** _(optional)_
47+
Callback that fires when state changes.
48+
4649
## Value Children Props
4750

48-
TL;DR: `{ value, setValue }`
51+
TL;DR: `{ value, set }`
4952

5053
**value**
5154
`T`
5255
Your value state
5356

54-
**setValue**
55-
`(value: T) => void`
56-
Set the value state
57+
**set**
58+
`(value: T | (value: T) => T) => void`
59+
Set or over the value state

src/components/Value.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import * as React from 'react'
22
import State from './State'
33
import renderProps from '../utils/renderProps'
4+
import set from '../utils/set'
45

56
const Value = ({ initial, onChange, ...props }) => (
67
<State initial={{ value: initial }} onChange={onChange}>
78
{({ state, setState }) =>
89
renderProps(props, {
910
value: state.value,
10-
setValue: value => setState({ value }),
11+
set: value => setState(s => ({ value: set(value, s.value) })),
1112
})
1213
}
1314
</State>

tests/components/Value.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ test('<Value />', () => {
1111
expect(renderFn).toHaveBeenCalledTimes(1)
1212

1313
expect(lastCalled().value).toEqual({ a: 1 })
14-
lastCalled().setValue({ b: 2 })
1514

15+
lastCalled().set({ b: 2 })
1616
expect(lastCalled().value).toEqual({ b: 2 })
1717

18-
lastCalled().setValue(0)
18+
lastCalled().set(value => ({ ...value, a: 1 }))
19+
expect(lastCalled().value).toEqual({ a: 1, b: 2 })
1920

21+
lastCalled().set(0)
2022
expect(lastCalled().value).toEqual(0)
2123
})

0 commit comments

Comments
 (0)