Skip to content

Commit 3acbbb2

Browse files
author
Tomáš Vojtášek
committed
Added support for React 16.6.0
1 parent 2fe0cf1 commit 3acbbb2

File tree

4 files changed

+1200
-92
lines changed

4 files changed

+1200
-92
lines changed

package.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
"eslint-plugin-react": "^7.8.2",
4343
"lodash.range": "^3.2.0",
4444
"prettier": "^1.12.1",
45-
"react": "^16.3.2",
46-
"react-dom": "^16.3.2",
45+
"react": "^16.6.0",
46+
"react-dom": "^16.6.0",
4747
"rimraf": "^2.6.2"
4848
},
4949
"peerDependencies": {
@@ -53,10 +53,11 @@
5353
"dependencies": {
5454
"@craigmorton/linebreak": "^0.4.5",
5555
"css-layout": "^1.1.1",
56-
"fbjs": "^0.8.16",
56+
"fbjs": "^1.0.0",
5757
"multi-key-cache": "^1.0.2",
5858
"prop-types": "^15.6.1",
59-
"react-reconciler": "^0.10.0",
59+
"react-reconciler": "^0.16.0",
60+
"scheduler": "^0.10.0",
6061
"scroller": "https://github.com/mjohnston/scroller"
6162
}
6263
}

src/CanvasRenderer.js

+80-71
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import Gradient from "./Gradient";
55
import Text from "./Text";
66
import Group from "./Group";
77
import { RawImage } from "./Image";
8-
import ReactDOMFrameScheduling from "./ReactDOMFrameScheduling";
8+
import {
9+
unstable_now as now,
10+
unstable_scheduleWork as scheduleDeferredCallback,
11+
unstable_cancelScheduledWork as cancelDeferredCallback
12+
} from 'scheduler'
913
import ReactFiberReconciler from "react-reconciler";
1014
import CanvasComponent from "./CanvasComponent";
1115
import { getClosestInstanceFromNode } from "./ReactDOMComponentTree";
@@ -120,86 +124,88 @@ const CanvasHostConfig = {
120124
return emptyObject;
121125
},
122126

123-
scheduleDeferredCallback: ReactDOMFrameScheduling.rIC,
127+
scheduleDeferredCallback,
128+
cancelDeferredCallback,
124129

125130
shouldSetTextContent(type, props) {
126131
return (
127132
typeof props.children === "string" || typeof props.children === "number"
128133
);
129134
},
130135

131-
now: ReactDOMFrameScheduling.now,
136+
now,
132137

133138
isPrimaryRenderer: false,
134139

135140
useSyncScheduling: true,
136141

