react-datocms 2.1.2 → 2.2.0
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/README.md +16 -9
- package/dist/cjs/StructuredText/__tests__/index.test.js +77 -67
- package/dist/cjs/StructuredText/__tests__/index.test.js.map +1 -1
- package/dist/cjs/StructuredText/index.js +76 -61
- package/dist/cjs/StructuredText/index.js.map +1 -1
- package/dist/esm/StructuredText/__tests__/index.test.js +81 -71
- package/dist/esm/StructuredText/__tests__/index.test.js.map +1 -1
- package/dist/esm/StructuredText/index.d.ts +12 -7
- package/dist/esm/StructuredText/index.js +78 -63
- package/dist/esm/StructuredText/index.js.map +1 -1
- package/dist/types/StructuredText/index.d.ts +12 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -15,8 +15,8 @@ A set of components and utilities to work faster with [DatoCMS](https://www.dato
|
|
|
15
15
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
16
16
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
- [Demos](#demos)
|
|
19
|
+
- [Installation](#installation)
|
|
20
20
|
- [Live real-time updates](#live-real-time-updates)
|
|
21
21
|
- [Reference](#reference)
|
|
22
22
|
- [Initialization options](#initialization-options)
|
|
@@ -659,19 +659,19 @@ For example:
|
|
|
659
659
|
|
|
660
660
|
- For all possible node types, refer to the [list of typeguard functions defined in the main `structured-text` package](https://github.com/datocms/structured-text/tree/main/packages/utils#typescript-type-guards). The [DAST format documentation](https://www.datocms.com/docs/structured-text/dast) has additional details.
|
|
661
661
|
|
|
662
|
-
In this case, you can easily override default rendering rules with the `
|
|
662
|
+
In this case, you can easily override default rendering rules with the `customNodeRules` and `customMarkRules` props.
|
|
663
663
|
|
|
664
664
|
```jsx
|
|
665
|
-
import {
|
|
665
|
+
import { renderNodeRule, renderMarkRule, StructuredText } from 'react-datocms';
|
|
666
666
|
import { isHeading, isCode } from 'datocms-structured-text-utils';
|
|
667
667
|
import { render as toPlainText } from 'datocms-structured-text-to-plain-text';
|
|
668
668
|
import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
669
669
|
|
|
670
670
|
<StructuredText
|
|
671
671
|
data={data.blogPost.content}
|
|
672
|
-
|
|
672
|
+
customNodeRules={[
|
|
673
673
|
// Add HTML anchors to heading levels for in-page navigation
|
|
674
|
-
|
|
674
|
+
renderNodeRule(isHeading, ({ node, children, key }) => {
|
|
675
675
|
const HeadingTag = `h${node.level}`;
|
|
676
676
|
const anchor = toPlainText(node)
|
|
677
677
|
.toLowerCase()
|
|
@@ -687,7 +687,7 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
687
687
|
}),
|
|
688
688
|
|
|
689
689
|
// Use a custom syntax highlighter component for code blocks
|
|
690
|
-
|
|
690
|
+
renderNodeRule(isCode, ({ node, key }) => {
|
|
691
691
|
return (
|
|
692
692
|
<SyntaxHighlight
|
|
693
693
|
key={key}
|
|
@@ -699,7 +699,7 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
699
699
|
}),
|
|
700
700
|
|
|
701
701
|
// Apply different formatting to top-level paragraphs
|
|
702
|
-
|
|
702
|
+
renderNodeRule(
|
|
703
703
|
isParagraph,
|
|
704
704
|
({ adapter: { renderNode }, node, children, key, ancestors }) => {
|
|
705
705
|
if (isRoot(ancestors[0])) {
|
|
@@ -719,6 +719,12 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
719
719
|
},
|
|
720
720
|
),
|
|
721
721
|
]}
|
|
722
|
+
customMarkRules={[
|
|
723
|
+
// convert "strong" marks into <b> tags
|
|
724
|
+
renderMarkRule('strong', ({ mark, children, key }) => {
|
|
725
|
+
return <b key={key}>{children}</b>;
|
|
726
|
+
}),
|
|
727
|
+
]}
|
|
722
728
|
/>;
|
|
723
729
|
```
|
|
724
730
|
|
|
@@ -733,7 +739,8 @@ Note: if you override the rules for `inline_item`, `item_link` or `block` nodes,
|
|
|
733
739
|
| renderLinkToRecord | `({ record, children }) => ReactElement \| null` | Only required if document contains `itemLink` nodes | Convert an `itemLink` DAST node into React | `null` |
|
|
734
740
|
| renderBlock | `({ record }) => ReactElement \| null` | Only required if document contains `block` nodes | Convert a `block` DAST node into React | `null` |
|
|
735
741
|
| metaTransformer | `({ node, meta }) => Object \| null` | :x: | Transform `link` and `itemLink` meta property into HTML props | [See function](https://github.com/datocms/structured-text/blob/main/packages/generic-html-renderer/src/index.ts#L61) |
|
|
736
|
-
|
|
|
742
|
+
| customNodeRules | `Array<RenderRule>` | :x: | Customize how nodes are converted in JSX (use `renderNodeRule()` to generate rules) | `null` |
|
|
743
|
+
| customMarkRules | `Array<RenderMarkRule>` | :x: | Customize how marks are converted in JSX (use `renderMarkRule()` to generate rules) | `null` |
|
|
737
744
|
| renderText | `(text: string, key: string) => ReactElement \| string \| null` | :x: | Convert a simple string text into React | `(text) => text` |
|
|
738
745
|
|
|
739
746
|
# Development
|
|
@@ -34,63 +34,75 @@ var enzyme_1 = require("enzyme");
|
|
|
34
34
|
var React = __importStar(require("react"));
|
|
35
35
|
var index_1 = require("../index");
|
|
36
36
|
var datocms_structured_text_utils_1 = require("datocms-structured-text-utils");
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
var datocms_structured_text_generic_html_renderer_1 = require("datocms-structured-text-generic-html-renderer");
|
|
38
|
+
describe('StructuredText', function () {
|
|
39
|
+
describe('with no value', function () {
|
|
40
|
+
it('renders null', function () {
|
|
40
41
|
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: null }));
|
|
41
42
|
expect(wrapper).toMatchSnapshot();
|
|
42
43
|
});
|
|
43
44
|
});
|
|
44
|
-
describe(
|
|
45
|
+
describe('simple dast /2', function () {
|
|
45
46
|
var structuredText = {
|
|
46
|
-
schema:
|
|
47
|
+
schema: 'dast',
|
|
47
48
|
document: {
|
|
48
|
-
type:
|
|
49
|
+
type: 'root',
|
|
49
50
|
children: [
|
|
50
51
|
{
|
|
51
|
-
type:
|
|
52
|
+
type: 'heading',
|
|
52
53
|
level: 1,
|
|
53
54
|
children: [
|
|
54
55
|
{
|
|
55
|
-
type:
|
|
56
|
-
value:
|
|
56
|
+
type: 'span',
|
|
57
|
+
value: 'This\nis a '
|
|
57
58
|
},
|
|
58
59
|
{
|
|
59
|
-
type:
|
|
60
|
-
marks: [
|
|
61
|
-
value:
|
|
60
|
+
type: 'span',
|
|
61
|
+
marks: ['strong'],
|
|
62
|
+
value: 'title'
|
|
62
63
|
},
|
|
63
64
|
]
|
|
64
65
|
},
|
|
65
66
|
]
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
|
-
describe(
|
|
69
|
-
it(
|
|
69
|
+
describe('with default rules', function () {
|
|
70
|
+
it('renders the document', function () {
|
|
70
71
|
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: structuredText }));
|
|
71
72
|
expect(wrapper).toMatchSnapshot();
|
|
72
73
|
});
|
|
73
74
|
});
|
|
75
|
+
describe('with custom mark rules', function () {
|
|
76
|
+
it('renders the document', function () {
|
|
77
|
+
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: structuredText, customMarkRules: [
|
|
78
|
+
datocms_structured_text_generic_html_renderer_1.renderMarkRule('strong', function (_a) {
|
|
79
|
+
var children = _a.children, key = _a.key;
|
|
80
|
+
return (React.createElement("b", { key: key }, children));
|
|
81
|
+
}),
|
|
82
|
+
] }));
|
|
83
|
+
expect(wrapper).toMatchSnapshot();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
74
86
|
});
|
|
75
|
-
describe(
|
|
87
|
+
describe('simple dast with no links/blocks', function () {
|
|
76
88
|
var structuredText = {
|
|
77
89
|
value: {
|
|
78
|
-
schema:
|
|
90
|
+
schema: 'dast',
|
|
79
91
|
document: {
|
|
80
|
-
type:
|
|
92
|
+
type: 'root',
|
|
81
93
|
children: [
|
|
82
94
|
{
|
|
83
|
-
type:
|
|
95
|
+
type: 'heading',
|
|
84
96
|
level: 1,
|
|
85
97
|
children: [
|
|
86
98
|
{
|
|
87
|
-
type:
|
|
88
|
-
value:
|
|
99
|
+
type: 'span',
|
|
100
|
+
value: 'This\nis a '
|
|
89
101
|
},
|
|
90
102
|
{
|
|
91
|
-
type:
|
|
92
|
-
marks: [
|
|
93
|
-
value:
|
|
103
|
+
type: 'span',
|
|
104
|
+
marks: ['strong'],
|
|
105
|
+
value: 'title'
|
|
94
106
|
},
|
|
95
107
|
]
|
|
96
108
|
},
|
|
@@ -98,18 +110,18 @@ describe("StructuredText", function () {
|
|
|
98
110
|
}
|
|
99
111
|
}
|
|
100
112
|
};
|
|
101
|
-
describe(
|
|
102
|
-
it(
|
|
113
|
+
describe('with default rules', function () {
|
|
114
|
+
it('renders the document', function () {
|
|
103
115
|
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: structuredText }));
|
|
104
116
|
expect(wrapper).toMatchSnapshot();
|
|
105
117
|
});
|
|
106
118
|
});
|
|
107
|
-
describe(
|
|
108
|
-
it(
|
|
119
|
+
describe('with custom rules', function () {
|
|
120
|
+
it('renders the document', function () {
|
|
109
121
|
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: structuredText, renderText: function (text, key) {
|
|
110
|
-
return (React.createElement(React.Fragment, { key: key }, text.replace(/This/,
|
|
111
|
-
},
|
|
112
|
-
index_1.
|
|
122
|
+
return (React.createElement(React.Fragment, { key: key }, text.replace(/This/, 'That')));
|
|
123
|
+
}, customNodeRules: [
|
|
124
|
+
index_1.renderNodeRule(datocms_structured_text_utils_1.isHeading, function (_a) {
|
|
113
125
|
var renderNode = _a.adapter.renderNode, node = _a.node, children = _a.children, key = _a.key;
|
|
114
126
|
return renderNode("h" + (node.level + 1), { key: key }, children);
|
|
115
127
|
}),
|
|
@@ -118,70 +130,68 @@ describe("StructuredText", function () {
|
|
|
118
130
|
});
|
|
119
131
|
});
|
|
120
132
|
});
|
|
121
|
-
describe(
|
|
133
|
+
describe('with links/blocks', function () {
|
|
122
134
|
var structuredText = {
|
|
123
135
|
value: {
|
|
124
|
-
schema:
|
|
136
|
+
schema: 'dast',
|
|
125
137
|
document: {
|
|
126
|
-
type:
|
|
138
|
+
type: 'root',
|
|
127
139
|
children: [
|
|
128
140
|
{
|
|
129
|
-
type:
|
|
141
|
+
type: 'heading',
|
|
130
142
|
level: 1,
|
|
131
143
|
children: [
|
|
132
144
|
{
|
|
133
|
-
type:
|
|
134
|
-
value:
|
|
145
|
+
type: 'span',
|
|
146
|
+
value: 'This is a'
|
|
135
147
|
},
|
|
136
148
|
{
|
|
137
|
-
type:
|
|
138
|
-
marks: [
|
|
139
|
-
value:
|
|
149
|
+
type: 'span',
|
|
150
|
+
marks: ['highlight'],
|
|
151
|
+
value: 'title'
|
|
140
152
|
},
|
|
141
153
|
{
|
|
142
|
-
type:
|
|
143
|
-
item:
|
|
154
|
+
type: 'inlineItem',
|
|
155
|
+
item: '123'
|
|
144
156
|
},
|
|
145
157
|
{
|
|
146
|
-
type:
|
|
147
|
-
item:
|
|
148
|
-
meta: [
|
|
149
|
-
|
|
150
|
-
],
|
|
151
|
-
children: [{ type: "span", value: "here!" }]
|
|
158
|
+
type: 'itemLink',
|
|
159
|
+
item: '123',
|
|
160
|
+
meta: [{ id: 'target', value: '_blank' }],
|
|
161
|
+
children: [{ type: 'span', value: 'here!' }]
|
|
152
162
|
},
|
|
153
163
|
]
|
|
154
164
|
},
|
|
155
165
|
{
|
|
156
|
-
type:
|
|
157
|
-
item:
|
|
166
|
+
type: 'block',
|
|
167
|
+
item: '456'
|
|
158
168
|
},
|
|
159
169
|
]
|
|
160
170
|
}
|
|
161
171
|
},
|
|
162
172
|
blocks: [
|
|
163
173
|
{
|
|
164
|
-
id:
|
|
165
|
-
__typename:
|
|
166
|
-
quote:
|
|
167
|
-
author:
|
|
174
|
+
id: '456',
|
|
175
|
+
__typename: 'QuoteRecord',
|
|
176
|
+
quote: 'Foo bar.',
|
|
177
|
+
author: 'Mark Smith'
|
|
168
178
|
},
|
|
169
179
|
],
|
|
170
180
|
links: [
|
|
171
181
|
{
|
|
172
|
-
id:
|
|
173
|
-
__typename:
|
|
174
|
-
title:
|
|
175
|
-
slug:
|
|
182
|
+
id: '123',
|
|
183
|
+
__typename: 'DocPageRecord',
|
|
184
|
+
title: 'How to code',
|
|
185
|
+
slug: 'how-to-code'
|
|
176
186
|
},
|
|
177
187
|
]
|
|
178
188
|
};
|
|
179
|
-
describe(
|
|
180
|
-
it(
|
|
189
|
+
describe('with default rules', function () {
|
|
190
|
+
it('renders the document', function () {
|
|
181
191
|
var wrapper = enzyme_1.mount(React.createElement(index_1.StructuredText, { data: structuredText, renderInlineRecord: function (_a) {
|
|
182
192
|
var record = _a.record;
|
|
183
193
|
switch (record.__typename) {
|
|
184
|
-
case
|
|
194
|
+
case 'DocPageRecord':
|
|
185
195
|
return React.createElement("a", { href: "/docs/" + record.slug }, record.title);
|
|
186
196
|
default:
|
|
187
197
|
return null;
|
|
@@ -189,15 +199,15 @@ describe("StructuredText", function () {
|
|
|
189
199
|
}, renderLinkToRecord: function (_a) {
|
|
190
200
|
var record = _a.record, children = _a.children, transformedMeta = _a.transformedMeta;
|
|
191
201
|
switch (record.__typename) {
|
|
192
|
-
case
|
|
193
|
-
return React.createElement("a", __assign({}, transformedMeta, { href: "/docs/" + record.slug }), children);
|
|
202
|
+
case 'DocPageRecord':
|
|
203
|
+
return (React.createElement("a", __assign({}, transformedMeta, { href: "/docs/" + record.slug }), children));
|
|
194
204
|
default:
|
|
195
205
|
return null;
|
|
196
206
|
}
|
|
197
207
|
}, renderBlock: function (_a) {
|
|
198
208
|
var record = _a.record;
|
|
199
209
|
switch (record.__typename) {
|
|
200
|
-
case
|
|
210
|
+
case 'QuoteRecord':
|
|
201
211
|
return (React.createElement("figure", null,
|
|
202
212
|
React.createElement("blockquote", null, record.quote),
|
|
203
213
|
React.createElement("figcaption", null, record.author)));
|
|
@@ -208,15 +218,15 @@ describe("StructuredText", function () {
|
|
|
208
218
|
expect(wrapper).toMatchSnapshot();
|
|
209
219
|
});
|
|
210
220
|
});
|
|
211
|
-
describe(
|
|
212
|
-
it(
|
|
221
|
+
describe('with missing renderInlineRecord prop', function () {
|
|
222
|
+
it('raises an error', function () {
|
|
213
223
|
expect(function () {
|
|
214
224
|
enzyme_1.shallow(React.createElement(index_1.StructuredText, { data: structuredText }));
|
|
215
225
|
}).toThrow(index_1.RenderError);
|
|
216
226
|
});
|
|
217
227
|
});
|
|
218
|
-
describe(
|
|
219
|
-
it(
|
|
228
|
+
describe('with missing record', function () {
|
|
229
|
+
it('raises an error', function () {
|
|
220
230
|
expect(function () {
|
|
221
231
|
enzyme_1.shallow(React.createElement(index_1.StructuredText, { data: __assign(__assign({}, structuredText), { links: [] }), renderInlineRecord: function () {
|
|
222
232
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/StructuredText/__tests__/index.test.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAgD;AAChD,2CAA+B;AAC/B,kCAMkB;AAClB,+EAA0D;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/StructuredText/__tests__/index.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
22
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
23
|
+
to[j] = from[i];
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
21
26
|
exports.__esModule = true;
|
|
22
|
-
exports.StructuredText = exports.appendKeyToValidElement = exports.defaultAdapter = exports.RenderError = exports.
|
|
27
|
+
exports.StructuredText = exports.appendKeyToValidElement = exports.defaultAdapter = exports.renderRule = exports.RenderError = exports.renderMarkRule = exports.renderNodeRule = void 0;
|
|
23
28
|
var datocms_structured_text_generic_html_renderer_1 = require("datocms-structured-text-generic-html-renderer");
|
|
24
|
-
exports.
|
|
29
|
+
exports.renderNodeRule = datocms_structured_text_generic_html_renderer_1.renderNodeRule;
|
|
30
|
+
exports.renderRule = datocms_structured_text_generic_html_renderer_1.renderNodeRule;
|
|
31
|
+
exports.renderMarkRule = datocms_structured_text_generic_html_renderer_1.renderMarkRule;
|
|
25
32
|
var datocms_structured_text_utils_1 = require("datocms-structured-text-utils");
|
|
26
33
|
exports.RenderError = datocms_structured_text_utils_1.RenderError;
|
|
27
34
|
var react_1 = __importStar(require("react"));
|
|
@@ -38,65 +45,73 @@ function appendKeyToValidElement(element, key) {
|
|
|
38
45
|
}
|
|
39
46
|
exports.appendKeyToValidElement = appendKeyToValidElement;
|
|
40
47
|
function StructuredText(_a) {
|
|
41
|
-
var data = _a.data, renderInlineRecord = _a.renderInlineRecord, renderLinkToRecord = _a.renderLinkToRecord, renderBlock = _a.renderBlock, renderText = _a.renderText, renderNode = _a.renderNode, renderFragment = _a.renderFragment, customRules = _a.customRules, metaTransformer = _a.metaTransformer;
|
|
42
|
-
var result = datocms_structured_text_generic_html_renderer_1.render({
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
48
|
+
var data = _a.data, renderInlineRecord = _a.renderInlineRecord, renderLinkToRecord = _a.renderLinkToRecord, renderBlock = _a.renderBlock, renderText = _a.renderText, renderNode = _a.renderNode, renderFragment = _a.renderFragment, customMarkRules = _a.customMarkRules, customRules = _a.customRules, customNodeRules = _a.customNodeRules, metaTransformer = _a.metaTransformer;
|
|
49
|
+
var result = datocms_structured_text_generic_html_renderer_1.render(data, {
|
|
50
|
+
adapter: {
|
|
51
|
+
renderText: renderText || exports.defaultAdapter.renderText,
|
|
52
|
+
renderNode: renderNode || exports.defaultAdapter.renderNode,
|
|
53
|
+
renderFragment: renderFragment || exports.defaultAdapter.renderFragment
|
|
54
|
+
},
|
|
55
|
+
metaTransformer: metaTransformer,
|
|
56
|
+
customMarkRules: customMarkRules,
|
|
57
|
+
customNodeRules: __spreadArray([
|
|
58
|
+
datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isInlineItem, function (_a) {
|
|
59
|
+
var node = _a.node, key = _a.key;
|
|
60
|
+
if (!renderInlineRecord) {
|
|
61
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineItem' node, but no 'renderInlineRecord' prop is specified!", node);
|
|
62
|
+
}
|
|
63
|
+
if (!datocms_structured_text_utils_1.isStructuredText(data) || !data.links) {
|
|
64
|
+
throw new datocms_structured_text_utils_1.RenderError("The document contains an 'itemLink' node, but the passed data prop is not a Structured Text GraphQL response, or data.links is not present!", node);
|
|
65
|
+
}
|
|
66
|
+
var item = data.links.find(function (item) { return item.id === node.item; });
|
|
67
|
+
if (!item) {
|
|
68
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'inlineItem' node, but cannot find a record with ID " + node.item + " inside data.links!", node);
|
|
69
|
+
}
|
|
70
|
+
return appendKeyToValidElement(renderInlineRecord({ record: item }), key);
|
|
71
|
+
}),
|
|
72
|
+
datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isItemLink, function (_a) {
|
|
73
|
+
var node = _a.node, key = _a.key, children = _a.children;
|
|
74
|
+
if (!renderLinkToRecord) {
|
|
75
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'itemLink' node, but no 'renderLinkToRecord' prop is specified!", node);
|
|
76
|
+
}
|
|
77
|
+
if (!datocms_structured_text_utils_1.isStructuredText(data) || !data.links) {
|
|
78
|
+
throw new datocms_structured_text_utils_1.RenderError("The document contains an 'itemLink' node, but the passed data prop is not a Structured Text GraphQL response, or data.links is not present!", node);
|
|
79
|
+
}
|
|
80
|
+
var item = data.links.find(function (item) { return item.id === node.item; });
|
|
81
|
+
if (!item) {
|
|
82
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains an 'itemLink' node, but cannot find a record with ID " + node.item + " inside data.links!", node);
|
|
83
|
+
}
|
|
84
|
+
return appendKeyToValidElement(renderLinkToRecord({
|
|
85
|
+
record: item,
|
|
86
|
+
children: children,
|
|
87
|
+
transformedMeta: node.meta
|
|
88
|
+
? (metaTransformer || datocms_structured_text_generic_html_renderer_1.defaultMetaTransformer)({
|
|
89
|
+
node: node,
|
|
90
|
+
meta: node.meta
|
|
91
|
+
})
|
|
92
|
+
: null
|
|
93
|
+
}), key);
|
|
94
|
+
}),
|
|
95
|
+
datocms_structured_text_generic_html_renderer_1.renderNodeRule(datocms_structured_text_utils_1.isBlock, function (_a) {
|
|
96
|
+
var node = _a.node, key = _a.key;
|
|
97
|
+
if (!renderBlock) {
|
|
98
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains a 'block' node, but no 'renderBlock' prop is specified!", node);
|
|
99
|
+
}
|
|
100
|
+
if (!datocms_structured_text_utils_1.isStructuredText(data) || !data.blocks) {
|
|
101
|
+
throw new datocms_structured_text_utils_1.RenderError("The document contains an 'block' node, but the passed data prop is not a Structured Text GraphQL response, or data.blocks is not present!", node);
|
|
102
|
+
}
|
|
103
|
+
var item = data.blocks.find(function (item) { return item.id === node.item; });
|
|
104
|
+
if (!item) {
|
|
105
|
+
throw new datocms_structured_text_utils_1.RenderError("The Structured Text document contains a 'block' node, but cannot find a record with ID " + node.item + " inside data.blocks!", node);
|
|
106
|
+
}
|
|
107
|
+
return appendKeyToValidElement(renderBlock({ record: item }), key);
|
|
108
|
+
})
|
|
109
|
+
], (customNodeRules || customRules || []))
|
|
110
|
+
});
|
|
111
|
+
if (typeof result === 'string') {
|
|
112
|
+
return react_1["default"].createElement(react_1["default"].Fragment, null, result);
|
|
113
|
+
}
|
|
114
|
+
return result || null;
|
|
100
115
|
}
|
|
101
116
|
exports.StructuredText = StructuredText;
|
|
102
117
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/StructuredText/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/StructuredText/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,67 +9,79 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import { mount, shallow } from
|
|
13
|
-
import * as React from
|
|
14
|
-
import { StructuredText, RenderError,
|
|
15
|
-
import { isHeading } from
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
import { mount, shallow } from 'enzyme';
|
|
13
|
+
import * as React from 'react';
|
|
14
|
+
import { StructuredText, RenderError, renderNodeRule, } from '../index';
|
|
15
|
+
import { isHeading } from 'datocms-structured-text-utils';
|
|
16
|
+
import { renderMarkRule } from 'datocms-structured-text-generic-html-renderer';
|
|
17
|
+
describe('StructuredText', function () {
|
|
18
|
+
describe('with no value', function () {
|
|
19
|
+
it('renders null', function () {
|
|
19
20
|
var wrapper = mount(React.createElement(StructuredText, { data: null }));
|
|
20
21
|
expect(wrapper).toMatchSnapshot();
|
|
21
22
|
});
|
|
22
23
|
});
|
|
23
|
-
describe(
|
|
24
|
+
describe('simple dast /2', function () {
|
|
24
25
|
var structuredText = {
|
|
25
|
-
schema:
|
|
26
|
+
schema: 'dast',
|
|
26
27
|
document: {
|
|
27
|
-
type:
|
|
28
|
+
type: 'root',
|
|
28
29
|
children: [
|
|
29
30
|
{
|
|
30
|
-
type:
|
|
31
|
+
type: 'heading',
|
|
31
32
|
level: 1,
|
|
32
33
|
children: [
|
|
33
34
|
{
|
|
34
|
-
type:
|
|
35
|
-
value:
|
|
35
|
+
type: 'span',
|
|
36
|
+
value: 'This\nis a '
|
|
36
37
|
},
|
|
37
38
|
{
|
|
38
|
-
type:
|
|
39
|
-
marks: [
|
|
40
|
-
value:
|
|
39
|
+
type: 'span',
|
|
40
|
+
marks: ['strong'],
|
|
41
|
+
value: 'title'
|
|
41
42
|
},
|
|
42
43
|
]
|
|
43
44
|
},
|
|
44
45
|
]
|
|
45
46
|
}
|
|
46
47
|
};
|
|
47
|
-
describe(
|
|
48
|
-
it(
|
|
48
|
+
describe('with default rules', function () {
|
|
49
|
+
it('renders the document', function () {
|
|
49
50
|
var wrapper = mount(React.createElement(StructuredText, { data: structuredText }));
|
|
50
51
|
expect(wrapper).toMatchSnapshot();
|
|
51
52
|
});
|
|
52
53
|
});
|
|
54
|
+
describe('with custom mark rules', function () {
|
|
55
|
+
it('renders the document', function () {
|
|
56
|
+
var wrapper = mount(React.createElement(StructuredText, { data: structuredText, customMarkRules: [
|
|
57
|
+
renderMarkRule('strong', function (_a) {
|
|
58
|
+
var children = _a.children, key = _a.key;
|
|
59
|
+
return (React.createElement("b", { key: key }, children));
|
|
60
|
+
}),
|
|
61
|
+
] }));
|
|
62
|
+
expect(wrapper).toMatchSnapshot();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
53
65
|
});
|
|
54
|
-
describe(
|
|
66
|
+
describe('simple dast with no links/blocks', function () {
|
|
55
67
|
var structuredText = {
|
|
56
68
|
value: {
|
|
57
|
-
schema:
|
|
69
|
+
schema: 'dast',
|
|
58
70
|
document: {
|
|
59
|
-
type:
|
|
71
|
+
type: 'root',
|
|
60
72
|
children: [
|
|
61
73
|
{
|
|
62
|
-
type:
|
|
74
|
+
type: 'heading',
|
|
63
75
|
level: 1,
|
|
64
76
|
children: [
|
|
65
77
|
{
|
|
66
|
-
type:
|
|
67
|
-
value:
|
|
78
|
+
type: 'span',
|
|
79
|
+
value: 'This\nis a '
|
|
68
80
|
},
|
|
69
81
|
{
|
|
70
|
-
type:
|
|
71
|
-
marks: [
|
|
72
|
-
value:
|
|
82
|
+
type: 'span',
|
|
83
|
+
marks: ['strong'],
|
|
84
|
+
value: 'title'
|
|
73
85
|
},
|
|
74
86
|
]
|
|
75
87
|
},
|
|
@@ -77,18 +89,18 @@ describe("StructuredText", function () {
|
|
|
77
89
|
}
|
|
78
90
|
}
|
|
79
91
|
};
|
|
80
|
-
describe(
|
|
81
|
-
it(
|
|
92
|
+
describe('with default rules', function () {
|
|
93
|
+
it('renders the document', function () {
|
|
82
94
|
var wrapper = mount(React.createElement(StructuredText, { data: structuredText }));
|
|
83
95
|
expect(wrapper).toMatchSnapshot();
|
|
84
96
|
});
|
|
85
97
|
});
|
|
86
|
-
describe(
|
|
87
|
-
it(
|
|
98
|
+
describe('with custom rules', function () {
|
|
99
|
+
it('renders the document', function () {
|
|
88
100
|
var wrapper = mount(React.createElement(StructuredText, { data: structuredText, renderText: function (text, key) {
|
|
89
|
-
return (React.createElement(React.Fragment, { key: key }, text.replace(/This/,
|
|
90
|
-
},
|
|
91
|
-
|
|
101
|
+
return (React.createElement(React.Fragment, { key: key }, text.replace(/This/, 'That')));
|
|
102
|
+
}, customNodeRules: [
|
|
103
|
+
renderNodeRule(isHeading, function (_a) {
|
|
92
104
|
var renderNode = _a.adapter.renderNode, node = _a.node, children = _a.children, key = _a.key;
|
|
93
105
|
return renderNode("h" + (node.level + 1), { key: key }, children);
|
|
94
106
|
}),
|
|
@@ -97,70 +109,68 @@ describe("StructuredText", function () {
|
|
|
97
109
|
});
|
|
98
110
|
});
|
|
99
111
|
});
|
|
100
|
-
describe(
|
|
112
|
+
describe('with links/blocks', function () {
|
|
101
113
|
var structuredText = {
|
|
102
114
|
value: {
|
|
103
|
-
schema:
|
|
115
|
+
schema: 'dast',
|
|
104
116
|
document: {
|
|
105
|
-
type:
|
|
117
|
+
type: 'root',
|
|
106
118
|
children: [
|
|
107
119
|
{
|
|
108
|
-
type:
|
|
120
|
+
type: 'heading',
|
|
109
121
|
level: 1,
|
|
110
122
|
children: [
|
|
111
123
|
{
|
|
112
|
-
type:
|
|
113
|
-
value:
|
|
124
|
+
type: 'span',
|
|
125
|
+
value: 'This is a'
|
|
114
126
|
},
|
|
115
127
|
{
|
|
116
|
-
type:
|
|
117
|
-
marks: [
|
|
118
|
-
value:
|
|
128
|
+
type: 'span',
|
|
129
|
+
marks: ['highlight'],
|
|
130
|
+
value: 'title'
|
|
119
131
|
},
|
|
120
132
|
{
|
|
121
|
-
type:
|
|
122
|
-
item:
|
|
133
|
+
type: 'inlineItem',
|
|
134
|
+
item: '123'
|
|
123
135
|
},
|
|
124
136
|
{
|
|
125
|
-
type:
|
|
126
|
-
item:
|
|
127
|
-
meta: [
|
|
128
|
-
|
|
129
|
-
],
|
|
130
|
-
children: [{ type: "span", value: "here!" }]
|
|
137
|
+
type: 'itemLink',
|
|
138
|
+
item: '123',
|
|
139
|
+
meta: [{ id: 'target', value: '_blank' }],
|
|
140
|
+
children: [{ type: 'span', value: 'here!' }]
|
|
131
141
|
},
|
|
132
142
|
]
|
|
133
143
|
},
|
|
134
144
|
{
|
|
135
|
-
type:
|
|
136
|
-
item:
|
|
145
|
+
type: 'block',
|
|
146
|
+
item: '456'
|
|
137
147
|
},
|
|
138
148
|
]
|
|
139
149
|
}
|
|
140
150
|
},
|
|
141
151
|
blocks: [
|
|
142
152
|
{
|
|
143
|
-
id:
|
|
144
|
-
__typename:
|
|
145
|
-
quote:
|
|
146
|
-
author:
|
|
153
|
+
id: '456',
|
|
154
|
+
__typename: 'QuoteRecord',
|
|
155
|
+
quote: 'Foo bar.',
|
|
156
|
+
author: 'Mark Smith'
|
|
147
157
|
},
|
|
148
158
|
],
|
|
149
159
|
links: [
|
|
150
160
|
{
|
|
151
|
-
id:
|
|
152
|
-
__typename:
|
|
153
|
-
title:
|
|
154
|
-
slug:
|
|
161
|
+
id: '123',
|
|
162
|
+
__typename: 'DocPageRecord',
|
|
163
|
+
title: 'How to code',
|
|
164
|
+
slug: 'how-to-code'
|
|
155
165
|
},
|
|
156
166
|
]
|
|
157
167
|
};
|
|
158
|
-
describe(
|
|
159
|
-
it(
|
|
168
|
+
describe('with default rules', function () {
|
|
169
|
+
it('renders the document', function () {
|
|
160
170
|
var wrapper = mount(React.createElement(StructuredText, { data: structuredText, renderInlineRecord: function (_a) {
|
|
161
171
|
var record = _a.record;
|
|
162
172
|
switch (record.__typename) {
|
|
163
|
-
case
|
|
173
|
+
case 'DocPageRecord':
|
|
164
174
|
return React.createElement("a", { href: "/docs/" + record.slug }, record.title);
|
|
165
175
|
default:
|
|
166
176
|
return null;
|
|
@@ -168,15 +178,15 @@ describe("StructuredText", function () {
|
|
|
168
178
|
}, renderLinkToRecord: function (_a) {
|
|
169
179
|
var record = _a.record, children = _a.children, transformedMeta = _a.transformedMeta;
|
|
170
180
|
switch (record.__typename) {
|
|
171
|
-
case
|
|
172
|
-
return React.createElement("a", __assign({}, transformedMeta, { href: "/docs/" + record.slug }), children);
|
|
181
|
+
case 'DocPageRecord':
|
|
182
|
+
return (React.createElement("a", __assign({}, transformedMeta, { href: "/docs/" + record.slug }), children));
|
|
173
183
|
default:
|
|
174
184
|
return null;
|
|
175
185
|
}
|
|
176
186
|
}, renderBlock: function (_a) {
|
|
177
187
|
var record = _a.record;
|
|
178
188
|
switch (record.__typename) {
|
|
179
|
-
case
|
|
189
|
+
case 'QuoteRecord':
|
|
180
190
|
return (React.createElement("figure", null,
|
|
181
191
|
React.createElement("blockquote", null, record.quote),
|
|
182
192
|
React.createElement("figcaption", null, record.author)));
|
|
@@ -187,15 +197,15 @@ describe("StructuredText", function () {
|
|
|
187
197
|
expect(wrapper).toMatchSnapshot();
|
|
188
198
|
});
|
|
189
199
|
});
|
|
190
|
-
describe(
|
|
191
|
-
it(
|
|
200
|
+
describe('with missing renderInlineRecord prop', function () {
|
|
201
|
+
it('raises an error', function () {
|
|
192
202
|
expect(function () {
|
|
193
203
|
shallow(React.createElement(StructuredText, { data: structuredText }));
|
|
194
204
|
}).toThrow(RenderError);
|
|
195
205
|
});
|
|
196
206
|
});
|
|
197
|
-
describe(
|
|
198
|
-
it(
|
|
207
|
+
describe('with missing record', function () {
|
|
208
|
+
it('raises an error', function () {
|
|
199
209
|
expect(function () {
|
|
200
210
|
shallow(React.createElement(StructuredText, { data: __assign(__assign({}, structuredText), { links: [] }), renderInlineRecord: function () {
|
|
201
211
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/StructuredText/__tests__/index.test.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAU,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,cAAc,EAGd,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/StructuredText/__tests__/index.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Record as StructuredTextGraphQlResponseRecord, Document as StructuredTextDocument, RenderError, RenderResult, RenderRule, Node, StructuredText as StructuredTextGraphQlResponse } from
|
|
3
|
-
import { ReactElement } from
|
|
4
|
-
export {
|
|
1
|
+
import { renderNodeRule, renderMarkRule, TransformedMeta, TransformMetaFn, RenderMarkRule } from 'datocms-structured-text-generic-html-renderer';
|
|
2
|
+
import { Record as StructuredTextGraphQlResponseRecord, Document as StructuredTextDocument, RenderError, RenderResult, RenderRule, Node, StructuredText as StructuredTextGraphQlResponse } from 'datocms-structured-text-utils';
|
|
3
|
+
import { ReactElement } from 'react';
|
|
4
|
+
export { renderNodeRule, renderMarkRule, RenderError };
|
|
5
|
+
export { renderNodeRule as renderRule };
|
|
5
6
|
export type { StructuredTextGraphQlResponse, StructuredTextDocument, StructuredTextGraphQlResponseRecord, };
|
|
6
7
|
declare type AdapterReturn = ReactElement | string | null;
|
|
7
8
|
export declare const defaultAdapter: {
|
|
@@ -27,8 +28,10 @@ declare type RenderBlockContext<R extends StructuredTextGraphQlResponseRecord> =
|
|
|
27
28
|
export declare type StructuredTextPropTypes<R extends StructuredTextGraphQlResponseRecord> = {
|
|
28
29
|
/** The actual field value you get from DatoCMS **/
|
|
29
30
|
data: StructuredTextGraphQlResponse<R> | StructuredTextDocument | Node | null | undefined;
|
|
30
|
-
/** A set of additional rules to convert
|
|
31
|
-
|
|
31
|
+
/** A set of additional rules to convert nodes to JSX **/
|
|
32
|
+
customNodeRules?: RenderRule<H, T, F>[];
|
|
33
|
+
/** A set of additional rules to convert marks to JSX **/
|
|
34
|
+
customMarkRules?: RenderMarkRule<H, T, F>[];
|
|
32
35
|
/** Fuction that converts an 'inlineItem' node into React **/
|
|
33
36
|
renderInlineRecord?: (context: RenderInlineRecordContext<R>) => ReactElement | null;
|
|
34
37
|
/** Fuction that converts an 'itemLink' node into React **/
|
|
@@ -43,5 +46,7 @@ export declare type StructuredTextPropTypes<R extends StructuredTextGraphQlRespo
|
|
|
43
46
|
renderNode?: H;
|
|
44
47
|
/** Function to use to generate a React.Fragment **/
|
|
45
48
|
renderFragment?: F;
|
|
49
|
+
/** @deprecated use customNodeRules **/
|
|
50
|
+
customRules?: RenderRule<H, T, F>[];
|
|
46
51
|
};
|
|
47
|
-
export declare function StructuredText<R extends StructuredTextGraphQlResponseRecord>({ data, renderInlineRecord, renderLinkToRecord, renderBlock, renderText, renderNode, renderFragment, customRules, metaTransformer, }: StructuredTextPropTypes<R>): ReactElement | null;
|
|
52
|
+
export declare function StructuredText<R extends StructuredTextGraphQlResponseRecord>({ data, renderInlineRecord, renderLinkToRecord, renderBlock, renderText, renderNode, renderFragment, customMarkRules, customRules, customNodeRules, metaTransformer, }: StructuredTextPropTypes<R>): ReactElement | null;
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
2
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
3
|
+
to[j] = from[i];
|
|
4
|
+
return to;
|
|
5
|
+
};
|
|
6
|
+
import { defaultMetaTransformer, render, renderNodeRule, renderMarkRule, } from 'datocms-structured-text-generic-html-renderer';
|
|
7
|
+
import { isBlock, isInlineItem, isItemLink, RenderError, isStructuredText, } from 'datocms-structured-text-utils';
|
|
8
|
+
import React, { cloneElement, isValidElement } from 'react';
|
|
9
|
+
export { renderNodeRule, renderMarkRule, RenderError };
|
|
10
|
+
// deprecated
|
|
11
|
+
export { renderNodeRule as renderRule };
|
|
5
12
|
export var defaultAdapter = {
|
|
6
13
|
renderNode: React.createElement,
|
|
7
14
|
renderFragment: function (children, key) { return React.createElement(React.Fragment, { key: key }, children); },
|
|
@@ -14,64 +21,72 @@ export function appendKeyToValidElement(element, key) {
|
|
|
14
21
|
return element;
|
|
15
22
|
}
|
|
16
23
|
export function StructuredText(_a) {
|
|
17
|
-
var data = _a.data, renderInlineRecord = _a.renderInlineRecord, renderLinkToRecord = _a.renderLinkToRecord, renderBlock = _a.renderBlock, renderText = _a.renderText, renderNode = _a.renderNode, renderFragment = _a.renderFragment, customRules = _a.customRules, metaTransformer = _a.metaTransformer;
|
|
18
|
-
var result = render({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
24
|
+
var data = _a.data, renderInlineRecord = _a.renderInlineRecord, renderLinkToRecord = _a.renderLinkToRecord, renderBlock = _a.renderBlock, renderText = _a.renderText, renderNode = _a.renderNode, renderFragment = _a.renderFragment, customMarkRules = _a.customMarkRules, customRules = _a.customRules, customNodeRules = _a.customNodeRules, metaTransformer = _a.metaTransformer;
|
|
25
|
+
var result = render(data, {
|
|
26
|
+
adapter: {
|
|
27
|
+
renderText: renderText || defaultAdapter.renderText,
|
|
28
|
+
renderNode: renderNode || defaultAdapter.renderNode,
|
|
29
|
+
renderFragment: renderFragment || defaultAdapter.renderFragment
|
|
30
|
+
},
|
|
31
|
+
metaTransformer: metaTransformer,
|
|
32
|
+
customMarkRules: customMarkRules,
|
|
33
|
+
customNodeRules: __spreadArray([
|
|
34
|
+
renderNodeRule(isInlineItem, function (_a) {
|
|
35
|
+
var node = _a.node, key = _a.key;
|
|
36
|
+
if (!renderInlineRecord) {
|
|
37
|
+
throw new RenderError("The Structured Text document contains an 'inlineItem' node, but no 'renderInlineRecord' prop is specified!", node);
|
|
38
|
+
}
|
|
39
|
+
if (!isStructuredText(data) || !data.links) {
|
|
40
|
+
throw new RenderError("The document contains an 'itemLink' node, but the passed data prop is not a Structured Text GraphQL response, or data.links is not present!", node);
|
|
41
|
+
}
|
|
42
|
+
var item = data.links.find(function (item) { return item.id === node.item; });
|
|
43
|
+
if (!item) {
|
|
44
|
+
throw new RenderError("The Structured Text document contains an 'inlineItem' node, but cannot find a record with ID " + node.item + " inside data.links!", node);
|
|
45
|
+
}
|
|
46
|
+
return appendKeyToValidElement(renderInlineRecord({ record: item }), key);
|
|
47
|
+
}),
|
|
48
|
+
renderNodeRule(isItemLink, function (_a) {
|
|
49
|
+
var node = _a.node, key = _a.key, children = _a.children;
|
|
50
|
+
if (!renderLinkToRecord) {
|
|
51
|
+
throw new RenderError("The Structured Text document contains an 'itemLink' node, but no 'renderLinkToRecord' prop is specified!", node);
|
|
52
|
+
}
|
|
53
|
+
if (!isStructuredText(data) || !data.links) {
|
|
54
|
+
throw new RenderError("The document contains an 'itemLink' node, but the passed data prop is not a Structured Text GraphQL response, or data.links is not present!", node);
|
|
55
|
+
}
|
|
56
|
+
var item = data.links.find(function (item) { return item.id === node.item; });
|
|
57
|
+
if (!item) {
|
|
58
|
+
throw new RenderError("The Structured Text document contains an 'itemLink' node, but cannot find a record with ID " + node.item + " inside data.links!", node);
|
|
59
|
+
}
|
|
60
|
+
return appendKeyToValidElement(renderLinkToRecord({
|
|
61
|
+
record: item,
|
|
62
|
+
children: children,
|
|
63
|
+
transformedMeta: node.meta
|
|
64
|
+
? (metaTransformer || defaultMetaTransformer)({
|
|
65
|
+
node: node,
|
|
66
|
+
meta: node.meta
|
|
67
|
+
})
|
|
68
|
+
: null
|
|
69
|
+
}), key);
|
|
70
|
+
}),
|
|
71
|
+
renderNodeRule(isBlock, function (_a) {
|
|
72
|
+
var node = _a.node, key = _a.key;
|
|
73
|
+
if (!renderBlock) {
|
|
74
|
+
throw new RenderError("The Structured Text document contains a 'block' node, but no 'renderBlock' prop is specified!", node);
|
|
75
|
+
}
|
|
76
|
+
if (!isStructuredText(data) || !data.blocks) {
|
|
77
|
+
throw new RenderError("The document contains an 'block' node, but the passed data prop is not a Structured Text GraphQL response, or data.blocks is not present!", node);
|
|
78
|
+
}
|
|
79
|
+
var item = data.blocks.find(function (item) { return item.id === node.item; });
|
|
80
|
+
if (!item) {
|
|
81
|
+
throw new RenderError("The Structured Text document contains a 'block' node, but cannot find a record with ID " + node.item + " inside data.blocks!", node);
|
|
82
|
+
}
|
|
83
|
+
return appendKeyToValidElement(renderBlock({ record: item }), key);
|
|
84
|
+
})
|
|
85
|
+
], (customNodeRules || customRules || []))
|
|
86
|
+
});
|
|
87
|
+
if (typeof result === 'string') {
|
|
88
|
+
return React.createElement(React.Fragment, null, result);
|
|
89
|
+
}
|
|
90
|
+
return result || null;
|
|
76
91
|
}
|
|
77
92
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/StructuredText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/StructuredText/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Record as StructuredTextGraphQlResponseRecord, Document as StructuredTextDocument, RenderError, RenderResult, RenderRule, Node, StructuredText as StructuredTextGraphQlResponse } from
|
|
3
|
-
import { ReactElement } from
|
|
4
|
-
export {
|
|
1
|
+
import { renderNodeRule, renderMarkRule, TransformedMeta, TransformMetaFn, RenderMarkRule } from 'datocms-structured-text-generic-html-renderer';
|
|
2
|
+
import { Record as StructuredTextGraphQlResponseRecord, Document as StructuredTextDocument, RenderError, RenderResult, RenderRule, Node, StructuredText as StructuredTextGraphQlResponse } from 'datocms-structured-text-utils';
|
|
3
|
+
import { ReactElement } from 'react';
|
|
4
|
+
export { renderNodeRule, renderMarkRule, RenderError };
|
|
5
|
+
export { renderNodeRule as renderRule };
|
|
5
6
|
export type { StructuredTextGraphQlResponse, StructuredTextDocument, StructuredTextGraphQlResponseRecord, };
|
|
6
7
|
declare type AdapterReturn = ReactElement | string | null;
|
|
7
8
|
export declare const defaultAdapter: {
|
|
@@ -27,8 +28,10 @@ declare type RenderBlockContext<R extends StructuredTextGraphQlResponseRecord> =
|
|
|
27
28
|
export declare type StructuredTextPropTypes<R extends StructuredTextGraphQlResponseRecord> = {
|
|
28
29
|
/** The actual field value you get from DatoCMS **/
|
|
29
30
|
data: StructuredTextGraphQlResponse<R> | StructuredTextDocument | Node | null | undefined;
|
|
30
|
-
/** A set of additional rules to convert
|
|
31
|
-
|
|
31
|
+
/** A set of additional rules to convert nodes to JSX **/
|
|
32
|
+
customNodeRules?: RenderRule<H, T, F>[];
|
|
33
|
+
/** A set of additional rules to convert marks to JSX **/
|
|
34
|
+
customMarkRules?: RenderMarkRule<H, T, F>[];
|
|
32
35
|
/** Fuction that converts an 'inlineItem' node into React **/
|
|
33
36
|
renderInlineRecord?: (context: RenderInlineRecordContext<R>) => ReactElement | null;
|
|
34
37
|
/** Fuction that converts an 'itemLink' node into React **/
|
|
@@ -43,5 +46,7 @@ export declare type StructuredTextPropTypes<R extends StructuredTextGraphQlRespo
|
|
|
43
46
|
renderNode?: H;
|
|
44
47
|
/** Function to use to generate a React.Fragment **/
|
|
45
48
|
renderFragment?: F;
|
|
49
|
+
/** @deprecated use customNodeRules **/
|
|
50
|
+
customRules?: RenderRule<H, T, F>[];
|
|
46
51
|
};
|
|
47
|
-
export declare function StructuredText<R extends StructuredTextGraphQlResponseRecord>({ data, renderInlineRecord, renderLinkToRecord, renderBlock, renderText, renderNode, renderFragment, customRules, metaTransformer, }: StructuredTextPropTypes<R>): ReactElement | null;
|
|
52
|
+
export declare function StructuredText<R extends StructuredTextGraphQlResponseRecord>({ data, renderInlineRecord, renderLinkToRecord, renderBlock, renderText, renderNode, renderFragment, customMarkRules, customRules, customNodeRules, metaTransformer, }: StructuredTextPropTypes<R>): ReactElement | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-datocms",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"types": "dist/types/index.d.ts",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
77
|
"datocms-listen": "^0.1.6",
|
|
78
|
-
"datocms-structured-text-generic-html-renderer": "^1.
|
|
78
|
+
"datocms-structured-text-generic-html-renderer": "^1.3.0",
|
|
79
79
|
"datocms-structured-text-utils": "^1.1.0",
|
|
80
80
|
"intersection-observer": "^0.12.0",
|
|
81
81
|
"react-intersection-observer": "^8.31.1",
|