| 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> | |
| ); | |
| }; | |