Skip to content

Commit 2b0f867

Browse files
committed
fix: note page render lcp
Signed-off-by: Innei <[email protected]>
1 parent 118fa88 commit 2b0f867

File tree

7 files changed

+56
-21
lines changed

7 files changed

+56
-21
lines changed

src/app/notes/[id]/page.tsx

+5-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint-disable @typescript-eslint/no-non-null-assertion */
33
'use client'
44

5-
import { memo, Suspense, useEffect } from 'react'
5+
import { memo, useEffect } from 'react'
66
import { Balancer } from 'react-wrap-balancer'
77
import clsx from 'clsx'
88
import dayjs from 'dayjs'
@@ -71,7 +71,7 @@ const NotePage = memo(function Notepage() {
7171
if (!noteId) return null
7272

7373
return (
74-
<Suspense>
74+
<>
7575
<article
7676
className={clsx(
7777
'prose relative',
@@ -119,7 +119,7 @@ const NotePage = memo(function Notepage() {
119119
<NoteTopic />
120120
<XLogInfoForNote />
121121
<NoteFooterNavigationBarForMobile noteId={noteId} />
122-
</Suspense>
122+
</>
123123
)
124124
})
125125

@@ -171,16 +171,14 @@ const NoteHeaderDate = () => {
171171
}
172172

173173
const NoteMarkdown = () => {
174-
const text = useCurrentNoteDataSelector((data) => data?.data.text)
175-
if (!text) return null
174+
const text = useCurrentNoteDataSelector((data) => data?.data.text)!
176175

177176
return <Markdown as="main" renderers={MarkdownRenderers} value={text} />
178177
}
179178
const NoteMarkdownImageRecordProvider = (props: PropsWithChildren) => {
180179
const images = useCurrentNoteDataSelector(
181180
(data) => data?.data.images || (noopArr as Image[]),
182-
)
183-
if (!images) return null
181+
)!
184182

185183
return (
186184
<MarkdownImageRecordProvider images={images}>

src/components/common/BanCopyWrapper.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import type { FC, PropsWithChildren } from 'react'
55

66
import { isLogged } from '~/atoms'
77

8-
import { withNoSSR } from '../hoc/with-no-ssr'
98
import { DialogOverlay } from '../ui/dlalog'
109

11-
export const BanCopyWrapper: FC<PropsWithChildren> = withNoSSR((props) => {
10+
export const BanCopyWrapper: FC<PropsWithChildren> = (props) => {
1211
const [showCopyWarn, setShowCopyWarn] = useState(false)
1312
const ref = useRef<HTMLDivElement>(null)
1413

@@ -72,4 +71,4 @@ export const BanCopyWrapper: FC<PropsWithChildren> = withNoSSR((props) => {
7271
</Root>
7372
</>
7473
)
75-
})
74+
}

src/components/common/ToastCard.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export const ToastCard: FC<{
3737
'border border-slate-100/80 dark:border-neutral-900/80',
3838
'space-x-4',
3939
'flex items-center',
40+
'select-none',
4041
)}
4142
>
4243
{iconElement ?? typeMap[props.toastProps?.type ?? 'default']}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,43 @@
1+
import clsx from 'clsx'
2+
import Image from 'next/image'
3+
4+
import { useIsLogged } from '~/atoms'
5+
import { useAggregationSelector } from '~/providers/root/aggregation-data-provider'
6+
7+
import { CommentBoxActionBar } from './ActionBar'
8+
import { UniversalTextArea } from './UniversalTextArea'
9+
110
export const CommentBoxLegacyForm = () => {
11+
const isLogger = useIsLogged()
12+
if (isLogger) return <LoggedForm />
213
return null
314
}
15+
16+
const LoggedForm = () => {
17+
const user = useAggregationSelector((v) => v.user)!
18+
19+
return (
20+
<div className="flex space-x-4">
21+
<div
22+
className={clsx(
23+
'mb-2 flex-shrink-0 select-none self-end overflow-hidden rounded-full',
24+
'dark:ring-zinc-800" bg-zinc-200 ring-2 ring-zinc-200 dark:bg-zinc-800',
25+
'ml-[2px] backface-hidden',
26+
)}
27+
>
28+
<Image
29+
className="rounded-full object-cover"
30+
src={user.avatar}
31+
alt={`${user.name || user.username}'s avatar`}
32+
width={48}
33+
height={48}
34+
/>
35+
</div>
36+
<div className="relative h-[150px] w-full rounded-lg bg-gray-200/50 pb-5 dark:bg-zinc-800/50">
37+
<UniversalTextArea />
38+
</div>
39+
40+
<CommentBoxActionBar className="absolute bottom-0 left-12 right-0 mb-2 ml-4 w-auto px-4" />
41+
</div>
42+
)
43+
}

src/components/widgets/note/NoteHideIfSecret.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ import { useCurrentNoteId } from '~/providers/note/CurrentNoteIdProvider'
1212

1313
export const NoteHideIfSecret: Component = ({ children }) => {
1414
const noteSecret = useCurrentNoteDataSelector((data) => data?.data.secret)
15-
const nodeId = useCurrentNoteId()
15+
const noteId = useCurrentNoteId()
1616
const secretDate = useMemo(() => new Date(noteSecret!), [noteSecret])
1717
const isSecret = noteSecret ? dayjs(noteSecret).isAfter(new Date()) : false
1818

1919
const isLogged = useIsLogged()
2020

2121
useEffect(() => {
22-
if (!nodeId) return
22+
if (!noteId) return
2323
let timer: any
2424
const timeout = +secretDate - +new Date()
2525
// https://stackoverflow.com/questions/3468607/why-does-settimeout-break-for-large-millisecond-delay-values
@@ -33,9 +33,9 @@ export const NoteHideIfSecret: Component = ({ children }) => {
3333
return () => {
3434
clearTimeout(timer)
3535
}
36-
}, [isSecret, secretDate, nodeId])
36+
}, [isSecret, secretDate, noteId])
3737

38-
if (!nodeId) return null
38+
if (!noteId) return null
3939

4040
if (isSecret) {
4141
const dateFormat = noteSecret

src/components/widgets/toc/TocAside.tsx

+3-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import React, { useEffect, useMemo, useRef } from 'react'
44

55
import { throttle } from '~/lib/_'
6-
import {
7-
useWrappedElement,
8-
useWrappedElementSize,
9-
} from '~/providers/shared/WrappedElementProvider'
6+
import { useWrappedElement } from '~/providers/shared/WrappedElementProvider'
107
import { clsxm } from '~/utils/helper'
118

129
import { TocTree } from './TocTree'
@@ -26,7 +23,7 @@ export const TocAside: Component<TocAsideProps & TocSharedProps> = ({
2623
}) => {
2724
const containerRef = useRef<HTMLUListElement>(null)
2825
const $article = useWrappedElement()
29-
const { h } = useWrappedElementSize()
26+
// const { h } = useWrappedElementSize()
3027

3128
if (typeof $article === 'undefined') {
3229
throw new Error('<Toc /> must be used in <WrappedElementProvider />')
@@ -39,7 +36,7 @@ export const TocAside: Component<TocAsideProps & TocSharedProps> = ({
3936
return [
4037
...$article.querySelectorAll('h1,h2,h3,h4,h5,h6'),
4138
] as HTMLHeadingElement[]
42-
}, [$article, h])
39+
}, [$article])
4340

4441
useEffect(() => {
4542
const setMaxWidth = throttle(() => {

src/components/widgets/xlog/XLogInfo.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const XLogInfoBase: FC<{
8282
}
8383

8484
return (
85-
<div className="my-6 text-sm [&_h4]:font-medium [&_section]:my-2">
85+
<div className="my-6 select-none text-sm [&_h4]:font-medium [&_section]:my-2">
8686
<div
8787
role="button"
8888
tabIndex={0}

0 commit comments

Comments
 (0)