Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 72 lines 2.5 kB view raw
1import { TRANSFORMS } from "@hey/data/constants"; 2import getAvatar from "@hey/helpers/getAvatar"; 3import type { GroupFragment } from "@hey/indexer"; 4import { useCallback, useState } from "react"; 5import { useNavigate } from "react-router"; 6import JoinLeaveButton from "@/components/Shared/Group/JoinLeaveButton"; 7import Markup from "@/components/Shared/Markup"; 8import { Button, H3, Image, LightBox } from "@/components/Shared/UI"; 9import getMentions from "@/helpers/getMentions"; 10import { useAccountStore } from "@/store/persisted/useAccountStore"; 11import MembersCount from "./MembersCount"; 12 13interface DetailsProps { 14 group: GroupFragment; 15} 16 17const Details = ({ group }: DetailsProps) => { 18 const navigate = useNavigate(); 19 const { currentAccount } = useAccountStore(); 20 const [showLightBox, setShowLightBox] = useState<boolean>(false); 21 22 const handleShowLightBox = useCallback(() => { 23 setShowLightBox(true); 24 }, []); 25 26 const handleCloseLightBox = useCallback(() => { 27 setShowLightBox(false); 28 }, []); 29 30 return ( 31 <div className="mb-4 space-y-3 px-5 md:px-0"> 32 <div className="flex items-start justify-between"> 33 <div className="-mt-24 sm:-mt-24 relative ml-5 size-32 sm:size-36"> 34 <Image 35 alt={group.address} 36 className="size-32 cursor-pointer rounded-xl bg-gray-200 ring-3 ring-gray-50 sm:size-36 dark:bg-gray-700 dark:ring-black" 37 height={128} 38 onClick={handleShowLightBox} 39 src={getAvatar(group, TRANSFORMS.AVATAR_BIG)} 40 width={128} 41 /> 42 <LightBox 43 images={[getAvatar(group, TRANSFORMS.EXPANDED_AVATAR)]} 44 onClose={handleCloseLightBox} 45 show={showLightBox} 46 /> 47 </div> 48 {currentAccount?.address === group.owner ? ( 49 <Button 50 onClick={() => navigate(`/g/${group.address}/settings`)} 51 outline 52 > 53 Edit Group 54 </Button> 55 ) : ( 56 <JoinLeaveButton group={group} /> 57 )} 58 </div> 59 <H3 className="truncate py-2">{group.metadata?.name}</H3> 60 {group.metadata?.description ? ( 61 <div className="markup linkify mr-0 break-words sm:mr-10"> 62 <Markup mentions={getMentions(group.metadata?.description)}> 63 {group.metadata?.description} 64 </Markup> 65 </div> 66 ) : null} 67 <MembersCount group={group} /> 68 </div> 69 ); 70}; 71 72export default Details;