diff --git a/backend/getData.js b/backend/getData.js index 6356ce746f..607c65cf6b 100644 --- a/backend/getData.js +++ b/backend/getData.js @@ -160,6 +160,11 @@ function getData(internalInstance: Object): DataType { }; } + const hideSymbol = nodeType === 'Composite' && + typeof Symbol === 'function' && + typeof type === 'function' && + type[Symbol.for('react.devtools.hide')]; + // $FlowFixMe return { nodeType, @@ -175,6 +180,7 @@ function getData(internalInstance: Object): DataType { text, updater, publicInstance, + hideSymbol, }; } diff --git a/backend/getDataFiber.js b/backend/getDataFiber.js index 38688f85fe..537c2a306a 100644 --- a/backend/getDataFiber.js +++ b/backend/getDataFiber.js @@ -49,6 +49,7 @@ function getDataFiber(fiber: Object, getOpaqueNode: (fiber: Object) => Object): var nodeType = null; var name = null; var text = null; + var hideSymbol = null; switch (fiber.tag) { case FunctionalComponent: @@ -58,12 +59,16 @@ function getDataFiber(fiber: Object, getOpaqueNode: (fiber: Object) => Object): publicInstance = fiber.stateNode; props = fiber.memoizedProps; state = fiber.memoizedState; + hideSymbol = typeof Symbol === 'function' && fiber.type[Symbol.for('react.devtools.hide')]; if (publicInstance != null) { context = publicInstance.context; if (context && Object.keys(context).length === 0) { context = null; } } + if (name === 'HigherOrderComponent') { + console.log('fiber backend', fiber); + } const inst = publicInstance; if (inst) { updater = { @@ -192,6 +197,7 @@ function getDataFiber(fiber: Object, getOpaqueNode: (fiber: Object) => Object): text, updater, publicInstance, + hideSymbol, }; } diff --git a/frontend/Breadcrumb.js b/frontend/Breadcrumb.js index 6f9d01aecb..baefd9c179 100644 --- a/frontend/Breadcrumb.js +++ b/frontend/Breadcrumb.js @@ -129,7 +129,7 @@ function getBreadcrumbPath(store: Store): BreadcrumbPath { } module.exports = decorate({ - listeners: () => ['breadcrumbHead', 'selected'], + listeners: () => ['breadcrumbHead', 'selected', 'hideSymbol'], props(store, props) { return { select: id => store.selectBreadcrumb(id), diff --git a/frontend/Node.js b/frontend/Node.js index 26d870a924..e7dc97c4d9 100644 --- a/frontend/Node.js +++ b/frontend/Node.js @@ -29,6 +29,7 @@ type PropsType = { isBottomTagSelected: boolean, searchRegExp: ?RegExp, wrappedChildren: ?Array, + hideSymbol: boolean, onHover: (isHovered: boolean) => void, onHoverBottom: (isHovered: boolean) => void, onContextMenu: () => void, @@ -185,7 +186,7 @@ class Node extends React.Component { let children = node.get('children'); - if (node.get('nodeType') === 'Wrapper') { + if (node.get('nodeType') === 'Wrapper' || (this.props.hideSymbol && node.get('hideSymbol'))) { return ( {children.map(child => @@ -413,7 +414,7 @@ Node.contextTypes = { var WrappedNode = decorate({ listeners(props) { - return [props.id]; + return [props.id, 'hideSymbol']; }, props(store, props) { var node = store.get(props.id); @@ -430,6 +431,7 @@ var WrappedNode = decorate({ isBottomTagHovered: store.isBottomTagHovered, hovered: store.hovered === props.id, searchRegExp: props.searchRegExp, + hideSymbol: store.hideSymbol, onToggleCollapse: e => { e.preventDefault(); store.toggleCollapse(props.id); diff --git a/frontend/Panel.js b/frontend/Panel.js index 9c9050645b..792465efcc 100644 --- a/frontend/Panel.js +++ b/frontend/Panel.js @@ -66,6 +66,7 @@ type State = { preferencesPanelShown: boolean, themeKey: number, themeName: ?string, + hideSymbol: boolean, }; class Panel extends React.Component { @@ -92,6 +93,7 @@ class Panel extends React.Component { isReact: props.alreadyFoundReact, themeKey: 0, themeName: props.themeName, + hideSymbol: true, }; this._unMounted = false; window.panel = this; diff --git a/frontend/PreferencesPanel.js b/frontend/PreferencesPanel.js index 02d96ffe39..1e825b7351 100644 --- a/frontend/PreferencesPanel.js +++ b/frontend/PreferencesPanel.js @@ -24,9 +24,11 @@ import type {Theme} from './types'; type Props = { changeTheme: (themeName: string) => void, + changeHideSymbol: (enabled: boolean) => void, hasCustomTheme: boolean, hide: () => void, open: bool, + hideSymbol: bool, }; type State = { @@ -66,7 +68,7 @@ class PreferencesPanel extends React.Component { render() { const {browserName, showHiddenThemes, theme, themeName, themes} = this.context; - const {hasCustomTheme, hide, open} = this.props; + const {hasCustomTheme, hide, open, hideSymbol} = this.props; const {editMode} = this.state; if (!open) { @@ -108,6 +110,16 @@ class PreferencesPanel extends React.Component { +
+ +