Skip to content

Commit e3021ea

Browse files
authored
Merge pull request #84 from iceljc/features/refine-chat-window
listen to message delete event
2 parents 9f0184d + faa3103 commit e3021ea

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

src/lib/common/Markdown.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
} else {
1515
displayText = markedText;
1616
}
17-
18-
console.log(displayText);
1917
}
2018
</script>
2119

src/lib/helpers/types.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,14 @@ IRichContent.prototype.text;
312312
* @property {number} sender_action - The sender action.
313313
*/
314314

315+
/**
316+
* Conversation message deleted
317+
*
318+
* @typedef {Object} ConversationMessageDeleteModel
319+
* @property {string} conversation_id - The conversation id.
320+
* @property {string} message_id - The message id.
321+
*/
322+
315323
/**
316324
* Invoked when a new conersation is created.
317325
* This callback type is called `requestCallback` and is displayed as a global symbol.
@@ -350,12 +358,18 @@ IRichContent.prototype.text;
350358
*/
351359

352360
/**
353-
* Conversation states
361+
* Conversation sender action
354362
*
355363
* @callback OnSenderActionGenerated
356364
* @param {ConversationSenderActionModel} data
357365
*/
358366

367+
/**
368+
* Conversation message deleted
369+
*
370+
* @callback OnConversationMessageDeleted
371+
* @param {ConversationMessageDeleteModel} data
372+
*/
359373

360374
// having to export an empty object here is annoying,
361375
// but required for vscode to pass on your types.

src/lib/services/signalr-service.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ export const signalr = {
3030
/** @type {import('$types').OnSenderActionGenerated} */
3131
onSenderActionGenerated: () => {},
3232

33+
/** @type {import('$types').OnConversationMessageDeleted} */
34+
onConversationMessageDeleted: () => {},
35+
3336
// start the connection
3437
/** @param {string} conversationId */
3538
async start(conversationId) {
@@ -103,6 +106,12 @@ export const signalr = {
103106
this.onSenderActionGenerated(data);
104107
}
105108
});
109+
110+
connection.on('OnMessageDeleted', (data) => {
111+
if (conversationId === data?.conversation_id) {
112+
this.onConversationMessageDeleted(data);
113+
}
114+
});
106115
},
107116

108117
// stop the connection

src/routes/chat/[agentId]/[conversationId]/chat-box.svelte

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import DialogModal from '$lib/common/DialogModal.svelte';
2222
import HeadTitle from '$lib/common/HeadTitle.svelte';
2323
import LoadingDots from '$lib/common/LoadingDots.svelte';
24+
import StateModal from '$lib/common/StateModal.svelte';
2425
import { utcToLocal } from '$lib/helpers/datetime';
2526
import { replaceNewLine } from '$lib/helpers/http';
2627
import { SenderAction, UserRole } from '$lib/helpers/enums';
@@ -33,7 +34,7 @@
3334
import Swal from 'sweetalert2/dist/sweetalert2.js';
3435
import "sweetalert2/src/sweetalert2.scss";
3536
import moment from 'moment';
36-
import StateModal from '$lib/common/StateModal.svelte';
37+
3738
3839
const options = {
3940
scrollbars: {
@@ -107,6 +108,7 @@
107108
signalr.onConversationContentLogGenerated = onConversationContentLogGenerated;
108109
signalr.onConversationStateLogGenerated = onConversationStateLogGenerated;
109110
signalr.onSenderActionGenerated = onSenderActionGenerated;
111+
signalr.onConversationMessageDeleted = onConversationMessageDeleted;
110112
await signalr.start(params.conversationId);
111113
112114
const scrollElement = document.querySelector('.chat-scrollbar');
@@ -257,7 +259,7 @@
257259
stateLogs = stateLogs.map(x => { return { ...x }; });
258260
}
259261
260-
/** @param {import('$types').ConversationSenderActionModel} data */
262+
/** @param {import('$types').ConversationSenderActionModel} data */
261263
function onSenderActionGenerated(data) {
262264
if (data?.sender_action == SenderAction.TypingOn) {
263265
isThinking = true;
@@ -266,13 +268,16 @@
266268
}
267269
}
268270
271+
/** @param {import('$types').ConversationMessageDeleteModel} data */
272+
function onConversationMessageDeleted(data) {
273+
if (!!!data?.message_id) return;
274+
truncateDialogs(data.message_id);
275+
}
276+
269277
async function newConversationHandler() {
270278
const conversation = await newConversation(params.agentId);
271279
conversationStore.set(conversation);
272-
let url = `chat/${params.agentId}/${conversation.id}`;
273-
if (isLite) {
274-
url = `${url}?isLite=true`;
275-
}
280+
const url = `chat/${params.agentId}/${conversation.id}`;
276281
window.location.href = url;
277282
}
278283
@@ -422,11 +427,11 @@
422427
function toggleUserAddStateModal() {
423428
isOpenUserAddStateModal = !isOpenUserAddStateModal;
424429
if (isOpenUserAddStateModal) {
425-
loadAddStates();
430+
loadUserAddStates();
426431
}
427432
}
428433
429-
function loadAddStates() {
434+
function loadUserAddStates() {
430435
const conversationUserStates = conversationUserStateStore.get();
431436
if (!!conversationUserStates && conversationUserStates.conversationId == params.conversationId && !!conversationUserStates.states) {
432437
userAddStates = [...conversationUserStates.states];
@@ -446,7 +451,7 @@
446451
toggleUserAddStateModal();
447452
}
448453
449-
function clearAddedStates() {
454+
function clearUserAddStates() {
450455
// @ts-ignore
451456
Swal.fire({
452457
title: 'Are you sure?',
@@ -459,6 +464,7 @@
459464
// @ts-ignore
460465
}).then(async (result) => {
461466
if (result.value) {
467+
userAddStates = [];
462468
conversationUserStateStore.reset();
463469
}
464470
});
@@ -503,8 +509,6 @@
503509
504510
/** @param {string} messageId */
505511
async function handleDeleteMessage(messageId) {
506-
const isDeleted = truncateDialogs(messageId);
507-
if (!isDeleted) return;
508512
await deleteConversationMessage(params.conversationId, messageId);
509513
}
510514
@@ -532,9 +536,6 @@
532536
}
533537
534538
async function confirmEditMsg() {
535-
const isDeleted = truncateDialogs(truncateMsgId);
536-
if (!isDeleted) return;
537-
538539
isSendingMsg = true;
539540
isOpenEditMsgModal = false;
540541
renewUserSentMessages(editText);
@@ -642,6 +643,7 @@
642643
}
643644
</script>
644645
646+
645647
<svelte:window on:resize={() => resizeChatWindow()}/>
646648
647649
<DialogModal
@@ -721,7 +723,7 @@
721723
{#if !isOpenUserAddStateModal}
722724
<DropdownItem on:click={() => toggleUserAddStateModal()}>Add States</DropdownItem>
723725
{/if}
724-
<DropdownItem on:click={() => clearAddedStates()}>Clear States</DropdownItem>
726+
<DropdownItem on:click={() => clearUserAddStates()}>Clear States</DropdownItem>
725727
</DropdownMenu>
726728
</Dropdown>
727729
</li>

0 commit comments

Comments
 (0)