summaryrefslogtreecommitdiff
path: root/ui/lib
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-11-03 15:33:43 -0500
committerOwen Jacobson <owen@grimoire.ca>2024-11-03 15:33:43 -0500
commit30fa0c4c1faece6b054105fe3cce5107f24a2fa2 (patch)
tree6b66eec84a702103f368f6a5ba0e96736fc56fd6 /ui/lib
parentf2285a52822fbd1d82a24fe3b51c4343dc9e9ae6 (diff)
Svelte 5: go through and use runes in components, pages, and layouts.
Does not use runes in stores (yet).
Diffstat (limited to 'ui/lib')
-rw-r--r--ui/lib/components/ActiveChannel.svelte4
-rw-r--r--ui/lib/components/Channel.svelte4
-rw-r--r--ui/lib/components/ChannelList.svelte5
-rw-r--r--ui/lib/components/CreateChannelForm.svelte9
-rw-r--r--ui/lib/components/CurrentUser.svelte5
-rw-r--r--ui/lib/components/Invite.svelte4
-rw-r--r--ui/lib/components/Invites.svelte13
-rw-r--r--ui/lib/components/LogIn.svelte13
-rw-r--r--ui/lib/components/Message.svelte12
-rw-r--r--ui/lib/components/MessageInput.svelte34
-rw-r--r--ui/lib/components/MessageRun.svelte8
11 files changed, 50 insertions, 61 deletions
diff --git a/ui/lib/components/ActiveChannel.svelte b/ui/lib/components/ActiveChannel.svelte
index 212048a..ac1a0b9 100644
--- a/ui/lib/components/ActiveChannel.svelte
+++ b/ui/lib/components/ActiveChannel.svelte
@@ -2,8 +2,8 @@
import { messages } from '$lib/store';
import MessageRun from './MessageRun.svelte';
- export let channel = null;
- $: messageList = channel !== null ? $messages.inChannel(channel) : [];
+ let { channel } = $props();
+ let messageList = $derived(channel !== null ? $messages.inChannel(channel) : []);
function* chunkBy(xs, fn) {
let chunk;
diff --git a/ui/lib/components/Channel.svelte b/ui/lib/components/Channel.svelte
index 3dc5c87..fdc5d56 100644
--- a/ui/lib/components/Channel.svelte
+++ b/ui/lib/components/Channel.svelte
@@ -1,7 +1,5 @@
<script>
- export let id;
- export let name;
- export let active = false;
+ let { id, name, active } = $props();
</script>
<li class="rounded-full" class:bg-slate-400={active}>
diff --git a/ui/lib/components/ChannelList.svelte b/ui/lib/components/ChannelList.svelte
index f7376c1..9d1227e 100644
--- a/ui/lib/components/ChannelList.svelte
+++ b/ui/lib/components/ChannelList.svelte
@@ -1,10 +1,7 @@
<script>
- import { channelsList } from '$lib/store';
import Channel from './Channel.svelte';
- export let active = null;
-
- $: channels = $channelsList.channels;
+ let { channels, active } = $props();
</script>
<nav class="list-nav">
diff --git a/ui/lib/components/CreateChannelForm.svelte b/ui/lib/components/CreateChannelForm.svelte
index 6eee5db..ac43925 100644
--- a/ui/lib/components/CreateChannelForm.svelte
+++ b/ui/lib/components/CreateChannelForm.svelte
@@ -1,11 +1,12 @@
<script>
import { createChannel } from '$lib/apiServer';
- let name = '';
+ let name = $state('');
let pending = false;
- $: disabled = pending;
+ let disabled = $derived(pending);
- async function handleSubmit() {
+ async function handleSubmit(event) {
+ event.preventDefault();
pending = true;
const response = await createChannel(name);
if (200 <= response.status && response.status < 300) {
@@ -15,7 +16,7 @@
}
</script>
-<form on:submit|preventDefault={handleSubmit} class="form form-row flex-nowrap">
+<form onsubmit={handleSubmit} class="form form-row flex-nowrap">
<input
type="text"
placeholder="create channel"
diff --git a/ui/lib/components/CurrentUser.svelte b/ui/lib/components/CurrentUser.svelte
index 97ff980..46c76b0 100644
--- a/ui/lib/components/CurrentUser.svelte
+++ b/ui/lib/components/CurrentUser.svelte
@@ -3,7 +3,8 @@
import { logOut } from '$lib/apiServer';
import { currentUser } from '$lib/store';
- async function handleLogout() {
+ async function handleLogout(event) {
+ event.preventDefault();
const response = await logOut();
if (200 <= response.status && response.status < 300) {
currentUser.update(() => null);
@@ -12,7 +13,7 @@
}
</script>
-<form on:submit|preventDefault={handleLogout}>
+<form onsubmit={handleLogout}>
{#if $currentUser}
<a href="/me">@{$currentUser.username}</a>
{/if}
diff --git a/ui/lib/components/Invite.svelte b/ui/lib/components/Invite.svelte
index ea8dd1d..79fe087 100644
--- a/ui/lib/components/Invite.svelte
+++ b/ui/lib/components/Invite.svelte
@@ -1,8 +1,8 @@
<script>
import { clipboard } from '@skeletonlabs/skeleton';
- export let id;
- $: inviteUrl = new URL(`/invite/${id}`, document.location);
+ let { id } = $props();
+ let inviteUrl = $derived(new URL(`/invite/${id}`, document.location));
</script>
<button
diff --git a/ui/lib/components/Invites.svelte b/ui/lib/components/Invites.svelte
index bfaf2b6..337ee7e 100644
--- a/ui/lib/components/Invites.svelte
+++ b/ui/lib/components/Invites.svelte
@@ -1,24 +1,23 @@
<script>
- import { writable } from 'svelte/store';
import { createInvite } from '$lib/apiServer';
import Invite from '$lib/components/Invite.svelte';
- let invites = writable([]);
- $: $invites, console.log('invites', $invites);
+ let invites = $state([]);
- async function onSubmit() {
+ async function onSubmit(event) {
+ event.preventDefault();
let response = await createInvite();
if (response.status == 200) {
- invites.update((val) => [...val, response.data]);
+ invites.push(response.data);
}
}
</script>
<ul>
- {#each $invites as invite}
+ {#each invites as invite}
<li><Invite id={invite.id} /></li>
{/each}
</ul>
-<form on:submit|preventDefault={onSubmit}>
+<form onsubmit={onSubmit}>
<button class="btn variant-filled" type="submit"> Create Invitation </button>
</form>
diff --git a/ui/lib/components/LogIn.svelte b/ui/lib/components/LogIn.svelte
index 4346c47..4e28abe 100644
--- a/ui/lib/components/LogIn.svelte
+++ b/ui/lib/components/LogIn.svelte
@@ -1,12 +1,15 @@
<script>
- export let disabled = false;
- export let username = '';
- export let password = '';
- export let legend = 'sign in';
+ let {
+ username = $bindable(),
+ password = $bindable(),
+ legend = 'sign in',
+ disabled,
+ onsubmit
+ } = $props();
</script>
<div class="card m-4 p-4">
- <form on:submit|preventDefault>
+ <form {onsubmit}>
<label class="label" for="username">
username
<input
diff --git a/ui/lib/components/Message.svelte b/ui/lib/components/Message.svelte
index a82318a..f47e9b6 100644
--- a/ui/lib/components/Message.svelte
+++ b/ui/lib/components/Message.svelte
@@ -2,14 +2,12 @@
import { marked } from 'marked';
import DOMPurify from 'dompurify';
- export let at;
- export let body;
-
- $: renderedBody = DOMPurify.sanitize(marked.parse(body, { breaks: true }));
-
- let scroll = (message) => {
+ function scroll(message) {
message.scrollIntoView();
- };
+ }
+
+ let { at, body } = $props();
+ let renderedBody = $derived(DOMPurify.sanitize(marked.parse(body, { breaks: true })));
</script>
<div class="message relative">
diff --git a/ui/lib/components/MessageInput.svelte b/ui/lib/components/MessageInput.svelte
index e829674..220ed3b 100644
--- a/ui/lib/components/MessageInput.svelte
+++ b/ui/lib/components/MessageInput.svelte
@@ -1,40 +1,34 @@
<script>
- import { tick } from 'svelte';
import { postToChannel } from '$lib/apiServer';
- export let channel = null;
- let input;
- let value = '';
+ let { channel } = $props();
+
+ let form;
+ let value = $state('');
let pending = false;
- $: disabled = pending || channel === null;
+ let disabled = $derived(pending);
- async function handleSubmit() {
- if (channel !== null) {
- pending = true;
- // TODO try/catch:
- await postToChannel(channel, value);
- pending = false;
- value = '';
- await tick();
- input.focus();
- }
+ async function onSubmit(event) {
+ event.preventDefault();
+ pending = true;
+ await postToChannel(channel, value);
+ form.reset();
+ pending = false;
}
function onKeyDown(event) {
if (!event.altKey && event.key === 'Enter') {
- handleSubmit();
- event.preventDefault();
+ onSubmit(event);
}
}
</script>
-<form on:submit|preventDefault={handleSubmit} class="flex flex-row flex-nowrap">
+<form bind:this={form} onsubmit={onSubmit} class="flex flex-row flex-nowrap">
<textarea
- bind:this={input}
+ onkeydown={onKeyDown}
bind:value
{disabled}
- on:keydown={onKeyDown}
type="search"
class="flex-auto h-6 input rounded-r-none"
></textarea>
diff --git a/ui/lib/components/MessageRun.svelte b/ui/lib/components/MessageRun.svelte
index 4894885..23c2186 100644
--- a/ui/lib/components/MessageRun.svelte
+++ b/ui/lib/components/MessageRun.svelte
@@ -2,12 +2,10 @@
import { logins, currentUser } from '$lib/store';
import Message from '$lib/components/Message.svelte';
- export let sender;
- export let messages;
+ let { sender, messages } = $props();
- let name;
- $: name = $logins.get(sender);
- $: ownMessage = $currentUser.id == sender;
+ let name = $derived($logins.get(sender));
+ let ownMessage = $derived($currentUser !== null && $currentUser.id == sender);
</script>
<div