campfire/src/routes/+layout.svelte

81 lines
2 KiB
Svelte
Raw Normal View History

2024-06-29 17:27:46 +01:00
<script>
2024-06-29 19:52:52 +01:00
import '$lib/app.css';
import * as api from '$lib/api.js';
import { server } from '$lib/client/server.js';
import { app } from '$lib/client/app.js';
import { account } from '$lib/stores/account.js';
import { parseAccount } from '$lib/account.js';
import { unread_notif_count, last_read_notif_id } from '$lib/notifications.js';
2025-07-13 18:49:49 +01:00
import Lang from '$lib/lang';
2024-06-29 17:27:46 +01:00
import Navigation from '$lib/ui/Navigation.svelte';
2024-07-04 16:55:57 +01:00
import Modal from '@cf/ui/Modal.svelte';
import Composer from '@cf/ui/Composer.svelte';
2024-06-29 17:27:46 +01:00
import Widgets from '$lib/ui/Widgets.svelte';
2025-07-15 00:02:12 +01:00
const lang = Lang();
2025-07-13 18:49:49 +01:00
2024-07-04 16:55:57 +01:00
let show_composer = false;
async function init() {
if (!$app || !$app.token) {
account.set(false);
return;
}
// logged in- attempt to retrieve using token
const data = await api.verifyCredentials($server.host, $app.token);
if (!data) return;
account.set(parseAccount(data));
2025-07-13 20:44:54 +01:00
console.log(lang.string('logs.logged_in', $account.fqn));
2024-07-02 20:21:34 +01:00
// spin up async task to fetch notifications
const notif_data = await api.getNotifications(
$server.host,
$app.token,
$last_read_notif_id
);
if (!notif_data) return;
unread_notif_count.set(notif_data.length);
};
2024-06-29 17:27:46 +01:00
</script>
2024-06-30 17:37:19 +01:00
<div id="app">
2024-06-29 17:27:46 +01:00
<header>
2024-07-04 16:55:57 +01:00
<Navigation on:compose={() => show_composer = true} />
2024-06-29 17:27:46 +01:00
</header>
<main>
{#await init()}
<div class="loading throb">
2025-07-13 18:49:49 +01:00
<span>{lang.string('loading')}</span>
</div>
{:then}
<slot></slot>
{/await}
2024-06-29 17:27:46 +01:00
</main>
<div id="widgets">
<Widgets />
</div>
2024-07-04 16:55:57 +01:00
<Modal bind:visible={show_composer}>
2024-07-05 14:51:32 +01:00
<Composer on:compose_finished={() => show_composer = false }/>
2024-07-04 16:55:57 +01:00
</Modal>
2024-06-29 17:27:46 +01:00
</div>
<style>
.loading {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-size: 2em;
font-weight: bold;
}
</style>