import React, { useState } from 'react'; import classNames from 'classnames'; import { SessionIcon, SessionIconSize, SessionIconType } from './icon'; import styled, { DefaultTheme, useTheme } from 'styled-components'; import { SessionButton, SessionButtonType } from './SessionButton'; import { Constants } from '../../session'; import { UserUtils } from '../../session/utils'; import { useDispatch, useSelector } from 'react-redux'; import { disableRecoveryPhrasePrompt } from '../../state/ducks/userConfig'; import { getShowRecoveryPhrasePrompt } from '../../state/selectors/userConfig'; import { recoveryPhraseModal } from '../../state/ducks/modalDialog'; import { Flex } from '../basic/Flex'; const Tab = ({ isSelected, label, onSelect, type, }: { isSelected: boolean; label: string; onSelect?: (event: number) => void; type: number; }) => { const handleClick = onSelect ? () => { onSelect(type); } : undefined; return (

{label}

); }; type Props = { label?: string; buttonIcon?: SessionIconType; buttonClicked?: any; }; export const LeftPaneSectionHeader = (props: Props) => { const { label, buttonIcon, buttonClicked } = props; const theme = useTheme(); const showRecoveryPhrasePrompt = useSelector(getShowRecoveryPhrasePrompt); return (
{label && } {buttonIcon && ( )}
{showRecoveryPhrasePrompt && }
); }; export const LeftPaneBanner = () => { const [completion, setCompletion] = useState(90); const [bodyText, setBodyText] = useState(window.i18n('recoveryPhraseRevealMessage')); const [buttonText, setButtonText] = useState(window.i18n('recoveryPhraseRevealButtonText')); const [recoveryPhraseHidden, setRecoveryPhraseHidden] = useState(true); const [isCompleted, setIsCompleted] = useState(false); const [bannerTitle, setBannerTitle] = useState(window.i18n('recoveryPhraseSecureTitle')); const recoveryPhrase = UserUtils.getCurrentRecoveryPhrase(); const secondsBeforeRemoval = 2 * 1000; const completionText = `${completion}%`; const dispatch = useDispatch(); const showRecoveryPhraseModal = () => { dispatch( recoveryPhraseModal({ onClickOk: () => { setCompletion(100); setBannerTitle(window.i18n('recoveryPhraseCompleteTitle')); setBodyText(''); setRecoveryPhraseHidden(true); setIsCompleted(true); // remove banner after a small delay setTimeout(() => { dispatch(disableRecoveryPhrasePrompt()); }, secondsBeforeRemoval); }, }) ); }; const BannerInner = () => { return (

{bodyText}

{!recoveryPhraseHidden && ( {recoveryPhrase} )} {!isCompleted && ( )}
); }; const theme = useTheme(); return ( {bannerTitle} {completionText} ); }; interface StyledProgressBarContainerProps { theme: DefaultTheme; } const StyledProgressBarContainer = styled.div` width: 100%; height: 5px; flex-direction: row; background: ${(p: StyledProgressBarContainerProps) => p.theme.colors.sessionBorderColor}; `; interface StyledProgressBarProps { width: string; color?: string; } const StyledProgressBarInner = styled.div` background: ${(p: StyledProgressBarProps) => p.color}; width: ${(p: StyledProgressBarProps) => p.width}; transition: width 0.5s ease-in; height: 100%; `; interface StyledBannerTitle { theme: DefaultTheme; } export const StyledBannerTitle = styled.div` line-height: 1.3; font-size: ${(p: StyledBannerTitle) => p.theme.common.fonts.md}; font-weight: bold; margin: ${Constants.UI.SPACING.marginSm} ${Constants.UI.SPACING.marginSm} 0 ${Constants.UI.SPACING.marginSm}; span { color: ${(p: StyledBannerTitle) => p.theme.colors.textAccent}; } `; interface StyledLeftPaneBannerProps { isCompleted?: boolean; border: string; theme: DefaultTheme; } export const StyledLeftPaneBanner = styled.div` background: ${(p: StyledLeftPaneBannerProps) => p.theme.colors.recoveryPhraseBannerBackground}; display: flex; flex-direction: column; border-bottom: ${(p: StyledLeftPaneBannerProps) => p.border}; opacity: 1; transition: opacity 2s; ${(p: StyledLeftPaneBannerProps) => p.isCompleted === true ? ` opacity: 0; ` : null} `; const StyledBannerInner = styled.div` p { margin: 0; } .left-pane-banner___phrase { margin-top: ${Constants.UI.SPACING.marginMd}; } .session-button { margin-top: ${Constants.UI.SPACING.marginSm}; } `; interface StyledRecoveryPhraseProps { theme: DefaultTheme; } const StyledRecoveryPhrase = styled.p` margin: ${Constants.UI.SPACING.marginXs}; border-radius: 5px; padding: 5px; border: ${(props: StyledRecoveryPhraseProps) => props.theme.colors.sessionBorderHighContrast}; `;