Skip to content

Commit 2ac5884

Browse files
committed
[optimize] render Wiki list as a Tree view
[optimize] upgrade to Koa Router 14 & other latest Upstream packages
1 parent ab6f385 commit 2ac5884

File tree

8 files changed

+300
-248
lines changed

8 files changed

+300
-248
lines changed

components/Navigator/MainNavigator.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export const MainNavigator: FC = observer(() => {
2828
<Nav className="me-auto">
2929
<Nav.Link href="/article">{t('article')}</Nav.Link>
3030

31+
<Nav.Link href="/wiki">{t('wiki')}</Nav.Link>
32+
3133
<Nav.Link href="/component">{t('component')}</Nav.Link>
3234

3335
<Nav.Link href="/pagination">{t('pagination')}</Nav.Link>

models/Document.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { DocumentModel } from 'mobx-lark';
22

33
import { lark } from '../pages/api/Lark/core';
4+
import { LarkWikiDomain } from './configuration';
45

56
export class MyDocumentModel extends DocumentModel {
67
client = lark.client;
78
}
89

9-
export default new MyDocumentModel();
10+
export default new MyDocumentModel(LarkWikiDomain);

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
"@editorjs/list": "^2.0.8",
1616
"@editorjs/paragraph": "^2.11.7",
1717
"@editorjs/quote": "^2.7.6",
18-
"@koa/router": "^13.1.1",
18+
"@koa/router": "^14.0.0",
1919
"@mdx-js/loader": "^3.1.0",
2020
"@mdx-js/react": "^3.1.0",
2121
"@next/mdx": "^15.4.5",
22-
"@sentry/nextjs": "^10.0.0",
22+
"@sentry/nextjs": "^10.1.0",
2323
"copy-webpack-plugin": "^13.0.0",
24-
"core-js": "^3.44.0",
24+
"core-js": "^3.45.0",
2525
"editorjs-html": "^4.0.5",
2626
"file-type": "^21.0.0",
2727
"formidable": "^3.5.4",
@@ -32,12 +32,12 @@
3232
"less": "^4.4.0",
3333
"less-loader": "^12.3.0",
3434
"lodash": "^4.17.21",
35-
"marked": "^16.1.1",
35+
"marked": "^16.1.2",
3636
"mime": "^4.0.7",
3737
"mobx": "^6.13.7",
3838
"mobx-github": "^0.3.11",
3939
"mobx-i18n": "^0.7.1",
40-
"mobx-lark": "^2.4.0-rc.10",
40+
"mobx-lark": "^2.4.0",
4141
"mobx-react": "^9.2.0",
4242
"mobx-react-helper": "^0.5.1",
4343
"mobx-restful": "^2.1.0",
@@ -56,7 +56,7 @@
5656
"remark-gfm": "^4.0.1",
5757
"remark-mdx-frontmatter": "^5.2.0",
5858
"undici": "^7.13.0",
59-
"web-utility": "^4.4.3",
59+
"web-utility": "^4.5.1",
6060
"webpack": "^5.101.0",
6161
"yaml": "^2.8.0"
6262
},
@@ -87,11 +87,11 @@
8787
"globals": "^16.3.0",
8888
"husky": "^9.1.7",
8989
"jiti": "^2.5.1",
90-
"lint-staged": "^16.1.2",
90+
"lint-staged": "^16.1.4",
9191
"prettier": "^3.6.2",
9292
"prettier-plugin-css-order": "^2.1.2",
9393
"typescript": "~5.9.2",
94-
"typescript-eslint": "^8.38.0"
94+
"typescript-eslint": "^8.39.0"
9595
},
9696
"resolutions": {
9797
"next": "$next"

pages/wiki/index.tsx

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import { WikiNode } from 'mobx-lark';
2+
import { observer } from 'mobx-react';
23
import { GetStaticProps } from 'next';
3-
import { FC } from 'react';
4+
import { FC, useContext } from 'react';
45
import { Container } from 'react-bootstrap';
6+
import { treeFrom } from 'web-utility';
57

68
import { PageHead } from '../../components/Layout/PageHead';
9+
import { I18nContext } from '../../models/Translation';
710
import wikiStore from '../../models/Wiki';
811
import { lark } from '../api/Lark/core';
912

@@ -15,20 +18,38 @@ export const getStaticProps: GetStaticProps = async () => {
1518
return { props: { nodes } };
1619
};
1720

18-
const WikiIndexPage: FC<{ nodes: WikiNode[] }> = ({ nodes }) => (
19-
<Container>
20-
<PageHead title="Wiki" />
21-
22-
<h1>Wiki</h1>
21+
interface XWikiNode extends WikiNode {
22+
// eslint-disable-next-line no-restricted-syntax
23+
children?: XWikiNode[];
24+
}
2325

26+
const renderTree = (children?: XWikiNode[]) =>
27+
children && (
2428
<ol>
25-
{nodes.map(({ node_token, title }) => (
29+
{children.map(({ node_token, title, children }) => (
2630
<li key={node_token}>
2731
<a href={`/wiki/${node_token}`}>{title}</a>
32+
33+
{renderTree(children)}
2834
</li>
2935
))}
3036
</ol>
31-
</Container>
32-
);
37+
);
38+
39+
const WikiIndexPage: FC<{ nodes: XWikiNode[] }> = observer(({ nodes }) => {
40+
const { t } = useContext(I18nContext);
41+
42+
return (
43+
<Container>
44+
<PageHead title={t('wiki')} />
45+
46+
<h1>{t('wiki')}</h1>
47+
48+
{renderTree(
49+
treeFrom(nodes, 'node_token', 'parent_node_token', 'children'),
50+
)}
51+
</Container>
52+
);
53+
});
3354

3455
export default WikiIndexPage;

0 commit comments

Comments
 (0)