Skip to content

Commit 31529c0

Browse files
committed
fix: update data when save csb successful
Signed-off-by: Innei <[email protected]>
1 parent 10aa47f commit 31529c0

File tree

7 files changed

+59
-10
lines changed

7 files changed

+59
-10
lines changed

src/app/(dashboard)/dashboard/notes/edit/page.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
} from '~/components/modules/dashboard/writing/Writing'
3232
import { LoadingButtonWrapper, StyledButton } from '~/components/ui/button'
3333
import { PublishEvent, WriteEditEvent } from '~/events'
34+
import { useRefetchData } from '~/hooks/biz/use-refetch-data'
3435
import { useEventCallback } from '~/hooks/common/use-event-callback'
3536
import { cloneDeep } from '~/lib/_'
3637
import { dayOfYear } from '~/lib/datetime'
@@ -42,15 +43,17 @@ export default function Page() {
4243
const search = useSearchParams()
4344
const id = search.get('id')
4445

45-
const { data, isLoading } = useQuery({
46+
const { data, isLoading, refetch } = useQuery({
4647
...adminQueries.note.getNote(id!),
4748
enabled: !!id,
4849
})
4950

51+
const [key] = useRefetchData(refetch)
52+
5053
if (id) {
5154
if (isLoading) return <PageLoading />
5255

53-
return <EditPage initialData={data} />
56+
return <EditPage initialData={data} key={key} />
5457
}
5558
return <EditPage />
5659
}

src/app/(dashboard)/dashboard/posts/edit/page.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
} from '~/components/modules/dashboard/writing/Writing'
3232
import { LoadingButtonWrapper, StyledButton } from '~/components/ui/button'
3333
import { PublishEvent, WriteEditEvent } from '~/events'
34+
import { useRefetchData } from '~/hooks/biz/use-refetch-data'
3435
import { useEventCallback } from '~/hooks/common/use-event-callback'
3536
import { cloneDeep } from '~/lib/_'
3637
import { toast } from '~/lib/toast'
@@ -41,15 +42,17 @@ export default function Page() {
4142
const search = useSearchParams()
4243
const id = search.get('id')
4344

44-
const { data, isLoading } = useQuery({
45+
const { data, isLoading, refetch } = useQuery({
4546
...adminQueries.post.getPost(id!),
4647
enabled: !!id,
4748
})
4849

50+
const [key] = useRefetchData(refetch)
51+
4952
if (id) {
5053
if (isLoading) return <PageLoading />
5154

52-
return <EditPage initialData={data} />
55+
return <EditPage initialData={data} key={key} />
5356
}
5457
return <EditPage />
5558
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
1-
import { lazy } from 'react'
1+
import { lazy, Suspense, useMemo } from 'react'
22

3-
const XLogEnableImpl = lazy(() =>
4-
import('./XlogSwitch').then((mo) => ({ default: mo.XlogSwitch })),
5-
)
63
export const XLogEnable = () => {
7-
return 'ethereum' in window ? <XLogEnableImpl /> : null
4+
return 'ethereum' in window ? <XlogSwitchLazy /> : null
5+
}
6+
7+
const XlogSwitchLazy = () => {
8+
const Component = useMemo(
9+
() =>
10+
lazy(() =>
11+
import('./XlogSwitch').then((mo) => ({ default: mo.XlogSwitch })),
12+
),
13+
[],
14+
)
15+
return (
16+
<Suspense>
17+
<Component />
18+
</Suspense>
19+
)
820
}

src/components/modules/dashboard/crossbell/XlogSwitch.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useAtom, useStore } from 'jotai'
55
import { XLogIcon } from '~/components/icons/platform/XLogIcon'
66
import { LabelSwitch } from '~/components/ui/switch'
77
import { PublishEvent } from '~/events'
8+
import { RefetchEvent } from '~/events/refetch'
89
import { apiClient } from '~/lib/request'
910

1011
import { syncToXlogAtom } from '../writing/atoms'
@@ -57,7 +58,9 @@ const PublishEventSubscriber = () => {
5758
const enabled = store.get(syncToXlogAtom)
5859
if (!enabled) return
5960

60-
CrossBellConnector.createOrUpdate(ev.data)
61+
CrossBellConnector.createOrUpdate(ev.data).then(() => {
62+
window.dispatchEvent(new RefetchEvent())
63+
})
6164
})
6265
}, [store])
6366

src/constants/keys.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export const enum EmitKeyMap {
22
EditDataUpdate = 'editDataUpdate',
33

44
Publish = 'Publish',
5+
Refetch = 'Refetch',
56
}

src/events/refetch.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { EmitKeyMap } from '~/constants/keys'
2+
3+
export class RefetchEvent extends Event {
4+
static readonly type = EmitKeyMap.Refetch
5+
constructor() {
6+
super(EmitKeyMap.Refetch)
7+
}
8+
}

src/hooks/biz/use-refetch-data.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { useEffect } from 'react'
2+
import { useForceUpdate } from 'framer-motion'
3+
4+
import { EmitKeyMap } from '~/constants/keys'
5+
6+
export const useRefetchData = (refetchFn: () => Promise<any>) => {
7+
const [forceUpdate, key] = useForceUpdate()
8+
useEffect(() => {
9+
const handler = () => {
10+
refetchFn().then(forceUpdate)
11+
}
12+
window.addEventListener(EmitKeyMap.Refetch, handler)
13+
return () => {
14+
window.removeEventListener(EmitKeyMap.Refetch, handler)
15+
}
16+
}, [forceUpdate, refetchFn])
17+
18+
return [key] as const
19+
}

0 commit comments

Comments
 (0)