2024-12-22 11:49:24 +00:00
|
|
|
<script lang="ts">
|
|
|
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
|
|
|
import { chats, config, settings, user as _user, mobile, currentChatPage } from '$lib/stores';
|
|
|
|
|
import { tick, getContext, onMount, createEventDispatcher } from 'svelte';
|
|
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
|
|
|
|
|
|
import { toast } from 'svelte-sonner';
|
|
|
|
|
|
|
|
|
|
import Message from './Messages/Message.svelte';
|
|
|
|
|
import Loader from '../common/Loader.svelte';
|
|
|
|
|
import Spinner from '../common/Spinner.svelte';
|
|
|
|
|
|
|
|
|
|
const i18n = getContext('i18n');
|
|
|
|
|
|
2024-12-23 02:40:01 +00:00
|
|
|
export let messages = [];
|
|
|
|
|
export let top = false;
|
2024-12-22 11:49:24 +00:00
|
|
|
|
2024-12-23 02:40:01 +00:00
|
|
|
export let onLoad: Function = () => {};
|
2024-12-22 11:49:24 +00:00
|
|
|
|
|
|
|
|
let messagesLoading = false;
|
|
|
|
|
|
|
|
|
|
const loadMoreMessages = async () => {
|
|
|
|
|
// scroll slightly down to disable continuous loading
|
|
|
|
|
const element = document.getElementById('messages-container');
|
|
|
|
|
element.scrollTop = element.scrollTop + 100;
|
|
|
|
|
|
|
|
|
|
messagesLoading = true;
|
|
|
|
|
|
2024-12-23 02:40:01 +00:00
|
|
|
await onLoad();
|
2024-12-22 11:49:24 +00:00
|
|
|
|
2024-12-23 02:40:01 +00:00
|
|
|
await tick();
|
2024-12-22 11:49:24 +00:00
|
|
|
messagesLoading = false;
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
2024-12-23 02:40:01 +00:00
|
|
|
{#if messages}
|
2024-12-23 04:56:51 +00:00
|
|
|
{@const messageList = messages.slice().reverse()}
|
|
|
|
|
<div>
|
|
|
|
|
{#if !top}
|
|
|
|
|
<Loader
|
|
|
|
|
on:visible={(e) => {
|
|
|
|
|
console.log('visible');
|
|
|
|
|
if (!messagesLoading) {
|
|
|
|
|
loadMoreMessages();
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<div class="w-full flex justify-center py-1 text-xs animate-pulse items-center gap-2">
|
|
|
|
|
<Spinner className=" size-4" />
|
|
|
|
|
<div class=" ">Loading...</div>
|
|
|
|
|
</div>
|
|
|
|
|
</Loader>
|
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
|
|
{#each messageList as message, messageIdx (message.id)}
|
|
|
|
|
<Message
|
|
|
|
|
{message}
|
|
|
|
|
showUserProfile={messageIdx === 0 ||
|
|
|
|
|
messageList.at(messageIdx + 1)?.user_id !== message.user_id}
|
|
|
|
|
/>
|
|
|
|
|
{/each}
|
|
|
|
|
|
|
|
|
|
<div class="pb-6" />
|
2024-12-22 11:49:24 +00:00
|
|
|
</div>
|
2024-12-23 02:40:01 +00:00
|
|
|
{/if}
|