forked from Mirrors/gomuks
web/timeline: open user panel when clicking on avatar
This commit is contained in:
parent
321b53a98a
commit
9b65140302
2 changed files with 11 additions and 3 deletions
|
@ -76,6 +76,8 @@ class ContextFields implements MainScreenContextFields {
|
||||||
const type = evt.currentTarget.getAttribute("data-target-panel")
|
const type = evt.currentTarget.getAttribute("data-target-panel")
|
||||||
if (type === "pinned-messages" || type === "members") {
|
if (type === "pinned-messages" || type === "members") {
|
||||||
this.setRightPanel({ type })
|
this.setRightPanel({ type })
|
||||||
|
} else if (type === "user") {
|
||||||
|
this.setRightPanel({ type, userID: evt.currentTarget.getAttribute("data-target-user")! })
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Invalid right panel type ${type}`)
|
throw new Error(`Invalid right panel type ${type}`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import { useRoomState } from "@/api/statestore"
|
||||||
import { MemDBEvent, MemberEventContent, UnreadType } from "@/api/types"
|
import { MemDBEvent, MemberEventContent, UnreadType } from "@/api/types"
|
||||||
import { isEventID } from "@/util/validation.ts"
|
import { isEventID } from "@/util/validation.ts"
|
||||||
import ClientContext from "../ClientContext.ts"
|
import ClientContext from "../ClientContext.ts"
|
||||||
import { LightboxContext } from "../modal/Lightbox.tsx"
|
import MainScreenContext from "../MainScreenContext.ts"
|
||||||
import { useRoomContext } from "../roomview/roomcontext.ts"
|
import { useRoomContext } from "../roomview/roomcontext.ts"
|
||||||
import { ReplyIDBody } from "./ReplyBody.tsx"
|
import { ReplyIDBody } from "./ReplyBody.tsx"
|
||||||
import { ContentErrorBoundary, HiddenEvent, getBodyType, isSmallEvent } from "./content"
|
import { ContentErrorBoundary, HiddenEvent, getBodyType, isSmallEvent } from "./content"
|
||||||
|
@ -71,6 +71,7 @@ const EventSendStatus = ({ evt }: { evt: MemDBEvent }) => {
|
||||||
const TimelineEvent = ({ evt, prevEvt, disableMenu }: TimelineEventProps) => {
|
const TimelineEvent = ({ evt, prevEvt, disableMenu }: TimelineEventProps) => {
|
||||||
const roomCtx = useRoomContext()
|
const roomCtx = useRoomContext()
|
||||||
const client = use(ClientContext)!
|
const client = use(ClientContext)!
|
||||||
|
const mainScreen = use(MainScreenContext)
|
||||||
const [forceContextMenuOpen, setForceContextMenuOpen] = useState(false)
|
const [forceContextMenuOpen, setForceContextMenuOpen] = useState(false)
|
||||||
const memberEvt = useRoomState(roomCtx.store, "m.room.member", evt.sender)
|
const memberEvt = useRoomState(roomCtx.store, "m.room.member", evt.sender)
|
||||||
const memberEvtContent = memberEvt?.content as MemberEventContent | undefined
|
const memberEvtContent = memberEvt?.content as MemberEventContent | undefined
|
||||||
|
@ -104,12 +105,17 @@ const TimelineEvent = ({ evt, prevEvt, disableMenu }: TimelineEventProps) => {
|
||||||
{!disableMenu && <div className={`context-menu-container ${forceContextMenuOpen ? "force-open" : ""}`}>
|
{!disableMenu && <div className={`context-menu-container ${forceContextMenuOpen ? "force-open" : ""}`}>
|
||||||
<EventMenu evt={evt} setForceOpen={setForceContextMenuOpen}/>
|
<EventMenu evt={evt} setForceOpen={setForceContextMenuOpen}/>
|
||||||
</div>}
|
</div>}
|
||||||
{renderAvatar && <div className="sender-avatar" title={evt.sender}>
|
{renderAvatar && <div
|
||||||
|
className="sender-avatar"
|
||||||
|
title={evt.sender}
|
||||||
|
data-target-panel="user"
|
||||||
|
data-target-user={evt.sender}
|
||||||
|
onClick={mainScreen.clickRightPanelOpener}
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
className={`${smallAvatar ? "small" : ""} avatar`}
|
className={`${smallAvatar ? "small" : ""} avatar`}
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
src={getAvatarURL(evt.sender, memberEvtContent)}
|
src={getAvatarURL(evt.sender, memberEvtContent)}
|
||||||
onClick={use(LightboxContext)!}
|
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</div>}
|
</div>}
|
||||||
|
|
Loading…
Add table
Reference in a new issue