@@ -2,6 +2,7 @@ import { useState, useEffect, useCallback, useRef } from 'react';
22import { Link , useParams } from 'react-router-dom' ;
33import axios from 'axios' ;
44import { useSelector } from 'react-redux' ;
5+ import Popup from 'reactjs-popup' ;
56import { useIntl , FormattedMessage } from 'react-intl' ;
67import AsyncSelect from 'react-select/async' ;
78import toast from 'react-hot-toast' ;
@@ -29,10 +30,12 @@ export function Members({
2930 setMemberJoinTeamError,
3031 managerJoinTeamError,
3132 setManagerJoinTeamError,
33+ totalMembersOnTeam,
3234} : Object ) {
3335 const token = useSelector ( ( state ) => state . auth . token ) ;
3436 const [ editMode , setEditMode ] = useState ( false ) ;
3537 const [ membersBackup , setMembersBackup ] = useState ( null ) ;
38+ const [ lastRemovingUsername , setLastRemovingUsername ] = useState ( null ) ;
3639 const selectPlaceHolder = < FormattedMessage { ...messages . searchUsers } /> ;
3740 let title = < FormattedMessage { ...messages . managers } /> ;
3841 if ( type === 'members' ) {
@@ -82,6 +85,17 @@ export function Members({
8285 </ div >
8386 ) ;
8487
88+ const enableMemberEditMode = useCallback ( ( ) => {
89+ if ( type === 'members' && editMode && totalMembersOnTeam > 1 ) return true ;
90+ if ( ! type && members . length > 1 && editMode ) return true ;
91+ return false ;
92+ } , [ members , type , editMode , totalMembersOnTeam ] ) ;
93+
94+ const removeTeamMember = ( username ) => {
95+ if ( members . length > 1 ) return removeMembers ( username ) ;
96+ setLastRemovingUsername ( username ) ;
97+ } ;
98+
8599 return (
86100 < >
87101 < div className = { `bg-white b--grey-light pa4 ${ editMode ? 'bt bl br' : 'ba' } ` } >
@@ -119,8 +133,8 @@ export function Members({
119133 picture = { user . pictureUrl }
120134 size = "large"
121135 colorClasses = "white bg-blue-grey mv1"
122- removeFn = { members . length > 1 && removeMembers }
123- editMode = { members . length > 1 && editMode }
136+ removeFn = { removeTeamMember }
137+ editMode = { enableMemberEditMode ( ) }
124138 />
125139 ) ) }
126140 { members . length === 0 && (
@@ -159,6 +173,44 @@ export function Members({
159173 </ div >
160174 </ div >
161175 ) }
176+ < Popup
177+ modal
178+ open = { ! ! lastRemovingUsername }
179+ closeOnEscape
180+ closeOnDocumentClick
181+ onClose = { ( ) => {
182+ setLastRemovingUsername ( null ) ;
183+ } }
184+ >
185+ < div className = "ph3 pv3" >
186+ < h2 className = "f4 mb3" >
187+ < FormattedMessage { ...messages . memberRemoveConfirmationHeader } />
188+ </ h2 >
189+ < p className = "dark-gray mb4" >
190+ { ' ' }
191+ < FormattedMessage { ...messages . memberRemoveConfirmationDescription } />
192+ </ p >
193+ < div className = "flex justify-end" >
194+ < Button
195+ className = "pv2 ph3 ba b--red white bg-black-40 mv1 mr2"
196+ onClick = { ( ) => {
197+ setLastRemovingUsername ( null ) ;
198+ } }
199+ >
200+ < FormattedMessage { ...messages . cancel } />
201+ </ Button >
202+ < Button
203+ className = "pv2 ph3 ba b--red white bg-red mv1"
204+ onClick = { ( ) => {
205+ removeMembers ( lastRemovingUsername ) ;
206+ setLastRemovingUsername ( null ) ;
207+ } }
208+ >
209+ < FormattedMessage { ...messages . remove } />
210+ </ Button >
211+ </ div >
212+ </ div >
213+ </ Popup >
162214 </ >
163215 ) ;
164216}
0 commit comments