added cancel subscription button
This commit is contained in:
parent
4346d6ea7e
commit
041e2d619a
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue