Skip to content

Commit 4338413

Browse files
committed
v
1 parent e9fc2a6 commit 4338413

File tree

5 files changed

+43
-9
lines changed

5 files changed

+43
-9
lines changed

packages/basehub/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# basehub
22

3+
## 9.4.1
4+
5+
### Patch Changes
6+
7+
- fix rich text slugger hydration mismatch in react strict mode
8+
39
## 9.4.0
410

511
### Minor Changes

packages/basehub/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "basehub",
33
"description": "A very fast Headless CMS.",
44
"author": "JB <jb@basehub.com>",
5-
"version": "9.4.0",
5+
"version": "9.4.1",
66
"license": "MIT",
77
"repository": "basehub-ai/basehub",
88
"bugs": "https://github.com/basehub-ai/basehub/issues",

packages/basehub/src/react/rich-text/primitive.tsx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,18 @@ export const RichText = <
216216
value = contentRaw.content;
217217
}
218218
}
219+
219220
const slugger = new GithubSlugger();
221+
const sluggerCache = new Map<string, string>();
222+
223+
const getSlug = (text: string) => {
224+
if (sluggerCache.has(text)) {
225+
return sluggerCache.get(text)!;
226+
}
227+
const slug = slugger.slug(text);
228+
sluggerCache.set(text, slug);
229+
return slug;
230+
};
220231

221232
return (
222233
<>
@@ -227,7 +238,7 @@ export const RichText = <
227238
key={index}
228239
components={props.components}
229240
blocks={props.blocks}
230-
slugger={slugger}
241+
getSlug={getSlug}
231242
disableDefaultComponents={props.disableDefaultComponents}
232243
/>
233244
);
@@ -319,14 +330,14 @@ const Node = ({
319330
node,
320331
components,
321332
blocks,
322-
slugger,
333+
getSlug,
323334
disableDefaultComponents,
324335
}: {
325336
node: RichTextNode;
326337
components?: Partial<Handlers>;
327338
blocks?: readonly CustomBlockBase[];
328339
parent?: RichTextNode;
329-
slugger: GithubSlugger;
340+
getSlug: (text: string) => string;
330341
disableDefaultComponents?: boolean;
331342
}) => {
332343
const children = node.content?.map((childNode, index) => {
@@ -337,7 +348,7 @@ const Node = ({
337348
key={index}
338349
components={components}
339350
blocks={blocks}
340-
slugger={slugger}
351+
getSlug={getSlug}
341352
disableDefaultComponents={disableDefaultComponents}
342353
/>
343354
);
@@ -408,7 +419,7 @@ const Node = ({
408419
Handler =
409420
components?.[handlerTag] ??
410421
(disableDefaultComponents ? () => <></> : defaultHandlers[handlerTag]);
411-
const id = slugger.slug(extractTextFromNode(node));
422+
const id = getSlug(extractTextFromNode(node));
412423

413424
props = { children, id } satisfies ExtractPropsForHandler<Handlers["h1"]>;
414425
break;
@@ -455,7 +466,7 @@ const Node = ({
455466
parent={node}
456467
components={components}
457468
blocks={blocks}
458-
slugger={slugger}
469+
getSlug={getSlug}
459470
disableDefaultComponents={disableDefaultComponents}
460471
/>
461472
);
@@ -807,6 +818,16 @@ export type TOCProps = {
807818

808819
export const TOC = (props: TOCProps): JSX.Element => {
809820
const slugger = new GithubSlugger();
821+
const sluggerCache = new Map<string, string>();
822+
823+
const getSlug = (text: string) => {
824+
if (sluggerCache.has(text)) {
825+
return sluggerCache.get(text)!;
826+
}
827+
const slug = slugger.slug(text);
828+
sluggerCache.set(text, slug);
829+
return slug;
830+
};
810831

811832
const value = (props.content ?? props.children) as RichTextTocNode[];
812833

@@ -818,7 +839,7 @@ export const TOC = (props: TOCProps): JSX.Element => {
818839
node={node as RichTextNode}
819840
key={index}
820841
components={props.components}
821-
slugger={slugger}
842+
getSlug={getSlug}
822843
disableDefaultComponents={props.disableDefaultComponents}
823844
/>
824845
);

playground/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# playground
22

3+
## 0.0.256
4+
5+
### Patch Changes
6+
7+
- Updated dependencies
8+
- basehub@9.4.1
9+
310
## 0.0.255
411

512
### Patch Changes

playground/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "playground",
33
"private": true,
4-
"version": "0.0.255",
4+
"version": "0.0.256",
55
"scripts": {
66
"dev": "next dev --port 3003",
77
"build": "next build",

0 commit comments

Comments
 (0)