import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; import { setDisappearingMessagesByConvoId } from '../../../../../interactions/conversationInteractions'; import { closeRightPanel } from '../../../../../state/ducks/conversations'; import { resetRightOverlayMode } from '../../../../../state/ducks/section'; import { Flex } from '../../../../basic/Flex'; import { SessionButton } from '../../../../basic/SessionButton'; import { SpacerLG, SpacerXL } from '../../../../basic/Text'; import { getSelectedConversationExpirationModes, getSelectedConversationExpirationModesWithLegacy, getSelectedConversationExpirationSettings, getSelectedConversationKey, } from '../../../../../state/selectors/conversations'; import { DEFAULT_TIMER_OPTION } from '../../../../../util/expiringMessages'; import { useTimerOptionsByMode } from '../../../../../hooks/useParamSelector'; import { Header } from './Header'; import { DisappearingModes } from './DisappearingModes'; import { TimeOptions } from './TimeOptions'; const StyledScrollContainer = styled.div` width: 100%; height: 100%; overflow: hidden auto; `; const StyledContainer = styled(Flex)` .session-button { font-weight: 500; min-width: 90px; width: fit-content; margin: 35px auto 0; } `; const StyledNonAdminDescription = styled.div` display: flex; justify-content: center; align-items: center; margin: 0 var(--margins-lg); color: var(--text-secondary-color); font-size: var(--font-size-xs); text-align: center; line-height: 15px; `; type OverlayDisappearingMessagesProps = { unlockNewModes: boolean }; export const OverlayDisappearingMessages = (props: OverlayDisappearingMessagesProps) => { const { unlockNewModes } = props; const dispatch = useDispatch(); const selectedConversationKey = useSelector(getSelectedConversationKey); const disappearingModeOptions = useSelector( unlockNewModes ? getSelectedConversationExpirationModes : getSelectedConversationExpirationModesWithLegacy ); const convoProps = useSelector(getSelectedConversationExpirationSettings); if (!convoProps) { return null; } const { isGroup, weAreAdmin } = convoProps; const [modeSelected, setModeSelected] = useState(convoProps.expirationType); const [timeSelected, setTimeSelected] = useState( convoProps.expireTimer && convoProps.expireTimer > -1 ? convoProps.expireTimer : isGroup ? DEFAULT_TIMER_OPTION.GROUP : DEFAULT_TIMER_OPTION.PRIVATE_CONVERSATION ); // TODO verify that this if fine compared to updating in the useEffect const timerOptions = useTimerOptionsByMode(modeSelected); useEffect(() => { if (modeSelected !== convoProps.expirationType) { setModeSelected(convoProps.expirationType); } if (convoProps.expireTimer && timeSelected !== convoProps.expireTimer) { setTimeSelected(convoProps.expireTimer); } }, [convoProps.expirationType, convoProps.expireTimer]); return (
{modeSelected !== 'off' && ( <> )} {isGroup && !weAreAdmin && ( <> {window.i18n('settingAppliesToEveryone')}
{window.i18n('onlyGroupAdminsCanChange')}
)} { if (selectedConversationKey && modeSelected && timeSelected) { await setDisappearingMessagesByConvoId( selectedConversationKey, modeSelected, timeSelected ); dispatch(closeRightPanel()); dispatch(resetRightOverlayMode()); } }} disabled={modeSelected ? disappearingModeOptions[modeSelected] : undefined} > {window.i18n('set')} ); };