Skip to content

Commit ee746e8

Browse files
authored
Merge pull request #72 from janniks/fix-tables
Fix table ordering
2 parents 070cbd9 + f8dc50f commit ee746e8

File tree

10 files changed

+3997
-3192
lines changed

10 files changed

+3997
-3192
lines changed

dev/serve.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default {
2222
async created() {
2323
// react-notion tester: 2e22de6b770e4166be301490f6ffd420
2424
// equation tester: 2a1d5226d68246deba627012081693f9
25+
// table tester: bd1de400a8b349dc824f4f00e61d0797
2526
// todo tester: 235057194b954a60ace89c052a65d102
2627
this.blockMap = await getPageBlocks("2e22de6b770e4166be301490f6ffd420");
2728
},

package-lock.json

Lines changed: 3914 additions & 3091 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
"@rollup/plugin-commonjs": "^20.0.0",
4040
"@rollup/plugin-replace": "^3.0.0",
4141
"@types/prismjs": "^1.16.6",
42-
"@vue/cli-plugin-babel": "^3.3.0",
43-
"@vue/cli-service": "^3.12.1",
42+
"@vue/cli-plugin-babel": "^4.3.1",
43+
"@vue/cli-service": "^4.3.1",
4444
"cross-env": "^7.0.2",
4545
"cross-fetch": "^3.0.6",
4646
"minimist": "^1.2.5",

src/blocks/helpers/table-row.vue

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/blocks/table-row.vue

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<template>
2+
<tr class="notion-simple-table-row">
3+
<td
4+
v-for="(columnId, columnIndex) in columns"
5+
:key="columnIndex"
6+
class="notion-simple-table-data"
7+
>
8+
<div :class="{ 'notion-simple-table-header': isHeader(columnIndex) }">
9+
<div class="notion-simple-table-cell-text">
10+
<NotionTextRenderer :text="cell(columnId)" v-bind="pass" />
11+
</div>
12+
</div>
13+
</td>
14+
</tr>
15+
</template>
16+
17+
<script>
18+
import Blockable, { blockComputed } from "@/lib/blockable";
19+
import NotionTextRenderer from "@/blocks/helpers/text-renderer";
20+
21+
export default {
22+
extends: Blockable,
23+
name: "NotionTableRow",
24+
components: {
25+
NotionTextRenderer,
26+
},
27+
computed: {
28+
...blockComputed,
29+
hasHeaderColumn() {
30+
return this.parent?.value?.format?.table_block_column_header;
31+
},
32+
hasHeaderRow() {
33+
return this.parent?.value?.format?.table_block_row_header;
34+
},
35+
columns() {
36+
return this.parent?.value?.format?.table_block_column_order;
37+
},
38+
},
39+
methods: {
40+
cell(columnId) {
41+
return this.properties[columnId];
42+
},
43+
isHeader(columnIndex) {
44+
return (
45+
(this.hasHeaderColumn && this.contentIndex == 0) ||
46+
(this.hasHeaderRow && columnIndex == 0)
47+
);
48+
},
49+
},
50+
};
51+
</script>

src/blocks/table.vue

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,17 @@
22
<div>
33
<table class="notion-simple-table">
44
<tbody>
5-
<NotionTableRow
6-
v-for="(row, index) in rows"
7-
:key="row.value.id"
8-
:row="row"
9-
:rowIndex="index"
10-
:hasColumnHeader="hasColumnHeader"
11-
:hasRowHeader="hasRowHeader"
12-
v-bind="pass"
13-
/>
5+
<slot />
146
</tbody>
157
</table>
168
</div>
179
</template>
1810

1911
<script>
20-
import Blockable, { blockComputed } from "@/lib/blockable";
21-
import NotionTableRow from "@/blocks/helpers/table-row";
12+
import Blockable from "@/lib/blockable";
2213
2314
export default {
2415
extends: Blockable,
2516
name: "NotionTable",
26-
components: {
27-
NotionTableRow,
28-
},
29-
computed: {
30-
...blockComputed,
31-
rows() {
32-
return this.value.content.map((id) => this.blockMap[id]);
33-
},
34-
hasColumnHeader() {
35-
return this.value.format.table_block_column_header;
36-
},
37-
hasRowHeader() {
38-
return this.value.format.table_block_row_header;
39-
},
40-
},
4117
};
4218
</script>

src/components/block.vue

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
v-else-if="isType(['image', 'embed', 'figma', 'video', 'audio'])"
3535
v-bind="pass"
3636
/>
37-
<NotionTable v-else-if="isType('table')" v-bind="pass" />
37+
<NotionTable v-else-if="isType('table')" v-bind="pass"><slot /></NotionTable>
38+
<NotionTableRow v-else-if="isType('table_row')" v-bind="pass" />
3839
<hr v-else-if="isType('divider')" class="notion-hr" />
3940
<div v-else-if="todo && visible">
4041
todo: {{ type }}
@@ -50,16 +51,17 @@ import NotionBookmark from "@/blocks/bookmark";
5051
import NotionCallout from "@/blocks/callout";
5152
import NotionCode from "@/blocks/code";
5253
import NotionColumn from "@/blocks/column";
54+
import NotionEquation from "@/blocks/equation";
5355
import NotionFigure from "@/blocks/helpers/figure";
56+
import NotionHeader from "@/blocks/header";
5457
import NotionList from "@/blocks/list";
5558
import NotionPage from "@/blocks/page";
56-
import NotionHeader from "@/blocks/header";
57-
import NotionText from "@/blocks/text";
58-
import NotionToggle from "@/blocks/toggle";
5959
import NotionQuote from "@/blocks/quote";
60-
import NotionEquation from "@/blocks/equation";
61-
import NotionTodo from "@/blocks/todo";
6260
import NotionTable from "@/blocks/table";
61+
import NotionTableRow from "@/blocks/table-row";
62+
import NotionText from "@/blocks/text";
63+
import NotionTodo from "@/blocks/todo";
64+
import NotionToggle from "@/blocks/toggle";
6365
6466
export default {
6567
extends: Blockable,
@@ -69,16 +71,17 @@ export default {
6971
NotionCallout,
7072
NotionCode,
7173
NotionColumn,
74+
NotionEquation,
7275
NotionFigure,
76+
NotionHeader,
7377
NotionList,
7478
NotionPage,
75-
NotionHeader,
76-
NotionText,
77-
NotionToggle,
7879
NotionQuote,
7980
NotionTable,
80-
NotionEquation,
81+
NotionTableRow,
82+
NotionText,
8183
NotionTodo,
84+
NotionToggle,
8285
},
8386
};
8487
</script>

src/components/notion-renderer.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<template>
22
<NotionBlock v-bind="pass" v-if="blockMap && value">
33
<NotionRenderer
4-
v-for="contentId in value.content"
5-
:key="contentId"
4+
v-for="(contentId, contentIndex) in value.content"
65
v-bind="pass"
6+
:key="contentId"
77
:level="level + 1"
88
:content-id="contentId"
9+
:content-index="contentIndex"
910
/>
1011
</NotionBlock>
1112
</template>
@@ -25,6 +26,7 @@ export default {
2526
props: {
2627
blockMap: [Object],
2728
contentId: String,
29+
contentIndex: { type: Number, default: 0 },
2830
fullPage: { type: Boolean, default: false },
2931
hideList: { type: Array, default: () => [] },
3032
level: { type: Number, default: 0 },

src/lib/blockable.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getTextContent } from "@/lib/utils";
33
export const blockProps = {
44
blockMap: { type: Object, required: true },
55
contentId: { type: String, required: false },
6+
contentIndex: { type: Number, default: 0 },
67
embedAllow: { type: String, default: "fullscreen" },
78
fullPage: { type: Boolean, default: false },
89
hideList: { type: Array, default: () => [] },
@@ -23,6 +24,7 @@ export const blockComputed = {
2324
return {
2425
blockMap: this.blockMap,
2526
contentId: this.contentId,
27+
contentIndex: this.contentIndex,
2628
embedAllow: this.embedAllow,
2729
fullPage: this.fullPage,
2830
hideList: this.hideList,
@@ -84,6 +86,9 @@ export const blockComputed = {
8486
hasPageLinkOptions() {
8587
return this.pageLinkOptions?.component && this.pageLinkOptions?.href;
8688
},
89+
parent() {
90+
return this.blockMap[this.value?.parent_id];
91+
},
8792
};
8893

8994
export default {

src/styles.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,3 +714,8 @@ img.notion-nav-icon {
714714
font-size: 14px;
715715
line-height: 20px;
716716
}
717+
718+
.notion-simple-table-header {
719+
background: rgb(247, 246, 243);
720+
font-weight: 500;
721+
}

0 commit comments

Comments
 (0)