fix: group member list is all unselected by default

pull/3052/head
Audric Ackermann 7 months ago
parent eff4d13b9a
commit 9c098ff3a8
No known key found for this signature in database

@ -18,7 +18,7 @@ import {
useIsPrivate, useIsPrivate,
useIsPublic, useIsPublic,
useSortedGroupMembers, useSortedGroupMembers,
useWeAreAdmin useWeAreAdmin,
} from '../../hooks/useParamSelector'; } from '../../hooks/useParamSelector';
import { useSet } from '../../hooks/useSet'; import { useSet } from '../../hooks/useSet';
@ -151,11 +151,7 @@ export const UpdateGroupMembersDialog = (props: Props) => {
const isProcessingUIChange = useMemberGroupChangePending(); const isProcessingUIChange = useMemberGroupChangePending();
const [alsoRemoveMessages, setAlsoRemoveMessages] = useState(false); const [alsoRemoveMessages, setAlsoRemoveMessages] = useState(false);
const { const { addTo, removeFrom, uniqueValues: membersToRemove } = useSet<string>([]);
addTo,
removeFrom,
uniqueValues: membersToKeepWithUpdate,
} = useSet<string>(existingMembers);
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -173,7 +169,7 @@ export const UpdateGroupMembersDialog = (props: Props) => {
groupPk: conversationId, groupPk: conversationId,
addMembersWithHistory: [], addMembersWithHistory: [],
addMembersWithoutHistory: [], addMembersWithoutHistory: [],
removeMembers: difference(existingMembers, membersToKeepWithUpdate) as Array<PubkeyType>, removeMembers: membersToRemove as Array<PubkeyType>,
alsoRemoveMessages, alsoRemoveMessages,
}); });
dispatch(groupv2Action as any); dispatch(groupv2Action as any);
@ -181,7 +177,10 @@ export const UpdateGroupMembersDialog = (props: Props) => {
return; // keeping the dialog open until the async thunk is done return; // keeping the dialog open until the async thunk is done
} }
await onSubmit(conversationId, membersToKeepWithUpdate); await onSubmit(
conversationId,
difference(existingMembers, membersToRemove) as Array<PubkeyType>
);
closeDialog(); closeDialog();
}; };
@ -190,44 +189,41 @@ export const UpdateGroupMembersDialog = (props: Props) => {
return event.key === 'Esc' || event.key === 'Escape'; return event.key === 'Esc' || event.key === 'Escape';
}, closeDialog); }, closeDialog);
const onAdd = (member: string) => { const onSelect = (member: string) => {
if (!weAreAdmin) { if (!weAreAdmin) {
window?.log?.warn('Only group admin can add members!'); window?.log?.warn('Only group admin can select!');
return; return;
} }
addTo(member);
};
const onRemove = (member: string) => {
if (!weAreAdmin) {
window?.log?.warn('Only group admin can remove members!');
return;
}
if (groupAdmins?.includes(member)) { if (groupAdmins?.includes(member)) {
if (PubKey.is03Pubkey(conversationId)) { if (PubKey.is03Pubkey(conversationId)) {
window?.log?.warn(`User ${member} cannot be removed as they are an admin.`); window?.log?.warn(`User ${member} cannot be selected as they are an admin.`);
return; return;
} }
ToastUtils.pushCannotRemoveCreatorFromGroup(); ToastUtils.pushCannotRemoveCreatorFromGroup();
window?.log?.warn( window?.log?.warn(
`User ${member} cannot be removed as they are the creator of the closed group.` `User ${member} cannot be selected as they are the creator of the closed group.`
); );
return; return;
} }
addTo(member);
};
const onUnselect = (member: string) => {
if (!weAreAdmin) {
window?.log?.warn('Only group admin can unselect members!');
return;
}
removeFrom(member); removeFrom(member);
}; };
const showNoMembersMessage = existingMembers.length === 0; const showNoMembersMessage = existingMembers.length === 0;
const okText = window.i18n('okay');
const cancelText = window.i18n('cancel');
const titleText = window.i18n('groupMembers');
return ( return (
<SessionWrapperModal title={titleText} onClose={closeDialog}> <SessionWrapperModal title={window.i18n('groupMembers')} onClose={closeDialog}>
{hasClosedGroupV2QAButtons() && weAreAdmin ? ( {hasClosedGroupV2QAButtons() && weAreAdmin ? (
<> <>
Also remove messages: Also remove messages:
<SessionToggle <SessionToggle
@ -241,9 +237,9 @@ export const UpdateGroupMembersDialog = (props: Props) => {
<StyledClassicMemberList className="contact-selection-list"> <StyledClassicMemberList className="contact-selection-list">
<ClassicMemberList <ClassicMemberList
convoId={conversationId} convoId={conversationId}
onSelect={onAdd} onSelect={onSelect}
onUnselect={onRemove} onUnselect={onUnselect}
selectedMembers={membersToKeepWithUpdate} selectedMembers={membersToRemove}
/> />
</StyledClassicMemberList> </StyledClassicMemberList>
{showNoMembersMessage && <p>{window.i18n('groupMembersNone')}</p>} {showNoMembersMessage && <p>{window.i18n('groupMembersNone')}</p>}
@ -255,16 +251,16 @@ export const UpdateGroupMembersDialog = (props: Props) => {
<div className="session-modal__button-group"> <div className="session-modal__button-group">
{weAreAdmin && ( {weAreAdmin && (
<SessionButton <SessionButton
text={okText} text={window.i18n('remove')}
onClick={onClickOK} onClick={onClickOK}
buttonType={SessionButtonType.Simple} buttonType={SessionButtonType.Simple}
buttonColor={SessionButtonColor.Danger}
disabled={isProcessingUIChange} disabled={isProcessingUIChange}
dataTestId="session-confirm-ok-button" dataTestId="session-confirm-ok-button"
/> />
)} )}
<SessionButton <SessionButton
text={cancelText} text={window.i18n('cancel')}
buttonColor={weAreAdmin ? SessionButtonColor.Danger : undefined}
buttonType={SessionButtonType.Simple} buttonType={SessionButtonType.Simple}
onClick={closeDialog} onClick={closeDialog}
disabled={isProcessingUIChange} disabled={isProcessingUIChange}

@ -198,7 +198,7 @@ export const OverlayClosedGroupV2 = () => {
{isDevProd() && ( {isDevProd() && (
<> <>
<span style={{ display: 'flex', alignItems: 'center' }}> <span style={{ display: 'flex', alignItems: 'center' }}>
Invite as admin Plop?{' '} Invite as admin?{' '}
<SessionToggle <SessionToggle
active={window.sessionFeatureFlags.useGroupV2InviteAsAdmin} active={window.sessionFeatureFlags.useGroupV2InviteAsAdmin}
onClick={() => { onClick={() => {

@ -299,7 +299,6 @@ const decryptBlindedMessage = async (
const version = data[0]; const version = data[0];
if (version !== 0) { if (version !== 0) {
console.warn('decryptBlindedMessage - Dropping message due to unsupported encryption version');
return undefined; return undefined;
} }

Loading…
Cancel
Save