Skip to content

Commit a1a72ae

Browse files
committed
feat: page route preview support
1 parent 9e6ea98 commit a1a72ae

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

src/app/preview/page.tsx

+54-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { atom, useAtomValue } from 'jotai'
66
import type {
77
NoteModel,
88
NoteWrappedPayload,
9+
PageModel,
910
PostModel,
1011
} from '@mx-space/api-client'
1112

@@ -15,15 +16,21 @@ import { previewDataAtom } from '~/atoms/preview'
1516
import { ErrorBoundary } from '~/components/common/ErrorBoundary'
1617
import { Paper } from '~/components/layout/container/Paper'
1718
import { NoteBanner, NoteMetaBar } from '~/components/widgets/note'
19+
import { PageActionAside } from '~/components/widgets/page/PageActionAside'
1820
import { PostActionAside } from '~/components/widgets/post'
1921
import { ArticleRightAside } from '~/components/widgets/shared/ArticleRightAside'
22+
import { ReadIndicatorForMobile } from '~/components/widgets/shared/ReadIndicator'
2023
import { debounce } from '~/lib/_'
2124
import { jotaiStore } from '~/lib/store'
2225
import { isNoteModel, isPageModel, isPostModel } from '~/lib/url-builder'
2326
import {
2427
CurrentNoteDataAtomProvider,
2528
CurrentNoteDataProvider,
2629
} from '~/providers/note/CurrentNoteDataProvider'
30+
import {
31+
CurrentPageDataAtomProvider,
32+
CurrentPageDataProvider,
33+
} from '~/providers/page/CurrentPageDataProvider'
2734
import {
2835
CurrentPostDataAtomProvider,
2936
CurrentPostDataProvider,
@@ -34,6 +41,12 @@ import {
3441
} from '~/providers/shared/LayoutRightSideProvider'
3542
import { WrappedElementProvider } from '~/providers/shared/WrappedElementProvider'
3643

44+
import {
45+
MarkdownImageRecordProviderInternal,
46+
PageMarkdown,
47+
PageSubTitle,
48+
PageTitle,
49+
} from '../(page-detail)/[slug]/pageExtra'
3750
import {
3851
IndentArticleContainer,
3952
NoteHeaderDate,
@@ -42,6 +55,7 @@ import {
4255
NoteTitle,
4356
} from '../notes/[id]/pageExtra'
4457
import {
58+
HeaderMetaInfoSetting,
4559
PostMarkdown,
4660
PostMarkdownImageRecordProvider,
4761
PostMetaBarInternal,
@@ -91,7 +105,7 @@ export default function PreviewPage() {
91105
return <PostPreview />
92106

93107
case isPageModel(previewData):
94-
return <div>TODO</div>
108+
return <PagePreview />
95109
}
96110

97111
return null
@@ -187,3 +201,42 @@ const NotePreview = () => {
187201
</div>
188202
)
189203
}
204+
205+
const PagePreview = () => {
206+
const data = useAtomValue(previewDataAtom) as PageModel
207+
208+
const overrideAtom = useMemo(() => atom(null as null | PageModel), [])
209+
210+
return (
211+
<div className="relative m-auto mt-[120px] min-h-[300px] w-full max-w-5xl px-2 md:px-6 lg:p-0">
212+
<CurrentPageDataAtomProvider overrideAtom={overrideAtom}>
213+
<CurrentPageDataProvider data={data} />
214+
<div className="relative w-full min-w-0">
215+
<HeaderMetaInfoSetting />
216+
<article className="prose">
217+
<header className="mb-8">
218+
<PageTitle />
219+
220+
<PageSubTitle />
221+
</header>
222+
223+
<WrappedElementProvider>
224+
<ReadIndicatorForMobile />
225+
<MarkdownImageRecordProviderInternal>
226+
<PageMarkdown />
227+
</MarkdownImageRecordProviderInternal>
228+
229+
<LayoutRightSidePortal>
230+
<ArticleRightAside>
231+
<PageActionAside />
232+
</ArticleRightAside>
233+
</LayoutRightSidePortal>
234+
</WrappedElementProvider>
235+
</article>
236+
</div>
237+
238+
<LayoutRightSideProvider className="absolute bottom-0 right-0 top-0 hidden translate-x-full lg:block" />
239+
</CurrentPageDataAtomProvider>
240+
</div>
241+
)
242+
}

src/providers/page/CurrentPageDataProvider.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const {
1111
getGlobalCurrentData: getCurrentData,
1212
setGlobalCurrentData: setCurrentData,
1313
useCurrentDataSelector,
14+
CurrentDataAtomProvider,
1415
} = createDataProvider<PageModel>()
1516

1617
declare global {
@@ -25,4 +26,5 @@ export {
2526
getCurrentData as getCurrentPageData,
2627
setCurrentData as setCurrentPageData,
2728
useCurrentDataSelector as useCurrentPageDataSelector,
29+
CurrentDataAtomProvider as CurrentPageDataAtomProvider,
2830
}

0 commit comments

Comments
 (0)