Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function toTree(vnode) {
if (vnode == null) {
return null
}
// TODO(lmr): I'm not really sure I understand whether or not this is what
// i should be doing, or if this is a hack for something i'm doing wrong
// somewhere else. Should talk to sebastian about this perhaps
const node = findCurrentFiberUsingSlowPath(vnode)
switch (node.tag) {
case HostRoot: // 3
return toTree(node.child)
case HostPortal: // 4
return toTree(node.child)
case ClassComponent:
return {
nodeType: 'class',
type: node.type,
props: { ...node.memoizedProps },
key: ensureKeyOrUndefined(node.key),
ref: node.ref,
instance: node.stateNode,
rendered: childrenToTree(node.child),
}
case FunctionalComponent: // 1
function toTree(vnode) {
if (vnode == null) {
return null;
}
// TODO(lmr): I'm not really sure I understand whether or not this is what
// i should be doing, or if this is a hack for something i'm doing wrong
// somewhere else. Should talk to sebastian about this perhaps
const node = findCurrentFiberUsingSlowPath(vnode);
switch (node.tag) {
case HostRoot: // 3
return toTree(node.child);
case HostPortal: // 4
return toTree(node.child);
case ClassComponent:
return {
nodeType: 'class',
type: node.type,
props: { ...node.memoizedProps },
key: ensureKeyOrUndefined(node.key),
ref: node.ref,
instance: node.stateNode,
rendered: childrenToTree(node.child),
};
case FunctionalComponent: // 1
isConcurrent = true;
}
}
let container = {
children: [],
createNodeMock,
tag: 'CONTAINER',
};
let root: FiberRoot | null = createContainer(
container,
isConcurrent ? ConcurrentRoot : LegacyRoot,
false,
null,
);
invariant(root != null, 'something went wrong');
updateContainer(element, root, null, null);
const entry = {
_Scheduler: Scheduler,
root: undefined, // makes flow happy
// we define a 'getter' for 'root' below using 'Object.defineProperty'
toJSON(): Array | ReactTestRendererNode | null {
if (root == null || root.current == null || container == null) {
return null;
}
if (container.children.length === 0) {
return null;
}
if (container.children.length === 1) {
return toJSON(container.children[0]);
}
onMeshPicked?: (mesh: AbstractMesh, scene: BabylonJSScene) => void
onScenePointerDown?: (evt: PointerInfo, scene: BabylonJSScene) => void
onScenePointerUp?: (evt: PointerInfo, scene: BabylonJSScene) => void
onScenePointerMove?: (evt: PointerInfo, scene: BabylonJSScene) => void
onSceneMount?: (sceneEventArgs: SceneEventArgs) => void
sceneOptions?: SceneOptions
} & FiberSceneProps
class Scene extends React.Component {
private _scene: Nullable = null;
private _pointerDownObservable: Nullable> = null;
private _pointerUpObservable: Nullable> = null;
private _pointerMoveObservable: Nullable> = null;
private _fiberRoot?: ReactReconciler.FiberRoot;
private _reactReconcilerBabylonJs = ReactReconciler(ReactBabylonJSHostConfig)
private _propsHandler = new FiberScenePropsHandler();
componentDidMount() {
const { babylonJSContext } = this.props
if (!babylonJSContext) {
// we could try to create one here with existing props (ie: backwards compat?)
console.error('You are creating a scene without an Engine. \'SceneOnly\' will only work as a child of Engine, use \'Scene\' otherwise.')
return
}
const { engine /*, canvas */ } = babylonJSContext;
this._scene = new BabylonJSScene(engine!, this.props.sceneOptions)
const updates : UpdatePayload = this._propsHandler.getPropertyUpdates(this._scene, {}, this.props as any, this._scene)
if (updates !== null) {
const node = ((element: any): TextAreaWithWrapperState);
if (__DEV__) {
ReactControlledValuePropTypes.checkPropTypes('textarea', props);
if (
props.value !== undefined &&
props.defaultValue !== undefined &&
!didWarnValDefaultVal
) {
console.error(
'%s contains a textarea with both value and defaultValue props. ' +
'Textarea elements must be either controlled or uncontrolled ' +
'(specify either the value prop, or the defaultValue prop, but not ' +
'both). Decide between using a controlled or uncontrolled textarea ' +
'and remove one of these props. More info: ' +
'https://fb.me/react-controlled-components',
getCurrentFiberOwnerNameInDevOrNull() || 'A component',
);
didWarnValDefaultVal = true;
}
}
let initialValue = props.value;
// Only bother fetching default value if we're going to use it
if (initialValue == null) {
let defaultValue = props.defaultValue;
// TODO (yungsters): Remove support for children content in <textarea>.
let children = props.children;
if (children != null) {
if (__DEV__) {
console.error(
'Use the `defaultValue` or `value` props instead of setting ' +</textarea>
tag: string,
rawProps: Object,
rootContainerElement: Element | Document,
): void {
const isCustomComponentTag = isCustomComponent(tag, rawProps);
if (__DEV__) {
validatePropertiesInDevelopment(tag, rawProps);
if (
isCustomComponentTag &&
!didWarnShadyDOM &&
(domElement: any).shadyRoot
) {
console.error(
'%s is using shady DOM. Using shady DOM with React can ' +
'cause things to break subtly.',
getCurrentFiberOwnerNameInDevOrNull() || 'A component',
);
didWarnShadyDOM = true;
}
}
// TODO: Make sure that we check isMounted before firing any of these events.
let props: Object;
switch (tag) {
case 'iframe':
case 'object':
case 'embed':
trapBubbledEvent(TOP_LOAD, domElement);
props = rawProps;
break;
case 'video':
case 'audio':
let isCustomComponentTag;
let extraAttributeNames: Set;
if (__DEV__) {
suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;
isCustomComponentTag = isCustomComponent(tag, rawProps);
validatePropertiesInDevelopment(tag, rawProps);
if (
isCustomComponentTag &&
!didWarnShadyDOM &&
(domElement: any).shadyRoot
) {
console.error(
'%s is using shady DOM. Using shady DOM with React can ' +
'cause things to break subtly.',
getCurrentFiberOwnerNameInDevOrNull() || 'A component',
);
didWarnShadyDOM = true;
}
}
// TODO: Make sure that we check isMounted before firing any of these events.
switch (tag) {
case 'iframe':
case 'object':
case 'embed':
trapBubbledEvent(TOP_LOAD, domElement);
break;
case 'video':
case 'audio':
// Create listener for each media event
for (let i = 0; i < mediaEventTypes.length; i++) {
}
if (container._reactRootContainer) {
if (__DEV__) {
const rootEl = getReactRootElementInContainer(container);
const renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);
if (renderedByDifferentReact) {
console.error(
"unmountComponentAtNode(): The node you're attempting to unmount " +
'was rendered by another copy of React.',
);
}
}
// Unmount should not be batched.
unbatchedUpdates(() => {
legacyRenderSubtreeIntoContainer(null, null, container, false, () => {
container._reactRootContainer = null;
unmarkContainerAsRoot(container);
});
});
// If you call unmountComponentAtNode twice in quick succession, you'll
// get `true` twice. That's probably fine?
return true;
} else {
if (__DEV__) {
const rootEl = getReactRootElementInContainer(container);
const hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
// Check if the container itself is a React root node.
const isContainerReactRoot =
container.nodeType === ELEMENT_NODE &&
universes[instance.root],
instance.render()
);
},
commitMount(instance, updatePayload, type, oldProps, newProps) {
// noop
},
commitTextUpdate(textInstance, oldText, newText) {
textInstance.children = newText;
}
}
};
const ReactDMX = Reconciler(ReconcilerConfig);
export default ReactDMX;
}
if (props.onMouseMove !== prevProps.onMouseMove) {
instance.onMouseMove = props.onMouseMove
}
if (props.onMouseUp !== prevProps.onMouseUp) {
instance.onMouseUp = props.onMouseUp
}
if (props.onKeyUp !== prevProps.onKeyUp) {
instance.onKeyUp = props.onKeyUp
}
if (props.onKeyDown !== prevProps.onKeyDown) {
instance.onKeyDown = props.onKeyDown
}
}
const PaperRenderer = Reconciler({
appendInitialChild(parentInstance, child) {
if (typeof child === 'string') {
// Noop for string children of Text (eg )
invariant(false, 'Text children should already be flattened.')
} else if (parentInstance instanceof Group && child instanceof Item) {
child.addTo(parentInstance)
}
},
createInstance(type, props, paperScope) {
const { children, ...paperProps } = props
let instance = {}
switch (type) {
case TYPES.TOOL:
instance = new Tool(paperProps)