xinnni's picture
Upload 146 files
f909d7c verified
raw
history blame
2.84 kB
import React from "react";
import {
Modal,
Group,
Button,
Avatar,
Text,
Divider,
ModalProps,
Paper,
Badge,
} from "@mantine/core";
import { useUser as useSupaUser } from "@supabase/auth-helpers-react";
import { IoRocketSharp } from "react-icons/io5";
import useModal from "src/store/useModal";
import useUser from "src/store/useUser";
export const AccountModal: React.FC<ModalProps> = ({ opened, onClose }) => {
const user = useSupaUser();
const isPremium = useUser(state => state.premium);
const isOrg = useUser(state => state.organization);
const isOrgAdmin = useUser(state => state.orgAdmin);
const premiumCancelled = useUser(state => state.premiumCancelled);
const setVisible = useModal(state => state.setVisible);
const logout = useUser(state => state.logout);
return (
<Modal title={`Hello, ${user?.user_metadata.name}!`} opened={opened} onClose={onClose} centered>
<Paper p="md">
<Group>
<Avatar src={user?.user_metadata.avatar_url} size={94}>
JC
</Avatar>
<div>
<Text fz="lg" tt="uppercase" fw={700}>
{user?.user_metadata.name}
</Text>
<Group gap={10} mt={3}>
<Text fz="xs" c="dimmed">
{user?.email}
</Text>
</Group>
<Group gap={10} mt={5}>
<Text fz="xs" c="dimmed">
<Badge
size="sm"
variant={isPremium ? "gradient" : "dot"}
color={premiumCancelled || !isPremium ? "dark" : "green"}
gradient={{ from: "#8800fe", to: "#ff00cc", deg: 35 }}
>
{isPremium ? "Premium" : "Free"}{" "}
{premiumCancelled ? "(Cancelled)" : isOrg && "(Organization)"}
</Badge>
</Text>
</Group>
</div>
</Group>
</Paper>
<Divider py="xs" />
<Group justify="right">
{isPremium && !premiumCancelled ? (
<Button
variant="light"
color="red"
onClick={() => {
setVisible("cancelPremium")(true);
onClose();
}}
disabled={isOrg && !isOrgAdmin}
>
Cancel Subscription
</Button>
) : (
<Button
variant="gradient"
gradient={{ from: "teal", to: "lime", deg: 105 }}
leftSection={<IoRocketSharp />}
onClick={() => setVisible("premium")(true)}
>
UPGRADE TO PREMIUM!
</Button>
)}
<Button
color="red"
onClick={() => {
logout();
onClose();
}}
>
Log Out
</Button>
</Group>
</Modal>
);
};