react-datocms 2.1.2 → 3.0.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/README.md +26 -14
- package/dist/cjs/Image/__tests__/index.test.js +1 -0
- package/dist/cjs/Image/__tests__/index.test.js.map +1 -1
- package/dist/cjs/Image/index.js +4 -6
- package/dist/cjs/Image/index.js.map +1 -1
- 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/Image/__tests__/index.test.d.ts +1 -1
- package/dist/esm/Image/__tests__/index.test.js +1 -0
- package/dist/esm/Image/__tests__/index.test.js.map +1 -1
- package/dist/esm/Image/index.d.ts +0 -1
- package/dist/esm/Image/index.js +4 -6
- package/dist/esm/Image/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/Image/__tests__/index.test.d.ts +1 -1
- package/dist/types/Image/index.d.ts +0 -1
- package/dist/types/StructuredText/index.d.ts +12 -7
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ A set of components and utilities to work faster with [DatoCMS](https://www.dato
|
|
|
25
25
|
- [Example](#example)
|
|
26
26
|
- [Progressive/responsive image](#progressiveresponsive-image)
|
|
27
27
|
- [Out-of-the-box features](#out-of-the-box-features)
|
|
28
|
+
- [Intersection Observer](#intersection-observer)
|
|
28
29
|
- [Usage](#usage)
|
|
29
30
|
- [Example](#example-1)
|
|
30
31
|
- [Props](#props)
|
|
@@ -163,9 +164,7 @@ const App: React.FC = () => {
|
|
|
163
164
|
`<Image />` is a React component specially designed to work seamlessly with DatoCMS’s [`responsiveImage` GraphQL query](https://www.datocms.com/docs/content-delivery-api/uploads#responsive-images) that optimizes image loading for your sites.
|
|
164
165
|
|
|
165
166
|
- TypeScript ready;
|
|
166
|
-
- Compatible with IE11;
|
|
167
167
|
- CSS-in-JS ready;
|
|
168
|
-
- Compatible with any GraphQL library (Apollo, graphql-hooks, graphql-request, etc.);
|
|
169
168
|
- Usable both client and server side;
|
|
170
169
|
- Compatible with vanilla React, Next.js and pretty much any other React-based solution;
|
|
171
170
|
|
|
@@ -173,11 +172,17 @@ const App: React.FC = () => {
|
|
|
173
172
|
|
|
174
173
|
## Out-of-the-box features
|
|
175
174
|
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
- Efficiently lazy
|
|
179
|
-
-
|
|
180
|
-
-
|
|
175
|
+
- Offers WebP version of images for browsers that support the format
|
|
176
|
+
- Generates multiple smaller images so smartphones and tablets don’t download desktop-sized images
|
|
177
|
+
- Efficiently lazy loads images to speed initial page load and save bandwidth
|
|
178
|
+
- Holds the image position so your page doesn’t jump while images load
|
|
179
|
+
- Uses either blur-up or background color techniques to show a preview of the image while it loads
|
|
180
|
+
|
|
181
|
+
## Intersection Observer
|
|
182
|
+
|
|
183
|
+
Intersection Observer is the API used to determine if the image is inside the viewport or not. [Browser support is really good](https://caniuse.com/intersectionobserver) - With Safari adding support in 12.1, all major browsers now support Intersection Observers natively.
|
|
184
|
+
|
|
185
|
+
If the IntersectionObserver object is not available, the component treats the image as it's always visible in the viewport. Feel free to add a [polyfill](https://www.npmjs.com/package/intersection-observer) so that it will also 100% work on older versions of iOS and IE11.
|
|
181
186
|
|
|
182
187
|
## Usage
|
|
183
188
|
|
|
@@ -659,19 +664,19 @@ For example:
|
|
|
659
664
|
|
|
660
665
|
- 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
666
|
|
|
662
|
-
In this case, you can easily override default rendering rules with the `
|
|
667
|
+
In this case, you can easily override default rendering rules with the `customNodeRules` and `customMarkRules` props.
|
|
663
668
|
|
|
664
669
|
```jsx
|
|
665
|
-
import {
|
|
670
|
+
import { renderNodeRule, renderMarkRule, StructuredText } from 'react-datocms';
|
|
666
671
|
import { isHeading, isCode } from 'datocms-structured-text-utils';
|
|
667
672
|
import { render as toPlainText } from 'datocms-structured-text-to-plain-text';
|
|
668
673
|
import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
669
674
|
|
|
670
675
|
<StructuredText
|
|
671
676
|
data={data.blogPost.content}
|
|
672
|
-
|
|
677
|
+
customNodeRules={[
|
|
673
678
|
// Add HTML anchors to heading levels for in-page navigation
|
|
674
|
-
|
|
679
|
+
renderNodeRule(isHeading, ({ node, children, key }) => {
|
|
675
680
|
const HeadingTag = `h${node.level}`;
|
|
676
681
|
const anchor = toPlainText(node)
|
|
677
682
|
.toLowerCase()
|
|
@@ -687,7 +692,7 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
687
692
|
}),
|
|
688
693
|
|
|
689
694
|
// Use a custom syntax highlighter component for code blocks
|
|
690
|
-
|
|
695
|
+
renderNodeRule(isCode, ({ node, key }) => {
|
|
691
696
|
return (
|
|
692
697
|
<SyntaxHighlight
|
|
693
698
|
key={key}
|
|
@@ -699,7 +704,7 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
699
704
|
}),
|
|
700
705
|
|
|
701
706
|
// Apply different formatting to top-level paragraphs
|
|
702
|
-
|
|
707
|
+
renderNodeRule(
|
|
703
708
|
isParagraph,
|
|
704
709
|
({ adapter: { renderNode }, node, children, key, ancestors }) => {
|
|
705
710
|
if (isRoot(ancestors[0])) {
|
|
@@ -719,6 +724,12 @@ import SyntaxHighlight from 'components/SyntaxHighlight';
|
|
|
719
724
|
},
|
|
720
725
|
),
|
|
721
726
|
]}
|
|
727
|
+
customMarkRules={[
|
|
728
|
+
// convert "strong" marks into <b> tags
|
|
729
|
+
renderMarkRule('strong', ({ mark, children, key }) => {
|
|
730
|
+
return <b key={key}>{children}</b>;
|
|
731
|
+
}),
|
|
732
|
+
]}
|
|
722
733
|
/>;
|
|
723
734
|
```
|
|
724
735
|
|
|
@@ -733,7 +744,8 @@ Note: if you override the rules for `inline_item`, `item_link` or `block` nodes,
|
|
|
733
744
|
| renderLinkToRecord | `({ record, children }) => ReactElement \| null` | Only required if document contains `itemLink` nodes | Convert an `itemLink` DAST node into React | `null` |
|
|
734
745
|
| renderBlock | `({ record }) => ReactElement \| null` | Only required if document contains `block` nodes | Convert a `block` DAST node into React | `null` |
|
|
735
746
|
| 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
|
-
|
|
|
747
|
+
| customNodeRules | `Array<RenderRule>` | :x: | Customize how nodes are converted in JSX (use `renderNodeRule()` to generate rules) | `null` |
|
|
748
|
+
| customMarkRules | `Array<RenderMarkRule>` | :x: | Customize how marks are converted in JSX (use `renderMarkRule()` to generate rules) | `null` |
|
|
737
749
|
| renderText | `(text: string, key: string) => ReactElement \| string \| null` | :x: | Convert a simple string text into React | `(text) => text` |
|
|
738
750
|
|
|
739
751
|
# Development
|
|
@@ -21,6 +21,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
21
21
|
exports.__esModule = true;
|
|
22
22
|
var React = __importStar(require("react"));
|
|
23
23
|
var enzyme_1 = require("enzyme");
|
|
24
|
+
require("intersection-observer");
|
|
24
25
|
var index_1 = require("../index");
|
|
25
26
|
var test_utils_1 = require("react-intersection-observer/test-utils");
|
|
26
27
|
var data = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/Image/__tests__/index.test.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,2CAA+B;AAC/B,iCAA+B;AAC/B,kCAAiC;AACjC,qEAA+E;AAE/E,IAAM,IAAI,GAAG;IACX,GAAG,EAAE,cAAc;IACnB,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EACJ,igBAAigB;IACngB,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,iCAAiC;IACxC,GAAG,EAAE,uEAAuE;IAC5E,MAAM,EACJ,8pBAA8pB;IAChqB,KAAK,EAAE,kCAAkC;IACzC,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,QAAQ,CAAC,OAAO,EAAE;IAChB,sDAAsD;IACtD,iFAAiF;IACjF,wDAAwD;IAEvD,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAW,CAAC,OAAO,CAAC,UAAC,MAAM;QACrE,QAAQ,CAAC,YAAU,MAAQ,EAAE;YAC3B,QAAQ,CAAC,aAAa,EAAE;gBACtB,EAAE,CAAC,2BAA2B,EAAE;oBAC9B,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;oBACF,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,SAAS,EAAE;gBAClB,EAAE,CAAC,mBAAmB,EAAE;oBACtB,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;oBACF,kCAAqB,CAAC,IAAI,CAAC,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,cAAc,EAAE;oBACvB,EAAE,CAAC,iBAAiB,EAAE;wBACpB,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;wBACF,kCAAqB,CAAC,IAAI,CAAC,CAAC;wBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC5C,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/Image/__tests__/index.test.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,2CAA+B;AAC/B,iCAA+B;AAC/B,iCAA+B;AAC/B,kCAAiC;AACjC,qEAA+E;AAE/E,IAAM,IAAI,GAAG;IACX,GAAG,EAAE,cAAc;IACnB,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EACJ,igBAAigB;IACngB,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,iCAAiC;IACxC,GAAG,EAAE,uEAAuE;IAC5E,MAAM,EACJ,8pBAA8pB;IAChqB,KAAK,EAAE,kCAAkC;IACzC,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,QAAQ,CAAC,OAAO,EAAE;IAChB,sDAAsD;IACtD,iFAAiF;IACjF,wDAAwD;IAEvD,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAW,CAAC,OAAO,CAAC,UAAC,MAAM;QACrE,QAAQ,CAAC,YAAU,MAAQ,EAAE;YAC3B,QAAQ,CAAC,aAAa,EAAE;gBACtB,EAAE,CAAC,2BAA2B,EAAE;oBAC9B,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;oBACF,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,SAAS,EAAE;gBAClB,EAAE,CAAC,mBAAmB,EAAE;oBACtB,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;oBACF,kCAAqB,CAAC,IAAI,CAAC,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,cAAc,EAAE;oBACvB,EAAE,CAAC,iBAAiB,EAAE;wBACpB,IAAM,OAAO,GAAG,cAAK,CACnB,oBAAC,aAAK,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,GAAI,CAClE,CAAC;wBACF,kCAAqB,CAAC,IAAI,CAAC,CAAC;wBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC5C,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/cjs/Image/index.js
CHANGED
|
@@ -32,12 +32,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
32
32
|
exports.__esModule = true;
|
|
33
33
|
exports.Image = void 0;
|
|
34
34
|
var react_1 = __importStar(require("react"));
|
|
35
|
-
require("intersection-observer");
|
|
36
35
|
var react_intersection_observer_1 = require("react-intersection-observer");
|
|
36
|
+
var universal_base64_1 = require("universal-base64");
|
|
37
37
|
var isSsr = typeof window === 'undefined';
|
|
38
|
-
var universalBtoa = isSsr
|
|
39
|
-
? function (str) { return Buffer.from(str.toString(), 'binary').toString('base64'); }
|
|
40
|
-
: window.btoa;
|
|
41
38
|
var isIntersectionObserverAvailable = isSsr
|
|
42
39
|
? false
|
|
43
40
|
: !!window.IntersectionObserver;
|
|
@@ -78,7 +75,8 @@ exports.Image = react_1.forwardRef(function (_a, ref) {
|
|
|
78
75
|
var _h = react_intersection_observer_1.useInView({
|
|
79
76
|
threshold: intersectionThreshold || intersectionTreshold || 0,
|
|
80
77
|
rootMargin: intersectionMargin || '0px 0px 0px 0px',
|
|
81
|
-
triggerOnce: true
|
|
78
|
+
triggerOnce: true,
|
|
79
|
+
fallbackInView: true
|
|
82
80
|
}), viewRef = _h[0], inView = _h[1];
|
|
83
81
|
var callbackRef = react_1.useCallback(function (_ref) {
|
|
84
82
|
viewRef(_ref);
|
|
@@ -114,7 +112,7 @@ exports.Image = react_1.forwardRef(function (_a, ref) {
|
|
|
114
112
|
var sizer = layout !== 'fill' ? (react_1["default"].createElement("img", { className: pictureClassName, style: {
|
|
115
113
|
display: 'block',
|
|
116
114
|
width: '100%'
|
|
117
|
-
}, src: "data:image/svg+xml;base64," +
|
|
115
|
+
}, src: "data:image/svg+xml;base64," + universal_base64_1.encode(svg), role: "presentation" })) : null;
|
|
118
116
|
return (react_1["default"].createElement("div", { ref: callbackRef, className: className, style: __assign(__assign({ overflow: 'hidden' }, (layout === 'fill'
|
|
119
117
|
? absolutePositioning
|
|
120
118
|
: layout === 'intrinsic'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Image/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Image/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgF;AAChF,2EAAwD;AACxD,qDAA0C;AAE1C,IAAM,KAAK,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAE5C,IAAM,+BAA+B,GAAG,KAAK;IAC3C,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,CAAC,CAAE,MAAc,CAAC,oBAAoB,CAAC;AA2E3C,IAAM,gBAAgB,GAAG,UAAC,EAAmC;QAAjC,QAAQ,cAAA,EAAE,MAAM,YAAA,EAAE,MAAM,YAAA;IAClD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,IAAI,+BAA+B,EAAE;QACnC,OAAO,MAAM,IAAI,MAAM,CAAC;KACzB;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,EAA2B;QAAzB,QAAQ,cAAA,EAAE,MAAM,YAAA;IAC3C,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,IAAI,+BAA+B,EAAE;QACnC,OAAO,MAAM,CAAC;KACf;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEW,QAAA,KAAK,GAAG,kBAAU,CAC7B,UACE,EAgBC,EACD,GAAG;;QAhBD,SAAS,eAAA,EACT,sBAAoB,EAApB,cAAc,mBAAG,GAAG,KAAA,EACpB,oBAAoB,0BAAA,EACpB,qBAAqB,2BAAA,EACrB,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA,EAChB,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA,EACf,KAAK,WAAA,EACL,YAAY,kBAAA,EACZ,cAAoB,EAApB,MAAM,mBAAG,WAAW,KAAA,EACpB,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,IAAI,UAAA,EACJ,MAAM,YAAA,EACN,sBAAqB,EAArB,cAAc,mBAAG,IAAI,KAAA;IAIjB,IAAA,KAAsB,gBAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,QAAA,EAAE,SAAS,QAAmB,CAAC;IAE5C,IAAM,UAAU,GAAG;QACjB,MAAM,aAAN,MAAM,uBAAN,MAAM,EAAI,CAAC;QACX,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEI,IAAA,KAAoB,uCAAS,CAAC;QAClC,SAAS,EAAE,qBAAqB,IAAI,oBAAoB,IAAI,CAAC;QAC7D,UAAU,EAAE,kBAAkB,IAAI,iBAAiB;QACnD,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;KACrB,CAAC,EALK,OAAO,QAAA,EAAE,MAAM,QAKpB,CAAC;IAEH,IAAM,WAAW,GAAG,mBAAW,CAC7B,UAAC,IAAoB;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,GAAG;YAAG,GAA8C,CAAC,OAAO,GAAG,IAAI,CAAC;IAC1E,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,IAAM,mBAAmB,GAAwB;QAC/C,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,IAAM,QAAQ,GAAG,gBAAgB,CAAC;QAChC,QAAQ,UAAA;QACR,MAAM,QAAA;QACN,MAAM,QAAA;KACP,CAAC,CAAC;IACH,IAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,QAAQ,UAAA;QACR,MAAM,QAAA;QACN,MAAM,QAAA;KACP,CAAC,CAAC;IAEH,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CACpC,6CAAQ,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAC,YAAY,GAAG,CACzE,CAAC;IAEF,IAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,CACnC,6CAAQ,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,CACnD,CAAC;IAEF,IAAM,UAAU,GACd,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,aAAW,cAAc,OAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,IAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,CACnC,0CACE,IAAI,EAAC,cAAc,EACnB,GAAG,EAAE,IAAI,CAAC,MAAM,EAChB,KAAK,aACH,eAAe,EAAE,IAAI,CAAC,OAAO,EAC7B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,UAAU,YAAA;YACV,SAAS,WAAA;YACT,cAAc,gBAAA,IACX,mBAAmB,IAExB,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;IAED,IAAA,KAAK,GAAkB,IAAI,MAAtB,EAAE,WAAW,GAAK,IAAI,YAAT,CAAU;IACpC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,WAAW,CAAC;IAElD,IAAM,GAAG,GAAG,uDAAkD,KAAK,oBAAa,MAAM,cAAU,CAAC;IAEjG,IAAM,KAAK,GACT,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAClB,0CACE,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,MAAM;SACd,EACD,GAAG,EAAE,+BAA6B,yBAAM,CAAC,GAAG,CAAG,EAC/C,IAAI,EAAC,cAAc,GACnB,CACH,CAAC,CAAC,CAAC,IAAI,CAAC;IAEX,OAAO,CACL,0CACE,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,SAAS,EACpB,KAAK,sBACH,QAAQ,EAAE,QAAQ,IACf,CAAC,MAAM,KAAK,MAAM;YACnB,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,MAAM,KAAK,WAAW;gBACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC1D,CAAC,CAAC,MAAM,KAAK,OAAO;oBACpB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,OAAA,EAAE;oBACjC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GACzC,KAAK;QAGT,KAAK;QACL,WAAW;QACX,QAAQ,IAAI,CACX;YACG,UAAU;YACV,aAAa;YACb,IAAI,CAAC,GAAG,IAAI,CACX,0CACE,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,+BACH,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,UAAU,YAAA,IACP,mBAAmB,KACtB,SAAS,WAAA;oBACT,cAAc,gBAAA,KACX,YAAY,IAEjB,CACH,CACO,CACX;QACD;YACE;gBACG,UAAU;gBACV,aAAa;gBACb,IAAI,CAAC,GAAG,IAAI,CACX,0CACE,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,MAAA,IAAI,CAAC,GAAG,mCAAI,EAAE,EACnB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,wBAAO,mBAAmB,GAAK,YAAY,GAChD,OAAO,EAAC,MAAM,GACd,CACH,CACO,CACD,CACP,CACP,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -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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"}
|