UNPKG

d2-ui

Version:
184 lines (156 loc) 6.16 kB
import React from 'react'; import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import { Card, CardText } from 'material-ui/Card'; import getMuiTheme from 'material-ui/styles/getMuiTheme'; import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; import injectTapEventPlugin from 'react-tap-event-plugin'; import D2Lib from 'd2/lib/d2'; import Store from '../../src/store/Store'; import GroupEditor from '../../src/group-editor/GroupEditor.component'; injectTapEventPlugin(); const itemStore = Store.create(); const assignedItemStore = Store.create(); const el = document.getElementById('app'); const dhisDevConfig = DHIS_CONFIG; const baseUrl = `${dhisDevConfig.baseUrl}/api`; class GroupEditorExample extends React.Component { constructor(props) { super(props); this.state = { filterText: '', }; this.props.d2.i18n.translations['assign_all'] = 'Assign all'; this.props.d2.i18n.translations['hidden_by_filters'] = 'Hidden by filters'; this.filterChange = this.filterChange.bind(this); } getChildContext() { return { d2: this.props.d2, }; } styles = { card: { margin: 16, width: 650, float: 'left', transition: 'all 175ms ease-out', }, cardText: { paddingTop: 0, }, cardHeader: { padding: '0 16px 16px', margin: '16px -16px', borderBottom: '1px solid #eeeeee', }, }; static addItem() { if (!itemStore.state) { itemStore.state = []; assignedItemStore.state = []; } itemStore.state.push({ value: itemStore.state.length.toString(), text: `Item ${itemStore.state.length+1}` }); itemStore.setState(itemStore.state); } static removeItem() { if (itemStore.state) { itemStore.state.pop(); itemStore.setState(itemStore.state); } } static addAssignedItem() { if (!itemStore.state) { itemStore.state = []; assignedItemStore.state = []; } const item = { value: itemStore.state.length.toString(), text: `Item ${itemStore.state.length+1}` }; if (!itemStore.state) { itemStore.state = []; assignedItemStore.state = []; } itemStore.state.push(item); assignedItemStore.state.push(item.value); itemStore.setState(itemStore.state); assignedItemStore.setState(assignedItemStore.state); } static removeAssignedItem() { if (assignedItemStore.state) { const item = assignedItemStore.state.pop(); assignedItemStore.setState(assignedItemStore.state); itemStore.setState(itemStore.state.filter(i => i.value !== item)); } } static assignItems(items) { const assigned = assignedItemStore.state.concat(items); assignedItemStore.setState(assigned); return Promise.resolve(); } static unassignItems(items) { const assigned = assignedItemStore .state .filter(item => items.indexOf(item) === -1); assignedItemStore.setState(assigned); return Promise.resolve(); } static stopLoading() { if (!itemStore.state) { itemStore.setState([]); assignedItemStore.setState([]); } } static startLoading() { itemStore.setState(false); assignedItemStore.setState(undefined); } filterChange(e) { this.setState({ filterText: e.target.value }); } render() { return ( <MuiThemeProvider muiTheme={getMuiTheme()}><div> <Card style={Object.assign({}, this.styles.card, { width: 250 })}> <CardText style={this.styles.cardText}> <h3 style={this.styles.cardHeader}>Data controls</h3> <button onClick={GroupEditorExample.addItem}>+ Item</button> <button onClick={GroupEditorExample.removeItem}>- Item</button> <br /> <button onClick={GroupEditorExample.addAssignedItem}>+ Assigned</button> <button onClick={GroupEditorExample.removeAssignedItem}>- Assigned</button> <br /> <button onClick={GroupEditorExample.stopLoading}>Stop loading</button> <button onClick={GroupEditorExample.startLoading}>Start loading</button> <br /> <label>Filter: <input onChange={this.filterChange} value={this.state.filterText} /></label> <br /> <button onClick={this.filterChange.bind(this, { target: { value: '' }})}>Clear filter</button> </CardText> </Card> <Card style={this.styles.card}> <CardText style={this.styles.cardText}> <h3 style={this.styles.cardHeader}>Group editor</h3> <div className="scroll"> <GroupEditor itemStore={itemStore} assignedItemStore={assignedItemStore} onAssignItems={GroupEditorExample.assignItems} onRemoveItems={GroupEditorExample.unassignItems} height={250} filterText={this.state.filterText} /> </div> </CardText> </Card> </div></MuiThemeProvider> ); } } GroupEditorExample.childContextTypes = { d2: PropTypes.object }; ReactDOM.render(<div>Initializing...</div>, el); D2Lib.config.baseUrl = baseUrl; D2Lib.init({ baseUrl }) .then(d2 => ReactDOM.render(<GroupEditorExample d2={d2} />, el)) .catch(err => { console.error(err); ReactDOM.render(<div>Fail!</div>, el) });