import { useSelector } from 'react-redux'; import { ConversationModel } from '../models/conversation'; import { PubKey } from '../session/types'; import { UserUtils } from '../session/utils'; import { StateType } from '../state/reducer'; export function useAvatarPath(convoId: string | undefined) { const convoProps = useConversationPropsById(convoId); return convoProps?.avatarPath || null; } export function useOurAvatarPath() { return useAvatarPath(UserUtils.getOurPubKeyStrFromCache()); } /** * * @returns convo.profileName || convo.name || convo.id or undefined if the convo is not found */ export function useConversationUsername(convoId?: string) { const convoProps = useConversationPropsById(convoId); return convoProps?.profileName || convoProps?.name || convoId; } /** * Returns either the nickname, profileName, or the shorten pubkey */ export function useConversationUsernameOrShorten(convoId?: string) { const convoProps = useConversationPropsById(convoId); return convoProps?.profileName || convoProps?.name || (convoId && PubKey.shorten(convoId)); } /** * Returns the name if that conversation. * This is the group name, or the realName of a user for a private conversation with a recent nickname set */ export function useConversationRealName(convoId?: string) { const convoProps = useConversationPropsById(convoId); return convoProps?.isPrivate ? convoProps?.name : undefined; } /** * Returns either the nickname, the profileName, in '"' or the full pubkeys given */ export function useConversationsUsernameWithQuoteOrFullPubkey(pubkeys: Array) { return useSelector((state: StateType) => { return pubkeys.map(pubkey => { if (pubkey === UserUtils.getOurPubKeyStrFromCache() || pubkey.toLowerCase() === 'you') { return window.i18n('you'); } const convo = state.conversations.conversationLookup[pubkey]; const nameGot = convo?.profileName || convo?.name; return nameGot?.length ? `"${nameGot}"` : pubkey; }); }); } export function useOurConversationUsername() { return useConversationUsername(UserUtils.getOurPubKeyStrFromCache()); } export function useIsMe(pubkey?: string) { return Boolean(pubkey && pubkey === UserUtils.getOurPubKeyStrFromCache()); } export function useIsClosedGroup(convoId?: string) { const convoProps = useConversationPropsById(convoId); return (convoProps && convoProps.isGroup && !convoProps.isPublic) || false; } export function useIsPrivate(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isPrivate); } export function useHasNickname(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.hasNickname); } export function useNotificationSetting(convoId?: string) { const convoProps = useConversationPropsById(convoId); return convoProps?.currentNotificationSetting || 'all'; } export function useIsPublic(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isPublic); } export function useIsBlocked(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isBlocked); } export function useIsLeft(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.left); } export function useIsKickedFromGroup(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isKickedFromGroup); } export function useWeAreAdmin(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.weAreAdmin); } export function useExpireTimer(convoId?: string) { const convoProps = useConversationPropsById(convoId); return convoProps && convoProps.expireTimer; } export function useIsPinned(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isPinned); } export function useIsApproved(convoId?: string) { const convoProps = useConversationPropsById(convoId); return Boolean(convoProps && convoProps.isApproved); } export function useIsRequest(convoId: string) { const convoProps = useConversationPropsById(convoId); return Boolean( convoProps && ConversationModel.hasValidIncomingRequestValues({ isMe: convoProps.isMe, isApproved: convoProps.isApproved, isPrivate: convoProps.isPrivate, isBlocked: convoProps.isBlocked, }) ); } export function useConversationPropsById(convoId?: string) { return useSelector((state: StateType) => { if (!convoId) { return null; } const convo = state.conversations.conversationLookup[convoId]; if (!convo) { return null; } return convo; }); }