Spaces:
Runtime error
Runtime error
routes
Browse files
frontend/src/routes/+layout.svelte
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script>
|
| 2 |
+
import '../app.css';
|
| 3 |
+
</script>
|
| 4 |
+
|
| 5 |
+
<slot />
|
frontend/src/routes/+page.svelte
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script context="module" lang="ts">
|
| 2 |
+
export const prerender = true;
|
| 3 |
+
</script>
|
| 4 |
+
|
| 5 |
+
<!--
|
| 6 |
+
The main code for this component is in src/PixelArtTogether.svelte
|
| 7 |
+
This file contains the Liveblocks providers, based on the
|
| 8 |
+
liveblocks-react library
|
| 9 |
+
https://liveblocks.io/docs/api-reference/liveblocks-react#LiveblocksProvider
|
| 10 |
+
-->
|
| 11 |
+
<script lang="ts">
|
| 12 |
+
import { onMount } from 'svelte';
|
| 13 |
+
import { createClient } from '@liveblocks/client';
|
| 14 |
+
import type { Client } from '@liveblocks/client';
|
| 15 |
+
import LiveblocksProvider from '$lib/liveblocks/LiveblocksProvider.svelte';
|
| 16 |
+
import RoomProvider from '$lib/liveblocks/RoomProvider.svelte';
|
| 17 |
+
import App from '$lib/App.svelte';
|
| 18 |
+
import type { PageData } from './$types';
|
| 19 |
+
import { PUBLIC_API_BASE } from '$env/static/public';
|
| 20 |
+
import { selectedRoomID } from '$lib/store';
|
| 21 |
+
export let data: PageData;
|
| 22 |
+
|
| 23 |
+
let rooms = data.rooms;
|
| 24 |
+
let loaded = false;
|
| 25 |
+
let client: Client;
|
| 26 |
+
|
| 27 |
+
$: roomId = rooms.find((room) => room.id === $selectedRoomID)?.room_id;
|
| 28 |
+
|
| 29 |
+
$:{
|
| 30 |
+
console.log("ROOM ID", $selectedRoomID);
|
| 31 |
+
}
|
| 32 |
+
onMount(() => {
|
| 33 |
+
// document.addEventListener('wheel', (e) => e.preventDefault(), { passive: false });
|
| 34 |
+
client = createClient({
|
| 35 |
+
authEndpoint: PUBLIC_API_BASE + '/auth'
|
| 36 |
+
});
|
| 37 |
+
|
| 38 |
+
loaded = true;
|
| 39 |
+
});
|
| 40 |
+
</script>
|
| 41 |
+
|
| 42 |
+
{#if loaded}
|
| 43 |
+
<LiveblocksProvider {client}>
|
| 44 |
+
{#if roomId}
|
| 45 |
+
<RoomProvider id={roomId}>
|
| 46 |
+
<App />
|
| 47 |
+
</RoomProvider>
|
| 48 |
+
{:else}
|
| 49 |
+
<div class="flex flex-col items-center justify-center h-full">
|
| 50 |
+
<h1 class="text-2xl font-bold">No room selected</h1>
|
| 51 |
+
<p class="text-gray-500">Please select a room in the URL</p>
|
| 52 |
+
</div>
|
| 53 |
+
{/if}
|
| 54 |
+
</LiveblocksProvider>
|
| 55 |
+
{/if}
|
frontend/src/routes/+page.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { PUBLIC_API_BASE } from '$env/static/public';
|
| 2 |
+
import type { RoomResponse } from '$lib/types';
|
| 3 |
+
import { selectedRoomID } from '$lib/store';
|
| 4 |
+
import { MAX_CAPACITY } from '$lib/constants';
|
| 5 |
+
import type { PageLoad } from './$types';
|
| 6 |
+
export const prerender = true
|
| 7 |
+
export const ssr = false
|
| 8 |
+
|
| 9 |
+
export const load: PageLoad = async ({ url }) => {
|
| 10 |
+
const roomidParam = url.searchParams.get('roomid');
|
| 11 |
+
const res = await fetch(PUBLIC_API_BASE + '/rooms');
|
| 12 |
+
const rooms: RoomResponse[] = await res.json();
|
| 13 |
+
|
| 14 |
+
if (roomidParam) {
|
| 15 |
+
const room = rooms.find(room => room.room_id === roomidParam);
|
| 16 |
+
if (room) {
|
| 17 |
+
selectedRoomID.set(room.id);
|
| 18 |
+
}
|
| 19 |
+
} else {
|
| 20 |
+
const room = rooms.find(room => room.users_count < MAX_CAPACITY) || null;
|
| 21 |
+
selectedRoomID.set(room ? room.id : null);
|
| 22 |
+
}
|
| 23 |
+
return { rooms };
|
| 24 |
+
}
|