import { useRouter } from 'next/router'; import { DeadCenter, SetLoading } from 'pages/gallery'; import { AppContext } from 'pages/_app'; import React, { useContext, useEffect, useState } from 'react'; import { Button } from 'react-bootstrap'; import { disableTwoFactor, getTwoFactorStatus } from 'services/userService'; import styled from 'styled-components'; import { getData, LS_KEYS, setData } from 'utils/storage/localStorage'; import constants from 'utils/strings/constants'; import MessageDialog, { SetDialogMessage } from './MessageDialog'; interface Props { show: boolean; onHide: () => void; setDialogMessage: SetDialogMessage; setLoading: SetLoading closeSidebar: () => void; } const Row = styled.div` display:flex; align-items:center; margin-bottom:20px; flex:1 `; const Label = styled.div` width:70%; `; function TwoFactorModal(props: Props) { const router = useRouter(); const [isTwoFactorEnabled, setTwoFactorStatus] = useState(false); const appContext = useContext(AppContext); useEffect(() => { if (!props.show) { return; } const isTwoFactorEnabled = getData(LS_KEYS.USER).isTwoFactorEnabled ?? false; setTwoFactorStatus(isTwoFactorEnabled); const main = async () => { const isTwoFactorEnabled = await getTwoFactorStatus(); setTwoFactorStatus(isTwoFactorEnabled); }; main(); }, [props.show]); const warnTwoFactorDisable = async () => { props.setDialogMessage({ title: constants.DISABLE_TWO_FACTOR, staticBackdrop: true, content: constants.DISABLE_TWO_FACTOR_MESSAGE, close: { text: constants.CANCEL }, proceed: { variant: 'danger', text: constants.DISABLE, action: twoFactorDisable, }, }); }; const twoFactorDisable = async () => { try { await disableTwoFactor(); setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), isTwoFactorEnabled: false }); props.onHide(); props.closeSidebar(); appContext.setFlashMessage({ message: constants.TWO_FACTOR_DISABLE_SUCCESS, severity: 'info' }); } catch (e) { appContext.setFlashMessage({ message: constants.TWO_FACTOR_DISABLE_FAILED, severity: 'danger' }); } }; const warnTwoFactorReconfigure = async () => { props.setDialogMessage({ title: constants.UPDATE_TWO_FACTOR, staticBackdrop: true, content: constants.UPDATE_TWO_FACTOR_MESSAGE, close: { text: constants.CANCEL }, proceed: { variant: 'success', text: constants.UPDATE, action: reconfigureTwoFactor, }, }); }; const reconfigureTwoFactor = async () => { router.push('/two-factor/setup'); }; return (
{ isTwoFactorEnabled ? <> : (

{constants.TWO_FACTOR_INFO}

) }
); } export default TwoFactorModal;