import React, { useEffect, useState } from 'react'; import { slide as Menu } from 'react-burger-menu'; import billingService, { Subscription } from 'services/billingService'; import constants from 'utils/strings/constants'; import { getData, LS_KEYS, setData } from 'utils/storage/localStorage'; import { getToken } from 'utils/common/key'; import { getEndpoint } from 'utils/common/apiUtil'; import { Button } from 'react-bootstrap'; import { isSubscriptionActive, convertBytesToGBs, getUserSubscription, isOnFreePlan, isSubscriptionCancelled, isSubscribed, } from 'utils/billingUtil'; import exportService from 'services/exportService'; import { File } from 'services/fileService'; import isElectron from 'is-electron'; import { Collection } from 'services/collectionService'; import { useRouter } from 'next/router'; import LinkButton from './pages/gallery/LinkButton'; import { downloadApp } from 'utils/common'; import { logoutUser } from 'services/userService'; import { LogoImage } from 'pages/_app'; import { SetDialogMessage } from './MessageDialog'; import EnteSpinner from './EnteSpinner'; import RecoveryKeyModal from './RecoveryKeyModal'; import TwoFactorModal from './TwoFactorModal'; import { SetLoading } from 'pages/gallery'; interface Props { files: File[]; collections: Collection[]; setDialogMessage: SetDialogMessage; setLoading: SetLoading, showPlanSelectorModal: () => void; } export default function Sidebar(props: Props) { const [usage, SetUsage] = useState(null); const [user, setUser] = useState(null); const [subscription, setSubscription] = useState(null); useEffect(() => { setUser(getData(LS_KEYS.USER)); setSubscription(getUserSubscription()); }, []); const [isOpen, setIsOpen] = useState(false); const [recoverModalView, setRecoveryModalView] = useState(false); const [twoFactorModalView, setTwoFactorModalView] = useState(false); useEffect(() => { const main = async () => { if (!isOpen) { return; } const usage = await billingService.getUsage(); SetUsage(usage); setSubscription(getUserSubscription()); }; main(); }, [isOpen]); function openFeedbackURL() { const feedbackURL: string = `${getEndpoint()}/users/feedback?token=${encodeURIComponent(getToken())}`; const win = window.open(feedbackURL, '_blank'); win.focus(); } function openSupportMail() { const a = document.createElement('a'); a.href = 'mailto:contact@ente.io'; a.rel = 'noreferrer noopener'; a.click(); } function exportFiles() { if (isElectron()) { exportService.exportFiles(props.files, props.collections); } else { props.setDialogMessage({ title: constants.DOWNLOAD_APP, content: constants.DOWNLOAD_APP_MESSAGE(), staticBackdrop: true, proceed: { text: constants.DOWNLOAD, action: downloadApp, variant: 'success', }, close: { text: constants.CLOSE, }, }); } } const router = useRouter(); function onManageClick() { setIsOpen(false); props.showPlanSelectorModal(); } return ( setIsOpen(state.isOpen)} itemListElement="div" >
{user?.email}
{constants.SUBSCRIPTION_PLAN}
{isSubscriptionActive(subscription) ? ( isOnFreePlan(subscription) ? ( constants.FREE_SUBSCRIPTION_INFO( subscription?.expiryTime, ) ) : isSubscriptionCancelled(subscription) ? ( constants.RENEWAL_CANCELLED_SUBSCRIPTION_INFO( subscription?.expiryTime, ) ) : ( constants.RENEWAL_ACTIVE_SUBSCRIPTION_INFO( subscription?.expiryTime, ) ) ) : (

{constants.SUBSCRIPTION_EXPIRED}

)}
{constants.USAGE_DETAILS}
{usage ? ( constants.USAGE_INFO( usage, Number(convertBytesToGBs(subscription?.storage)), ) ) : (
)}
{constants.REQUEST_FEATURE} {constants.SUPPORT} <> setRecoveryModalView(false)} somethingWentWrong={() => props.setDialogMessage({ title: constants.RECOVER_KEY_GENERATION_FAILED, close: { variant: 'danger' }, })} /> setRecoveryModalView(true)} > {constants.DOWNLOAD_RECOVERY_KEY} <> setTwoFactorModalView(false)} setDialogMessage={props.setDialogMessage} setLoading={props.setLoading} /> setTwoFactorModalView(true)} > {constants.TWO_FACTOR} { setData(LS_KEYS.SHOW_BACK_BUTTON, { value: true }); router.push('change-password'); }} > {constants.CHANGE_PASSWORD} {constants.EXPORT}
props.setDialogMessage({ title: `${constants.CONFIRM} ${constants.LOGOUT}`, content: constants.LOGOUT_MESSAGE, staticBackdrop: true, proceed: { text: constants.LOGOUT, action: logoutUser, variant: 'danger', }, close: { text: constants.CANCEL }, })} > {constants.LOGOUT}
); }