@@ -6,6 +6,7 @@ import { atom, useAtomValue } from 'jotai'
6
6
import type {
7
7
NoteModel ,
8
8
NoteWrappedPayload ,
9
+ PageModel ,
9
10
PostModel ,
10
11
} from '@mx-space/api-client'
11
12
@@ -15,15 +16,21 @@ import { previewDataAtom } from '~/atoms/preview'
15
16
import { ErrorBoundary } from '~/components/common/ErrorBoundary'
16
17
import { Paper } from '~/components/layout/container/Paper'
17
18
import { NoteBanner , NoteMetaBar } from '~/components/widgets/note'
19
+ import { PageActionAside } from '~/components/widgets/page/PageActionAside'
18
20
import { PostActionAside } from '~/components/widgets/post'
19
21
import { ArticleRightAside } from '~/components/widgets/shared/ArticleRightAside'
22
+ import { ReadIndicatorForMobile } from '~/components/widgets/shared/ReadIndicator'
20
23
import { debounce } from '~/lib/_'
21
24
import { jotaiStore } from '~/lib/store'
22
25
import { isNoteModel , isPageModel , isPostModel } from '~/lib/url-builder'
23
26
import {
24
27
CurrentNoteDataAtomProvider ,
25
28
CurrentNoteDataProvider ,
26
29
} from '~/providers/note/CurrentNoteDataProvider'
30
+ import {
31
+ CurrentPageDataAtomProvider ,
32
+ CurrentPageDataProvider ,
33
+ } from '~/providers/page/CurrentPageDataProvider'
27
34
import {
28
35
CurrentPostDataAtomProvider ,
29
36
CurrentPostDataProvider ,
@@ -34,6 +41,12 @@ import {
34
41
} from '~/providers/shared/LayoutRightSideProvider'
35
42
import { WrappedElementProvider } from '~/providers/shared/WrappedElementProvider'
36
43
44
+ import {
45
+ MarkdownImageRecordProviderInternal ,
46
+ PageMarkdown ,
47
+ PageSubTitle ,
48
+ PageTitle ,
49
+ } from '../(page-detail)/[slug]/pageExtra'
37
50
import {
38
51
IndentArticleContainer ,
39
52
NoteHeaderDate ,
@@ -42,6 +55,7 @@ import {
42
55
NoteTitle ,
43
56
} from '../notes/[id]/pageExtra'
44
57
import {
58
+ HeaderMetaInfoSetting ,
45
59
PostMarkdown ,
46
60
PostMarkdownImageRecordProvider ,
47
61
PostMetaBarInternal ,
@@ -91,7 +105,7 @@ export default function PreviewPage() {
91
105
return < PostPreview />
92
106
93
107
case isPageModel ( previewData ) :
94
- return < div > TODO </ div >
108
+ return < PagePreview / >
95
109
}
96
110
97
111
return null
@@ -187,3 +201,42 @@ const NotePreview = () => {
187
201
</ div >
188
202
)
189
203
}
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
+ }
0 commit comments