File size: 2,838 Bytes
f909d7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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>
  );
};