Skip to content

Commit 0177530

Browse files
authored
Merge pull request #129 from naxa-developers/fix/6909-unable-to-remove-last-member-of-team
Fix/6909 unable to remove last member of team
2 parents 46d85d8 + ee0c66c commit 0177530

2 files changed

Lines changed: 62 additions & 3 deletions

File tree

frontend/src/components/teamsAndOrgs/members.js

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useState, useEffect, useCallback, useRef } from 'react';
22
import { Link, useParams } from 'react-router-dom';
33
import axios from 'axios';
44
import { useSelector } from 'react-redux';
5+
import Popup from 'reactjs-popup';
56
import { useIntl, FormattedMessage } from 'react-intl';
67
import AsyncSelect from 'react-select/async';
78
import 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
}

frontend/src/components/teamsAndOrgs/messages.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default defineMessages({
3535
id: 'management.partners.menu',
3636
defaultMessage: 'Partners',
3737
},
38-
resourcesButton:{
38+
resourcesButton: {
3939
id: 'management.edit.resourcesButton',
4040
defaultMessage: 'Resources link',
4141
},
@@ -592,4 +592,12 @@ export default defineMessages({
592592
id: 'management.stats.features',
593593
defaultMessage: 'Total features',
594594
},
595+
memberRemoveConfirmationHeader: {
596+
id: 'management.members.remove_confirmation_header',
597+
defaultMessage: 'Are you sure you want to remove?',
598+
},
599+
memberRemoveConfirmationDescription: {
600+
id: 'management.members.remove_confirmation_description',
601+
defaultMessage: 'This team will have only managers and no members.',
602+
},
595603
});

0 commit comments

Comments
 (0)