Skip to content

Commit 0074a01

Browse files
Added embed and list blocks
1 parent 90961ba commit 0074a01

File tree

8 files changed

+81
-6
lines changed

8 files changed

+81
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sveltekit-notion-blog",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"scripts": {
55
"dev": "vite dev",
66
"build": "vite build && npm run package",

src/lib/components/Block.svelte

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import Paragraph from "./Paragraph.svelte";
55
import Table from "./FAQ.svelte";
66
import ImageBlock from "./ImageBlock.svelte";
7+
import NumberedList from "./NumberedList.svelte";
8+
import BulletList from "./BulletList.svelte";
9+
import Embed from "./Embed.svelte";
710
export let block: BlockObjectResponse;
8-
//$: console.log(block.type, block);
11+
$: console.log(block.type, block);
912
1013
</script>
1114

@@ -18,8 +21,12 @@
1821
<Heading heading={block} />
1922
{:else if block.type=="paragraph"}
2023
<Paragraph paragraph={block} />
21-
<!-- {:else if block.type=="table"}
22-
<Table /> -->
24+
{:else if block.type=="numbered_list_item"}
25+
<NumberedList {block} />
26+
{:else if block.type=="bulleted_list_item"}
27+
<BulletList {block} />
2328
{:else if block.type=="image"}
2429
<ImageBlock {block} />
30+
{:else if block.type=="embed"}
31+
<Embed {block} />
2532
{/if}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script lang="ts">
2+
import type { BulletedListItemBlockObjectResponse, NumberedListItemBlockObjectResponse } from "@notionhq/client/build/src/api-endpoints";
3+
import Text from "./Text.svelte";
4+
export let block: BulletedListItemBlockObjectResponse;
5+
</script>
6+
7+
{#if block && block.bulleted_list_item?.rich_text.length > 0}
8+
{#each block.bulleted_list_item.rich_text as item }
9+
<Text text={item} />
10+
{/each}
11+
{/if}

src/lib/components/Embed.svelte

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<script lang="ts">
2+
import type { EmbedBlockObjectResponse } from "@notionhq/client/build/src/api-endpoints";
3+
export let block: EmbedBlockObjectResponse;
4+
5+
//$: url = block?.embed?.url;
6+
7+
const isImage = (url: string) => {
8+
return url.indexOf(".jpg") >=0 || url.indexOf(".png") >=0 || url.indexOf(".jpeg") >=0 || url.indexOf(".webp") >=0 || url.indexOf(".avif") >=0
9+
}
10+
11+
const fetchEmbedMetas = async (url: string) => {
12+
const response = await fetch(`https://api.dub.sh/metatags?url=${url}`)
13+
14+
if(response.ok){
15+
return response.json();
16+
}else{
17+
return url;
18+
}
19+
}
20+
</script>
21+
22+
{#if block}
23+
{#if isImage(block.embed.url)}
24+
<img src={block.embed.url} alt={block.embed.caption?.join(" ")} />
25+
{:else}
26+
{#await fetchEmbedMetas(block.embed.url)}
27+
Generating Embed...
28+
{:then {title, description, image}}
29+
<div class="flex flex-col overflow-hidden rounded-md border border-gray-300 bg-gray-50">
30+
<img src={image} alt={description} class="h-[250px] w-full border-b border-gray-300 object-cover" />
31+
<div class="flex flex-col bg-slate-50 gap-1">
32+
<b class="text-sm text-[#536471]">{title}</b>
33+
<p class="line-clamp-2 text-sm text-[#536471]">{description}</p>
34+
</div>
35+
</div>
36+
{/await}
37+
{/if}
38+
{/if}

src/lib/components/ImageBlock.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
{#if block.image.type=="file"}
99
<Image src={block.image.file.url} layout="fullWidth" aspectRatio={16/9} class="aspect-video object-cover rounded-md" />
1010
{#if block.image.caption?.length > 0}
11-
<p class="w-full text-xs text-gray-400 text-center">{block.image.caption?.[0].plain_text}</p>
11+
<p class="w-full text-xs text-gray-400 text-center">{block.image.caption?.[0].plain_text}</p>
1212
{/if}
1313
{:else if block.image.type=="external"}
1414
<Image src={block.image.external.url} layout="fullWidth" aspectRatio={16/9} class="aspect-video object-cover rounded-md" />
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script lang="ts">
2+
import type { NumberedListItemBlockObjectResponse } from "@notionhq/client/build/src/api-endpoints";
3+
import Text from "./Text.svelte";
4+
export let block: NumberedListItemBlockObjectResponse;
5+
</script>
6+
7+
{#if block && block.numbered_list_item.rich_text?.length> 0}
8+
{#each block.numbered_list_item.rich_text as item }
9+
<Text text={item} />
10+
{/each}
11+
{/if}

src/lib/components/Text.svelte

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script lang="ts">
2+
import type { RichTextItemResponse } from "@notionhq/client/build/src/api-endpoints";
3+
export let text: RichTextItemResponse;
4+
</script>
5+
6+
{#if text}
7+
<p style:font-weight={text.annotations.bold ? "bold": "normal"} style:font-style={text.annotations.italic ? "italic": "normal"}>{text.plain_text}</p>
8+
{/if}

src/lib/notion/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export const getBlocks = async (blogClient: BlogClient, blockId: string): Promi
8686

8787
const { results } = await notion.blocks.children.list({
8888
block_id: blockId,
89-
page_size: 50,
89+
page_size: 100,
9090
});
9191

9292
let blocks: BlockObjectResponse[] = [];

0 commit comments

Comments
 (0)