From a343382b60d009add2e0a9c166000eba379d1b83 Mon Sep 17 00:00:00 2001 From: zerosoul Date: Thu, 26 May 2022 11:13:54 +0800 Subject: [PATCH] feat: highlight pin message --- src/common/component/Message/index.js | 13 +++++++++---- src/common/component/Message/styled.js | 20 ++++++++++++++++++++ src/common/hook/usePinMessage.js | 7 +++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/common/component/Message/index.js b/src/common/component/Message/index.js index 9d3116ec..62523166 100644 --- a/src/common/component/Message/index.js +++ b/src/common/component/Message/index.js @@ -17,6 +17,7 @@ import Tooltip from "../Tooltip"; import ContextMenu from "./ContextMenu"; import useContextMenu from "../../hook/useContextMenu"; +import usePinMessage from "../../hook/usePinMessage"; dayjs.extend(isToday); dayjs.extend(isYesterday); function Message({ @@ -35,6 +36,7 @@ function Message({ const inviewRef = useInView(); const [edit, setEdit] = useState(false); const avatarRef = useRef(null); + const { getPinInfo } = usePinMessage(context == "channel" ? contextId : null); const { message = {}, reactionMessageData, contactsData } = useSelector( (store) => { return { @@ -83,7 +85,7 @@ function Message({ ? "Yesterday" : null; - console.log("render message"); + const pinInfo = getPinInfo(mid); // return null; return ( -
+
{currUser.name} .details { + position: relative; + &:before { + position: absolute; + left: 0; + top: -4px; + transform: translateY(-100%); + content: attr(data-pin-tip); + font-weight: 400; + font-size: 12px; + line-height: 18px; + color: #98a2b3; + } + } + } `; export default StyledMsg; diff --git a/src/common/hook/usePinMessage.js b/src/common/hook/usePinMessage.js index e1e88fc6..a86ddfa5 100644 --- a/src/common/hook/usePinMessage.js +++ b/src/common/hook/usePinMessage.js @@ -25,6 +25,12 @@ export default function usePinMessage(cid = null) { if (!mid || !cid) return; unpin({ mid, gid: +cid }); }; + const getPinInfo = (mid) => { + const pins = channel?.pinned_messages; + if (pins?.length == 0) return; + const pinned = pins.find((p) => p.mid == mid); + return pinned; + }; useEffect(() => { if (channel) { setPins(channel.pinned_messages); @@ -32,6 +38,7 @@ export default function usePinMessage(cid = null) { }, [channel]); return { + getPinInfo, channel, pins, canPin: loginUser.is_admin || channel?.owner == loginUser.uid,