From e31f2679ab21479e1372331c18848b4bbb8677cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?U=C4=9Fur=20Eren?= Date: Tue, 23 Jul 2024 06:27:07 +0300 Subject: [PATCH] Fix: follow & like & comment issues (#246) * fix: follow & like & comment * fix: follow created_at --- JoyboyCommunity/src/hooks/nostr/useContacts.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useEditContacts.ts | 5 +++++ JoyboyCommunity/src/hooks/nostr/useNote.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useProfile.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useReactions.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useReplyNotes.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useReposts.ts | 2 +- JoyboyCommunity/src/hooks/nostr/useRootNotes.ts | 2 +- JoyboyCommunity/src/screens/Profile/Info/index.tsx | 12 +++++++++--- 9 files changed, 21 insertions(+), 10 deletions(-) diff --git a/JoyboyCommunity/src/hooks/nostr/useContacts.ts b/JoyboyCommunity/src/hooks/nostr/useContacts.ts index edd8aa29..86d99b22 100644 --- a/JoyboyCommunity/src/hooks/nostr/useContacts.ts +++ b/JoyboyCommunity/src/hooks/nostr/useContacts.ts @@ -12,7 +12,7 @@ export const useContacts = (options?: UseContactsOptions) => { const {ndk} = useNostrContext(); return useQuery({ - queryKey: ['contacts', ndk, options?.authors, options?.search], + queryKey: ['contacts', options?.authors, options?.search, ndk], queryFn: async () => { const contacts = await ndk.fetchEvent({ kinds: [NDKKind.Contacts], diff --git a/JoyboyCommunity/src/hooks/nostr/useEditContacts.ts b/JoyboyCommunity/src/hooks/nostr/useEditContacts.ts index 03418572..8b38d15b 100644 --- a/JoyboyCommunity/src/hooks/nostr/useEditContacts.ts +++ b/JoyboyCommunity/src/hooks/nostr/useEditContacts.ts @@ -23,12 +23,17 @@ export const useEditContacts = () => { contacts.tags = []; } + // Resetting the id and created_at to avoid conflicts + contacts.id = undefined as any; + contacts.created_at = undefined; + if (data.type === 'add') { contacts.tags.push(['p', data.pubkey, '', '']); } else { contacts.tags = contacts.tags.filter((tag) => tag[1] !== data.pubkey); } + await contacts.sign(); return contacts.publish(); }, }); diff --git a/JoyboyCommunity/src/hooks/nostr/useNote.ts b/JoyboyCommunity/src/hooks/nostr/useNote.ts index b5272761..bdacc1f7 100644 --- a/JoyboyCommunity/src/hooks/nostr/useNote.ts +++ b/JoyboyCommunity/src/hooks/nostr/useNote.ts @@ -11,7 +11,7 @@ export const useNote = (options: UseNoteOptions) => { const {ndk} = useNostrContext(); return useQuery({ - queryKey: ['note', ndk, options.noteId], + queryKey: ['note', options.noteId, ndk], queryFn: async () => { const note = await ndk.fetchEvent({ kinds: [NDKKind.Text], diff --git a/JoyboyCommunity/src/hooks/nostr/useProfile.ts b/JoyboyCommunity/src/hooks/nostr/useProfile.ts index 3df26734..3b2110d0 100644 --- a/JoyboyCommunity/src/hooks/nostr/useProfile.ts +++ b/JoyboyCommunity/src/hooks/nostr/useProfile.ts @@ -10,7 +10,7 @@ export const useProfile = (options: UseProfileOptions) => { const {ndk} = useNostrContext(); return useQuery({ - queryKey: ['profile', ndk, options.publicKey], + queryKey: ['profile', options.publicKey, ndk], queryFn: async () => { const user = ndk.getUser({pubkey: options.publicKey}); diff --git a/JoyboyCommunity/src/hooks/nostr/useReactions.ts b/JoyboyCommunity/src/hooks/nostr/useReactions.ts index c5d1c5ba..d58dee34 100644 --- a/JoyboyCommunity/src/hooks/nostr/useReactions.ts +++ b/JoyboyCommunity/src/hooks/nostr/useReactions.ts @@ -13,7 +13,7 @@ export const useReactions = (options?: UseReactionsOptions) => { const {ndk} = useNostrContext(); return useQuery({ - queryKey: ['reactions', ndk, options?.noteId, options?.authors, options?.search], + queryKey: ['reactions', options?.noteId, options?.authors, options?.search, ndk], queryFn: async () => { const notes = await ndk.fetchEvents({ kinds: [NDKKind.Reaction], diff --git a/JoyboyCommunity/src/hooks/nostr/useReplyNotes.ts b/JoyboyCommunity/src/hooks/nostr/useReplyNotes.ts index a3195fa3..6fed31f2 100644 --- a/JoyboyCommunity/src/hooks/nostr/useReplyNotes.ts +++ b/JoyboyCommunity/src/hooks/nostr/useReplyNotes.ts @@ -14,7 +14,7 @@ export const useReplyNotes = (options?: UseReplyNotesOptions) => { return useInfiniteQuery({ initialPageParam: 0, - queryKey: ['replyNotes', ndk, options?.noteId, options?.authors, options?.search], + queryKey: ['replyNotes', options?.noteId, options?.authors, options?.search, ndk], getNextPageParam: (lastPage: any, allPages, lastPageParam) => { if (!lastPage?.length) return undefined; diff --git a/JoyboyCommunity/src/hooks/nostr/useReposts.ts b/JoyboyCommunity/src/hooks/nostr/useReposts.ts index b11b2c0e..1320a52d 100644 --- a/JoyboyCommunity/src/hooks/nostr/useReposts.ts +++ b/JoyboyCommunity/src/hooks/nostr/useReposts.ts @@ -13,7 +13,7 @@ export const useReposts = (options?: UseRepostsOptions) => { return useInfiniteQuery({ initialPageParam: 0, - queryKey: ['reposts', ndk, options?.authors, options?.search], + queryKey: ['reposts', options?.authors, options?.search, ndk], getNextPageParam: (lastPage: any, allPages, lastPageParam) => { if (!lastPage?.length) return undefined; diff --git a/JoyboyCommunity/src/hooks/nostr/useRootNotes.ts b/JoyboyCommunity/src/hooks/nostr/useRootNotes.ts index 1e687b53..c04b2343 100644 --- a/JoyboyCommunity/src/hooks/nostr/useRootNotes.ts +++ b/JoyboyCommunity/src/hooks/nostr/useRootNotes.ts @@ -13,7 +13,7 @@ export const useRootNotes = (options?: UseRootNotesOptions) => { return useInfiniteQuery({ initialPageParam: 0, - queryKey: ['rootNotes', ndk, options?.authors, options?.search], + queryKey: ['rootNotes', options?.authors, options?.search, ndk], getNextPageParam: (lastPage: any, allPages, lastPageParam) => { if (!lastPage?.length) return undefined; diff --git a/JoyboyCommunity/src/screens/Profile/Info/index.tsx b/JoyboyCommunity/src/screens/Profile/Info/index.tsx index d750cb9e..d5a9ae12 100644 --- a/JoyboyCommunity/src/screens/Profile/Info/index.tsx +++ b/JoyboyCommunity/src/screens/Profile/Info/index.tsx @@ -6,6 +6,7 @@ import {Pressable, View} from 'react-native'; import {UserPlusIcon} from '../../../assets/icons'; import {Button, IconButton, Menu, Text} from '../../../components'; import {useContacts, useEditContacts, useProfile, useStyles, useTheme} from '../../../hooks'; +import {useToast} from '../../../hooks/modals'; import {useAuth} from '../../../store/auth'; import {ProfileScreenProps} from '../../../types'; import {ProfileHead} from '../Head'; @@ -26,6 +27,7 @@ export const ProfileInfo: React.FC = ({publicKey: userPublicKe const [menuOpen, setMenuOpen] = useState(false); const publicKey = useAuth((state) => state.publicKey); + const {showToast} = useToast(); const queryClient = useQueryClient(); const userContacts = useContacts({authors: [userPublicKey]}); const contacts = useContacts({authors: [publicKey]}); @@ -40,12 +42,16 @@ export const ProfileInfo: React.FC = ({publicKey: userPublicKe const onConnectionPress = () => { editContacts.mutateAsync( - {pubkey: publicKey, type: isConnected ? 'remove' : 'add'}, + {pubkey: userPublicKey, type: isConnected ? 'remove' : 'add'}, { onSuccess: () => { queryClient.invalidateQueries({queryKey: ['contacts']}); - userContacts.refetch(); - contacts.refetch(); + }, + onError: () => { + showToast({ + type: 'error', + title: isConnected ? 'Failed to unfollow user' : 'Failed to follow user', + }); }, }, );