Coveralls logob
Coveralls logo
  • Home
  • Features
  • Pricing
  • Docs
  • Sign In

uber / deck.gl / 13340

10 Sep 2019 - 3:13 coverage decreased (-2.6%) to 80.892%
13340

Pull #3552

travis-ci-com

9181eb84f9c35729a3bad740fb7f9d93?size=18&default=identiconweb-flow
[#3548 - Part 4] Modify setup.py to specify that README is markdown
Pull Request #3552: [#3548 - Part 4] Update notebook documentation to include additional pydeck features

3330 of 4491 branches covered (74.15%)

Branch coverage included in aggregate %.

6860 of 8106 relevant lines covered (84.63%)

5923.39 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.52
/modules/react/src/utils/extract-jsx-layers.js
1
import React, {createElement} from 'react';
8×
2
import {inheritsFrom} from './inherits-from';
3
import {Layer, View} from '@deck.gl/core';
4

5
// recursively wrap render callbacks in `View`
6
function wrapInView(node) {
7
  if (!node) {
21×
8
    return node;
3×
9
  }
10
  if (typeof node === 'function') {
18×
11
    // React.Children does not traverse functions.
12
    // All render callbacks must be protected under a <View>
13
    return createElement(View, {}, node);
3×
14
  }
15
  if (Array.isArray(node)) {
15×
16
    return node.map(wrapInView);
4×
17
  }
18
  if (inheritsFrom(node.type, View)) {
11×
19
    return node;
6×
20
  }
21
  return node;
5×
22
}
23

24
// extracts any deck.gl layers masquerading as react elements from props.children
25
export default function extractJSXLayers({children, layers, views}) {
26
  const reactChildren = []; // extract real react elements (i.e. not deck.gl layers)
13×
27
  const jsxLayers = []; // extracted layer from react children, will add to deck.gl layer array
13×
28
  const jsxViews = {};
13×
29

30
  // React.children
31
  React.Children.forEach(wrapInView(children), reactElement => {
13×
32
    if (reactElement) {
15×
33
      // For some reason Children.forEach doesn't filter out `null`s
34
      const ElementType = reactElement.type;
14×
35
      if (inheritsFrom(ElementType, Layer)) {
14×
36
        const layer = createLayer(ElementType, reactElement.props);
3×
37
        jsxLayers.push(layer);
3×
38
      } else {
39
        reactChildren.push(reactElement);
11×
40
      }
41

42
      // empty id => default view
43
      if (ElementType !== View && inheritsFrom(ElementType, View) && reactElement.props.id) {
14×
44
        const view = new ElementType(reactElement.props);
5×
45
        jsxViews[view.id] = view;
5×
46
      }
47
    }
48
  });
49

50
  // Avoid modifying views if no JSX views were found
51
  if (Object.keys(jsxViews).length > 0) {
13×
52
    // If a view is specified in both views prop and JSX, use the one in views
53
    if (Array.isArray(views)) {
5×
54
      views.forEach(view => {
1×
55
        jsxViews[view.id] = view;
2×
56
      });
57
    } else if (views) {
4×
58
      jsxViews[views.id] = views;
2×
59
    }
60
    views = Object.values(jsxViews);
5×
61
  }
62

63
  // Avoid modifying layers array if no JSX layers were found
64
  layers = jsxLayers.length > 0 ? [...jsxLayers, ...layers] : layers;
13×
65

66
  return {layers, children: reactChildren, views};
13×
67
}
68

69
function createLayer(LayerType, reactProps) {
70
  const props = {};
3×
71
  // Layer.defaultProps is treated as ReactElement.defaultProps and merged into react props
72
  // Remove them
73
  const defaultProps = LayerType.defaultProps || {};
Branches [[12, 1]] missed. 3×
74
  for (const key in reactProps) {
3×
75
    if (defaultProps[key] !== reactProps[key]) {
Branches [[13, 0]] missed. 27×
UNCOV
76
      props[key] = reactProps[key];
!
77
    }
78
  }
79
  return new LayerType(props);
3×
80
}
Troubleshooting · Open an Issue · Sales · Support · ENTERPRISE · CAREERS · STATUS
BLOG · TWITTER · Legal & Privacy · Supported CI Services · What's a CI service? · Automated Testing

© 2019 Coveralls, LLC