Add basic traverse function with tests

This commit is contained in:
2019-07-19 18:45:25 +05:30
parent 0ad6620437
commit 92444eacb8
5 changed files with 121 additions and 14 deletions
+63
View File
@@ -0,0 +1,63 @@
// import { isNodeSimple } from './utils';
export interface FiberNode {
child: FiberNode | null;
sibling: FiberNode | null;
// Add type
}
function traverse(node: FiberNode, fn: (node: FiberNode) => any) {
// if (node.child) {
// if (!isNodeSimple(node) && typeof node.child.type === "string") {
// node.child.stateNode.addEventListener('click', (ev) => {
// console.log('Clicked inside component: ' + node.type.name);
// ev.stopPropagation();
// });
// /* console.log('Set event listener for '+ node.type.name) */;
// }
// }
fn.call(null, node);
console.log('Going through node with ', node);
if (node.child !== null) {
traverse(node.child, fn);
}
if (node.sibling !== null) {
traverse(node.sibling, fn);
}
};
// findComponent = (node, name) => {
// console.log(node)
// if (!isNodeSimple(node) && node.type.name === name) {
// console.log('Found node with name ' + node.type.name);
// /* if (node.child) {
// let innerNode = node.child;
// console.log('Highlighting its inner nodes in yellow');
// highlightNode(node, true);
// } */
// return node;
// }
// let returnVal = undefined;
// returnVal = node.child && findComponent(node.child, name);
// if (returnVal) { return returnVal }
// returnVal = node.sibling && findComponent(node.sibling, name);
// if (returnVal) { return returnVal }
// };
// highlightNode = (node, ignoreSibling = false) => {
// if (isNodeSimple(node)) {
// node.stateNode.style.backgroundColor = "yellow";
// } else {
// node.child && highlightNode(node.child);
// }
// !ignoreSibling && node.sibling && highlightNode(node.sibling);
// }
export { traverse };
-14
View File
@@ -1,14 +0,0 @@
import * as PropTypes from 'prop-types'
import * as React from 'react'
interface Props {
text: string
}
const C: React.SFC<Props> = ({ text }) => <p>{text}</p>
C.propTypes = {
text: PropTypes.string.isRequired
}
export default C
+5
View File
@@ -0,0 +1,5 @@
function isNodeSimple(node) {
return (typeof node.type === "string") || node.type === null;
}
export { isNodeSimple };