fix: all svelte diagnostics.

This commit is contained in:
Shibo Lyu 2025-03-19 01:48:54 +08:00
parent 4129cac511
commit b96bdf7ff3
10 changed files with 159 additions and 107 deletions

View file

@ -1,36 +1,29 @@
<script lang="ts">
import { run } from 'svelte/legacy';
import { page } from '$app/stores';
import { page } from '$app/state';
import { BlahChatServerConnection } from '$lib/blah/connection/chatServer';
import { browser } from '$app/environment';
import { chatServerConnectionPool } from '$lib/chatServers';
import ServiceMessage from '$lib/components/ServiceMessage.svelte';
import ChatPage from './ChatPage.svelte';
import { useChat } from '$lib/chat';
let roomId = $derived($page.params.chatId);
let roomId = $derived(page.params.chatId);
let serverEndpoint: string = $state('');
run(() => {
const endpointString = decodeURIComponent($page.params.server);
serverEndpoint = endpointString.startsWith('http')
? endpointString
: `https://${endpointString}`;
});
let serverEndpoint: string = $derived(normalizedServerEndpoint(page.params.server));
function normalizedServerEndpoint(serverURIComponent: string) {
const endpointString = decodeURIComponent(serverURIComponent);
return endpointString.startsWith('http') ? endpointString : `https://${endpointString}`;
}
let server: BlahChatServerConnection | null = $state();
run(() => {
if (browser) {
server = chatServerConnectionPool.getConnection(serverEndpoint);
}
let server: BlahChatServerConnection | null = $state(null);
$effect.pre(() => {
server = chatServerConnectionPool.getConnection(serverEndpoint);
});
</script>
<div class="flex h-full w-full flex-col items-center justify-center">
{#if server}
{@const { info, sectionedMessages, sendMessage } = useChat(server, roomId)}
<ChatPage {info} {sectionedMessages} on:sendMessage={(e) => sendMessage(e.detail)} />
{@const { sendMessage, ...rest } = useChat(server, roomId)}
<ChatPage {...rest} onSendMessage={sendMessage} />
{:else}
<ServiceMessage>
To view this chat, you need to connect to chat server

View file

@ -1,17 +1,21 @@
<script lang="ts">
import Button from '$lib/components/Button.svelte';
import RichTextInput from '$lib/components/RichTextInput.svelte';
import { deltaToBlahRichText, type BlahRichText } from '@blah-im/core/richText';
import { createEventDispatcher } from 'svelte';
import type { BlahRichText } from '@blah-im/core/richText';
import { deltaToBlahRichText } from '$lib/richText';
import type { Delta, Editor } from 'typewriter-editor';
let {
onSendMessage
}: {
onSendMessage: (message: BlahRichText) => void;
} = $props();
let editor: Editor | undefined = $state();
let delta: Delta | undefined = $state();
let plainText: string = $state('');
let form: HTMLFormElement | null = $state(null);
const dispatch = createEventDispatcher<{ sendMessage: BlahRichText }>();
function onKeyboardSubmit() {
editor?.select(null);
form?.requestSubmit();
@ -23,7 +27,7 @@
if (plainText.trim() === '' || !delta) return;
const brt = deltaToBlahRichText(delta);
dispatch('sendMessage', brt);
onSendMessage(brt);
plainText = '';
}
@ -58,7 +62,7 @@
placeholder="Message"
class="max-h-40 flex-1"
keyboardSubmitMethod="enter"
on:keyboardSubmit={onKeyboardSubmit}
{onKeyboardSubmit}
/>
<Button class="p-1.5" variant="primary" type="submit">
<svg

View file

@ -1,7 +1,7 @@
<script lang="ts">
import type { Readable } from 'svelte/store';
import type { Chat, Message } from '$lib/types';
import type { Chat } from '$lib/types';
import BgPattern from '$lib/components/BgPattern.svelte';
import { currentKeyPair } from '$lib/keystore';
@ -14,17 +14,14 @@
interface Props {
info: Readable<Chat>;
sectionedMessages: Readable<MessageSection[]>;
onSendMessage: (brt: BlahRichText) => void;
}
let { info, sectionedMessages }: Props = $props();
interface $$Events {
sendMessage: CustomEvent<BlahRichText>;
}
let { info, sectionedMessages, onSendMessage }: Props = $props();
</script>
<ChatHeader info={$info} outsideUnreadCount={263723} />
<BgPattern class="w-full flex-1" pattern="charlieBrown">
<ChatHistory sectionedMessages={$sectionedMessages} mySenderId={$currentKeyPair?.id} />
</BgPattern>
<ChatInput on:sendMessage />
<ChatInput {onSendMessage} />