137-
mutation: {
138-
appendChild(parentInstance, child) {
139-
const childLayer = child.getLayer();
140-
const parentLayer = parentInstance.getLayer();
141-
142-
if (childLayer.parentLayer === parentLayer) {
143-
childLayer.moveToTop();
144-
} else {
145-
childLayer.inject(parentLayer);
146-
}
147-
148-
parentLayer.invalidateLayout();
149-
},
150-
151-
appendChildToContainer(parentInstance, child) {
152-
const childLayer = child.getLayer();
153-
const parentLayer = parentInstance.getLayer();
154-
155-
if (childLayer.parentLayer === parentLayer) {
156-
childLayer.moveToTop();
157-
} else {
158-
childLayer.inject(parentLayer);
159-
}
160-
161-
parentLayer.invalidateLayout();
162-
},
163-
164-
insertBefore(parentInstance, child, beforeChild) {
165-
const parentLayer = parentInstance.getLayer();
166-
child.getLayer().injectBefore(parentLayer, beforeChild.getLayer());
167-
parentLayer.invalidateLayout();
168-
},
169-
170-
insertInContainerBefore(parentInstance, child, beforeChild) {
171-
const parentLayer = parentInstance.getLayer();
172-
child.getLayer().injectBefore(parentLayer, beforeChild.getLayer());
173-
parentLayer.invalidateLayout();
174-
},
175-
176-
removeChild(parentInstance, child) {
177-
const parentLayer = parentInstance.getLayer();
178-
child.getLayer().remove();
179-
freeComponentAndChildren(child);
180-
parentLayer.invalidateLayout();
181-
},
182-
183-
removeChildFromContainer(parentInstance, child) {
184-
const parentLayer = parentInstance.getLayer();
185-
child.getLayer().remove();
186-
freeComponentAndChildren(child);
187-
parentLayer.invalidateLayout();
188-
},
189-
190-
commitTextUpdate(/*textInstance, oldText, newText*/) {
191-
// Noop
192-
},
193-
194-
commitMount(/*instance, type, newProps*/) {
195-
// Noop
196-
},
197-
198-
commitUpdate(instance, updatePayload, type, oldProps, newProps) {
199-
if (typeof instance.applyLayerProps !== "undefined") {
200-
instance.applyLayerProps(oldProps, newProps);
201-
instance.getLayer().invalidateLayout();
202-
}
142+
supportsMutation: true,
143+
144+
// mutation
145+
appendChild(parentInstance, child) {
146+
const childLayer = child.getLayer();
147+
const parentLayer = parentInstance.getLayer();
148+
149+
if (childLayer.parentLayer === parentLayer) {
150+
childLayer.moveToTop();
151+
} else {
152+
childLayer.inject(parentLayer);
153+
}
154+
155+
parentLayer.invalidateLayout();
156+
},
157+
158+
appendChildToContainer(parentInstance, child) {
159+
const childLayer = child.getLayer();
160+
const parentLayer = parentInstance.getLayer();
161+
162+
if (childLayer.parentLayer === parentLayer) {
163+
childLayer.moveToTop();
164+
} else {
165+
childLayer.inject(parentLayer);
166+
}
167+
168+
parentLayer.invalidateLayout();
169+
},
170+
171+
insertBefore(parentInstance, child, beforeChild) {
172+
const parentLayer = parentInstance.getLayer();
173+
child.getLayer().injectBefore(parentLayer, beforeChild.getLayer());
174+
parentLayer.invalidateLayout();
175+
},
176+
177+
insertInContainerBefore(parentInstance, child, beforeChild) {
178+
const parentLayer = parentInstance.getLayer();
179+
child.getLayer().injectBefore(parentLayer, beforeChild.getLayer());
180+
parentLayer.invalidateLayout();
181+
},
182+
183+
removeChild(parentInstance, child) {
184+
const parentLayer = parentInstance.getLayer();
185+
child.getLayer().remove();
186+
freeComponentAndChildren(child);
187+
parentLayer.invalidateLayout();
188+
},
189+
190+
removeChildFromContainer(parentInstance, child) {
191+
const parentLayer = parentInstance.getLayer();
192+
child.getLayer().remove();
193+
freeComponentAndChildren(child);
194+
parentLayer.invalidateLayout();
195+
},
196+
197+
commitTextUpdate(/*textInstance, oldText, newText*/) {
198+
// Noop
199+
},
200+
201+
commitMount(/*instance, type, newProps*/) {
202+
// Noop
203+
},
204+
205+
commitUpdate(instance, updatePayload, type, oldProps, newProps) {
206+
if (typeof instance.applyLayerProps !== "undefined") {
207+
instance.applyLayerProps(oldProps, newProps);
208+
instance.getLayer().invalidateLayout();
203209
}
204210
}
205211
};
@@ -216,8 +222,11 @@ CanvasRenderer.injectIntoDevTools({
216222
}
217223
});
218224

219-
CanvasRenderer.registerComponentConstructor = (name, ctor) => {
225+
const registerComponentConstructor = (name, ctor) => {
220226
componentConstructors[name] = ctor;
221227
};
222228

223-
export default CanvasRenderer;
229+
export {
230+
CanvasRenderer,
231+
registerComponentConstructor
232+
};

src/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import FontFace from "./FontFace";
66
import FrameUtils from "./FrameUtils";
77
import measureText from "./measureText";
88
import CanvasComponent from "./CanvasComponent";
9-
import CanvasRenderer from "./CanvasRenderer";
9+
import { CanvasRenderer, registerComponentConstructor } from "./CanvasRenderer";
1010
import { registerLayerType } from "./DrawingUtils";
1111

1212
Surface.canvasRenderer = CanvasRenderer;
@@ -28,7 +28,7 @@ const registerCustomComponent = function(name, applyProps, drawFunction) {
2828
};
2929
};
3030

31-
CanvasRenderer.registerComponentConstructor(name, klass);
31+
registerComponentConstructor(name, klass);
3232

3333
return name;
3434
};

0 commit comments

Comments
 (0)