npm install riekTry out the demo and see what it looks like.
npm install riek --save-devor
yarn add riek --dev
Use --save-dev because you don't want to build and pack JS/CSS in production
``javascript`
import { RIEToggle, RIEInput, RIETextArea, RIENumber, RIETags, RIESelect } from 'riek'
import _ from 'lodash'
Suppose we want to be able to edit title of a Task and send changes to server. Here is a Task stored flat inside of our parent React component:
`javascript`
this.state = {
id: 1,
title: 'Cover with tests',
completed: false
}
Now we need a function which will send the single altered { key: value } and upsert local state. You can implement it inside of your flux/redux/mobx store:
`javascript/api/task/${this.state.id}
const httpTaskCallback = (task) => {
request.post()`
.send(task)
.end((err, res) => {
if (!err) return this.setState({ ...task })
// Handle HTTP error
})
}
Meanwhile, there is a simple Express handler on our API server:
`javascript`
app.use('/api/task/:id', async (req, res) => {
// req.body will equal to { title: 'A new title' }
const { id } = req.params
await Task.update({ ...req.body }).where({ id })
res.send('OK')
})
Finally, in our render method, we add a minimal RIEInput:
`javascript`
change={this.httpTaskCallback}
propName='title'
validate={_.isString} />
...repeat the last step, adding a Riek component for any object property we wish to edit.
Components come unstyled, so take a look at demo.jsx for examples.
.
* defaultProps: Additional props for idle component.
$3
* beforeStart: Fires before editing starts
* afterStart: Fires after editing starts
* beforeFinish: Fires before editing ends, before validations
* afterFinish: Fires after editing ends, after validations$3
#### RIENumber
* format: custom formatting function, returns formatted string
#### RIETextArea
* rows: rows property on textarea tag while editing
* cols: rows property on textarea tag while editing
#### RIESelect
* options: an array of objects containing values and text for select options
`javascript
{id: '1', text: 'one'},
{id: '2', text: 'two'},
{id: '3', text: 'three'}
]} />
`Contributing
The build process does not work with Node v6 at the moment: use Node Version Manager, or just plain Node v5.6.0.
1. Clone this repo locally, run
npm i
2. Make your changes
3. Do npm run build to compile the lib and demo
4. Open index.html and check if it works
5. Open JS console in browser, set localStorage.debug = '*'` to see debug messages, add more if necessary