From 7569ac8bd58174095f3f897548e26d0ba905236c Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 21 Sep 2016 15:39:03 -0700 Subject: [feat] the setup wizard for the new ui --- ui/app/components/list_editor/index.js | 105 +++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 ui/app/components/list_editor/index.js (limited to 'ui/app/components/list_editor/index.js') diff --git a/ui/app/components/list_editor/index.js b/ui/app/components/list_editor/index.js new file mode 100644 index 0000000..58b6ec4 --- /dev/null +++ b/ui/app/components/list_editor/index.js @@ -0,0 +1,105 @@ +// +// A simple list of items, with minus and plus buttons to add and remove +// items. +// + +import React from 'react' +import {Button, ButtonGroup, ButtonToolbar, Glyphicon, FormControl} from 'react-bootstrap' + +import './list_editor.less' + +class ListEdit extends React.Component { + + static get defaultProps() {return{ + width: null, + items: [ + 'aaaaaaa', + 'bbbbbbb', + 'ccccccc' + ], + selected: null, // string of the selected item + onRemove: null, + onAdd: null, + onSelect: null + }} + + constructor(props) { + super(props) + this.click = this.click.bind(this) + this.add = this.add.bind(this) + this.remove = this.remove.bind(this) + } + + row(str) { + return this.props.items.indexOf(str) + } + + click(e) { + let row = parseInt(e.target.value) + if (row >= 0) { + if (this.props.onSelect) { + this.props.onSelect(this.props.items[row]) + } + } + } + + add() { + if (this.props.onAdd) { + this.props.onAdd() + } + } + + remove() { + if (this.props.onRemove) { + let currentRow = this.row(this.props.selected) + let newSelected = null + if (this.props.items.length == currentRow + 1) { + // if we remove the last item, set the new selected to be + // the new last item. + newSelected = this.props.items[currentRow - 1] + } else { + newSelected = this.props.items[currentRow + 1] + } + this.props.onRemove(this.props.selected, newSelected) + } + } + + render() { + let options = null + if (this.props.items) { + options = this.props.items.map((item, i) => { + return + }, this) + } + return( +
+ + {options} + + + + + + + +
+ ) + } + +} + +ListEdit.propTypes = { + children: React.PropTypes.oneOfType([ + React.PropTypes.element, + React.PropTypes.arrayOf(React.PropTypes.element) + ]) +} + +export default ListEdit -- cgit v1.2.3