From 9d378d4f35b860ab0c94abde64a892236d233524 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sun, 7 Jul 2024 20:50:46 +0800 Subject: [PATCH] feat: auto scroll on send new message --- src/renderer/src/assets/styles/markdown.scss | 2 +- src/renderer/src/pages/home/components/Inputbar.tsx | 2 +- src/renderer/src/pages/home/components/Message.tsx | 1 + src/renderer/src/pages/home/components/Messages.tsx | 13 ++++++++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/renderer/src/assets/styles/markdown.scss b/src/renderer/src/assets/styles/markdown.scss index bbf49528..b834410d 100644 --- a/src/renderer/src/assets/styles/markdown.scss +++ b/src/renderer/src/assets/styles/markdown.scss @@ -21,7 +21,7 @@ h4, h5, h6 { - margin: 1.5em 0 0.5em 0; + margin: 0 0 1em 0; font-weight: 800; } diff --git a/src/renderer/src/pages/home/components/Inputbar.tsx b/src/renderer/src/pages/home/components/Inputbar.tsx index 0e563f07..707c8646 100644 --- a/src/renderer/src/pages/home/components/Inputbar.tsx +++ b/src/renderer/src/pages/home/components/Inputbar.tsx @@ -24,7 +24,7 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { const { setShowRightSidebar } = useShowRightSidebar() const { addTopic } = useAssistant(assistant.id) const { sendMessageShortcut } = useSettings() - const inputRef = useRef(null) + const inputRef = useRef() const sendMessage = () => { if (isEmpty(text.trim())) { diff --git a/src/renderer/src/pages/home/components/Message.tsx b/src/renderer/src/pages/home/components/Message.tsx index 84864b02..9da5ace1 100644 --- a/src/renderer/src/pages/home/components/Message.tsx +++ b/src/renderer/src/pages/home/components/Message.tsx @@ -23,6 +23,7 @@ const MessageItem: FC = ({ message, showMenu, onDeleteMessage }) => { const onDelete = async () => { const confirmed = await window.modal.confirm({ + icon: null, title: 'Delete Message', content: 'Are you sure you want to delete this message?', okText: 'Delete', diff --git a/src/renderer/src/pages/home/components/Messages.tsx b/src/renderer/src/pages/home/components/Messages.tsx index dceee778..604aabe5 100644 --- a/src/renderer/src/pages/home/components/Messages.tsx +++ b/src/renderer/src/pages/home/components/Messages.tsx @@ -1,7 +1,7 @@ import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { Assistant, Message, Topic } from '@renderer/types' import localforage from 'localforage' -import { FC, useCallback, useEffect, useState } from 'react' +import { FC, useCallback, useEffect, useRef, useState } from 'react' import styled from 'styled-components' import MessageItem from './Message' import { reverse } from 'lodash' @@ -23,6 +23,7 @@ const Messages: FC = ({ assistant, topic }) => { const [lastMessage, setLastMessage] = useState(null) const { updateTopic } = useAssistant(assistant.id) const provider = useProviderByAssistant(assistant) + const messagesRef = useRef(null) const assistantDefaultMessage: Message = { id: 'assistant', @@ -90,10 +91,14 @@ const Messages: FC = ({ assistant, topic }) => { }) }, [topic.id]) - useEffect(() => hljs.highlightAll()) + useEffect(() => hljs.highlightAll(), [messages, lastMessage]) + + useEffect(() => { + messagesRef.current?.scrollIntoView({ behavior: 'smooth' }) + }, [messages]) return ( - + {lastMessage && } {reverse([...messages]).map((message) => ( @@ -109,6 +114,8 @@ const Container = styled.div` overflow-y: scroll; flex-direction: column-reverse; max-height: calc(100vh - var(--input-bar-height) - var(--navbar-height)); + padding-top: 10px; + padding-bottom: 20px; &::-webkit-scrollbar { display: none; }