@@ -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' ;
@@ -33,6 +34,7 @@ export function Members({
3334 const token = useSelector ( ( state ) => state . auth . token ) ;
3435 const [ editMode , setEditMode ] = useState ( false ) ;
3536 const [ membersBackup , setMembersBackup ] = useState ( null ) ;
37+ const [ lastRemovingUsername , setLastRemovingUsername ] = useState ( null ) ;
3638 const selectPlaceHolder = < FormattedMessage { ...messages . searchUsers } /> ;
3739 let title = < FormattedMessage { ...messages . managers } /> ;
3840 if ( type === 'members' ) {
@@ -82,6 +84,17 @@ export function Members({
8284 </ div >
8385 ) ;
8486
87+ const enableMemberEditMode = useCallback ( ( ) => {
88+ if ( type === 'members' && editMode ) return true ;
89+ if ( ! type && members . length > 1 && editMode ) return true ;
90+ return false ;
91+ } , [ members , type , editMode ] ) ;
92+
93+ const removeTeamMember = ( username ) => {
94+ if ( members . length > 1 ) return removeMembers ( username ) ;
95+ setLastRemovingUsername ( username ) ;
96+ } ;
97+
8598 return (
8699 < >
87100 < div className = { `bg-white b--grey-light pa4 ${ editMode ? 'bt bl br' : 'ba' } ` } >
@@ -119,8 +132,8 @@ export function Members({
119132 picture = { user . pictureUrl }
120133 size = "large"
121134 colorClasses = "white bg-blue-grey mv1"
122- removeFn = { members . length > 1 && removeMembers }
123- editMode = { members . length > 1 && editMode }
135+ removeFn = { removeTeamMember }
136+ editMode = { enableMemberEditMode ( ) }
124137 />
125138 ) ) }
126139 { members . length === 0 && (
@@ -159,6 +172,44 @@ export function Members({
159172 </ div >
160173 </ div >
161174 ) }
175+ < Popup
176+ modal
177+ open = { ! ! lastRemovingUsername }
178+ closeOnEscape
179+ closeOnDocumentClick
180+ onClose = { ( ) => {
181+ setLastRemovingUsername ( null ) ;
182+ } }
183+ >
184+ < div className = "ph3 pv3" >
185+ < h2 className = "f4 mb3" >
186+ < FormattedMessage { ...messages . memberRemoveConfirmationHeader } />
187+ </ h2 >
188+ < p className = "dark-gray mb4" >
189+ { ' ' }
190+ < FormattedMessage { ...messages . memberRemoveConfirmationDescription } />
191+ </ p >
192+ < div className = "flex justify-end" >
193+ < Button
194+ className = "pv2 ph3 ba b--red white bg-black-40 mv1 mr2"
195+ onClick = { ( ) => {
196+ setLastRemovingUsername ( null ) ;
197+ } }
198+ >
199+ < FormattedMessage { ...messages . cancel } />
200+ </ Button >
201+ < Button
202+ className = "pv2 ph3 ba b--red white bg-red mv1"
203+ onClick = { ( ) => {
204+ removeMembers ( lastRemovingUsername ) ;
205+ setLastRemovingUsername ( null ) ;
206+ } }
207+ >
208+ < FormattedMessage { ...messages . remove } />
209+ </ Button >
210+ </ div >
211+ </ div >
212+ </ Popup >
162213 </ >
163214 ) ;
164215}
0 commit comments