feat: auto scroll on send new message
This commit is contained in:
parent
20944e7cc4
commit
9d378d4f35
@ -21,7 +21,7 @@
|
|||||||
h4,
|
h4,
|
||||||
h5,
|
h5,
|
||||||
h6 {
|
h6 {
|
||||||
margin: 1.5em 0 0.5em 0;
|
margin: 0 0 1em 0;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@ const Inputbar: FC<Props> = ({ assistant, setActiveTopic }) => {
|
|||||||
const { setShowRightSidebar } = useShowRightSidebar()
|
const { setShowRightSidebar } = useShowRightSidebar()
|
||||||
const { addTopic } = useAssistant(assistant.id)
|
const { addTopic } = useAssistant(assistant.id)
|
||||||
const { sendMessageShortcut } = useSettings()
|
const { sendMessageShortcut } = useSettings()
|
||||||
const inputRef = useRef<TextAreaRef>(null)
|
const inputRef = useRef<TextAreaRef>()
|
||||||
|
|
||||||
const sendMessage = () => {
|
const sendMessage = () => {
|
||||||
if (isEmpty(text.trim())) {
|
if (isEmpty(text.trim())) {
|
||||||
|
|||||||
@ -23,6 +23,7 @@ const MessageItem: FC<Props> = ({ message, showMenu, onDeleteMessage }) => {
|
|||||||
|
|
||||||
const onDelete = async () => {
|
const onDelete = async () => {
|
||||||
const confirmed = await window.modal.confirm({
|
const confirmed = await window.modal.confirm({
|
||||||
|
icon: null,
|
||||||
title: 'Delete Message',
|
title: 'Delete Message',
|
||||||
content: 'Are you sure you want to delete this message?',
|
content: 'Are you sure you want to delete this message?',
|
||||||
okText: 'Delete',
|
okText: 'Delete',
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/event'
|
import { EVENT_NAMES, EventEmitter } from '@renderer/services/event'
|
||||||
import { Assistant, Message, Topic } from '@renderer/types'
|
import { Assistant, Message, Topic } from '@renderer/types'
|
||||||
import localforage from 'localforage'
|
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 styled from 'styled-components'
|
||||||
import MessageItem from './Message'
|
import MessageItem from './Message'
|
||||||
import { reverse } from 'lodash'
|
import { reverse } from 'lodash'
|
||||||
@ -23,6 +23,7 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
|
|||||||
const [lastMessage, setLastMessage] = useState<Message | null>(null)
|
const [lastMessage, setLastMessage] = useState<Message | null>(null)
|
||||||
const { updateTopic } = useAssistant(assistant.id)
|
const { updateTopic } = useAssistant(assistant.id)
|
||||||
const provider = useProviderByAssistant(assistant)
|
const provider = useProviderByAssistant(assistant)
|
||||||
|
const messagesRef = useRef<HTMLDivElement>(null)
|
||||||
|
|
||||||
const assistantDefaultMessage: Message = {
|
const assistantDefaultMessage: Message = {
|
||||||
id: 'assistant',
|
id: 'assistant',
|
||||||
@ -90,10 +91,14 @@ const Messages: FC<Props> = ({ assistant, topic }) => {
|
|||||||
})
|
})
|
||||||
}, [topic.id])
|
}, [topic.id])
|
||||||
|
|
||||||
useEffect(() => hljs.highlightAll())
|
useEffect(() => hljs.highlightAll(), [messages, lastMessage])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
messagesRef.current?.scrollIntoView({ behavior: 'smooth' })
|
||||||
|
}, [messages])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container id="messages">
|
<Container id="messages" ref={messagesRef}>
|
||||||
{lastMessage && <MessageItem message={lastMessage} />}
|
{lastMessage && <MessageItem message={lastMessage} />}
|
||||||
{reverse([...messages]).map((message) => (
|
{reverse([...messages]).map((message) => (
|
||||||
<MessageItem message={message} key={message.id} showMenu onDeleteMessage={onDeleteMessage} />
|
<MessageItem message={message} key={message.id} showMenu onDeleteMessage={onDeleteMessage} />
|
||||||
@ -109,6 +114,8 @@ const Container = styled.div`
|
|||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
max-height: calc(100vh - var(--input-bar-height) - var(--navbar-height));
|
max-height: calc(100vh - var(--input-bar-height) - var(--navbar-height));
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 20px;
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user