import { useRouter } from 'next/router'; import { DeadCenter, SetLoading } from 'pages/gallery'; import { AppContext, FLASH_MESSAGE_TYPE } from 'pages/_app'; import React, { useContext, useEffect, useState } from 'react'; import { Button } from 'react-bootstrap'; import { disableTwoFactor, getTwoFactorStatus } from 'services/userService'; import { PAGES } from 'utils/constants'; import { getData, LS_KEYS, setData } from 'utils/storage/localStorage'; import constants from 'utils/strings/constants'; import { Label, Value, Row } from './Container'; import MessageDialog, { SetDialogMessage } from './MessageDialog'; interface Props { show: boolean; onHide: () => void; setDialogMessage: SetDialogMessage; setLoading: SetLoading; closeSidebar: () => void; } 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); setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), isTwoFactorEnabled: false, }); }; 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.setDisappearingFlashMessage({ message: constants.TWO_FACTOR_DISABLE_SUCCESS, type: FLASH_MESSAGE_TYPE.INFO, }); } catch (e) { appContext.setDisappearingFlashMessage({ message: constants.TWO_FACTOR_DISABLE_FAILED, type: FLASH_MESSAGE_TYPE.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(PAGES.TWO_FACTOR_SETUP); }; return (
{isTwoFactorEnabled ? ( <> ) : (

{constants.TWO_FACTOR_INFO}

)}
); } export default TwoFactorModal;