pronounscc/frontend/src/routes/settings/+layout.svelte

116 lines
3 KiB
Svelte
Raw Normal View History

2023-03-14 00:16:19 +01:00
<script lang="ts">
import { page } from "$app/stores";
import type { LayoutData } from "./$types";
import {
Badge,
Button,
ListGroup,
ListGroupItem,
Modal,
ModalBody,
ModalFooter,
} from "sveltestrap";
2023-03-14 15:17:24 +01:00
import { userStore } from "$lib/store";
import { goto } from "$app/navigation";
import { addToast } from "$lib/toast";
2023-03-14 00:16:19 +01:00
export let data: LayoutData;
2023-03-14 15:17:24 +01:00
let isOpen = false;
const toggle = () => (isOpen = !isOpen);
const logOut = () => {
userStore.set(null);
localStorage.removeItem("pronouns-token");
localStorage.removeItem("pronouns-user");
toggle();
addToast({ header: "Logged out", body: "Successfully logged out!" });
2023-03-14 15:17:24 +01:00
goto("/");
};
let unreadWarnings: number;
$: unreadWarnings = data.warnings.filter((w) => !w.read).length;
2023-04-02 23:08:44 +02:00
let hasHiddenMembers: boolean;
$: hasHiddenMembers = data.user.list_private || data.members.some((m) => m.unlisted);
</script>
<svelte:head>
<title>Settings - pronouns.cc</title>
</svelte:head>
<div class="grid">
<div class="row">
<div class="col-md-3 m-3">
<h1>Settings</h1>
<ListGroup>
2023-03-14 00:16:19 +01:00
<ListGroupItem tag="a" active={$page.url.pathname === "/settings"} href="/settings">
Your profile
</ListGroupItem>
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/auth"}
href="/settings/auth"
>
Authentication
</ListGroupItem>
{#if hasHiddenMembers}
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/members"}
href="/settings/members"
>
Hidden members
</ListGroupItem>
{/if}
{#if data.invitesEnabled}
2023-03-14 00:16:19 +01:00
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/invites"}
href="/settings/invites"
>
Invites
</ListGroupItem>
{/if}
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/tokens"}
href="/settings/tokens"
>
Tokens
2023-03-14 00:16:19 +01:00
</ListGroupItem>
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/warnings"}
href="/settings/warnings"
>
Warnings
{#if unreadWarnings !== 0}
<Badge color="danger">{unreadWarnings}</Badge>
{/if}
</ListGroupItem>
2023-03-14 00:16:19 +01:00
<ListGroupItem
tag="a"
active={$page.url.pathname === "/settings/export"}
href="/settings/export"
>
Data export
</ListGroupItem>
2023-03-14 15:17:24 +01:00
<ListGroupItem tag="button" on:click={toggle}>Log out</ListGroupItem>
</ListGroup>
</div>
<div class="col-md m-3">
<slot />
</div>
</div>
2023-03-14 15:17:24 +01:00
<Modal header="Log out" {isOpen} {toggle}>
<ModalBody>Are you sure you want to log out?</ModalBody>
<ModalFooter>
<Button color="primary" on:click={logOut}>Log out</Button>
<Button color="secondary" on:click={toggle}>Cancel</Button>
</ModalFooter>
</Modal>
</div>