function getLayoutCode()

in website/src/components/Playground/src/CodeJavaScript.js [52:119]


function getLayoutCode(
  node: LayoutRecordT,
  name: string,
  index: number,
): string {
  const lines = [];
  const childName = (i: number) => `${name === 'root' ? 'node' : name}_${i}`;

  lines.push(
    ...node.children.map((node, i) => getLayoutCode(node, childName(i), i)),
  );

  lines.push('', `// create node ${name}`, `const ${name} = Node.create();`);
  const untouchedNode = LayoutRecord({width: '', height: ''});
  Object.keys(untouchedNode.toJS()).forEach(key => {
    if (key !== 'children' && untouchedNode[key] !== node[key]) {
      if (node[key] instanceof PositionRecord) {
        // iterate through position record
        const {top, left, right, bottom} = node[key].toJS();
        if (
          top !== untouchedNode[key].top &&
          top === left &&
          top === right &&
          top === bottom
        ) {
          // all edges
          lines.push(setProperty(name, key, node[key].top, getEnum('edge', 8)));
          return;
        }
        const alreadySet = [];
        if (top !== untouchedNode[key].top && top === bottom) {
          lines.push(setProperty(name, key, node[key].top, getEnum('edge', 7)));
          alreadySet.push('top', 'bottom');
        }
        if (left !== untouchedNode[key].left && left === right) {
          lines.push(
            setProperty(name, key, node[key].left, getEnum('edge', 6)),
          );
          alreadySet.push('left', 'right');
        }
        ['left', 'top', 'right', 'bottom'].forEach((pKey, i) => {
          if (
            node[key][pKey] !== untouchedNode[key][pKey] &&
            alreadySet.indexOf(pKey) === -1
          ) {
            lines.push(
              setProperty(name, key, node[key][pKey], getEnum('edge', i)),
            );
          }
        });
      } else {
        lines.push(setProperty(name, key, node[key]));
      }
    }
  });

  if (node.children && node.children.size > 0) {
    lines.push(
      '',
      '// insert children',
      ...node.children.map(
        (_, i) => `${name}.insertChild(${childName(i)}, ${i});`,
      ),
    );
  }

  return lines.join('\n');
}