Skip to content

Commit a779921

Browse files
committed
chore: wip
1 parent 61b5bf4 commit a779921

File tree

18 files changed

+563
-641
lines changed

18 files changed

+563
-641
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: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ import { useSelector } from 'react-redux';
33
import useKey from 'react-use/lib/useKey';
44
import { getAppDispatch } from '../../../state/dispatch';
55

6-
import { deleteMessagesForX } from '../../../interactions/conversations/unsendingInteractions';
76
import { resetSelectedMessageIds } from '../../../state/ducks/conversations';
87
import { getSelectedMessageIds } from '../../../state/selectors/conversations';
9-
import {
10-
useSelectedConversationKey,
11-
useSelectedIsPublic,
12-
} from '../../../state/selectors/selectedConversation';
8+
import { useSelectedConversationKey } from '../../../state/selectors/selectedConversation';
139
import {
1410
SessionButton,
1511
SessionButtonColor,
@@ -21,11 +17,12 @@ import { tr } from '../../../localization/localeTools';
2117
import { SessionLucideIconButton } from '../../icon/SessionIconButton';
2218
import { LUCIDE_ICONS_UNICODE } from '../../icon/lucide';
2319
import { isBackspace, isDeleteKey, isEscapeKey } from '../../../util/keyboardShortcuts';
20+
import { useDeleteMessagesCb } from '../../menuAndSettingsHooks/useDeleteMessagesCb';
2421

2522
export const SelectionOverlay = () => {
2623
const selectedMessageIds = useSelector(getSelectedMessageIds);
2724
const selectedConversationKey = useSelectedConversationKey();
28-
const isPublic = useSelectedIsPublic();
25+
const deleteMessagesCb = useDeleteMessagesCb(selectedConversationKey);
2926
const dispatch = getAppDispatch();
3027
const ref = useRef(null);
3128

@@ -51,8 +48,8 @@ export const SelectionOverlay = () => {
5148
return true;
5249
case 'Backspace':
5350
case 'Delete':
54-
if (selectionMode && selectedConversationKey) {
55-
void deleteMessagesForX(selectedMessageIds, selectedConversationKey, isPublic);
51+
if (selectionMode) {
52+
void deleteMessagesCb?.(selectedMessageIds);
5653
}
5754
return true;
5855
default:
@@ -61,12 +58,6 @@ export const SelectionOverlay = () => {
6158
}
6259
);
6360

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-
7061
return (
7162
<SessionFocusTrap
7263
initialFocus={() => ref.current}
@@ -97,13 +88,7 @@ export const SelectionOverlay = () => {
9788
buttonType={SessionButtonType.Solid}
9889
text={tr('delete')}
9990
onClick={async () => {
100-
if (selectedConversationKey) {
101-
await deleteMessagesForX(
102-
selectedMessageIds,
103-
selectedConversationKey,
104-
enforceDeleteServerSide
105-
);
106-
}
91+
void deleteMessagesCb?.(selectedMessageIds);
10792
}}
10893
/>
10994
</SessionFocusTrap>

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
useMessageBody,
@@ -55,6 +54,7 @@ import { tr } from '../../../../../localization/localeTools';
5554
import { AppDispatch } from '../../../../../state/createStore';
5655
import { useKeyboardShortcut } from '../../../../../hooks/useKeyboardShortcut';
5756
import { KbdShortcut } from '../../../../../util/keyboardShortcuts';
57+
import { useDeleteMessagesCb } from '../../../../menuAndSettingsHooks/useDeleteMessagesCb';
5858

5959
// NOTE we override the default max-widths when in the detail isDetailView
6060
const StyledMessageBody = styled.div`
@@ -295,6 +295,8 @@ export const OverlayMessageInfo = () => {
295295

296296
const messageId = useMessageId();
297297
const messageInfo = useMessageInfo(messageId);
298+
const selectedConversationKey = useSelectedConversationKey();
299+
const deleteMessagesCb = useDeleteMessagesCb(selectedConversationKey);
298300

299301
const {
300302
rightOverlayMode,
@@ -430,14 +432,14 @@ export const OverlayMessageInfo = () => {
430432
/>
431433
)}
432434
{/* Deleting messages sends a "delete message" message so it must be disabled for message requests. */}
433-
{isDeletable && !isLegacyGroup && !isIncomingMessageRequest && (
435+
{isDeletable && !isLegacyGroup && !isIncomingMessageRequest && deleteMessagesCb && (
434436
<PanelIconButton
435437
text={{ token: 'delete' }}
436438
iconElement={<PanelIconLucideIcon unicode={LUCIDE_ICONS_UNICODE.TRASH2} />}
437439
color={'var(--danger-color)'}
438440
dataTestId="delete-from-details"
439441
onClick={() => {
440-
void deleteMessagesById([messageId], convoId);
442+
void deleteMessagesCb?.(messageId);
441443
}}
442444
/>
443445
)}

ts/components/menu/items/DeleteMessage/DeleteMessageMenuItem.tsx

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,15 @@ import styled from 'styled-components';
22
import { isEmpty } from 'lodash';
33
import useUpdate from 'react-use/lib/useUpdate';
44
import useInterval from 'react-use/lib/useInterval';
5-
import {
6-
useMessageIsDeletable,
7-
useMessageIsDeletableForEveryone,
8-
} from '../../../../state/selectors';
9-
import {
10-
useSelectedConversationKey,
11-
useSelectedIsPublic,
12-
} from '../../../../state/selectors/selectedConversation';
5+
import { useMessageStatus } from '../../../../state/selectors';
6+
import { useSelectedConversationKey } from '../../../../state/selectors/selectedConversation';
137
import { MenuItem } from '../MenuItem';
148
import { tr } from '../../../../localization/localeTools';
159
import { LUCIDE_ICONS_UNICODE } from '../../../icon/lucide';
1610
import { DURATION } from '../../../../session/constants';
1711
import { formatAbbreviatedExpireDoubleTimer } from '../../../../util/i18n/formatting/expirationTimer';
1812
import { useMessageExpirationPropsById } from '../../../../hooks/useParamSelector';
19-
import { useMessageInteractions } from '../../../../hooks/useMessageInteractions';
13+
import { useDeleteMessagesCb } from '../../../menuAndSettingsHooks/useDeleteMessagesCb';
2014

2115
const StyledDeleteItemContent = styled.span`
2216
display: flex;
@@ -93,24 +87,34 @@ const ExpiresInItem = ({ messageId }: { messageId: string }) => {
9387
return <StyledExpiresIn>{formatTimeLeft({ timeLeftMs })}</StyledExpiresIn>;
9488
};
9589

96-
export const DeleteItem = ({ messageId }: { messageId: string }) => {
90+
function useDelete(messageId?: string) {
9791
const convoId = useSelectedConversationKey();
98-
const isPublic = useSelectedIsPublic();
92+
const messageStatus = useMessageStatus(messageId);
93+
const deleteMessageCb = useDeleteMessagesCb(convoId);
94+
95+
console.warn('fixme allow ot delete a message to a sogs that failed to send via', messageStatus);
96+
return deleteMessageCb
97+
? () => {
98+
void deleteMessageCb?.(messageId);
99+
}
100+
: null;
101+
}
99102

100-
const isDeletable = useMessageIsDeletable(messageId);
101-
const isDeletableForEveryone = useMessageIsDeletableForEveryone(messageId);
103+
export const DeleteItem = ({ messageId }: { messageId: string }) => {
104+
const convoId = useSelectedConversationKey();
102105

103-
const { deleteFromConvo } = useMessageInteractions(messageId);
104-
const onClick = () => {
105-
deleteFromConvo(isPublic, convoId);
106-
};
106+
const deleteMessagesCb = useDelete(convoId);
107107

108-
if (!convoId || (isPublic && !isDeletableForEveryone) || (!isPublic && !isDeletable)) {
108+
if (!deleteMessagesCb) {
109109
return null;
110110
}
111111

112112
return (
113-
<MenuItem onClick={onClick} iconType={LUCIDE_ICONS_UNICODE.TRASH2} isDangerAction={true}>
113+
<MenuItem
114+
onClick={deleteMessagesCb}
115+
iconType={LUCIDE_ICONS_UNICODE.TRASH2}
116+
isDangerAction={true}
117+
>
114118
<StyledDeleteItemContent>
115119
<StyledTextContainer>
116120
{tr('delete')}

0 commit comments

Comments
 (0)