Skip to content

Commit 2eb6aeb

Browse files
author
Minseo Kim
committed
Update markdown.ts and related files
1 parent fc87eaf commit 2eb6aeb

7 files changed

Lines changed: 26 additions & 21 deletions

File tree

src/hooks/useScheme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const useScheme = (): [SchemeType, SetScheme] => {
3535
: "light"
3636
: data
3737
setScheme(cachedScheme || defaultScheme)
38-
}, [])
38+
}, [data, followsSystemTheme, setScheme])
3939

4040
return [data, setScheme]
4141
}

src/libs/utils/markdown.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@ const stripMarkdown = (value: string) => {
2222
}
2323

2424
export const parseHeadings = (content: string, levels: number[]) => {
25+
if (typeof content !== "string" || !Array.isArray(levels) || levels.length === 0) {
26+
return []
27+
}
2528
const allowed = new Set(levels)
2629
const lines = content.split(/\r?\n/)
2730
const counts = new Map<string, number>()
2831
const headings: HeadingItem[] = []
2932

3033
for (const line of lines) {
34+
if (!line || typeof line !== "string") continue
3135
const match = /^(#{1,6})\s+(.+)$/.exec(line)
3236
if (!match) continue
3337

src/routes/Detail/PageDetail/index.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,26 @@ type Props = {}
77

88
const PageDetail: React.FC<Props> = () => {
99
const data = usePostQuery()
10-
11-
if (!data) return null
12-
// About 페이지라면 뱃지/버튼을 직접 렌더링
13-
const isAbout = data.slug === "about"
10+
// compute derived values with hooks unconditionally
1411
const contentWithoutBadgeAndButton = useMemo(() => {
12+
if (!data) return ""
13+
const isAbout = data.slug === "about"
1514
if (!isAbout) return data.content
1615
// Daily 뱃지와 View Resume 버튼이 있던 줄 제거
1716
return data.content
1817
.replace(/^Daily\s*$/m, "")
1918
.replace(/^\[View Resume\]\(.*\)$/m, "")
2019
.trim()
21-
}, [data.content, isAbout])
20+
}, [data?.content, data?.slug])
21+
22+
if (!data) return null
2223

2324
return (
2425
<StyledWrapper>
2526
<div className="contentCard">
26-
{isAbout && <Badge>Daily</Badge>}
27+
{data.slug === "about" && <Badge>Daily</Badge>}
2728
<MarkdownRenderer content={contentWithoutBadgeAndButton} />
28-
{isAbout && (
29+
{data.slug === "about" && (
2930
<ResumeButton
3031
href="https://daram62.github.io/MS_Tech_Blog"
3132
target="_blank"

src/routes/Detail/PostDetail/CommentBox/Utterances.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const Utterances: React.FC<Props> = ({ issueTerm }) => {
3333
return () => {
3434
anchor.innerHTML = ""
3535
}
36-
}, [scheme, router])
36+
}, [scheme, router, issueTerm])
3737
return (
3838
<>
3939
<StyledWrapper id="comments">

src/routes/Detail/PostDetail/index.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ const PostDetail: React.FC<Props> = () => {
1717
const data = usePostQuery()
1818
const posts = usePostsQuery()
1919
const [activeId, setActiveId] = useState<string | null>(null)
20-
if (!data) return null
21-
22-
const category = (data.category && data.category?.[0]) || undefined
23-
const headings = useMemo(() => parseHeadings(data.content, [2, 3]), [data.content])
20+
const category = (data?.category && data?.category?.[0]) || undefined
21+
const headings = useMemo(() => parseHeadings(data?.content ?? "", [2, 3]), [data?.content])
2422
const currentIndex = useMemo(
25-
() => posts.findIndex((post) => post.slug === data.slug),
26-
[posts, data.slug]
23+
() => posts.findIndex((post) => post.slug === data?.slug),
24+
[posts, data?.slug]
2725
)
2826
const prevPost = currentIndex > 0 ? posts[currentIndex - 1] : null
2927
const nextPost =
@@ -56,6 +54,8 @@ const PostDetail: React.FC<Props> = () => {
5654
return () => observer.disconnect()
5755
}, [headings])
5856

57+
if (!data) return null
58+
5959
return (
6060
<StyledWrapper>
6161
<div className="layout">

src/routes/Detail/hooks/useMermaidEffect.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useQuery, useQueryClient } from "@tanstack/react-query"
22
import mermaid from "mermaid"
3-
import { useEffect, useState } from "react"
3+
import { useEffect, useRef } from "react"
44
import { queryKey } from "src/constants/queryKey"
55
import useScheme from "src/hooks/useScheme"
66

@@ -27,7 +27,7 @@ const waitForMermaid = (interval = 100, timeout = 5000) => {
2727
})
2828
}
2929
const useMermaidEffect = () => {
30-
const [memoMermaid, setMemoMermaid] = useState<Map<number, string>>(new Map())
30+
const memoMermaidRef = useRef<Map<number, string>>(new Map())
3131

3232
const { data, isFetched } = useQuery({
3333
queryKey: queryKey.scheme(),
@@ -54,9 +54,9 @@ const useMermaidEffect = () => {
5454
element.tagName === "CODE" ? element.parentElement ?? element : element
5555
const sourceText = element.textContent || ""
5656

57-
if (memoMermaid.get(i) !== undefined) {
57+
if (memoMermaidRef.current.get(i) !== undefined) {
5858
const svg = await mermaid
59-
.render("mermaid" + i, memoMermaid.get(i) || "")
59+
.render("mermaid" + i, memoMermaidRef.current.get(i) || "")
6060
.then((res) => res.svg)
6161
target.animate(
6262
[
@@ -72,7 +72,7 @@ const useMermaidEffect = () => {
7272
const svg = await mermaid
7373
.render("mermaid" + i, sourceText)
7474
.then((res) => res.svg)
75-
setMemoMermaid(memoMermaid.set(i, sourceText))
75+
memoMermaidRef.current.set(i, sourceText)
7676
target.innerHTML = svg
7777
})
7878
await Promise.all(promises)

src/routes/Feed/PostList/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const PostList: React.FC<Props> = ({ q }) => {
4848

4949
return newFilteredPosts
5050
})
51-
}, [q, currentTag, currentCategory, currentOrder, setFilteredPosts])
51+
}, [q, currentTag, currentCategory, currentOrder, data])
5252

5353
return (
5454
<>

0 commit comments

Comments
 (0)