added cancel subscription button

This commit is contained in:
Abhinav-grd 2021-03-17 12:57:26 +05:30
parent 4346d6ea7e
commit 041e2d619a

View file

@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { slide as Menu } from 'react-burger-menu'; import { slide as Menu } from 'react-burger-menu';
import ConfirmLogout from 'components/ConfirmLogout'; import ConfirmDialog from 'components/ConfirmDialog';
import Spinner from 'react-bootstrap/Spinner'; import Spinner from 'react-bootstrap/Spinner';
import subscriptionService, { import subscriptionService, {
Subscription, Subscription,
@ -12,22 +12,34 @@ import { getData, LS_KEYS } from 'utils/storage/localStorage';
import { getToken } from 'utils/common/key'; import { getToken } from 'utils/common/key';
import { getEndpoint } from 'utils/common/apiUtil'; import { getEndpoint } from 'utils/common/apiUtil';
import { Button } from 'react-bootstrap'; import { Button } from 'react-bootstrap';
import {
planIsActive,
hasActivePaidPlan,
convertBytesToGBs,
getUserSubscription,
} from 'utils/billingUtil';
enum Action {
logout = 'logout',
cancelSubscription = 'cancel_subscription',
}
interface Props { interface Props {
setNavbarIconView; setNavbarIconView;
setPlanModalView; setPlanModalView;
} }
export default function Sidebar(props: Props) { export default function Sidebar(props: Props) {
const [logoutModalView, setLogoutModalView] = useState(false); const [confirmModalView, setConfirmModalView] = useState(false);
function showLogoutModal() { function closeConfirmModal() {
setLogoutModalView(true); setConfirmModalView(false);
}
function closeLogoutModal() {
setLogoutModalView(false);
} }
const [usage, SetUsage] = useState<string>(null); const [usage, SetUsage] = useState<string>(null);
const subscription: Subscription = getData(LS_KEYS.SUBSCRIPTION); const [action, setAction] = useState<string>(null);
const user = getData(LS_KEYS.USER); const [user, setUser] = useState(null);
const [subscription, setSubscription] = useState<Subscription>(null);
useEffect(() => {
setUser(getData(LS_KEYS.USER));
setSubscription(getUserSubscription());
}, []);
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
useEffect(() => { useEffect(() => {
const main = async () => { const main = async () => {
@ -37,17 +49,27 @@ export default function Sidebar(props: Props) {
const usage = await subscriptionService.getUsage(); const usage = await subscriptionService.getUsage();
SetUsage(usage); SetUsage(usage);
setSubscription(getUserSubscription());
}; };
main(); main();
}, [isOpen]); }, [isOpen]);
const logout = async () => { const logout = async () => {
setLogoutModalView(false); setConfirmModalView(false);
setIsOpen(false); setIsOpen(false);
props.setNavbarIconView(false); props.setNavbarIconView(false);
logoutUser(); logoutUser();
}; };
const cancelSubscription = async () => {
setConfirmModalView(false);
setIsOpen(false);
await subscriptionService.cancelSubscription();
};
let callback = [];
callback[Action.logout] = logout;
callback[Action.cancelSubscription] = cancelSubscription;
function openFeedbackURL() { function openFeedbackURL() {
const feedbackURL: string = const feedbackURL: string =
getEndpoint() + '/users/feedback?token=' + getToken(); getEndpoint() + '/users/feedback?token=' + getToken();
@ -69,7 +91,7 @@ export default function Sidebar(props: Props) {
{constants.SUBSCRIPTION_PLAN} {constants.SUBSCRIPTION_PLAN}
</h5> </h5>
<div style={{ color: '#959595' }}> <div style={{ color: '#959595' }}>
{subscriptionService.planIsActive(subscription) ? ( {planIsActive(subscription) ? (
subscription?.productID == 'free' ? ( subscription?.productID == 'free' ? (
constants.FREE_SUBSCRIPTION_INFO( constants.FREE_SUBSCRIPTION_INFO(
subscription?.expiryTime subscription?.expiryTime
@ -87,12 +109,28 @@ export default function Sidebar(props: Props) {
<Button <Button
variant="success" variant="success"
size="sm" size="sm"
onClick={() => props.setPlanModalView(true)} onClick={() => {
setIsOpen(false);
props.setPlanModalView(true);
}}
> >
{subscriptionService.hasActivePaidPlan() {hasActivePaidPlan(subscription)
? constants.MANAGE ? constants.MANAGE
: constants.SUBSCRIBE} : constants.SUBSCRIBE}
</Button> </Button>
{hasActivePaidPlan(subscription) && (
<Button
variant="danger"
size="sm"
onClick={() => {
setAction(Action.cancelSubscription);
setConfirmModalView(true);
}}
style={{ marginLeft: '10px' }}
>
{constants.CANCEL_SUBSCRIPTION}
</Button>
)}
</div> </div>
<div style={{ outline: 'none', marginTop: '30px' }}> <div style={{ outline: 'none', marginTop: '30px' }}>
<h5 style={{ marginBottom: '12px' }}> <h5 style={{ marginBottom: '12px' }}>
@ -103,11 +141,7 @@ export default function Sidebar(props: Props) {
constants.USAGE_INFO( constants.USAGE_INFO(
usage, usage,
Math.ceil( Math.ceil(
Number( Number(convertBytesToGBs(subscription?.storage))
subscriptionService.convertBytesToGBs(
subscription?.storage
)
)
) )
) )
) : ( ) : (
@ -138,10 +172,11 @@ export default function Sidebar(props: Props) {
</a> </a>
</h5> </h5>
<> <>
<ConfirmLogout <ConfirmDialog
show={logoutModalView} show={confirmModalView}
onHide={closeLogoutModal} onHide={closeConfirmModal}
logout={logout} callback={callback}
action={action}
/> />
<h5 <h5
style={{ style={{
@ -149,7 +184,10 @@ export default function Sidebar(props: Props) {
color: '#F96C6C', color: '#F96C6C',
marginTop: '30px', marginTop: '30px',
}} }}
onClick={showLogoutModal} onClick={() => {
setAction(Action.logout);
setConfirmModalView(true);
}}
> >
logout logout
</h5> </h5>