diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx
index c24dd6f0..f3f0eabd 100644
--- a/src/renderer/src/App.tsx
+++ b/src/renderer/src/App.tsx
@@ -9,6 +9,7 @@ import FollowingListPage from './pages/secondary/FollowingListPage'
import HashtagPage from './pages/secondary/HashtagPage'
import NotePage from './pages/secondary/NotePage'
import ProfilePage from './pages/secondary/ProfilePage'
+import { FollowListProvider } from './providers/FollowListProvider'
import { NostrProvider } from './providers/NostrProvider'
import { NoteStatsProvider } from './providers/NoteStatsProvider'
import { RelaySettingsProvider } from './providers/RelaySettingsProvider'
@@ -25,14 +26,16 @@ export default function App(): JSX.Element {
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/FollowButton/index.tsx b/src/renderer/src/components/FollowButton/index.tsx
index 7a88cd18..b3db49d3 100644
--- a/src/renderer/src/components/FollowButton/index.tsx
+++ b/src/renderer/src/components/FollowButton/index.tsx
@@ -1,35 +1,24 @@
-import { TDraftEvent } from '@common/types'
import { Button } from '@renderer/components/ui/button'
-import { useFetchFollowings } from '@renderer/hooks'
+import { useFollowList } from '@renderer/providers/FollowListProvider'
import { useNostr } from '@renderer/providers/NostrProvider'
-import dayjs from 'dayjs'
import { Loader } from 'lucide-react'
-import { kinds } from 'nostr-tools'
import { useMemo, useState } from 'react'
export default function FollowButton({ pubkey }: { pubkey: string }) {
- const { pubkey: accountPubkey, publish } = useNostr()
- const { followings, followListEvent, refresh } = useFetchFollowings(accountPubkey)
+ const { pubkey: accountPubkey } = useNostr()
+ const { followListEvent, followings, isReady, follow, unfollow } = useFollowList()
const [updating, setUpdating] = useState(false)
const isFollowing = useMemo(() => followings.includes(pubkey), [followings, pubkey])
- if (!accountPubkey || pubkey === accountPubkey) return null
+ if (!accountPubkey || pubkey === accountPubkey || !isReady) return null
- const follow = async (e: React.MouseEvent) => {
+ const handleFollow = async (e: React.MouseEvent) => {
e.stopPropagation()
if (isFollowing) return
setUpdating(true)
- const newFollowListEvent: TDraftEvent = {
- kind: kinds.Contacts,
- content: followListEvent?.content ?? '',
- created_at: dayjs().unix(),
- tags: (followListEvent?.tags ?? []).concat([['p', pubkey]])
- }
- console.log(newFollowListEvent)
try {
- await publish(newFollowListEvent)
- await refresh()
+ await follow(pubkey)
} catch (error) {
console.error(error)
} finally {
@@ -37,22 +26,13 @@ export default function FollowButton({ pubkey }: { pubkey: string }) {
}
}
- const unfollow = async (e: React.MouseEvent) => {
+ const handleUnfollow = async (e: React.MouseEvent) => {
e.stopPropagation()
if (!isFollowing || !followListEvent) return
setUpdating(true)
- const newFollowListEvent: TDraftEvent = {
- kind: kinds.Contacts,
- content: followListEvent.content ?? '',
- created_at: dayjs().unix(),
- tags: followListEvent.tags.filter(
- ([tagName, tagValue]) => tagName !== 'p' || tagValue !== pubkey
- )
- }
try {
- await publish(newFollowListEvent)
- await refresh()
+ await unfollow(pubkey)
} catch (error) {
console.error(error)
} finally {
@@ -64,13 +44,13 @@ export default function FollowButton({ pubkey }: { pubkey: string }) {
) : (
-