Implement logout function on nav

This commit is contained in:
2023-10-19 16:49:20 -04:00
parent 7b577d5c89
commit 0fe6c20c69

View File

@ -17,6 +17,14 @@ import {
useDisclosure, useDisclosure,
} from "@chakra-ui/react"; } from "@chakra-ui/react";
async function destroySession() {
await fetch("/api/auth/session", {
method: "DELETE",
}).catch(() => {});
location.assign("/");
}
function getAvatarUrl(userData: { [k: string]: any }): string { function getAvatarUrl(userData: { [k: string]: any }): string {
const BASE = "https://cdn.discordapp.com/"; const BASE = "https://cdn.discordapp.com/";
@ -37,6 +45,7 @@ export default function (props: {
permissions?: number; permissions?: number;
username?: string; username?: string;
}) { }) {
let data = { ...props };
const isDesktop = useBreakpointValue({ base: false, lg: true }); const isDesktop = useBreakpointValue({ base: false, lg: true });
const { isOpen, onClose, onOpen } = useDisclosure(); const { isOpen, onClose, onOpen } = useDisclosure();
@ -106,18 +115,19 @@ export default function (props: {
</Center> </Center>
<Spacer /> <Spacer />
<Spacer /> <Spacer />
{props.hide ? null : props.id ? ( {data.hide ? null : data.id ? (
<HStack spacing="3"> <HStack spacing="3">
<Avatar <Avatar
display={props.id ? "flex" : "none"} display={data.id ? "flex" : "none"}
src={getAvatarUrl(props)} src={getAvatarUrl(data)}
/> />
<Text> <Text>
{props.id ? `${props.username}#${props.discriminator}` : ""} {data.id ? `${data.username}#${data.discriminator}` : ""}
</Text> </Text>
<Button <Button
onClick={async () => await destroySession()}
size="md" size="md"
style={{ display: props.id ? "block" : "none" }} style={{ display: data.id ? "block" : "none" }}
variant="ghost" variant="ghost"
> >
<svg <svg
@ -156,12 +166,9 @@ export default function (props: {
<Link href="/mdn">Moderation</Link> <Link href="/mdn">Moderation</Link>
<hr /> <hr />
<Flex alignItems="center" gap="1rem"> <Flex alignItems="center" gap="1rem">
<Avatar <Avatar display={data.id ? "" : "none"} src={getAvatarUrl(data)} />
display={props.id ? "" : "none"}
src={getAvatarUrl(props)}
/>
<Text align="center" style={{ overflowWrap: "anywhere" }}> <Text align="center" style={{ overflowWrap: "anywhere" }}>
{props.id ? `${props.username}#${props.discriminator}` : ""} {data.id ? `${data.username}#${data.discriminator}` : ""}
</Text> </Text>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -171,8 +178,9 @@ export default function (props: {
viewBox="0 0 16 16" viewBox="0 0 16 16"
style={{ style={{
cursor: "pointer", cursor: "pointer",
display: props.id ? "block" : "none", display: data.id ? "block" : "none",
}} }}
onClick={async () => destroySession()}
> >
<path <path
fillRule="evenodd" fillRule="evenodd"