Skip to content

Commit 68a3953

Browse files
committed
chore: wip
1 parent e0f7bea commit 68a3953

File tree

18 files changed

+563
-650
lines changed

18 files changed

+563
-650
lines changed

ts/components/basic/SessionRadioGroup.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export type SessionRadioItems = Array<{
1010
label: string;
1111
inputDataTestId: SessionDataTestId;
1212
labelDataTestId: SessionDataTestId;
13+
disabled?: boolean;
1314
}>;
1415

1516
interface Props {
@@ -50,6 +51,7 @@ export const SessionRadioGroup = (props: Props) => {
5051
label={item.label}
5152
active={itemIsActive}
5253
value={item.value}
54+
disabled={item.disabled}
5355
inputDataTestId={item.inputDataTestId}
5456
labelDataTestId={item.labelDataTestId}
5557
inputName={group}

ts/components/conversation/header/ConversationHeaderSelectionOverlay.tsx

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { useDispatch, useSelector } from 'react-redux';
22
import useKey from 'react-use/lib/useKey';
33

4-
import { deleteMessagesForX } from '../../../interactions/conversations/unsendingInteractions';
54
import { resetSelectedMessageIds } from '../../../state/ducks/conversations';
65
import { getSelectedMessageIds } from '../../../state/selectors/conversations';
7-
import {
8-
useSelectedConversationKey,
9-
useSelectedIsPublic,
10-
} from '../../../state/selectors/selectedConversation';
6+
import { useSelectedConversationKey } from '../../../state/selectors/selectedConversation';
117
import {
128
SessionButton,
139
SessionButtonColor,
@@ -18,13 +14,15 @@ import { SessionFocusTrap } from '../../SessionFocusTrap';
1814
import { tr } from '../../../localization/localeTools';
1915
import { SessionLucideIconButton } from '../../icon/SessionIconButton';
2016
import { LUCIDE_ICONS_UNICODE } from '../../icon/lucide';
17+
import { useDeleteMessagesCb } from '../../menuAndSettingsHooks/useDeleteMessagesCb';
2118

2219
export const SelectionOverlay = () => {
2320
const selectedMessageIds = useSelector(getSelectedMessageIds);
2421
const selectedConversationKey = useSelectedConversationKey();
25-
const isPublic = useSelectedIsPublic();
2622
const dispatch = useDispatch();
2723

24+
const deleteMessagesCb = useDeleteMessagesCb(selectedConversationKey);
25+
2826
function onCloseOverlay() {
2927
dispatch(resetSelectedMessageIds());
3028
}
@@ -51,8 +49,8 @@ export const SelectionOverlay = () => {
5149
return true;
5250
case 'Backspace':
5351
case 'Delete':
54-
if (selectionMode && selectedConversationKey) {
55-
void deleteMessagesForX(selectedMessageIds, selectedConversationKey, isPublic);
52+
if (selectionMode) {
53+
void deleteMessagesCb?.(selectedMessageIds);
5654
}
5755
return true;
5856
default:
@@ -61,12 +59,6 @@ export const SelectionOverlay = () => {
6159
}
6260
);
6361

64-
// `enforceDeleteServerSide` should check for message statuses too, but when we have multiple selected,
65-
// some might be sent and some in an error state. We default to trying to delete all of them server side first,
66-
// which might fail. If that fails, the user will need to do a delete for all the ones sent already, and a manual delete
67-
// for each ones which is in an error state.
68-
const enforceDeleteServerSide = isPublic;
69-
7062
const classNameAndId = 'message-selection-overlay';
7163

7264
return (
@@ -88,14 +80,8 @@ export const SelectionOverlay = () => {
8880
buttonShape={SessionButtonShape.Square}
8981
buttonType={SessionButtonType.Solid}
9082
text={tr('delete')}
91-
onClick={async () => {
92-
if (selectedConversationKey) {
93-
await deleteMessagesForX(
94-
selectedMessageIds,
95-
selectedConversationKey,
96-
enforceDeleteServerSide
97-
);
98-
}
83+
onClick={() => {
84+
void deleteMessagesCb?.(selectedMessageIds);
9985
}}
10086
/>
10187
</div>

ts/components/conversation/right-panel/overlay/message-info/OverlayMessageInfo.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
replyToMessage,
1818
resendMessage,
1919
} from '../../../../../interactions/conversationInteractions';
20-
import { deleteMessagesById } from '../../../../../interactions/conversations/unsendingInteractions';
2120
import {
2221
useMessageAttachments,
2322
useMessageAuthor,
@@ -54,6 +53,7 @@ import { useShowCopyAccountIdCb } from '../../../../menuAndSettingsHooks/useCopy
5453
import { sectionActions } from '../../../../../state/ducks/section';
5554
import { useIsIncomingRequest } from '../../../../../hooks/useParamSelector';
5655
import { tr } from '../../../../../localization/localeTools';
56+
import { useDeleteMessagesCb } from '../../../../menuAndSettingsHooks/useDeleteMessagesCb';
5757

5858
// NOTE we override the default max-widths when in the detail isDetailView
5959
const StyledMessageBody = styled.div`
@@ -289,6 +289,8 @@ export const OverlayMessageInfo = () => {
289289
}
290290
}, [sender, closePanel]);
291291

292+
const deleteMessagesCb = useDeleteMessagesCb(convoId);
293+
292294
if (!rightOverlayMode || !messageInfo || !convoId || !messageId || !sender) {
293295
return null;
294296
}
@@ -404,14 +406,14 @@ export const OverlayMessageInfo = () => {
404406
/>
405407
)}
406408
{/* Deleting messages sends a "delete message" message so it must be disabled for message requests. */}
407-
{isDeletable && !isLegacyGroup && !isIncomingMessageRequest && (
409+
{isDeletable && !isLegacyGroup && !isIncomingMessageRequest && deleteMessagesCb && (
408410
<PanelIconButton
409411
text={tr('delete')}
410412
iconElement={<PanelIconLucideIcon unicode={LUCIDE_ICONS_UNICODE.TRASH2} />}
411413
color={'var(--danger-color)'}
412414
dataTestId="delete-from-details"
413415
onClick={() => {
414-
void deleteMessagesById([messageId], convoId);
416+
void deleteMessagesCb?.(messageId);
415417
}}
416418
/>
417419
)}
Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,24 @@
1-
import { useCallback } from 'react';
2-
import { deleteMessagesForX } from '../../../../interactions/conversations/unsendingInteractions';
3-
import {
4-
useMessageIsDeletable,
5-
useMessageIsDeletableForEveryone,
6-
useMessageStatus,
7-
} from '../../../../state/selectors';
8-
import {
9-
useSelectedConversationKey,
10-
useSelectedIsPublic,
11-
} from '../../../../state/selectors/selectedConversation';
1+
import { useSelectedConversationKey } from '../../../../state/selectors/selectedConversation';
122
import { ItemWithDataTestId } from '../MenuItemWithDataTestId';
133
import { tr } from '../../../../localization/localeTools';
4+
import { useDeleteMessagesCb } from '../../../menuAndSettingsHooks/useDeleteMessagesCb';
145

156
export const DeleteItem = ({ messageId }: { messageId: string }) => {
167
const convoId = useSelectedConversationKey();
17-
const isPublic = useSelectedIsPublic();
188

19-
const isDeletable = useMessageIsDeletable(messageId);
20-
const isDeletableForEveryone = useMessageIsDeletableForEveryone(messageId);
21-
const messageStatus = useMessageStatus(messageId);
9+
const deleteMessagesCb = useDeleteMessagesCb(convoId);
2210

23-
const enforceDeleteServerSide = isPublic && messageStatus !== 'error';
24-
25-
const onDelete = useCallback(() => {
26-
if (convoId) {
27-
void deleteMessagesForX([messageId], convoId, enforceDeleteServerSide);
28-
}
29-
}, [convoId, enforceDeleteServerSide, messageId]);
30-
31-
if (!convoId || (isPublic && !isDeletableForEveryone) || (!isPublic && !isDeletable)) {
11+
if (!deleteMessagesCb) {
3212
return null;
3313
}
3414

35-
return <ItemWithDataTestId onClick={onDelete}>{tr('delete')}</ItemWithDataTestId>;
15+
return (
16+
<ItemWithDataTestId
17+
onClick={() => {
18+
void deleteMessagesCb?.(messageId);
19+
}}
20+
>
21+
{tr('delete')}
22+
</ItemWithDataTestId>
23+
);
3624
};

0 commit comments

Comments
 (0)