From 8de65ab9f965f603a92934e0592150ef1996b76c Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Tue, 3 Sep 2024 21:45:28 +0900
Subject: [PATCH] refs #4754 Update menu when follow/unfollow tags
---
renderer/components/detail/Detail.tsx | 4 ++++
renderer/components/layouts/timelines.tsx | 27 ++++++++++++++++++++---
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/renderer/components/detail/Detail.tsx b/renderer/components/detail/Detail.tsx
index a6ac8eeb..c39c632f 100644
--- a/renderer/components/detail/Detail.tsx
+++ b/renderer/components/detail/Detail.tsx
@@ -8,6 +8,7 @@ import Profile from './Profile'
import Tag from './Tag'
import { Account } from '@/db'
import { useIntl } from 'react-intl'
+import { useTimelines } from '../layouts/timelines'
type Props = {
client: MegalodonInterface
@@ -20,6 +21,7 @@ export default function Detail(props: Props) {
const router = useRouter()
const { formatMessage } = useIntl()
const [tagFollowing, setTagFollowing] = useState(false)
+ const { reloadMenu } = useTimelines()
useEffect(() => {
if (router.query.status_id) {
@@ -63,11 +65,13 @@ export default function Detail(props: Props) {
const followTag = async (tag: string) => {
await props.client.followTag(tag)
await refreshFollowing(tag)
+ await reloadMenu()
}
const unfollowTag = async (tag: string) => {
await props.client.unfollowTag(tag)
await refreshFollowing(tag)
+ await reloadMenu()
}
return (
diff --git a/renderer/components/layouts/timelines.tsx b/renderer/components/layouts/timelines.tsx
index c2582057..24d6166a 100644
--- a/renderer/components/layouts/timelines.tsx
+++ b/renderer/components/layouts/timelines.tsx
@@ -1,14 +1,28 @@
import { Account, db } from '@/db'
import { Card, Chip, List, ListItem, ListItemPrefix, ListItemSuffix } from '@material-tailwind/react'
-import generator, { Entity } from 'megalodon'
+import generator, { Entity, MegalodonInterface } from 'megalodon'
import { useRouter } from 'next/router'
-import { useEffect, useState } from 'react'
+import { createContext, useContext, useEffect, useState } from 'react'
import { useHotkeys } from 'react-hotkeys-hook'
import { FaBell, FaBookmark, FaGlobe, FaHouse, FaList, FaStar, FaUsers, FaHashtag } from 'react-icons/fa6'
import { useIntl } from 'react-intl'
import Jump from '../Jump'
import { useUnreads } from '@/provider/unreads'
+type Context = {
+ reloadMenu: () => Promise
+}
+
+const TimelinesContext = createContext({
+ reloadMenu: async () => {}
+})
+
+TimelinesContext.displayName = 'TimelinesContext'
+
+export const useTimelines = () => {
+ return useContext(TimelinesContext)
+}
+
type LayoutProps = {
children: React.ReactNode
}
@@ -29,6 +43,7 @@ export default function Layout({ children }: LayoutProps) {
const [lists, setLists] = useState>([])
const [followedTags, setFollowedTags] = useState>([])
const [openJump, setOpenJump] = useState(false)
+ const [client, setClient] = useState()
useHotkeys('mod+k', () => setOpenJump(current => !current))
@@ -46,6 +61,7 @@ export default function Layout({ children }: LayoutProps) {
useEffect(() => {
if (!account) return
const c = generator(account.sns, account.url, account.access_token, 'Whalebird')
+ setClient(c)
const f = async () => {
const res = await c.getLists()
setLists(res.data)
@@ -97,6 +113,11 @@ export default function Layout({ children }: LayoutProps) {
}
]
+ const reloadMenu = async () => {
+ const res = await client.getFollowedTags()
+ setFollowedTags(res.data)
+ }
+
return (
setOpenJump(false)} timelines={pages} />
@@ -159,7 +180,7 @@ export default function Layout({ children }: LayoutProps) {
))}
- {children}
+ {children}
)
}