npm install riek2Try 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.
#### Customization
* classLoading: CSS class name to use when loading
* classEditing: CSS class name to apply while in editing mode
* classInvalid: CSS class name to apply when _validate_ returned false
* className: CSS base class
* editProps: Additional props for the editing component. This allows you to, for example, specify a maxLength attribute to control the maximum number of characters in the textarea, or add style.
#### Hooks
* beforeStart: Fires before editing starts
* afterStart: Fires after editing starts
* beforeFinish: Fires before editing ends, before validations
* afterFinish: Fires after editing ends, after validations
#### 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: '2', text: 'two'},
{id: '3', text: 'three'}
]} />
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 inpm run build
2. Make your changes
3. Do to compile the lib and demoindex.html
4. Open and check if it workslocalStorage.debug = '*'` to see debug messages, add more if necessary
5. Open JS console in browser, set
6. ???
7. Submit a pull request