Implement logout function on nav
This commit is contained in:
@ -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"
|
||||||
|
Reference in New Issue
Block a user