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) => (
-