enh/refac: channels message lazy load data
This commit is contained in:
@@ -491,6 +491,44 @@ export const getChannelThreadMessages = async (
|
||||
return res;
|
||||
};
|
||||
|
||||
export const getMessageData = async (
|
||||
token: string = '',
|
||||
channel_id: string,
|
||||
message_id: string
|
||||
) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(
|
||||
`${WEBUI_API_BASE_URL}/channels/${channel_id}/messages/${message_id}/data`,
|
||||
{
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
authorization: `Bearer ${token}`
|
||||
}
|
||||
}
|
||||
)
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
return res.json();
|
||||
})
|
||||
.then((json) => {
|
||||
return json;
|
||||
})
|
||||
.catch((err) => {
|
||||
error = err.detail;
|
||||
console.error(err);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
type MessageForm = {
|
||||
temp_id?: string;
|
||||
reply_to_id?: string;
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
{#each messageList as message, messageIdx (id ? `${id}-${message.id}` : message.id)}
|
||||
<Message
|
||||
{message}
|
||||
{channel}
|
||||
{thread}
|
||||
replyToMessage={replyToMessage?.id === message.id}
|
||||
disabled={!channel?.write_access || message?.temp_id}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import { settings, user, shortCodesToEmojis } from '$lib/stores';
|
||||
import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants';
|
||||
import { getMessageData } from '$lib/apis/channels';
|
||||
|
||||
import Markdown from '$lib/components/chat/Messages/Markdown.svelte';
|
||||
import ProfileImage from '$lib/components/chat/Messages/ProfileImage.svelte';
|
||||
@@ -42,6 +43,8 @@
|
||||
export let className = '';
|
||||
|
||||
export let message;
|
||||
export let channel;
|
||||
|
||||
export let showUserProfile = true;
|
||||
export let thread = false;
|
||||
|
||||
@@ -61,6 +64,21 @@
|
||||
let edit = false;
|
||||
let editedContent = null;
|
||||
let showDeleteConfirmDialog = false;
|
||||
|
||||
const loadMessageData = async () => {
|
||||
if (message && message?.data) {
|
||||
const res = await getMessageData(localStorage.token, channel?.id, message.id);
|
||||
if (res) {
|
||||
message.data = res;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onMount(async () => {
|
||||
if (message && message?.data) {
|
||||
await loadMessageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<ConfirmDialog
|
||||
@@ -314,7 +332,12 @@
|
||||
</Name>
|
||||
{/if}
|
||||
|
||||
{#if (message?.data?.files ?? []).length > 0}
|
||||
{#if message?.data === true}
|
||||
<!-- loading indicator -->
|
||||
<div class=" my-2">
|
||||
<Skeleton />
|
||||
</div>
|
||||
{:else if (message?.data?.files ?? []).length > 0}
|
||||
<div class="my-2.5 w-full flex overflow-x-auto gap-2 flex-wrap">
|
||||
{#each message?.data?.files as file}
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user