From 0f955980a3db96e2197e52cb5549e8d46e28fa06 Mon Sep 17 00:00:00 2001 From: Lucas Cordeiro Date: Mon, 8 Apr 2019 22:42:32 -0300 Subject: [PATCH] Add collapsible icon for object and array types --- src/devtools/views/Components/KeyValue.css | 10 ++++ src/devtools/views/Components/KeyValue.js | 64 ++++++++++++++-------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/devtools/views/Components/KeyValue.css b/src/devtools/views/Components/KeyValue.css index 2960398106..aef2b78743 100644 --- a/src/devtools/views/Components/KeyValue.css +++ b/src/devtools/views/Components/KeyValue.css @@ -26,3 +26,13 @@ color: var(--color-dimmer); font-style: italic; } + +.Opener { + padding: 0.125rem; + margin-left: -1rem; +} + +.Opener svg { + width: 0.75rem; + height: 0.75rem; +} diff --git a/src/devtools/views/Components/KeyValue.js b/src/devtools/views/Components/KeyValue.js index 3c8156eb64..ffff29664c 100644 --- a/src/devtools/views/Components/KeyValue.js +++ b/src/devtools/views/Components/KeyValue.js @@ -1,7 +1,9 @@ // @flow -import React from 'react'; +import React, { useState } from 'react'; import EditableValue from './EditableValue'; +import Button from '../Button'; +import ButtonIcon from '../ButtonIcon'; import { getMetaValueLabel } from '../utils'; import { meta } from '../../../hydration'; import styles from './KeyValue.css'; @@ -23,6 +25,12 @@ export default function KeyValue({ path = [], value, }: KeyValueProps) { + const [open, setOpen] = useState(false); + + const handleToggle = () => { + setOpen(prevOpen => !prevOpen); + }; + const dataType = typeof value; const isSimpleType = dataType === 'number' || @@ -72,45 +80,57 @@ export default function KeyValue({ ); } else { + const opener = ( + + ); + if (Array.isArray(value)) { - children = value.map((innerValue, index) => ( - - )); + children = open + ? value.map((innerValue, index) => ( + + )) + : []; children.unshift(
+ {value.length > 0 && opener} {name} Array
); } else { - // $FlowFixMe "Missing type annotation for U" whatever that means - children = Object.entries(value).map(([name, value]) => ( - - )); + children = open + ? // $FlowFixMe "Missing type annotation for U" whatever that means + Object.entries(value).map(([name, value]) => ( + + )) + : []; children.unshift(
+ {Object.entries(value).length > 0 && opener} {name} Object