Skip to content

Commit f04cb2d

Browse files
committed
fix: preserve expanded state
Previously, expanded messages where collapsed again when scrolling some messages further. The saved height in the virtual list wasn't changed. This caused the list to flicker when scrolling to the previously expanded message again.
1 parent 6215a2c commit f04cb2d

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

ui/src/message/Message.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ interface IProps {
8383
priority: number;
8484
fDelete: VoidFunction;
8585
extras?: IMessageExtras;
86+
expanded: boolean;
87+
onExpand: (expand: boolean) => void;
8688
}
8789

8890
const priorityColor = (priority: number) => {
@@ -95,16 +97,28 @@ const priorityColor = (priority: number) => {
9597
}
9698
};
9799

98-
const Message = ({fDelete, title, date, image, priority, content, extras}: IProps) => {
100+
const Message = ({
101+
fDelete,
102+
title,
103+
date,
104+
image,
105+
priority,
106+
content,
107+
extras,
108+
onExpand,
109+
expanded: initialExpanded,
110+
}: IProps) => {
99111
const [previewRef, setPreviewRef] = React.useState<HTMLDivElement | null>(null);
100112
const {classes} = useStyles();
101-
const [expanded, setExpanded] = React.useState(false);
113+
const [expanded, setExpanded] = React.useState(initialExpanded);
102114
const [isOverflowing, setOverflowing] = React.useState(false);
103115

104116
React.useEffect(() => {
105117
setOverflowing(!!previewRef && previewRef.scrollHeight > previewRef.clientHeight);
106118
}, [previewRef]);
107119

120+
React.useEffect(() => void onExpand(expanded), [expanded]);
121+
108122
const togglePreviewHeight = () => setExpanded((b) => !b);
109123

110124
const renderContent = () => {

ui/src/message/Messages.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const Messages = observer(() => {
2323
const hasMore = messagesStore.canLoadMore(appId);
2424
const name = appStore.getName(appId);
2525
const hasMessages = messages.length !== 0;
26+
const expandedState = React.useRef<Record<number, boolean>>({});
2627

2728
const deleteMessage = (message: IMessage) => () => messagesStore.removeSingle(message);
2829

@@ -36,8 +37,10 @@ const Messages = observer(() => {
3637
<Message
3738
key={index}
3839
fDelete={deleteMessage(message)}
40+
onExpand={(expanded) => (expandedState.current[message.id] = expanded)}
3941
title={message.title}
4042
date={message.date}
43+
expanded={expandedState.current[message.id] ?? false}
4144
content={message.message}
4245
image={message.image}
4346
extras={message.extras}

0 commit comments

Comments
 (0)