moonstream/frontend/pages/account/tokens.js

104 wiersze
2.5 KiB
JavaScript
Czysty Zwykły widok Historia

2021-09-21 14:58:13 +00:00
import React, { useState, useEffect, useLayoutEffect } from "react";
import TokensList from "../../src/components/TokensList";
import TokenRequest from "../../src/components/TokenRequest";
import { useTokens } from "../../src/core/hooks";
import {
VStack,
Box,
Center,
Spinner,
ScaleFade,
Button,
Heading,
2021-09-21 18:37:23 +00:00
useDisclosure,
Modal,
ModalOverlay,
ModalContent,
ModalHeader,
ModalBody,
ModalCloseButton,
2021-09-21 14:58:13 +00:00
} from "@chakra-ui/react";
import { getLayout } from "../../src/layouts/AccountLayout";
const Tokens = () => {
2021-09-21 18:37:23 +00:00
const { onOpen, onClose, isOpen } = useDisclosure();
2021-09-21 14:58:13 +00:00
const [newToken, setNewToken] = useState(null);
const [tokens, setTokens] = useState();
const { list, update, revoke, isLoading, data } = useTokens();
useEffect(() => {
list();
//eslint-disable-next-line
}, []);
useLayoutEffect(() => {
if (newToken) {
const newData = { ...tokens };
newData.token.push(newToken);
setTokens(newData);
setNewToken(null);
}
}, [newToken, list, data, tokens]);
useLayoutEffect(() => {
if (data?.data?.user_id) {
setTokens(data.data);
}
}, [data?.data, isLoading]);
useEffect(() => {
document.title = `Tokens`;
}, []);
return (
<Box>
{isLoading && !tokens ? (
<Center>
<Spinner
hidden={false}
my={8}
size="lg"
2021-09-21 18:37:23 +00:00
color="blue.500"
2021-09-21 14:58:13 +00:00
thickness="4px"
speed="1.5s"
/>
</Center>
) : (
<ScaleFade in>
2021-09-22 13:45:45 +00:00
<Modal isOpen={isOpen} onClose={onClose} size="lg" trapFocus={false}>
2021-09-21 18:37:23 +00:00
<ModalOverlay />
<ModalContent>
<ModalHeader>New API access token</ModalHeader>
<ModalCloseButton />
<ModalBody>
<TokenRequest setNewToken={setNewToken} onClose={onClose} />
</ModalBody>
</ModalContent>
</Modal>
2021-09-21 14:58:13 +00:00
<Heading variant="tokensScreen"> My access tokens </Heading>
<VStack overflow="initial" maxH="unset" height="100%">
2021-09-21 18:37:23 +00:00
<Button
alignSelf="flex-end"
onClick={onOpen}
colorScheme="orange"
variant="solid"
size="sm"
>
Add new token
</Button>
2021-09-21 14:58:13 +00:00
<TokensList
data={tokens}
revoke={revoke}
isLoading={isLoading}
updateCallback={update}
/>
</VStack>
</ScaleFade>
)}
</Box>
);
};
Tokens.getLayout = getLayout;
export default Tokens;