Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 64 lines 1.9 kB view raw
1import { XMarkIcon } from "@heroicons/react/24/outline"; 2import { isRepost } from "@hey/helpers/postHelpers"; 3import type { 4 AnyPostFragment, 5 PostGroupInfoFragment, 6 TimelineItemFragment 7} from "@hey/indexer"; 8import { memo } from "react"; 9import PostMenu from "@/components/Post/Actions/Menu"; 10import stopEventPropagation from "@/helpers/stopEventPropagation"; 11import { usePostStore } from "@/store/non-persisted/post/usePostStore"; 12import PostAccount from "./PostAccount"; 13 14interface PostHeaderProps { 15 timelineItem?: TimelineItemFragment; 16 isNew?: boolean; 17 post: AnyPostFragment; 18 quoted?: boolean; 19} 20 21const PostHeader = ({ 22 timelineItem, 23 isNew = false, 24 post, 25 quoted = false 26}: PostHeaderProps) => { 27 const { setQuotedPost } = usePostStore(); 28 29 const targetPost = isRepost(post) ? post?.repostOf : post; 30 const rootPost = timelineItem ? timelineItem?.primary : targetPost; 31 const account = timelineItem ? rootPost.author : targetPost.author; 32 const timestamp = timelineItem ? rootPost.timestamp : targetPost.timestamp; 33 34 return ( 35 <div 36 className="flex w-full items-start justify-between" 37 onClick={stopEventPropagation} 38 > 39 <PostAccount 40 account={account} 41 group={targetPost.feed?.group as PostGroupInfoFragment} 42 post={targetPost} 43 timestamp={timestamp} 44 /> 45 {!post.isDeleted && !quoted ? ( 46 <PostMenu post={targetPost} /> 47 ) : ( 48 <div className="size-[30px]" /> 49 )} 50 {quoted && isNew ? ( 51 <button 52 aria-label="Remove Quote" 53 className="rounded-full border border-gray-200 p-1.5 hover:bg-gray-300/20 dark:border-gray-700" 54 onClick={() => setQuotedPost()} 55 type="reset" 56 > 57 <XMarkIcon className="size-4 text-gray-500 dark:text-gray-200" /> 58 </button> 59 ) : null} 60 </div> 61 ); 62}; 63 64export default memo(PostHeader);