|
278 | 278 | async function refresh() { |
279 | 279 | // trigger UI render |
280 | 280 | dialogs = dialogs?.map(item => { return { ...item }; }) || []; |
| 281 | + lastBotMsg = null; |
| 282 | + await tick(); |
281 | 283 | lastBotMsg = findLastBotMessage(dialogs); |
282 | 284 | lastMsg = dialogs.slice(-1)[0]; |
283 | 285 | assignMessageDisclaimer(dialogs) |
|
415 | 417 | /** @param {import('$conversationTypes').ConversationMessageDeleteModel} data */ |
416 | 418 | function onConversationMessageDeleted(data) { |
417 | 419 | if (!!!data?.message_id) return; |
| 420 | +
|
418 | 421 | truncateDialogs(data.message_id); |
419 | 422 | } |
420 | 423 |
|
|
863 | 866 | } |
864 | 867 |
|
865 | 868 | /** @param {string} messageId */ |
866 | | - function truncateDialogs(messageId) { |
| 869 | + async function truncateDialogs(messageId) { |
867 | 870 | const foundIdx = dialogs.findIndex(x => x.message_id === messageId); |
868 | 871 | if (foundIdx < 0) return false; |
869 | 872 | dialogs = dialogs.filter((x, idx) => idx < foundIdx); |
|
1137 | 1140 | <div class="chat-conversation p-3"> |
1138 | 1141 | <ul class="list-unstyled mb-0"> |
1139 | 1142 | {#each Object.entries(groupedDialogs) as [createDate, dialogGroup]} |
1140 | | - <li> |
1141 | | - <div class="chat-day-title"> |
1142 | | - <span class="title">{createDate}</span> |
1143 | | - </div> |
1144 | | - </li> |
1145 | | - {#each dialogGroup as message} |
1146 | | - <li id={'test_k' + message.message_id} class:right={USER_SENDERS.includes(message.sender?.role)}> |
1147 | | - <div class="conv-msg-container"> |
1148 | | - {#if USER_SENDERS.includes(message.sender?.role)} |
1149 | | - <div class="msg-container"> |
1150 | | - <div |
1151 | | - tabindex="0" |
1152 | | - aria-label="user-msg-to-log" |
1153 | | - role="link" |
1154 | | - on:keydown={() => {}} |
1155 | | - on:click={() => directToLog(message.message_id)} |
1156 | | - > |
1157 | | - <div class="ctext-wrap user-msg" |
1158 | | - class:clickable={!isLite && (isLoadPersistLog || isLoadInstantLog)} |
1159 | | - id={`user-msg-${message.message_id}`} |
1160 | | - > |
1161 | | - <div class="text-start fw-bold">{@html replaceNewLine(message.text)}</div> |
| 1143 | + <li> |
| 1144 | + <div class="chat-day-title"> |
| 1145 | + <span class="title">{createDate}</span> |
| 1146 | + </div> |
| 1147 | + </li> |
| 1148 | + {#each dialogGroup as message} |
| 1149 | + <li id={'test_k' + message.message_id} class:right={USER_SENDERS.includes(message.sender?.role)}> |
| 1150 | + <div class="conv-msg-container"> |
| 1151 | + {#if USER_SENDERS.includes(message.sender?.role)} |
| 1152 | + <div class="msg-container"> |
| 1153 | + <div |
| 1154 | + tabindex="0" |
| 1155 | + aria-label="user-msg-to-log" |
| 1156 | + role="link" |
| 1157 | + on:keydown={() => {}} |
| 1158 | + on:click={() => directToLog(message.message_id)} |
| 1159 | + > |
| 1160 | + <div class="ctext-wrap user-msg" |
| 1161 | + class:clickable={!isLite && (isLoadPersistLog || isLoadInstantLog)} |
| 1162 | + id={`user-msg-${message.message_id}`} |
| 1163 | + > |
| 1164 | + <div class="text-start fw-bold">{@html replaceNewLine(message.text)}</div> |
| 1165 | + </div> |
| 1166 | + <p class="chat-time mb-0 float-end"> |
| 1167 | + <i class="bx bx-time-five align-middle me-1" /> |
| 1168 | + {utcToLocal(message.created_at, 'hh:mm A')} |
| 1169 | + </p> |
| 1170 | + </div> |
| 1171 | + {#if !!message.post_action_disclaimer} |
| 1172 | + <RcDisclaimer content={message.post_action_disclaimer} /> |
| 1173 | + {/if} |
| 1174 | + {#if !!message.is_chat_message || !!message.has_message_files} |
| 1175 | + <MessageFileGallery |
| 1176 | + messageId={message?.message_id} |
| 1177 | + galleryStyles={'justify-content: flex-end;'} |
| 1178 | + fetchFiles={() => getConversationFiles(params.conversationId, message.message_id, FileSourceType.User)} |
| 1179 | + /> |
| 1180 | + {/if} |
1162 | 1181 | </div> |
1163 | | - <p class="chat-time mb-0 float-end"> |
1164 | | - <i class="bx bx-time-five align-middle me-1" /> |
1165 | | - {utcToLocal(message.created_at, 'hh:mm A')} |
1166 | | - </p> |
| 1182 | + {#if !isLite} |
| 1183 | + <Dropdown> |
| 1184 | + <DropdownToggle class="dropdown-toggle" tag="span" disabled={isSendingMsg || isThinking || disableAction}> |
| 1185 | + <i class="bx bx-dots-vertical-rounded" /> |
| 1186 | + </DropdownToggle> |
| 1187 | + <DropdownMenu class="dropdown-menu-end"> |
| 1188 | + <DropdownItem on:click={(e) => editMessage(e, message)}>Edit</DropdownItem> |
| 1189 | + <DropdownItem on:click={(e) => resendMessage(e, message)}>Resend</DropdownItem> |
| 1190 | + <DropdownItem on:click={(e) => deleteMessage(e, message.message_id)}>Delete</DropdownItem> |
| 1191 | + </DropdownMenu> |
| 1192 | + </Dropdown> |
| 1193 | + {/if} |
| 1194 | + {:else} |
| 1195 | + <div class="cicon-wrap align-content-end"> |
| 1196 | + {#if message.sender.role == UserRole.Client} |
| 1197 | + <img src="images/users/user-dummy.jpg" class="rounded-circle avatar-sm" style="margin-bottom: -15px;" alt="avatar"> |
| 1198 | + {:else} |
| 1199 | + <img src={PUBLIC_LIVECHAT_ENTRY_ICON} class="rounded-circle avatar-sm" style="margin-bottom: -15px;" alt="avatar"> |
| 1200 | + {/if} |
| 1201 | + </div> |
| 1202 | + <div class="msg-container"> |
| 1203 | + <RcMessage message={message} /> |
| 1204 | + {#if message?.message_id === lastBotMsg?.message_id} |
| 1205 | + <AudioSpeaker |
| 1206 | + id={message?.message_id} |
| 1207 | + text={message?.rich_content?.message?.text || message?.text} |
| 1208 | + /> |
| 1209 | + {/if} |
| 1210 | + {#if !!message.is_chat_message || !!message.has_message_files} |
| 1211 | + <MessageFileGallery |
| 1212 | + messageId={message?.message_id} |
| 1213 | + galleryStyles={'justify-content: flex-start;'} |
| 1214 | + fetchFiles={() => getConversationFiles(params.conversationId, message.message_id, FileSourceType.Bot)} |
| 1215 | + /> |
| 1216 | + {/if} |
| 1217 | + </div> |
| 1218 | + {/if} |
1167 | 1219 | </div> |
1168 | | - {#if !!message.post_action_disclaimer} |
1169 | | - <RcDisclaimer content={message.post_action_disclaimer} /> |
1170 | | - {/if} |
1171 | | - {#if !!message.is_chat_message || !!message.has_message_files} |
1172 | | - <MessageFileGallery |
1173 | | - messageId={message?.message_id} |
1174 | | - galleryStyles={'justify-content: flex-end;'} |
1175 | | - fetchFiles={() => getConversationFiles(params.conversationId, message.message_id, FileSourceType.User)} |
1176 | | - /> |
1177 | | - {/if} |
1178 | | - </div> |
1179 | | - {#if !isLite} |
1180 | | - <Dropdown> |
1181 | | - <DropdownToggle class="dropdown-toggle" tag="span" disabled={isSendingMsg || isThinking || disableAction}> |
1182 | | - <i class="bx bx-dots-vertical-rounded" /> |
1183 | | - </DropdownToggle> |
1184 | | - <DropdownMenu class="dropdown-menu-end"> |
1185 | | - <DropdownItem on:click={(e) => editMessage(e, message)}>Edit</DropdownItem> |
1186 | | - <DropdownItem on:click={(e) => resendMessage(e, message)}>Resend</DropdownItem> |
1187 | | - <DropdownItem on:click={(e) => deleteMessage(e, message.message_id)}>Delete</DropdownItem> |
1188 | | - </DropdownMenu> |
1189 | | - </Dropdown> |
1190 | | - {/if} |
1191 | | - {:else} |
1192 | | - <div class="cicon-wrap align-content-end"> |
1193 | | - {#if message.sender.role == UserRole.Client} |
1194 | | - <img src="images/users/user-dummy.jpg" class="rounded-circle avatar-sm" style="margin-bottom: -15px;" alt="avatar"> |
1195 | | - {:else} |
1196 | | - <img src={PUBLIC_LIVECHAT_ENTRY_ICON} class="rounded-circle avatar-sm" style="margin-bottom: -15px;" alt="avatar"> |
1197 | | - {/if} |
1198 | | - </div> |
1199 | | - <div class="msg-container"> |
1200 | | - <RcMessage message={message} /> |
1201 | | - {#if message?.message_id === lastBotMsg?.message_id} |
1202 | | - <AudioSpeaker |
1203 | | - id={message?.message_id} |
1204 | | - text={message?.rich_content?.message?.text || message?.text} |
1205 | | - /> |
1206 | | - {/if} |
1207 | | - {#if !!message.is_chat_message || !!message.has_message_files} |
1208 | | - <MessageFileGallery |
1209 | | - messageId={message?.message_id} |
1210 | | - galleryStyles={'justify-content: flex-start;'} |
1211 | | - fetchFiles={() => getConversationFiles(params.conversationId, message.message_id, FileSourceType.Bot)} |
1212 | | - /> |
1213 | | - {/if} |
1214 | | - </div> |
1215 | | - {/if} |
1216 | | - </div> |
1217 | | - </li> |
1218 | | - {/each} |
| 1220 | + </li> |
| 1221 | + {/each} |
1219 | 1222 | {/each} |
1220 | 1223 |
|
1221 | 1224 | {#if isThinking} |
|
0 commit comments