---
import { Post } from '../../lib/interfaces.ts'
import { getPostByPageId } from '../../lib/notion/client'
import { getPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
if (pageId) {
post = await getPostByPageId(pageId)
}
---
{
post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)
}
astro.jsã§ããã°ãéçºããŠããŸãã
èšäºã管çããDBãïŒã€çšæããŠããŸãã
ïŒã€ã®ããŒãžã§ã³ã¯ã§ããŠãããšããã«ããããïŒã€ç®ã察å¿ããããšããŠããŸãã
ifã®èšè¿°ã®ä»æ¹ãæããŠãã ãã
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
}
次ã®ããŒãžã§ã³ã§2ã€ç®ã®èšäºã管çããããã«ãæ¡ä»¶åå²ã远å ããå¿
èŠããããŸãã以äžã¯ãif
æã䜿çšããŠ2ã€ç®ã®èšäºïŒsubPost
ïŒãååŸããæ¹æ³ã®äžäŸã§ãã
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
if (/* 2ã€ç®ã®èšäºã®æ¡ä»¶ */) {
subPost = await getSubPostByPageId(pageId)
} else {
post = await getPostByPageId(pageId)
}
}
äžèšã®ã³ãŒãã§ã¯ãæåã« pageId
ãååšãããã©ããããã§ãã¯ããŠããŸãããã®åŸã2ã€ç®ã®èšäºãååŸããããã®æ¡ä»¶ã远å ããŸãããæ¡ä»¶åŒã®éšåã¯ãå®éã®èŠä»¶ã«åãããŠèšè¿°ããå¿
èŠããããŸãããã2ã€ç®ã®èšäºã®æ¡ä»¶ã /* 2ã€ç®ã®èšäºã®æ¡ä»¶ */
ã®éšåã«è€éãªæ¡ä»¶åŒãšããŠèšè¿°ãããå Žåã¯ãå
·äœçãªèŠä»¶ãæããŠããã ããã°ãããå
·äœçãªã³ãŒããæäŸããããšãã§ããŸãã
ãã®äŸã§ã¯ãsubPost
ãš post
ã®åæå€ã null
ã«èšå®ããŠããŸããæ¡ä»¶åå²ã®çµæã2ã€ç®ã®èšäºãååŸã§ããã° subPost
ã«ä»£å
¥ãããããã§ãªããã° post
ã«ä»£å
¥ãããŸãã
> ïŒã€ç®ã®èšäºã®æ¡ä»¶
ãšããéšåãåãããªãã®ã§ãããå°ãåã®éšåãããäŒãããŸãã
import { Post,SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId,getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink,getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
}
ãã£ãããå
容ãããgetPostByPageId
颿°ãšgetSubPostByPageId
颿°ã䜿çšããŠãããããç°ãªãæ¡ä»¶ã§èšäºãååŸããå¿
èŠãããããã§ããã
以äžã¯ãåæãšããŠããã¢ãžã¥ãŒã«ã®ã€ã³ããŒãéšåãå«ãã³ãŒãã§ãã
import { Post, SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId, getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink, getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
}
ãã®å ŽåãgetPostByPageId
颿°ãšgetSubPostByPageId
颿°ã¯ãããããPost
åãšSubPost
åã®ããŒã¿ãè¿ããšæ³å®ãããŠããããã§ããèšäºã®ååŸæ¹æ³ã«ã€ããŠã¯ãããããã®é¢æ°ãã©ã®ããã«å®è£
ãããŠãããã«äŸåããŸãã
ããããã®é¢æ°ãç°ãªãæ¡ä»¶ã§èšäºãååŸããå Žåã以äžã®ãããªã³ãŒãã«ãªããããããŸããã
import { Post, SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId, getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink, getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
const isSubPost = /* 2ã€ç®ã®èšäºã®æ¡ä»¶å€å® */;
if (isSubPost) {
subPost = await getSubPostByPageId(pageId);
} else {
post = await getPostByPageId(pageId);
}
}
äžèšã®ã³ãŒãã§ã¯ãisSubPost
ãšãã倿°ã䜿ã£ãŠã2ã€ç®ã®èšäºã®æ¡ä»¶å€å®ãè¡ã£ãŠããŸããisSubPost
ãtrue
ã§ããã°getSubPostByPageId
颿°ãåŒã³åºããsubPost
ã«èšäºã代å
¥ããŸãããã以å€ã®å Žåã¯ãgetPostByPageId
颿°ãåŒã³åºããpost
ã«èšäºã代å
¥ããŸãã
å®éã®æ¡ä»¶å€å®ã®æ¹æ³ã«ã€ããŠãå ·äœçãªèŠä»¶ãæããŠããã ããã°ãããå ·äœçãªã³ãŒããæäŸããããšãã§ããŸãã
const isSubPost = /* 2ã€ç®ã®èšäºã®æ¡ä»¶å€å® */;
ã®éšåãããããŸããã
èšäºã®DBã¯ïŒã€ã«åããŠããŠããã«é¢ãã颿°ãsubãä»ããŠæ¡åŒµããŠããŸãã
ç³ãèš³ãããŸãããçè§£ã«èª€ãããããŸãããèšäºã®ããŒã¿ããŒã¹ã2ã€ã«åãããŠããã颿°ãããã«å¿ããŠæ¡åŒµãããŠãããšã®ããšã§ããã
以äžã®ã³ãŒãã¯ãèšäºããŒã¿ããŒã¹ã2ã€ã«åãããŠãããgetPostByPageId
ãšgetSubPostByPageId
ãšãã颿°ããããã察å¿ããŠããå Žåã®äŸã§ãã
import { Post, SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId, getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink, getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
const isSubPost = /* 2ã€ç®ã®èšäºã®æ¡ä»¶å€å® */;
if (isSubPost) {
subPost = await getSubPostByPageId(pageId);
} else {
post = await getPostByPageId(pageId);
}
}
äžèšã®ã³ãŒãã§ã¯ãisSubPost
ãšãã倿°ã䜿ã£ãŠã2ã€ç®ã®èšäºãååŸãããã©ãããå€å®ããŸããisSubPost
ã®æ¡ä»¶å€å®æ¹æ³ã«ã€ããŠã¯ãå
·äœçãªèŠä»¶ã«ãã£ãŠç°ãªãã§ãããã以äžã¯ãisSubPost
ãå€å®ããäžè¬çãªäŸã§ãã
const isSubPost = pageId.startsWith('sub');
äžèšã®äŸã§ã¯ãpageId
ã 'sub'
ã§å§ãŸãå Žåã«ã¯2ã€ç®ã®èšäºãšã¿ãªããŠããŸããå
·äœçãªæ¡ä»¶ã¯ãå®éã®èŠä»¶ã«åãããŠå€æŽããŠãã ããã
ããå ·äœçãªæ¡ä»¶å€å®ã®èŠä»¶ãæããŠããã ããã°ãããå ·äœçãªã³ãŒããæäŸããããšãã§ããŸãã
const { pageId } = Astro.props
ã¯ã©ãããå
容ãªã®ããããããŸããã
ãã¿ãŸããã説æãäžååã§ããã
const { pageId } = Astro.props`ã¯ãAstroãã¬ãŒã ã¯ãŒã¯ã§äœ¿çšãããŠããããããã£(`props`)ãã`pageId`ãåãåºãããã®ã³ãŒãã§ããAstroã§ã¯ãããŒãžã®ããããã£ãããŒã¿ã`props`ãšããŠã¢ã¯ã»ã¹ããããšãäžè¬çã§ãã
Astro.propsã¯ãçŸåšã®ããŒãžã®ããããã£ãªããžã§ã¯ãã衚ããŠããŸãããã®äžãã
pageId`ãšããããããã£ãåãåºããŠããŸãã
äŸãã°ã以äžã®ãããªAstro.props
ã®äŸãèããŠã¿ãŸããã:
{
title: "My Blog Post",
author: "John Doe",
pageId: "12345"
}
ãã®å ŽåãAstro.props
ã¯äžèšã®ãªããžã§ã¯ãã衚ããŠãããconst { pageId } = Astro.props
ã«ãã£ãŠpageId
倿°ã«å€"12345"
ã代å
¥ãããŸãã
ãã®pageId
ã¯ãåŸç¶ã®ã³ãŒãã§èšäºã®ããŒã¿ããŒã¹ããèšäºãååŸããããã«äœ¿çšãããŸãã
Astro.propsã®äžèº«ã確èªããæ¹æ³ãæããŠãã ãã
Astro.props
ã®äžèº«ã確èªããã«ã¯ãconsole.log
ã䜿çšããããšãã§ããŸãã以äžã¯ãã®äŸã§ãã
console.log(Astro.props);
äžèšã®ã³ãŒããå®è¡ãããšãã³ã³ãœãŒã«ã«Astro.props
ã®å
容ã衚瀺ãããŸãã
ãŸããAstroãã¬ãŒã ã¯ãŒã¯ã§ã¯ãAstroãã¬ãã¥ãŒããŒãžã®@astro
ãã£ã¬ã¯ãã£ãã§debug
ãªãã·ã§ã³ãæå®ããããšãã§ããŸããããã«ããããã©ãŠã¶ã®éçºè
ããŒã«ã®ã³ã³ãœãŒã«ã«Astro.props
ã®å
容ã衚瀺ãããŸãã
---
astro: debug
---
äžèšã®ããã«ãAstroãã¬ãã¥ãŒããŒãžã®å
é ã«astro: debug
ãšãããã£ã¬ã¯ãã£ãã远å ããããšã§ããããã°æ
å ±ã衚瀺ãããŸãã
ãããã®æ¹æ³ã䜿çšããŠãAstro.props
ã®äžèº«ã確èªããããšãã§ããŸãã
pageIDã§ã¯2ã€ããDBã®å€æãã§ããªãã®ã§ãDB IDã§å€æããããã«ãããã§ãã
äºè§£ããŸãããpageId
ã§ã¯ãªããDBã®IDã䜿çšããŠå€æããæ¹æ³ã«å€æŽããå Žåã¯ã以äžã®ãããªã³ãŒãã«ãªããŸãã
import { Post, SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId, getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink, getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
dbId: string // DBã®IDãæå®ããããããã£
}
const { dbId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (dbId) {
const isSubPost = (dbId === 'ãµãèšäºDBã®ID'); // ãµãèšäºDBã®IDãæå®
if (isSubPost) {
subPost = await getSubPostByPageId(pageId);
} else {
post = await getPostByPageId(pageId);
}
}
äžèšã®ã³ãŒãã§ã¯ãAstro.props
å
ã®dbId
ã䜿çšããŠããµãèšäºã®DBãã©ããã倿ããŠããŸããå
·äœçãªDBã®IDã¯ãisSubPost
ã®æ¡ä»¶å€å®éšåã§æå®ããå¿
èŠããããŸãããããµãèšäºã®DBã®IDãåãã£ãŠããå Žåã¯ããã®IDãæå®ããŠãã ããã
ãŸããDBã®IDã¯äžæã®èå¥åã§ãããããä»ã®èšäºãšåºå¥ããããã«äœ¿çšããããšãã§ããŸãã該åœã®èšäºDBã®IDãåãã£ãŠããã°ããã®IDãé©åãªç®æã«æå®ããŠãã ããã
ä¿å®ãããããããã®ã§ããã£ã±ãèŸããŸãã
å¿
ãpageIDã¯getPostByPageIdãgetSubPostByIdã®ã©ã¡ããã«æ¥ç¶ã§ããããäžæ¹ã¯ååŸã§ãããšã©ãŒã«ãªããŸãã
ãšã©ãŒã«ãªããªãæ¹ã倿°ã«ç»é²ããããã«æžãæããŠãã ããã
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
}
äºè§£ããŸãããæå®ãããèŠä»¶ã«åºã¥ããŠããšã©ãŒãçºçããªãæ¹ã®é¢æ°çµæã倿°ã«ä»£å ¥ããããã«ã³ãŒããæžãæããŸãã
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
try {
post = await getPostByPageId(pageId)
} catch (error) {
subPost = await getSubPostByPageId(pageId)
}
}
äžèšã®ã³ãŒãã§ã¯ãgetPostByPageId
颿°ã®åŒã³åºããtry-catch
ãããã¯ã§å²ã¿ãŸããããgetPostByPageId
颿°ã§ãšã©ãŒãçºçããå ŽåïŒäŸãã°ãèšäºãèŠã€ãããªãå Žåãªã©ïŒãcatch
ãããã¯å
ã®getSubPostByPageId
颿°ãåŒã³åºããŠãsubPost
ã«çµæã代å
¥ããŸãã
ãã®ããã«æžãæããããšã§ãgetPostByPageId
ãšgetSubPostByPageId
ã®ãããããæåããããšãä¿èšŒãããšã©ãŒãçºçããªãæ¹ã®çµæã倿°ã«ä»£å
¥ãããããã«ãªããŸãã
ããã䜿ããŸãïŒïŒ
ãã®å Žåã«ãgetPostLinkã®éšåã®æ¡ä»¶åå²ã远å ãããã§ãã
post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)
getPostLink
ã®éšåã§æ¡ä»¶åå²ã远å ããŠãpost
ãååšããå Žåãšååšããªãå Žåã§ç°ãªããªã³ã¯ãçæããããšãã§ããŸãã以äžã«ä¿®æ£äŸã瀺ããŸãã
post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)
äžèšã®ã³ãŒãã§ã¯
postã®ãšãã¯getPostLinkã䜿ããsubPostã®æã¯getSubPostLinkã䜿ãããã«ããŠãã ãã
äºè§£ããŸãããpost
ã®å Žåã«ã¯ getPostLink
ã䜿çšãã subPost
ã®å Žåã«ã¯ getSubPostLink
ã䜿çšããããã«ãæ¡ä»¶åå²ãä¿®æ£ããŸãã
post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : (
<a href={getSubPostLink(subPost.Slug)} class="link">
<>
<span class="icon">
{subPost.Icon && subPost.Icon.Type === 'emoji' ? (
subPost.Icon.Emoji
) : subPost.Icon && subPost.Icon.Type === 'external' ? (
<img src={subPost.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{subPost.Title}</span>
</>
</a>
)
äžèšã®ã³ãŒãã§ã¯ãpost
ã®å Žåã«ã¯ getPostLink(post.Slug)
ã䜿çšãã subPost
ã®å Žåã«ã¯ getSubPostLink(subPost.Slug)
ã䜿çšããŠããŸããããããã®æ¡ä»¶ã«å¿ããŠãé©åãªãªã³ã¯ãçæããããã«ãªããŸããã
ä¿®æ£åŸã®ã³ãŒããã確èªãã ãããããä»ã®æ¡ä»¶ãä¿®æ£ãå¿ èŠã§ããã°ãå ·äœçãªèŠä»¶ããæãããã ããã°å¹žãã§ãã
äžèšã«å ããŠãpostãSubPostã該åœããªãã£ãå Žåã«ä»¥äžã®ã³ãŒããå ¥ããŠãã ãã
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
äºè§£ããŸãããpost
ã subPost
ã該åœããªãå Žåã«ã"Post not found" ã®ã¡ãã»ãŒãžã衚瀺ããã³ãŒãã远å ããŸãã
ä¿®æ£åŸã®ã³ãŒãã¯ä»¥äžã®ããã«ãªããŸãã
{post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : subPost ? (
<a href={getSubPostLink(subPost.Slug)} class="link">
<>
<span class="icon">
{subPost.Icon && subPost.Icon.Type === 'emoji' ? (
subPost.Icon.Emoji
) : subPost.Icon && subPost.Icon.Type === 'external' ? (
<img src={subPost.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{subPost.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)}
äžèšã®ä¿®æ£ã«ãããpost
ã subPost
ãååšããªãå Žåã«ã"Post not found" ã®ã¡ãã»ãŒãžã衚瀺ããã³ãŒãã远å ãããŸããã
ä¿®æ£åŸã®ã³ãŒããã確èªãã ããããèŠæãããã°é æ ®ãªããç¥ãããã ããã
衚瀺ãããªãã£ãã®ã§åå ãèããŸããã
try catchæã®ãšããã§ãšã©ãŒã«ãªã£ããsubPostã«å
¥ãããšããæµãã¯ãpageIDèªäœããšã©ãŒãèµ·ãããŠãããå
šãŠpostã«å
¥ã£ãŠããŸã£ãŠãããšããããšã«æ°ã¥ããŸããã
DBãïŒã€ãããã®ã®ãAstro.propsã§ã¯ãã®å€å®ãã§ããªãã®ã§ãèŠèã®çã§ã以äžã®ã³ãŒãã«ä¿®æ£ããŸããã
import { Post,SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId,getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink,getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
subPost = await getSubPostByPageId(pageId)
}
---
{post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : subPost ? (
<a href={getSubPostLink(subPost.Slug)} class="link">
<>
<span class="icon">
{subPost.Icon && subPost.Icon.Type === 'emoji' ? (
subPost.Icon.Emoji
) : subPost.Icon && subPost.Icon.Type === 'external' ? (
<img src={subPost.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{subPost.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)}
éçºç°å¢ã§ã®ç¢ºèªã¯ã§ããŠããŠåããŠã¯ãããã§ãããpostãšsubPostã«äž¡æ¹å ¥ããŠããŸãã®ã¯ããã°ã©ã çã«ãªã«ãäžå ·åãèµ·ããåå ã«ãªããªãããšäžå®ã§ãã
ç³ãèš³ãããŸããã以åã®åçã§æ··ä¹±ãæããããã§ãããææããã ãã誀ãã«æ°ã¥ããŸããã
post` ãš `subPost` ã®äž¡æ¹ã«ããŒã¿ãå ¥ããšããåé¡ãçºçããªããããä¿®æ£ãè¡ããŸãã以äžã®ä¿®æ£æžã¿ã®ã³ãŒããã確èªãã ããã
import { Post, SubPost } from '../../lib/interfaces.ts'
import { getPostByPageId, getSubPostByPageId } from '../../lib/notion/client'
import { getPostLink, getSubPostLink } from '../../lib/blog-helpers.ts'
import '../../styles/notion-color.css'
import arrow from '../../images/icon-arrow-link.svg'
export interface Props {
pageId: string
}
const { pageId } = Astro.props
let post: Post = null
let subPost: SubPost = null
if (pageId) {
post = await getPostByPageId(pageId)
if (!post) {
subPost = await getSubPostByPageId(pageId)
}
}
---
{post ? (
<a href={getPostLink(post.Slug)} class="link">
<>
<span class="icon">
{post.Icon && post.Icon.Type === 'emoji' ? (
post.Icon.Emoji
) : post.Icon && post.Icon.Type === 'external' ? (
<img src={post.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{post.Title}</span>
</>
</a>
) : subPost ? (
<a href={getSubPostLink(subPost.Slug)} class="link">
<>
<span class="icon">
{subPost.Icon && subPost.Icon.Type === 'emoji' ? (
subPost.Icon.Emoji
) : subPost.Icon && subPost.Icon.Type === 'external' ? (
<img src={subPost.Icon.Url} class="notion-icon" />
) : (
'ð'
)}
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text">{subPost.Title}</span>
</>
</a>
) : (
<a class="link">
<span class="icon">
ð«
<img src={arrow} class="icon-link" alt="" />
</span>
<span class="text not-found">Post not found</span>
</a>
)}
ä¿®æ£åŸã®ã³ãŒãã§ã¯ãpost
ãååŸããåŸã«ãååšããªãå Žåã®ã¿ subPost
ãååŸããããã«ããŸãããã€ãŸããpost
ãååšããå Žåã«ã¯ subPost
ã¯ååŸãããŸããã
ããã«ãããpost
ãš subPost
ã®äž¡æ¹ã«ããŒã¿ãå
¥ãåé¡ã解決ããé©åã«èšäºã®ååŸãè¡ãããŸãã
ãäžæãªç¹ãããã°ãç¥ãããã ããããææ°ã§ãããä¿®æ£åŸã®ã³ãŒããå床確èªããã ããŸããšå¹žãã§ãã
ã§ããŸããïŒïŒïŒããããšã
ã©ãããããŸããŠïŒã圹ã«ç«ãŠãŠããããã§ããåé¡ã解決ãããæºè¶³ããã ããããã§è¯ãã£ãã§ãã
ããä»ã«è³ªåããå°ãããšããããŸãããããã€ã§ããç¥ãããã ããããæäŒãã§ããããšããããŸãã
Astroã䜿çšããŠè€æ°ã®ããã°DBã管çããæ¹æ³ã«ã€ããŠã®èšäºã§ãgetPostLinkãšgetSubPostLinkã䜿çšããŠãpostãšsubPostã®äž¡æ¹ã«ããŒã¿ãå ¥ãåé¡ã解決ããŸããã
ã§ãããŒãŒãŒãŒãŒãŒïŒŒ(^o^)ïŒ
https://github.com/herohoro/MakaiZoo_astro-notion-site/pull/42