| 1 |
import {memo} from '@wordpress/element'; |
| 2 |
import {Node} from '@givewp/forms/types'; |
| 3 |
|
| 4 |
/** |
| 5 |
* This is used for memoizing Node components. Node props come from the server and are never intended to change. The |
| 6 |
* state of a Node may change, triggering a re-render, but the props should never change. |
| 7 |
* |
| 8 |
* @since 3.3.0 updated param and return types |
| 9 |
* @since 3.0.0 |
| 10 |
*/ |
| 11 |
export default function memoNode(NodeComponent: {({node}: {node: Node}): JSX.Element}): typeof NodeComponent { |
| 12 |
return memo(NodeComponent, compareNodeProps) as typeof NodeComponent; |
| 13 |
} |
| 14 |
|
| 15 |
type NodeProp = {node: Node}; |
| 16 |
|
| 17 |
function compareNodeProps(oldNode: NodeProp, newNode: NodeProp) { |
| 18 |
return oldNode.node.name === newNode.node.name; |
| 19 |
} |
| 20 |
|