UNPKG

trc-client-core

Version:
63 lines (54 loc) 2.44 kB
import React, { Component, PropTypes } from 'react'; import Icon from 'trc-client-core/src/components/Icon'; import Button from 'bd-stampy/components/Button'; import FormError from 'trc-client-core/src/forms/FormError'; import classnames from 'classnames'; // // SortableFieldArray allows UIs with sortable form fields to be created for use with redux form: http://redux-form.com/5.0.1/#/examples/deep?_k=tf070c // class SortableFieldArray extends Component { render() { const { children, items, itemName, modifier, className } = this.props; var newChildren = React.Children.map(children, function(child, itemIndex) { return ( <div key={itemIndex} className="SortableFieldArray_item"> <div className="SortableFieldArray_buttonSet"> <Button modifier="clear tight" disabled={itemIndex === 0} onClick={() => items.swapFields(itemIndex, itemIndex - 1)} title={`Move ${itemName} up`}> <Icon hexCode="e113" modifier="small" /> </Button> <Button modifier="clear tight" disabled={itemIndex === items.length - 1} onClick={() => items.swapFields(itemIndex, itemIndex + 1)} title={`Move ${itemName} down`}> <Icon hexCode="e114" modifier="small" /> </Button> <Button modifier="clear tight" onClick={() => items.removeField(itemIndex)} title={`Remove ${itemName}`}> <Icon hexCode="e014" modifier="small" /> </Button> </div> <div className="SortableFieldArray_inputContainer"> {child} </div> </div> ); }); var classNames = classnames( 'SortableFieldArray', modifier.split(' ').map(cc => `SortableFieldArray-${cc}`), className ); return ( <div className={classNames}> {newChildren} <Button modifier="edit" onClick={items.addField}>Add {itemName}</Button> </div> ); } } SortableFieldArray.propTypes = { items: PropTypes.array, itemName: PropTypes.string, modifier: PropTypes.string }; SortableFieldArray.defaultProps = { itemName: "item", modifier: "" }; export default SortableFieldArray;