Last active
December 27, 2017 17:27
-
-
Save srph/f4282d030659c1077b3da4dc819e6e2b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React, {Component} from 'react'; | |
| export default class AssignedMembersWidget extends Component { | |
| state = { | |
| // List of users to select from | |
| selection: [], | |
| fetching: false | |
| } | |
| componentDidMount() { | |
| // Fetch selection... | |
| // Reacted for example purposes. | |
| } | |
| render() { | |
| return ( | |
| // Redacted for example purposes only. Assume we have: | |
| // - A loader here | |
| // {this.props.fetching && <Loader />} | |
| // - An error alert | |
| // {this.props.error && <Alert>{this.props.error}</Alert} | |
| // - A button to open or close popover | |
| // {<button onClick={this.onTogglePopover}>Open Popover</button>} | |
| // - A popover to choose users from (to assign them) | |
| // <Popover onClickMember={this.onAssignMember} /> | |
| // A list of existing users (and as well the way to unassign them) | |
| // {this.props.user.map(user => <User user={user} onClickMember={this.onUnassignMember} />)} | |
| ); | |
| } | |
| // | |
| // Other handlers... | |
| // Reacted for example purposes. | |
| // | |
| onAssignMember = (user) => { | |
| const users = [...this.props.users, user]; | |
| this.props.onAssignMember(users, user); | |
| } | |
| onUnassignMember = (id) => { | |
| // Redacted for example purposes. | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React, {Component} from 'react' | |
| import AssignedMembersWidget from './AssignedMembersWidget'; | |
| export default class AsyncAssignedMembersWidget extends Component { | |
| state = { | |
| error: '', | |
| loading: false | |
| } | |
| render() { | |
| return <AssignedMembersWidget users={this.props.users} | |
| error={this.state.error} | |
| loading={this.state.loading} | |
| onAssignMember={this.onAssignMember} | |
| onUnassignMember={this.onUnassignMember} /> | |
| } | |
| onAssignMember = (users, user) => { | |
| this.setState({ | |
| error: '', | |
| loading: true | |
| }) | |
| fetch('/api/issues/:id/assign', { method: 'POST', id: user.id }) | |
| .then(res => { | |
| this.props.onAssignMember(users, user) | |
| this.setState({ loading: false }) | |
| }, err => { | |
| this.setState({ | |
| loading: false, | |
| error: err | |
| }) | |
| }) | |
| } | |
| onUnassignMember = (user) => { | |
| // Redacted for example purposes. | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment