diff --git a/ui/src/message/Message.tsx b/ui/src/message/Message.tsx index 91e8a44..19cfe92 100644 --- a/ui/src/message/Message.tsx +++ b/ui/src/message/Message.tsx @@ -83,6 +83,8 @@ interface IProps { priority: number; fDelete: VoidFunction; extras?: IMessageExtras; + expanded: boolean; + onExpand: (expand: boolean) => void; } const priorityColor = (priority: number) => { @@ -95,16 +97,28 @@ const priorityColor = (priority: number) => { } }; -const Message = ({fDelete, title, date, image, priority, content, extras}: IProps) => { +const Message = ({ + fDelete, + title, + date, + image, + priority, + content, + extras, + onExpand, + expanded: initialExpanded, +}: IProps) => { const [previewRef, setPreviewRef] = React.useState(null); const {classes} = useStyles(); - const [expanded, setExpanded] = React.useState(false); + const [expanded, setExpanded] = React.useState(initialExpanded); const [isOverflowing, setOverflowing] = React.useState(false); React.useEffect(() => { setOverflowing(!!previewRef && previewRef.scrollHeight > previewRef.clientHeight); }, [previewRef]); + React.useEffect(() => void onExpand(expanded), [expanded]); + const togglePreviewHeight = () => setExpanded((b) => !b); const renderContent = () => { diff --git a/ui/src/message/Messages.tsx b/ui/src/message/Messages.tsx index 0c7e4fc..1c91ff4 100644 --- a/ui/src/message/Messages.tsx +++ b/ui/src/message/Messages.tsx @@ -23,6 +23,7 @@ const Messages = observer(() => { const hasMore = messagesStore.canLoadMore(appId); const name = appStore.getName(appId); const hasMessages = messages.length !== 0; + const expandedState = React.useRef>({}); const deleteMessage = (message: IMessage) => () => messagesStore.removeSingle(message); @@ -36,8 +37,10 @@ const Messages = observer(() => { (expandedState.current[message.id] = expanded)} title={message.title} date={message.date} + expanded={expandedState.current[message.id] ?? false} content={message.message} image={message.image} extras={message.extras}