Skip to content

Commit f12c289

Browse files
author
vikasrohit
committed
Github issue #346 [Project Dashboard]There is no confirmation when assigning owner
-- Added modal confirmation before adding the first owner
1 parent fe691bb commit f12c289

File tree

4 files changed

+58
-8
lines changed

4 files changed

+58
-8
lines changed

src/components/TeamManagement/AddTeamMember.jsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import React, {PropTypes} from 'react'
22
import AutoCompleteInput from './AutoCompleteInput'
33
import cn from 'classnames'
44
import { Icons } from 'appirio-tech-react-components'
5+
import { PROJECT_ROLE_CUSTOMER } from '../../config/constants'
56

67

78
const { XMarkIcon } = Icons
89

910
const AddTeamMember = (props) => {
1011
const {
1112
isAddingTeamMember, onAddNewMember, onToggleAddTeamMember, onKeywordChange, selectedNewMember, error,
12-
filterType, currentUser, onFilterTypeChange
13+
filterType, currentUser, onFilterTypeChange, onToggleNewMemberConfirm, owner
1314
} = props
1415
const onTypeChangeCustomer = () => onFilterTypeChange('customer')
1516
const onTypeChangeCopilot = () => onFilterTypeChange('copilot')
@@ -18,6 +19,11 @@ const AddTeamMember = (props) => {
1819
onToggleAddTeamMember(false)
1920
}
2021
const onConfirmAddMember = () => {
22+
// if adding a customer and there is no owner yet for the project
23+
if(filterType === PROJECT_ROLE_CUSTOMER && !owner) {
24+
onToggleNewMemberConfirm(true)
25+
return
26+
}
2127
onAddNewMember()
2228
onToggleAddTeamMember(false)
2329
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, {PropTypes} from 'react'
2+
3+
const NewMemberConfirmModal = ({ onCancel, onConfirm }) => {
4+
return (
5+
<div className="modal">
6+
<div className="modal-title danger">
7+
You are about to change the owner
8+
</div>
9+
<div className="modal-body">
10+
<p className="message">
11+
You are adding a customer to the team which would make them owner. This can not be undone by you later.
12+
</p>
13+
<div className="button-area flex center">
14+
<button className="tc-btn tc-btn-default tc-btn-sm btn-cancel" onClick={onCancel}>Cancel</button>
15+
<button className="tc-btn tc-btn-warning tc-btn-sm" onClick={onConfirm}>Add Owner</button>
16+
</div>
17+
</div>
18+
</div>
19+
)
20+
}
21+
22+
NewMemberConfirmModal.propTypes = {
23+
onCancel: PropTypes.func.isRequired,
24+
onConfirm: PropTypes.func.isRequired
25+
}
26+
27+
export default NewMemberConfirmModal

src/components/TeamManagement/TeamManagement.jsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Panel from '../Panel/Panel'
88
import DeleteModal from './DeleteModal'
99
import OwnerModal from './OwnerModal'
1010
import AddTeamMember from './AddTeamMember'
11+
import NewMemberConfirmModal from './NewMemberConfirmModal'
1112
import Join from './Join'
1213
import { PROJECT_ROLE_MANAGER, PROJECT_ROLE_CUSTOMER } from '../../config/constants'
1314
const userShape = PropTypes.shape({
@@ -37,18 +38,26 @@ const calcMemberPriority = m => {
3738
const TeamManagement = (props) => {
3839
const {
3940
currentUser, members, deletingMember, isAddingTeamMember, onMemberDeleteConfirm, onMemberDelete, isShowJoin,
40-
newOwner, onChangeOwner, onChangeOwnerConfirm, onToggleAddTeamMember
41+
newOwner, onChangeOwner, onChangeOwnerConfirm, onToggleAddTeamMember, showNewMemberConfirmation, onAddNewMember,
42+
onToggleNewMemberConfirm, onKeywordChange
4143
} = props
4244
const currentMember = members.filter((member) => member.userId === currentUser.userId)[0]
4345
const owner = members.filter((member) => member.isPrimary && member.isCustomer)[0]
44-
const modalActive = isAddingTeamMember || deletingMember || isShowJoin
46+
const modalActive = isAddingTeamMember || deletingMember || isShowJoin || showNewMemberConfirmation
4547
const canJoin = !currentMember && (currentUser.isCopilot || currentUser.isManager)
4648

4749
const sortedMembers = _.sortBy(members, [(member) => {
4850
return calcMemberPriority(member)
4951
}])
5052

51-
53+
const _onAddNewMember = () => {
54+
onToggleNewMemberConfirm(false)
55+
onAddNewMember()
56+
}
57+
const _onAddMemberCancel = () => {
58+
onKeywordChange('')
59+
onToggleNewMemberConfirm(false)
60+
}
5261
return (
5362
<div className="team-management">
5463
<Panel className={cn({'modal-active': modalActive})}>
@@ -105,7 +114,9 @@ const TeamManagement = (props) => {
105114
})}
106115

107116
{canJoin && <Join {...props} isCopilot={currentUser.isCopilot} owner={owner} />}
108-
{currentMember && <AddTeamMember {...props} />}
117+
{currentMember && <AddTeamMember {...props} owner={owner} />}
118+
119+
{ showNewMemberConfirmation && <NewMemberConfirmModal onConfirm={ _onAddNewMember } onCancel={ _onAddMemberCancel } />}
109120
</Panel>
110121
</div>
111122
)

src/projects/detail/containers/TeamManagementContainer.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class TeamManagementContainer extends Component {
2424
this.onJoinConfirm = this.onJoinConfirm.bind(this)
2525
this.onChangeOwnerConfirm = this.onChangeOwnerConfirm.bind(this)
2626
this.onFilterTypeChange = this.onFilterTypeChange.bind(this)
27+
this.onToggleNewMemberConfirm = this.onToggleNewMemberConfirm.bind(this)
2728
}
2829

2930
componentWillMount() {
@@ -109,7 +110,8 @@ class TeamManagementContainer extends Component {
109110
}
110111

111112
onAddNewMember() {
112-
const { filterType, selectedNewMember } = this.state
113+
const { allMembers } = this.props
114+
const { filterType, selectedNewMember, showNewMemberConfirmation } = this.state
113115
const userId = selectedNewMember.userId
114116
this.props.addProjectMember(
115117
this.props.projectId, {
@@ -121,11 +123,14 @@ class TeamManagementContainer extends Component {
121123
keyword: '',
122124
selectedNewMember: null
123125
})
124-
125126
}
126127

127128
onToggleAddTeamMember(isAddingTeamMember) {
128-
this.setState({isAddingTeamMember, error : null})
129+
this.setState({ isAddingTeamMember, error : null })
130+
}
131+
132+
onToggleNewMemberConfirm(showNewMemberConfirmation) {
133+
this.setState({ showNewMemberConfirmation, isAddingTeamMember : false })
129134
}
130135

131136
onMemberDeleteConfirm(member) {
@@ -188,6 +193,7 @@ class TeamManagementContainer extends Component {
188193
onKeywordChange={this.onKeywordChange}
189194
onSelectNewMember={this.onSelectNewMember}
190195
onAddNewMember={this.onAddNewMember}
196+
onToggleNewMemberConfirm={ this.onToggleNewMemberConfirm }
191197
onToggleAddTeamMember={this.onToggleAddTeamMember}
192198
onMemberDeleteConfirm={this.onMemberDeleteConfirm}
193199
onJoinConfirm={this.onJoinConfirm}

0 commit comments

Comments
 (0)