@vonaffenfels/slate-editor 1.1.60 → 1.1.65
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/Renderer.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/src/Renderer.js +36 -3
- package/src/Serializer/Serializer.js +35 -31
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vonaffenfels/slate-editor",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.65",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"cssnano": "^5.0.1",
|
|
73
73
|
"escape-html": "^1.0.3"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "f14cc08783e4c357ee4c0887fa2965b3d020eda4",
|
|
76
76
|
"publishConfig": {
|
|
77
77
|
"access": "public"
|
|
78
78
|
}
|
package/src/Renderer.js
CHANGED
|
@@ -2,7 +2,7 @@ import React, {memo} from 'react';
|
|
|
2
2
|
import {StorybookContext} from "./Context/StorybookContext";
|
|
3
3
|
import {Serializer} from "./Serializer";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
const Renderer = memo(function RendererInner({
|
|
6
6
|
value,
|
|
7
7
|
modifyElementFunc,
|
|
8
8
|
specialClassMap,
|
|
@@ -10,6 +10,7 @@ function Renderer({
|
|
|
10
10
|
transformAttributes,
|
|
11
11
|
storybookComponentLoader,
|
|
12
12
|
storybookComponentDataLoader,
|
|
13
|
+
filterContent,
|
|
13
14
|
fixedPositions,
|
|
14
15
|
fixedPositionTypes,
|
|
15
16
|
adDefinitionDesktop,
|
|
@@ -23,6 +24,7 @@ function Renderer({
|
|
|
23
24
|
defaultComponentReplacement={defaultComponentReplacement}
|
|
24
25
|
transformAttributes={transformAttributes}
|
|
25
26
|
value={value}
|
|
27
|
+
filterContent={filterContent}
|
|
26
28
|
modifyElementFunc={modifyElementFunc}
|
|
27
29
|
storybookComponentLoader={storybookComponentLoader}
|
|
28
30
|
storybookComponentDataLoader={storybookComponentDataLoader}
|
|
@@ -31,8 +33,39 @@ function Renderer({
|
|
|
31
33
|
adDefinitionDesktop={adDefinitionDesktop}
|
|
32
34
|
adDefinitionMobile={adDefinitionMobile}
|
|
33
35
|
isRenderer={true}
|
|
34
|
-
onStorybookElementClick={onStorybookElementClick}
|
|
35
|
-
}
|
|
36
|
+
onStorybookElementClick={onStorybookElementClick}/>
|
|
37
|
+
}, (prevProps, nextProps) => {
|
|
38
|
+
let allKeys = Array.from(new Set([...Object.keys(nextProps), ...Object.keys(prevProps)]));
|
|
39
|
+
|
|
40
|
+
for (let i = 0; i < allKeys.length; i++) {
|
|
41
|
+
const key = allKeys[i];
|
|
42
|
+
const oldValue = prevProps[key];
|
|
43
|
+
const newValue = nextProps[key];
|
|
44
|
+
|
|
45
|
+
if (oldValue === newValue) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!oldValue && !newValue) {
|
|
50
|
+
console.warn(`Renderer :: ${key} :: Both empty but type changed?`, {oldValue, newValue});
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (typeof oldValue === "object" && typeof newValue === "object" && oldValue && newValue) {
|
|
55
|
+
try {
|
|
56
|
+
if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return true;
|
|
68
|
+
})
|
|
36
69
|
|
|
37
70
|
const RendererMemo = memo(Renderer);
|
|
38
71
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, {
|
|
2
2
|
isValidElement,
|
|
3
|
-
Fragment,
|
|
3
|
+
Fragment, useMemo, useEffect,
|
|
4
4
|
} from "react";
|
|
5
5
|
import {Default} from "../Nodes/Default";
|
|
6
6
|
import {Leaf} from "../Nodes/Leaf";
|
|
@@ -62,33 +62,19 @@ export function Serializer({
|
|
|
62
62
|
storybookComponentDataLoader,
|
|
63
63
|
defaultComponentReplacement,
|
|
64
64
|
modifyElementFunc,
|
|
65
|
+
filterContent = null,
|
|
65
66
|
isRenderer = false,
|
|
66
67
|
fixedPositions = {},
|
|
67
68
|
fixedPositionTypes = {},
|
|
68
69
|
adDefinitionDesktop = [],
|
|
69
70
|
adDefinitionMobile = [],
|
|
70
71
|
}) {
|
|
71
|
-
if (value) {
|
|
72
|
-
value = value.filter((node) => {
|
|
73
|
-
if (!node) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (node.type === "paragraph") {
|
|
78
|
-
if (!node.children || node.children.length === 0) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
let children = node.children.filter((v) => !isEmptyNode(v));
|
|
83
|
-
|
|
84
|
-
if (children.length === 0) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
72
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
73
|
+
const processedValue = useMemo(() => {
|
|
74
|
+
let val = addAdsToValue(value, adDefinitionDesktop, adDefinitionMobile);
|
|
75
|
+
val = addFixedPositionsToValue(val, fixedPositions, fixedPositionTypes);
|
|
76
|
+
return val;
|
|
77
|
+
}, [value, adDefinitionDesktop, adDefinitionMobile, fixedPositions, fixedPositionTypes]);
|
|
92
78
|
|
|
93
79
|
const getPropsForType = (type, isInSlot = false) => {
|
|
94
80
|
if (!elementPropsMap) {
|
|
@@ -230,6 +216,27 @@ export function Serializer({
|
|
|
230
216
|
node = modifyElementFunc(node);
|
|
231
217
|
}
|
|
232
218
|
|
|
219
|
+
if (node.type === "paragraph") {
|
|
220
|
+
if (!node.children || node.children.length === 0) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
let children = node.children.filter((v) => !isEmptyNode(v));
|
|
225
|
+
|
|
226
|
+
if (children.length === 0) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
try {
|
|
232
|
+
let filterCtx = {content: value};
|
|
233
|
+
if (filterContent && !filterContent(node, filterCtx)) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
} catch (e) {
|
|
237
|
+
console.error(e)
|
|
238
|
+
}
|
|
239
|
+
|
|
233
240
|
if (!node.children || !node.children.length) {
|
|
234
241
|
return serializeLeaf(node);
|
|
235
242
|
}
|
|
@@ -254,18 +261,15 @@ export function Serializer({
|
|
|
254
261
|
return <Leaf leaf={props} isRenderer={true} typeProps={getPropsForType("leaf")}>{props.text || ""}</Leaf>;
|
|
255
262
|
}
|
|
256
263
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
processedValue = addFixedPositionsToValue(processedValue, fixedPositions, fixedPositionTypes);
|
|
260
|
-
|
|
261
|
-
return <>
|
|
262
|
-
{!!processedValue && processedValue.map((v, i) => {
|
|
263
|
-
return <Fragment key={v.block + "-pos-" + i}>{serializeNode(v, i)}</Fragment>;
|
|
264
|
-
})}
|
|
265
|
-
</>;
|
|
264
|
+
if (!value) {
|
|
265
|
+
return null;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
return
|
|
268
|
+
return <>
|
|
269
|
+
{!!processedValue && processedValue.map((v, i) => {
|
|
270
|
+
return <Fragment key={v.block + "-pos-" + i}>{serializeNode(v, i)}</Fragment>;
|
|
271
|
+
})}
|
|
272
|
+
</>;
|
|
269
273
|
}
|
|
270
274
|
|
|
271
275
|
function getFixedPosition(fixedPositions, i) {
|