feat: started adding options to session confirm modal

for delete button in more message info
pull/3017/head
William Grant 2 years ago
parent e76eee5329
commit 5dd62f7dd7

@ -4,9 +4,11 @@ import styled, { CSSProperties } from 'styled-components';
import { SessionRadio } from './SessionRadio'; import { SessionRadio } from './SessionRadio';
export type SessionRadioItems = Array<{ value: string; label: string }>;
interface Props { interface Props {
initialItem: string; initialItem: string;
items: Array<{ value: string; label: string }>; items: SessionRadioItems;
group: string; group: string;
onClick: (selectedValue: string) => void; onClick: (selectedValue: string) => void;
style?: CSSProperties; style?: CSSProperties;

@ -4,10 +4,6 @@ import { useDispatch, useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
// tslint:disable-next-line: no-submodule-imports // tslint:disable-next-line: no-submodule-imports
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
import {
deleteMessagesById,
deleteMessagesByIdForEveryone,
} from '../../../../../interactions/conversations/unsendingInteractions';
import { closeMessageDetailsView, closeRightPanel } from '../../../../../state/ducks/conversations'; import { closeMessageDetailsView, closeRightPanel } from '../../../../../state/ducks/conversations';
import { resetRightOverlayMode, setRightOverlayMode } from '../../../../../state/ducks/section'; import { resetRightOverlayMode, setRightOverlayMode } from '../../../../../state/ducks/section';
import { getMessageDetailsViewProps } from '../../../../../state/selectors/conversations'; import { getMessageDetailsViewProps } from '../../../../../state/selectors/conversations';
@ -18,9 +14,9 @@ import {
replyToMessage, replyToMessage,
resendMessage, resendMessage,
} from '../../../../../interactions/conversationInteractions'; } from '../../../../../interactions/conversationInteractions';
import { deleteMessagesById } from '../../../../../interactions/conversations/unsendingInteractions';
import { import {
useMessageIsDeletable, useMessageIsDeletable,
useMessageIsDeletableForEveryone,
useMessageQuote, useMessageQuote,
useMessageText, useMessageText,
} from '../../../../../state/selectors'; } from '../../../../../state/selectors';
@ -86,7 +82,6 @@ export const OverlayMessageInfo = () => {
const rightOverlayMode = useSelector(getRightOverlayMode); const rightOverlayMode = useSelector(getRightOverlayMode);
const messageDetailProps = useSelector(getMessageDetailsViewProps); const messageDetailProps = useSelector(getMessageDetailsViewProps);
const isDeletable = useMessageIsDeletable(messageDetailProps?.messageId); const isDeletable = useMessageIsDeletable(messageDetailProps?.messageId);
const isDeletableForEveryone = useMessageIsDeletableForEveryone(messageDetailProps?.messageId);
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -232,10 +227,10 @@ export const OverlayMessageInfo = () => {
)} )}
{isDeletable && ( {isDeletable && (
<PanelIconButton <PanelIconButton
text={window.i18n('deleteJustForMe')} text={window.i18n('delete')}
iconType="delete" iconType="delete"
color={'var(--danger-color)'} color={'var(--danger-color)'}
dataTestId="delete-for-me-from-details" dataTestId="delete-from-details"
onClick={() => { onClick={() => {
void deleteMessagesById([messageId], convoId); void deleteMessagesById([messageId], convoId);
dispatch(closeRightPanel()); dispatch(closeRightPanel());
@ -243,19 +238,6 @@ export const OverlayMessageInfo = () => {
}} }}
/> />
)} )}
{isDeletableForEveryone && (
<PanelIconButton
text={window.i18n('deleteForEveryone')}
iconType="delete"
color={'var(--danger-color)'}
dataTestId="delete-for-everyone-from-details"
onClick={() => {
void deleteMessagesByIdForEveryone([messageId], convoId);
dispatch(closeRightPanel());
dispatch(resetRightOverlayMode());
}}
/>
)}
</PanelButtonGroup> </PanelButtonGroup>
<SpacerXL /> <SpacerXL />
</StyledMessageDetail> </StyledMessageDetail>

@ -7,6 +7,7 @@ import { updateConfirmModal } from '../../state/ducks/modalDialog';
import { SessionWrapperModal } from '../SessionWrapperModal'; import { SessionWrapperModal } from '../SessionWrapperModal';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
import { SessionHtmlRenderer } from '../basic/SessionHTMLRenderer'; import { SessionHtmlRenderer } from '../basic/SessionHTMLRenderer';
import { SessionRadioGroup, SessionRadioItems } from '../basic/SessionRadioGroup';
import { SessionSpinner } from '../basic/SessionSpinner'; import { SessionSpinner } from '../basic/SessionSpinner';
import { SpacerLG } from '../basic/Text'; import { SpacerLG } from '../basic/Text';
import { SessionIcon, SessionIconSize, SessionIconType } from '../icon'; import { SessionIcon, SessionIconSize, SessionIconType } from '../icon';
@ -24,6 +25,7 @@ export interface SessionConfirmDialogProps {
message?: string; message?: string;
messageSub?: string; messageSub?: string;
title?: string; title?: string;
radioOptions?: SessionRadioItems;
onOk?: any; onOk?: any;
onClose?: any; onClose?: any;
closeAfterInput?: boolean; closeAfterInput?: boolean;
@ -55,6 +57,7 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
title = '', title = '',
message = '', message = '',
messageSub = '', messageSub = '',
radioOptions,
okTheme, okTheme,
closeTheme = SessionButtonColor.Danger, closeTheme = SessionButtonColor.Danger,
onClickOk, onClickOk,
@ -69,6 +72,9 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
} = props; } = props;
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [chosenOption, setChosenOption] = useState(
radioOptions?.length ? radioOptions[0].value : ''
);
const okText = props.okText || window.i18n('ok'); const okText = props.okText || window.i18n('ok');
const cancelText = props.cancelText || window.i18n('cancel'); const cancelText = props.cancelText || window.i18n('cancel');
@ -128,6 +134,18 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
<StyledSubText tag="span" textLength={message.length} html={message} /> <StyledSubText tag="span" textLength={message.length} html={message} />
<SessionHtmlRenderer tag="span" className="session-confirm-sub-message" html={messageSub} /> <SessionHtmlRenderer tag="span" className="session-confirm-sub-message" html={messageSub} />
{radioOptions && chosenOption !== '' && (
<SessionRadioGroup
group="session-confirm-radio-group"
initialItem={chosenOption}
onClick={value => {
if (value) {
setChosenOption(value);
}
}}
items={radioOptions}
/>
)}
<SessionSpinner loading={isLoading} /> <SessionSpinner loading={isLoading} />
</div> </div>

@ -380,6 +380,10 @@ export async function deleteMessagesById(messageIds: Array<string>, conversation
message: moreThanOne message: moreThanOne
? window.i18n('deleteMessagesQuestion', [messageCount.toString()]) ? window.i18n('deleteMessagesQuestion', [messageCount.toString()])
: window.i18n('deleteMessageQuestion'), : window.i18n('deleteMessageQuestion'),
radioOptions: [
{ label: window.i18n('deleteJustForMe'), value: window.i18n('deleteJustForMe') },
{ label: window.i18n('deleteForEveryone'), value: window.i18n('deleteForEveryone') },
],
okText: window.i18n('delete'), okText: window.i18n('delete'),
okTheme: SessionButtonColor.Danger, okTheme: SessionButtonColor.Danger,
onClickOk: async () => { onClickOk: async () => {

Loading…
Cancel
Save