web/timeline: disable event menu options until event is sent

This commit is contained in:
Tulir Asokan 2024-11-05 10:50:54 +01:00
parent 9e5f34aaca
commit 616c508ae3
2 changed files with 16 additions and 7 deletions

View file

@ -88,6 +88,8 @@ const EventExtraMenu = ({ evt, room, style }: EventExtraMenuProps) => {
.catch(err => window.alert(`Failed to unpin message: ${err}`)) .catch(err => window.alert(`Failed to unpin message: ${err}`))
}, [closeModal, client, room, evt.event_id]) }, [closeModal, client, room, evt.event_id])
const isPending = evt.event_id.startsWith("~")
const pendingTitle = isPending ? "Can't action messages that haven't been sent yet" : undefined
const plEvent = useRoomState(room, "m.room.power_levels", "") const plEvent = useRoomState(room, "m.room.power_levels", "")
// We get pins from getPinnedEvents, but use the hook anyway to subscribe to changes // We get pins from getPinnedEvents, but use the hook anyway to subscribe to changes
useRoomState(room, "m.room.pinned_events", "") useRoomState(room, "m.room.pinned_events", "")
@ -103,9 +105,14 @@ const EventExtraMenu = ({ evt, room, style }: EventExtraMenuProps) => {
<button onClick={onClickViewSource}><ViewSourceIcon/>View source</button> <button onClick={onClickViewSource}><ViewSourceIcon/>View source</button>
{ownPL >= pinPL && (pins.includes(evt.event_id) {ownPL >= pinPL && (pins.includes(evt.event_id)
? <button onClick={onClickUnpin}><UnpinIcon/>Unpin message</button> ? <button onClick={onClickUnpin}><UnpinIcon/>Unpin message</button>
: <button onClick={onClickPin}><PinIcon/>Pin message</button>)} : <button onClick={onClickPin} title={pendingTitle} disabled={isPending}><PinIcon/>Pin message</button>)}
<button onClick={onClickReport}><ReportIcon/>Report</button> <button onClick={onClickReport} disabled={isPending} title={pendingTitle}><ReportIcon/>Report</button>
{canRedact && <button onClick={onClickRedact} className="redact-button"><DeleteIcon/>Remove</button>} {canRedact && <button
onClick={onClickRedact}
disabled={isPending}
title={pendingTitle}
className="redact-button"
><DeleteIcon/>Remove</button>}
</div> </div>
} }

View file

@ -84,15 +84,17 @@ const EventMenu = ({ evt, setForceOpen }: EventHoverMenuProps) => {
}) })
}, [evt, roomCtx, setForceOpen, openModal]) }, [evt, roomCtx, setForceOpen, openModal])
const isEditing = useEventAsState(roomCtx.isEditing) const isEditing = useEventAsState(roomCtx.isEditing)
const isPending = evt.event_id.startsWith("~")
const pendingTitle = isPending ? "Can't action messages that haven't been sent yet" : undefined
return <div className="event-hover-menu" ref={contextMenuRef}> return <div className="event-hover-menu" ref={contextMenuRef}>
<button onClick={onClickReact}><ReactIcon/></button> <button disabled={isPending} title={pendingTitle} onClick={onClickReact}><ReactIcon/></button>
<button <button
disabled={isEditing} disabled={isEditing || isPending}
title={isEditing ? "Can't reply to messages while editing a message" : undefined} title={isEditing ? "Can't reply to messages while editing a message" : pendingTitle}
onClick={onClickReply} onClick={onClickReply}
><ReplyIcon/></button> ><ReplyIcon/></button>
{evt.sender === userID && evt.type === "m.room.message" && evt.relation_type !== "m.replace" && !evt.redacted_by {evt.sender === userID && evt.type === "m.room.message" && evt.relation_type !== "m.replace" && !evt.redacted_by
&& <button onClick={onClickEdit}><EditIcon/></button>} && <button onClick={onClickEdit} disabled={isPending} title={pendingTitle}><EditIcon/></button>}
<button onClick={onClickMore}><MoreIcon/></button> <button onClick={onClickMore}><MoreIcon/></button>
</div> </div>
} }