Skip to content

Commit af4884b

Browse files
committed
Don’t require refresh when editing users
1 parent 8ec9298 commit af4884b

File tree

3 files changed

+57
-19
lines changed

3 files changed

+57
-19
lines changed

src/components/UserCard/index.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { PROJECT_ROLES } from '../../config/constants'
66
import PrimaryButton from '../Buttons/PrimaryButton'
77
import AlertModal from '../Modal/AlertModal'
88
import { updateProjectMemberRole } from '../../services/projects'
9-
import { wait } from '../../util/helper'
109
import _ from 'lodash'
1110

1211
const theme = {
@@ -42,12 +41,11 @@ class UserCard extends Component {
4241
isUpdatingPermission: true
4342
})
4443

45-
const { user, reloadProjectMembers } = this.props
44+
const { user, updateProjectNember } = this.props
4645

4746
try {
48-
await updateProjectMemberRole(user.projectId, user.id, newRole)
49-
await wait(1000)
50-
reloadProjectMembers()
47+
const newUserInfoRole = await updateProjectMemberRole(user.projectId, user.id, newRole)
48+
updateProjectNember(newUserInfoRole)
5149
this.setState({ showSuccessModal: true })
5250
} catch (e) {
5351
const error = _.get(
@@ -176,7 +174,7 @@ class UserCard extends Component {
176174

177175
UserCard.propTypes = {
178176
user: PropTypes.object,
179-
reloadProjectMembers: PropTypes.func.isRequired,
177+
updateProjectNember: PropTypes.func.isRequired,
180178
onRemoveClick: PropTypes.func.isRequired,
181179
isEditable: PropTypes.bool
182180
}

src/components/Users/index.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import SelectUserAutocomplete from '../SelectUserAutocomplete'
1111
import { PROJECT_ROLES } from '../../config/constants'
1212
import { checkAdmin } from '../../util/tc'
1313
import { addUserToProject, removeUserFromProject } from '../../services/projects'
14-
import { wait } from '../../util/helper'
1514
import ConfirmationModal from '../Modal/ConfirmationModal'
1615

1716
const theme = {
@@ -90,9 +89,7 @@ class Users extends Component {
9089
}
9190

9291
async onAddUserConfirmClick () {
93-
console.log('in onAddUserConfirmClick')
94-
console.log('in onAddUserConfirmClick this.state.userToAdd', this.state.userToAdd)
95-
const { loadProject } = this.props
92+
const { addNewProjectMember } = this.props
9693
if (this.state.isAdding) { return }
9794

9895
this.setState({
@@ -101,7 +98,6 @@ class Users extends Component {
10198
})
10299

103100
if (!this.state.userToAdd) {
104-
console.log('in if')
105101
this.setState({
106102
showSelectUserError: true
107103
})
@@ -113,10 +109,10 @@ class Users extends Component {
113109
})
114110

115111
try {
116-
await addUserToProject(this.state.projectOption.value, this.state.userToAdd.userId, this.state.userPermissionToAdd)
112+
const newUserInfo = await addUserToProject(this.state.projectOption.value, this.state.userToAdd.userId, this.state.userPermissionToAdd)
113+
newUserInfo.handle = this.state.userToAdd.handle
117114
// wait for a second so that project's members are updated
118-
await wait(1000)
119-
if (this.state.projectOption.value) { loadProject(this.state.projectOption.value) }
115+
addNewProjectMember(newUserInfo)
120116
this.resetAddUserState()
121117
} catch (e) {
122118
const error = _.get(
@@ -167,13 +163,12 @@ class Users extends Component {
167163
async onRemoveConfirmClick () {
168164
if (this.state.isRemoving) { return }
169165

170-
const { loadProject } = this.props
166+
const { removeProjectNember } = this.props
171167
const userToRemove = this.state.userToRemove
172168
try {
173169
this.setState({ isRemoving: true })
174170
await removeUserFromProject(userToRemove.projectId, userToRemove.id)
175-
await wait(1000)
176-
if (this.state.projectOption.value) { loadProject(this.state.projectOption.value) }
171+
removeProjectNember(userToRemove)
177172

178173
this.resetRemoveUserState()
179174
} catch (e) {
@@ -196,7 +191,7 @@ class Users extends Component {
196191
}
197192

198193
render () {
199-
const { projects, projectMembers, loadProject, isEditable } = this.props
194+
const { projects, projectMembers, updateProjectNember, isEditable } = this.props
200195
const projectOptions = projects.map(p => {
201196
return {
202197
label: p.name,
@@ -405,7 +400,7 @@ class Users extends Component {
405400
<UserCard
406401
user={member}
407402
onRemoveClick={this.onRemoveClick}
408-
reloadProjectMembers={() => loadProject(this.state.projectOption.value)}
403+
updateProjectNember={updateProjectNember}
409404
isEditable={isEditable} />
410405
</li>
411406
)
@@ -423,6 +418,9 @@ class Users extends Component {
423418

424419
Users.propTypes = {
425420
loadProject: PropTypes.func.isRequired,
421+
updateProjectNember: PropTypes.func.isRequired,
422+
removeProjectNember: PropTypes.func.isRequired,
423+
addNewProjectMember: PropTypes.func.isRequired,
426424
auth: PropTypes.object,
427425
isEditable: PropTypes.bool,
428426
projects: PropTypes.arrayOf(PropTypes.object),

src/containers/Users/index.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ class Users extends Component {
1515
projectMembers: null
1616
}
1717
this.loadProject = this.loadProject.bind(this)
18+
this.updateProjectNember = this.updateProjectNember.bind(this)
19+
this.removeProjectNember = this.removeProjectNember.bind(this)
20+
this.addNewProjectMember = this.addNewProjectMember.bind(this)
1821
}
1922

2023
componentDidMount () {
@@ -56,6 +59,42 @@ class Users extends Component {
5659
})
5760
}
5861

62+
updateProjectNember (newMemberInfo) {
63+
const { projectMembers } = this.state
64+
const newProjectMembers = projectMembers.map(pm => pm.id === newMemberInfo.id ? ({
65+
...pm,
66+
...newMemberInfo
67+
}) : pm)
68+
const { loggedInUser } = this.props
69+
this.setState({
70+
projectMembers: newProjectMembers
71+
})
72+
this.updateLoginUserRoleInProject(newProjectMembers, loggedInUser)
73+
}
74+
75+
removeProjectNember (projectMember) {
76+
const { projectMembers } = this.state
77+
const newProjectMembers = _.filter(projectMembers, pm => pm.id !== projectMember.id)
78+
const { loggedInUser } = this.props
79+
this.setState({
80+
projectMembers: newProjectMembers
81+
})
82+
this.updateLoginUserRoleInProject(newProjectMembers, loggedInUser)
83+
}
84+
85+
addNewProjectMember (projectMember) {
86+
const { projectMembers } = this.state
87+
const newProjectMembers = [
88+
...projectMembers,
89+
projectMember
90+
]
91+
const { loggedInUser } = this.props
92+
this.setState({
93+
projectMembers: newProjectMembers
94+
})
95+
this.updateLoginUserRoleInProject(newProjectMembers, loggedInUser)
96+
}
97+
5998
render () {
6099
const {
61100
projects,
@@ -68,6 +107,9 @@ class Users extends Component {
68107
<UsersComponent
69108
projects={projects}
70109
loadProject={this.loadProject}
110+
updateProjectNember={this.updateProjectNember}
111+
removeProjectNember={this.removeProjectNember}
112+
addNewProjectMember={this.addNewProjectMember}
71113
projectMembers={projectMembers}
72114
auth={auth}
73115
isEditable={this.isEditable()}

0 commit comments

Comments
 (0)