@contember/react-richtext-renderer 2.1.0-alpha.9 → 2.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/index.cjs +4 -4
- package/dist/development/index.js +2 -2
- package/dist/development/src/components/RichText.cjs.map +1 -1
- package/dist/development/src/components/RichText.js.map +1 -1
- package/dist/development/src/components/RichTextBlocksRenderer.cjs.map +1 -1
- package/dist/development/src/components/RichTextBlocksRenderer.js.map +1 -1
- package/dist/development/src/components/RichTextFieldRenderer.cjs.map +1 -1
- package/dist/development/src/components/RichTextFieldRenderer.js.map +1 -1
- package/dist/development/src/components/RichTextRenderer.cjs +2 -2
- package/dist/development/src/components/RichTextRenderer.cjs.map +1 -1
- package/dist/development/src/components/RichTextRenderer.js +2 -2
- package/dist/development/src/components/RichTextRenderer.js.map +1 -1
- package/dist/development/src/hooks/useRichTextBlocksSource.cjs +17 -15
- package/dist/development/src/hooks/useRichTextBlocksSource.cjs.map +1 -1
- package/dist/development/src/hooks/useRichTextBlocksSource.js +17 -15
- package/dist/development/src/hooks/useRichTextBlocksSource.js.map +1 -1
- package/dist/development/src/hooks/useRichTextFieldSource.cjs.map +1 -1
- package/dist/development/src/hooks/useRichTextFieldSource.js.map +1 -1
- package/dist/development/src/internal/components/ElementRenderer.cjs +17 -5
- package/dist/development/src/internal/components/ElementRenderer.cjs.map +1 -1
- package/dist/development/src/internal/components/ElementRenderer.js +17 -5
- package/dist/development/src/internal/components/ElementRenderer.js.map +1 -1
- package/dist/development/src/internal/components/LeafRenderer.cjs.map +1 -1
- package/dist/development/src/internal/components/LeafRenderer.js.map +1 -1
- package/dist/development/src/internal/components/RenderElementFallback.cjs.map +1 -1
- package/dist/development/src/internal/components/RenderElementFallback.js.map +1 -1
- package/dist/development/src/internal/components/RenderLeafFallback.cjs.map +1 -1
- package/dist/development/src/internal/components/RenderLeafFallback.js.map +1 -1
- package/dist/development/src/internal/defaultDeserialize.cjs.map +1 -1
- package/dist/development/src/internal/defaultDeserialize.js.map +1 -1
- package/dist/development/src/internal/renderChildren.cjs.map +1 -1
- package/dist/development/src/internal/renderChildren.js.map +1 -1
- package/dist/development/src/internal/useReferenceMetadata.cjs.map +1 -1
- package/dist/development/src/internal/useReferenceMetadata.js.map +1 -1
- package/dist/production/index.cjs +4 -4
- package/dist/production/index.js +2 -2
- package/dist/production/src/components/RichText.cjs.map +1 -1
- package/dist/production/src/components/RichText.js.map +1 -1
- package/dist/production/src/components/RichTextBlocksRenderer.cjs.map +1 -1
- package/dist/production/src/components/RichTextBlocksRenderer.js.map +1 -1
- package/dist/production/src/components/RichTextFieldRenderer.cjs.map +1 -1
- package/dist/production/src/components/RichTextFieldRenderer.js.map +1 -1
- package/dist/production/src/components/RichTextRenderer.cjs.map +1 -1
- package/dist/production/src/components/RichTextRenderer.js.map +1 -1
- package/dist/production/src/hooks/useRichTextBlocksSource.cjs +17 -15
- package/dist/production/src/hooks/useRichTextBlocksSource.cjs.map +1 -1
- package/dist/production/src/hooks/useRichTextBlocksSource.js +17 -15
- package/dist/production/src/hooks/useRichTextBlocksSource.js.map +1 -1
- package/dist/production/src/hooks/useRichTextFieldSource.cjs.map +1 -1
- package/dist/production/src/hooks/useRichTextFieldSource.js.map +1 -1
- package/dist/production/src/internal/components/ElementRenderer.cjs +9 -1
- package/dist/production/src/internal/components/ElementRenderer.cjs.map +1 -1
- package/dist/production/src/internal/components/ElementRenderer.js +9 -1
- package/dist/production/src/internal/components/ElementRenderer.js.map +1 -1
- package/dist/production/src/internal/components/LeafRenderer.cjs.map +1 -1
- package/dist/production/src/internal/components/LeafRenderer.js.map +1 -1
- package/dist/production/src/internal/components/RenderElementFallback.cjs.map +1 -1
- package/dist/production/src/internal/components/RenderElementFallback.js.map +1 -1
- package/dist/production/src/internal/components/RenderLeafFallback.cjs.map +1 -1
- package/dist/production/src/internal/components/RenderLeafFallback.js.map +1 -1
- package/dist/production/src/internal/defaultDeserialize.cjs.map +1 -1
- package/dist/production/src/internal/defaultDeserialize.js.map +1 -1
- package/dist/production/src/internal/renderChildren.cjs.map +1 -1
- package/dist/production/src/internal/renderChildren.js.map +1 -1
- package/dist/production/src/internal/useReferenceMetadata.cjs.map +1 -1
- package/dist/production/src/internal/useReferenceMetadata.js.map +1 -1
- package/dist/types/components/RichText.d.ts.map +1 -1
- package/dist/types/components/RichTextRenderer.d.ts.map +1 -1
- package/dist/types/hooks/useRichTextBlocksSource.d.ts.map +1 -1
- package/dist/types/internal/components/ElementRenderer.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types/custom/RenderLeaf.d.ts.map +1 -1
- package/package.json +5 -6
- package/src/components/RichText.tsx +4 -2
- package/src/components/RichTextRenderer.tsx +0 -2
- package/src/hooks/useRichTextBlocksSource.ts +30 -28
- package/src/index.ts +0 -1
- package/src/internal/components/ElementRenderer.tsx +5 -2
- package/src/internal/components/LeafRenderer.tsx +1 -1
- package/src/internal/components/RenderElementFallback.tsx +3 -3
- package/src/types/RichTextRenderingOptions.ts +1 -1
- package/src/types/custom/RenderLeaf.ts +6 -8
- package/tests/decodeBlockSource.test.tsx +18 -17
- package/tests/renderElement.test.tsx +130 -83
- package/tests/renderLeaf.test.tsx +31 -23
- package/tests/renderReferences.test.tsx +82 -38
|
@@ -18,11 +18,11 @@ export const useRichTextBlocksSource = <CustomElements extends RichTextElement,
|
|
|
18
18
|
return blocks.map(block => {
|
|
19
19
|
if (!(sourceFieldResolved in block)) {
|
|
20
20
|
throw new RichTextRendererError(
|
|
21
|
-
`Found a block without a '${sourceFieldResolved}' field. `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
`Found a block without a '${sourceFieldResolved}' field. `
|
|
22
|
+
+ (sourceField === undefined
|
|
23
|
+
? `The 'sourceField' prop has not been supplied, and so '${sourceFieldResolved}' was used as a default.`
|
|
24
|
+
: `That is what the 'sourceField' prop has been set to, and so either this is a typo, `
|
|
25
|
+
+ `or the data supplied is invalid.`),
|
|
26
26
|
)
|
|
27
27
|
}
|
|
28
28
|
const source = block[sourceFieldResolved]
|
|
@@ -32,38 +32,40 @@ export const useRichTextBlocksSource = <CustomElements extends RichTextElement,
|
|
|
32
32
|
|
|
33
33
|
if (referencesField !== undefined && !(referencesFieldResolved in block)) {
|
|
34
34
|
throw new RichTextRendererError(
|
|
35
|
-
`The 'referencesField' prop is set to '${referencesFieldResolved}' but a block without such field `
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
`The 'referencesField' prop is set to '${referencesFieldResolved}' but a block without such field `
|
|
36
|
+
+ `has been encountered. Unless this is just a typo, `
|
|
37
|
+
+ `if you do not wish to use references, avoid supplying the 'referencesField' prop.`,
|
|
38
38
|
)
|
|
39
39
|
}
|
|
40
40
|
const references = block[referencesFieldResolved]
|
|
41
41
|
|
|
42
|
-
let normalizedReferences: Record<string, RichTextReference> | undefined
|
|
42
|
+
let normalizedReferences: Record<string, RichTextReference> | undefined
|
|
43
43
|
if (references) {
|
|
44
44
|
if (typeof Object(references)[Symbol.iterator] !== 'function') {
|
|
45
45
|
throw new RichTextRendererError(`The set of references must be an iterable!`)
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
normalizedReferences = Object.fromEntries(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
normalizedReferences = Object.fromEntries(
|
|
49
|
+
Array.from(references as Iterable<RichTextReference>).map(reference => {
|
|
50
|
+
if (!('id' in reference)) {
|
|
51
|
+
throw new RichTextRendererError(`Found a reference without an id field.`)
|
|
52
|
+
}
|
|
53
|
+
if (!(referenceDiscriminationFieldResolved in reference) || typeof reference[referenceDiscriminationFieldResolved] !== 'string') {
|
|
54
|
+
throw new RichTextRendererError(
|
|
55
|
+
`Found a reference without a '${referenceDiscriminationFieldResolved}' field. `
|
|
56
|
+
+ (referenceDiscriminationField === undefined
|
|
57
|
+
? `The 'referenceDiscriminationField' prop has not been supplied, `
|
|
58
|
+
+ `and so '${referenceDiscriminationFieldResolved}' was used as a default.`
|
|
59
|
+
: `That is what the 'referenceDiscriminationField' prop has been set to, `
|
|
60
|
+
+ `and so either this is a typo, or the data supplied is invalid.`),
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
return [reference.id, {
|
|
64
|
+
...reference,
|
|
65
|
+
type: reference[referenceDiscriminationFieldResolved] as string,
|
|
66
|
+
}]
|
|
67
|
+
}),
|
|
68
|
+
)
|
|
67
69
|
}
|
|
68
70
|
return {
|
|
69
71
|
id: typeof block.id === 'string' ? block.id : undefined,
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,6 @@ import type { RichTextLeaf } from '../../types/structure/RichTextLeaf'
|
|
|
9
9
|
import { RichTextBlock } from '../../types/RichTextBlock'
|
|
10
10
|
import { RichTextRenderingOptions } from '../../types/RichTextRenderingOptions'
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
export interface ElementRendererProps<
|
|
14
13
|
CustomElements extends RichTextElement = never,
|
|
15
14
|
CustomLeaves extends RichTextLeaf = RichTextLeaf,
|
|
@@ -27,7 +26,11 @@ export function ElementRenderer<
|
|
|
27
26
|
const referenceMetadata = useReferenceMetadata<CustomElements, CustomLeaves>(element, options, block)
|
|
28
27
|
|
|
29
28
|
const fallback = (
|
|
30
|
-
<RenderElementFallback<CustomElements, CustomLeaves>
|
|
29
|
+
<RenderElementFallback<CustomElements, CustomLeaves>
|
|
30
|
+
element={element as BuiltinElements<CustomElements, CustomLeaves>}
|
|
31
|
+
options={options}
|
|
32
|
+
block={block}
|
|
33
|
+
>
|
|
31
34
|
{children}
|
|
32
35
|
</RenderElementFallback>
|
|
33
36
|
)
|
|
@@ -127,9 +127,9 @@ function ReferenceElementFallback<
|
|
|
127
127
|
const elementMetadata = useReferenceMetadata<CustomElements, CustomLeaves>(element, options, block, true)
|
|
128
128
|
|
|
129
129
|
if (
|
|
130
|
-
elementMetadata.referenceRenderer === undefined
|
|
131
|
-
elementMetadata.referenceType === undefined
|
|
132
|
-
elementMetadata.reference === undefined
|
|
130
|
+
elementMetadata.referenceRenderer === undefined
|
|
131
|
+
|| elementMetadata.referenceType === undefined
|
|
132
|
+
|| elementMetadata.reference === undefined
|
|
133
133
|
) {
|
|
134
134
|
return children // At least render the text contents
|
|
135
135
|
}
|
|
@@ -6,7 +6,7 @@ import { RichTextReferenceMetadata } from './RichTextReferenceMetadata'
|
|
|
6
6
|
export type UndefinedReferenceHandler<
|
|
7
7
|
CustomElements extends RichTextElement = never,
|
|
8
8
|
CustomLeaves extends RichTextLeaf = RichTextLeaf,
|
|
9
|
-
Reference extends RichTextReference = RichTextReference
|
|
9
|
+
Reference extends RichTextReference = RichTextReference,
|
|
10
10
|
> = (referenceId: string) => void | RichTextReferenceMetadata<CustomElements, CustomLeaves, Reference>
|
|
11
11
|
|
|
12
12
|
export type RichTextRenderingOptions<
|
|
@@ -2,13 +2,11 @@ import { RichTextLeaf } from '../structure'
|
|
|
2
2
|
import { ComponentType, ReactElement } from 'react'
|
|
3
3
|
import { BuiltinLeaves } from '../builtin'
|
|
4
4
|
|
|
5
|
-
export type RenderLeafProps<CustomLeaves extends RichTextLeaf = RichTextLeaf> =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
5
|
+
export type RenderLeafProps<CustomLeaves extends RichTextLeaf = RichTextLeaf> = {
|
|
6
|
+
formatVersion: number
|
|
7
|
+
leaf: CustomLeaves & BuiltinLeaves
|
|
8
|
+
fallback: ReactElement
|
|
9
|
+
children: string
|
|
10
|
+
}
|
|
12
11
|
|
|
13
12
|
export type RenderLeaf<CustomLeaves extends RichTextLeaf> = ComponentType<RenderLeafProps<CustomLeaves>>
|
|
14
|
-
|
|
@@ -14,22 +14,24 @@ describe('useRichTextBlocksSource', () => {
|
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
test('decode blocks with references', () => {
|
|
17
|
-
const { result } = renderHook(() =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
const { result } = renderHook(() =>
|
|
18
|
+
useRichTextBlocksSource({
|
|
19
|
+
blocks: [{
|
|
20
|
+
source:
|
|
21
|
+
'{"formatVersion":1,"children":[{"type":"reference","children":[{"text":"Foo bar"}],"referenceId":"74bfb183-3adf-4cc1-8e8e-6d5cd700cadd"}]}',
|
|
22
|
+
references: [
|
|
23
|
+
{
|
|
24
|
+
id: '74bfb183-3adf-4cc1-8e8e-6d5cd700cadd',
|
|
25
|
+
type: 'image',
|
|
26
|
+
url: 'https://example.com/image.png',
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}],
|
|
30
|
+
sourceField: 'source',
|
|
31
|
+
referencesField: 'references',
|
|
32
|
+
referenceDiscriminationField: 'type',
|
|
33
|
+
})
|
|
34
|
+
)
|
|
33
35
|
expect(result.current).toStrictEqual([
|
|
34
36
|
{
|
|
35
37
|
'content': {
|
|
@@ -57,5 +59,4 @@ describe('useRichTextBlocksSource', () => {
|
|
|
57
59
|
},
|
|
58
60
|
])
|
|
59
61
|
})
|
|
60
|
-
|
|
61
62
|
})
|
|
@@ -13,114 +13,161 @@ describe('paragraph rendering', () => {
|
|
|
13
13
|
})
|
|
14
14
|
|
|
15
15
|
test('render paragraph', () => {
|
|
16
|
-
expect(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
expect(
|
|
17
|
+
render(
|
|
18
|
+
<RichText
|
|
19
|
+
blocks={[createBlock({
|
|
20
|
+
type: 'paragraph',
|
|
21
|
+
children: [{
|
|
22
|
+
text: 'Hello',
|
|
23
|
+
isBold: true,
|
|
24
|
+
}],
|
|
25
|
+
})]}
|
|
26
|
+
/>,
|
|
27
|
+
).container.innerHTML,
|
|
28
|
+
)
|
|
23
29
|
.toEqual(`<p data-contember-type="paragraph"><b>Hello</b></p>`)
|
|
24
30
|
})
|
|
25
31
|
|
|
26
32
|
test('render table', () => {
|
|
27
|
-
expect(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
expect(
|
|
34
|
+
render(
|
|
35
|
+
<RichText
|
|
36
|
+
blocks={[createBlock({
|
|
37
|
+
type: 'table',
|
|
38
|
+
children: [{
|
|
39
|
+
type: 'tableRow',
|
|
40
|
+
children: [{
|
|
41
|
+
type: 'tableCell',
|
|
42
|
+
children: [{
|
|
43
|
+
text: 'Hello',
|
|
44
|
+
}],
|
|
45
|
+
}],
|
|
46
|
+
}],
|
|
47
|
+
})]}
|
|
48
|
+
/>,
|
|
49
|
+
).container.innerHTML,
|
|
50
|
+
)
|
|
51
|
+
.toEqual(
|
|
52
|
+
`<table data-contember-type="table"><tbody><tr data-contember-type="tableRow"><td data-contember-type="tableCell">Hello</td></tr></tbody></table>`,
|
|
53
|
+
)
|
|
40
54
|
})
|
|
41
55
|
|
|
42
56
|
test('render table with header', () => {
|
|
43
|
-
expect(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
expect(
|
|
58
|
+
render(
|
|
59
|
+
<RichText
|
|
60
|
+
blocks={[createBlock({
|
|
61
|
+
type: 'table',
|
|
62
|
+
children: [{
|
|
63
|
+
type: 'tableRow',
|
|
64
|
+
headerScope: 'table',
|
|
65
|
+
children: [{
|
|
66
|
+
type: 'tableCell',
|
|
67
|
+
children: [{
|
|
68
|
+
text: 'Hello',
|
|
69
|
+
}],
|
|
70
|
+
}],
|
|
71
|
+
}],
|
|
72
|
+
})]}
|
|
73
|
+
/>,
|
|
74
|
+
).container.innerHTML,
|
|
75
|
+
)
|
|
76
|
+
.toEqual(
|
|
77
|
+
`<table data-contember-type="table"><thead><tr data-contember-type="tableRow" data-contember-headerscope="table"><td data-contember-type="tableCell">Hello</td></tr></thead><tbody></tbody></table>`,
|
|
78
|
+
)
|
|
57
79
|
})
|
|
58
80
|
|
|
59
81
|
test('render heading', () => {
|
|
60
|
-
expect(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
82
|
+
expect(
|
|
83
|
+
render(
|
|
84
|
+
<RichText
|
|
85
|
+
blocks={[createBlock({
|
|
86
|
+
type: 'heading',
|
|
87
|
+
level: 1,
|
|
88
|
+
children: [{
|
|
89
|
+
text: 'Hello',
|
|
90
|
+
}],
|
|
91
|
+
})]}
|
|
92
|
+
/>,
|
|
93
|
+
).container.innerHTML,
|
|
94
|
+
)
|
|
67
95
|
.toEqual(`<h1 data-contember-type="heading" data-contember-level="1">Hello</h1>`)
|
|
68
96
|
})
|
|
69
97
|
|
|
70
98
|
test('render list', () => {
|
|
71
|
-
expect(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
99
|
+
expect(
|
|
100
|
+
render(
|
|
101
|
+
<RichText
|
|
102
|
+
blocks={[createBlock({
|
|
103
|
+
type: 'unorderedList',
|
|
104
|
+
children: [{
|
|
105
|
+
type: 'listItem',
|
|
106
|
+
children: [{
|
|
107
|
+
text: 'Hello',
|
|
108
|
+
}],
|
|
109
|
+
}],
|
|
110
|
+
})]}
|
|
111
|
+
/>,
|
|
112
|
+
).container.innerHTML,
|
|
113
|
+
)
|
|
80
114
|
.toEqual(`<ul data-contember-type="unorderedList"><li data-contember-type="listItem">Hello</li></ul>`)
|
|
81
115
|
})
|
|
82
116
|
|
|
83
117
|
test('render ordered list', () => {
|
|
84
|
-
expect(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
118
|
+
expect(
|
|
119
|
+
render(
|
|
120
|
+
<RichText
|
|
121
|
+
blocks={[createBlock({
|
|
122
|
+
type: 'orderedList',
|
|
123
|
+
children: [{
|
|
124
|
+
type: 'listItem',
|
|
125
|
+
children: [{
|
|
126
|
+
text: 'Hello',
|
|
127
|
+
}],
|
|
128
|
+
}],
|
|
129
|
+
})]}
|
|
130
|
+
/>,
|
|
131
|
+
).container.innerHTML,
|
|
132
|
+
)
|
|
93
133
|
.toEqual(`<ol data-contember-type="orderedList"><li data-contember-type="listItem">Hello</li></ol>`)
|
|
94
134
|
})
|
|
95
135
|
|
|
96
136
|
test('custom element', () => {
|
|
97
|
-
expect(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
{
|
|
104
|
-
type: 'heading',
|
|
105
|
-
level: 1,
|
|
137
|
+
expect(
|
|
138
|
+
render(
|
|
139
|
+
<RichText
|
|
140
|
+
blocks={[{
|
|
141
|
+
content: {
|
|
142
|
+
formatVersion: 1,
|
|
106
143
|
children: [{
|
|
107
|
-
|
|
144
|
+
type: 'blockquote',
|
|
145
|
+
children: [
|
|
146
|
+
{
|
|
147
|
+
type: 'heading',
|
|
148
|
+
level: 1,
|
|
149
|
+
children: [{
|
|
150
|
+
text: 'Hello',
|
|
151
|
+
}],
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
text: 'Hello',
|
|
155
|
+
},
|
|
156
|
+
],
|
|
108
157
|
}],
|
|
109
158
|
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return it.fallback
|
|
123
|
-
}} />).container.innerHTML)
|
|
159
|
+
id: '1',
|
|
160
|
+
references: undefined,
|
|
161
|
+
}]}
|
|
162
|
+
renderElement={it => {
|
|
163
|
+
if (it.element.type === 'blockquote') {
|
|
164
|
+
return <blockquote data-contember-type="blockquote">{it.children}</blockquote>
|
|
165
|
+
}
|
|
166
|
+
return it.fallback
|
|
167
|
+
}}
|
|
168
|
+
/>,
|
|
169
|
+
).container.innerHTML,
|
|
170
|
+
)
|
|
124
171
|
.toEqual(`<blockquote data-contember-type="blockquote"><h1 data-contember-type="heading" data-contember-level="1">Hello</h1>Hello</blockquote>`)
|
|
125
172
|
})
|
|
126
173
|
})
|
|
@@ -25,54 +25,62 @@ describe('leaf rendering', () => {
|
|
|
25
25
|
.toEqual(`<code>Hello</code>`)
|
|
26
26
|
})
|
|
27
27
|
|
|
28
|
-
|
|
29
28
|
test('render highlighted', () => {
|
|
30
29
|
expect(render(<RichText blocks={[createLeafBlock('Hello', 'isHighlighted')]} />).container.innerHTML)
|
|
31
30
|
.toEqual(`<em>Hello</em>`)
|
|
32
31
|
})
|
|
33
32
|
|
|
34
|
-
|
|
35
33
|
test('render italic', () => {
|
|
36
34
|
expect(render(<RichText blocks={[createLeafBlock('Hello', 'isItalic')]} />).container.innerHTML)
|
|
37
35
|
.toEqual(`<i>Hello</i>`)
|
|
38
36
|
})
|
|
39
37
|
|
|
40
|
-
|
|
41
38
|
test('render underline', () => {
|
|
42
39
|
expect(render(<RichText blocks={[createLeafBlock('Hello', 'isUnderlined')]} />).container.innerHTML)
|
|
43
40
|
.toEqual(`<u>Hello</u>`)
|
|
44
41
|
})
|
|
45
42
|
|
|
46
|
-
|
|
47
43
|
test('render struck through', () => {
|
|
48
44
|
expect(render(<RichText blocks={[createLeafBlock('Hello', 'isStruckThrough')]} />).container.innerHTML)
|
|
49
45
|
.toEqual(`<s>Hello</s>`)
|
|
50
46
|
})
|
|
51
47
|
|
|
52
|
-
|
|
53
48
|
test('render multiple', () => {
|
|
54
|
-
expect(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
49
|
+
expect(
|
|
50
|
+
render(
|
|
51
|
+
<RichText
|
|
52
|
+
blocks={[{
|
|
53
|
+
content: {
|
|
54
|
+
formatVersion: 1,
|
|
55
|
+
children: [{
|
|
56
|
+
text: 'Hello',
|
|
57
|
+
isBold: true,
|
|
58
|
+
isItalic: true,
|
|
59
|
+
}],
|
|
60
|
+
},
|
|
61
|
+
id: '1',
|
|
62
|
+
references: undefined,
|
|
63
|
+
}]}
|
|
64
|
+
/>,
|
|
65
|
+
).container.innerHTML,
|
|
66
|
+
)
|
|
66
67
|
.toEqual(`<b><i>Hello</i></b>`)
|
|
67
68
|
})
|
|
68
69
|
|
|
69
70
|
test('render custom leaf', () => {
|
|
70
|
-
expect(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
expect(
|
|
72
|
+
render(
|
|
73
|
+
<RichText<never, { isSup?: boolean } & BuiltinLeaves>
|
|
74
|
+
blocks={[createLeafBlock('Hello', 'isSup')]}
|
|
75
|
+
renderLeaf={it => {
|
|
76
|
+
if (it.leaf.isSup) {
|
|
77
|
+
return <sup>{it.fallback}</sup>
|
|
78
|
+
}
|
|
79
|
+
return it.fallback
|
|
80
|
+
}}
|
|
81
|
+
/>,
|
|
82
|
+
).container.innerHTML,
|
|
83
|
+
)
|
|
76
84
|
.toEqual(`<sup>Hello</sup>`)
|
|
77
85
|
})
|
|
78
86
|
})
|