fix infnite sses being made, autoscroll messages
This commit is contained in:
parent
48f55ff164
commit
47eb2da5b3
2 changed files with 28 additions and 5 deletions
|
|
@ -487,6 +487,8 @@ export const actions = {
|
||||||
await tx.delete(table.group).where(eq(table.group.id, groupId));
|
await tx.delete(table.group).where(eq(table.group.id, groupId));
|
||||||
});
|
});
|
||||||
_sendToUser(locals.user!.id, { type: 'group', status: 'removed-from-group' });
|
_sendToUser(locals.user!.id, { type: 'group', status: 'removed-from-group' });
|
||||||
|
|
||||||
|
return { success: true };
|
||||||
},
|
},
|
||||||
|
|
||||||
createServer: async ({ request, locals }) => {
|
createServer: async ({ request, locals }) => {
|
||||||
|
|
@ -507,7 +509,8 @@ export const actions = {
|
||||||
.set({ servers: locals.user!.servers.map((z) => z.id).concat([serverId]) })
|
.set({ servers: locals.user!.servers.map((z) => z.id).concat([serverId]) })
|
||||||
.where(eq(table.user.id, locals.user!.id));
|
.where(eq(table.user.id, locals.user!.id));
|
||||||
|
|
||||||
redirect(303, `/app`);
|
_sendToUser(locals.user!.id, { type: 'server', status: 'server-created' });
|
||||||
|
return { success: true };
|
||||||
}
|
}
|
||||||
} satisfies Actions;
|
} satisfies Actions;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@
|
||||||
let currentPage: OverviewUser | OverviewGroup | OverviewServer | undefined = $state();
|
let currentPage: OverviewUser | OverviewGroup | OverviewServer | undefined = $state();
|
||||||
let currentSubPage: Channel | null = $state(null);
|
let currentSubPage: Channel | null = $state(null);
|
||||||
|
|
||||||
|
let sse: EventSource | undefined;
|
||||||
|
let messagesElement: HTMLDivElement | undefined = $state();
|
||||||
let isMembersTabOpen = $state(true);
|
let isMembersTabOpen = $state(true);
|
||||||
let members: UserWithStatus[] = $state([]);
|
let members: UserWithStatus[] = $state([]);
|
||||||
|
|
||||||
|
|
@ -188,7 +190,9 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
const sse = new EventSource('/api/updates');
|
if (!sse) {
|
||||||
|
sse = new EventSource('/api/updates');
|
||||||
|
}
|
||||||
|
|
||||||
sse.addEventListener('message', async (e) => {
|
sse.addEventListener('message', async (e) => {
|
||||||
const json = JSON.parse(e.data) as
|
const json = JSON.parse(e.data) as
|
||||||
|
|
@ -196,13 +200,18 @@
|
||||||
| { type: 'message'; message: ReturnMessage }
|
| { type: 'message'; message: ReturnMessage }
|
||||||
| { type: 'status'; id: string; status: 1 | 2 | 3 }
|
| { type: 'status'; id: string; status: 1 | 2 | 3 }
|
||||||
| { type: 'friends'; status: string }
|
| { type: 'friends'; status: string }
|
||||||
| { type: 'group'; status: string };
|
| { type: 'group'; status: string }
|
||||||
|
| { type: 'server'; status: string };
|
||||||
if (json.type == 'friends') {
|
if (json.type == 'friends') {
|
||||||
toast('Invalidation from friends updates, recieved ' + json.status);
|
toast('Invalidation from friends updates, recieved ' + json.status);
|
||||||
await invalidateAll();
|
await invalidateAll();
|
||||||
await fill_overview_data();
|
await fill_overview_data();
|
||||||
}
|
}
|
||||||
|
if (json.type == 'server') {
|
||||||
|
toast('Invalidation from servers updates, recieved ' + json.status);
|
||||||
|
await invalidateAll();
|
||||||
|
await fill_overview_data();
|
||||||
|
}
|
||||||
if (json.type == 'group') {
|
if (json.type == 'group') {
|
||||||
toast('Invalidation from group updates, recieved ' + json.status);
|
toast('Invalidation from group updates, recieved ' + json.status);
|
||||||
if (json.status == 'removed-from-group' && GroupID.is(currentPageID)) {
|
if (json.status == 'removed-from-group' && GroupID.is(currentPageID)) {
|
||||||
|
|
@ -229,6 +238,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (json.type == 'message') {
|
if (json.type == 'message') {
|
||||||
|
if (!messagesElement) return;
|
||||||
|
|
||||||
|
if (
|
||||||
|
messagesElement.scrollTop ===
|
||||||
|
messagesElement.scrollHeight - messagesElement.offsetHeight
|
||||||
|
) {
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!messagesElement) return;
|
||||||
|
messagesElement.scrollTop = messagesElement.scrollHeight;
|
||||||
|
}, 66.75); // FPS
|
||||||
|
}
|
||||||
messages.push(json.message);
|
messages.push(json.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -312,7 +332,7 @@
|
||||||
<h1>add invite creation, role creation, moderation, et cetera to this page.</h1>
|
<h1>add invite creation, role creation, moderation, et cetera to this page.</h1>
|
||||||
{/if}
|
{/if}
|
||||||
{#if currentPageID && currentPage && ((ServerID.is(currentPageID) && ChannelID.is(currentSubPageID)) || UserID.is(currentPageID) || GroupID.is(currentPageID))}
|
{#if currentPageID && currentPage && ((ServerID.is(currentPageID) && ChannelID.is(currentSubPageID)) || UserID.is(currentPageID) || GroupID.is(currentPageID))}
|
||||||
<div class="h-min shrink overflow-scroll">
|
<div class="h-min shrink overflow-y-scroll" bind:this={messagesElement}>
|
||||||
{#each messages as message, i (message.id)}
|
{#each messages as message, i (message.id)}
|
||||||
{#if i === 0 || messages[i - 1].authorId !== message.authorId}
|
{#if i === 0 || messages[i - 1].authorId !== message.authorId}
|
||||||
<div class="flex gap-2 px-4 py-2">
|
<div class="flex gap-2 px-4 py-2">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue