fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)
fix ui flickering and truncatable prompt expansion bug Co-authored-by: shatfield4 <seanhatfield5@gmail.com> Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
This commit is contained in:
parent
38206a14b3
commit
f4cb1ead4e
@ -1,4 +1,4 @@
|
|||||||
import React, { memo, useEffect, useRef, useState } from "react";
|
import React, { memo, useLayoutEffect, useRef, useState } from "react";
|
||||||
import { Info, Warning } from "@phosphor-icons/react";
|
import { Info, Warning } from "@phosphor-icons/react";
|
||||||
import Actions from "./Actions";
|
import Actions from "./Actions";
|
||||||
import renderMarkdown from "@/utils/chat/markdown";
|
import renderMarkdown from "@/utils/chat/markdown";
|
||||||
@ -22,7 +22,7 @@ import HistoricalOutputs from "./HistoricalOutputs";
|
|||||||
import { openImageLightbox } from "@/components/ImageLightbox";
|
import { openImageLightbox } from "@/components/ImageLightbox";
|
||||||
|
|
||||||
const HistoricalMessage = ({
|
const HistoricalMessage = ({
|
||||||
uuid = v4(),
|
uuid: uuidProp,
|
||||||
message,
|
message,
|
||||||
role,
|
role,
|
||||||
workspace,
|
workspace,
|
||||||
@ -38,6 +38,10 @@ const HistoricalMessage = ({
|
|||||||
metrics = {},
|
metrics = {},
|
||||||
outputs = [],
|
outputs = [],
|
||||||
}) => {
|
}) => {
|
||||||
|
// Freeze uuid on first render. User messages arrive without a uuid and this value
|
||||||
|
// is used as the wrapper div's `key` — a default param fallback would regenerate
|
||||||
|
// on every render and remount the subtree, wiping TruncatableContent state.
|
||||||
|
const [uuid] = useState(() => uuidProp ?? v4());
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { isEditing } = useEditMessage({ chatId, role });
|
const { isEditing } = useEditMessage({ chatId, role });
|
||||||
const { isDeleted, completeDelete, onEndAnimation } = useWatchDeleteMessage({
|
const { isDeleted, completeDelete, onEndAnimation } = useWatchDeleteMessage({
|
||||||
@ -238,7 +242,9 @@ function TruncatableContent({ children }) {
|
|||||||
const [isOverflowing, setIsOverflowing] = useState(false);
|
const [isOverflowing, setIsOverflowing] = useState(false);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
// useLayoutEffect (not useEffect) so collapse applies before paint — avoids a
|
||||||
|
// one-frame flash of uncollapsed content on mount.
|
||||||
|
useLayoutEffect(() => {
|
||||||
if (contentRef.current) {
|
if (contentRef.current) {
|
||||||
setIsOverflowing(contentRef.current.scrollHeight > 250);
|
setIsOverflowing(contentRef.current.scrollHeight > 250);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user