Skip to content

Commit 8e3db09

Browse files
authored
[DevTools] Make a non-editable name of KeyValue clickable (#34095)
This has been bothering me. You can click the arrow and the value to expand/collapse a KeyValue row but not the name. When the name is not editable it should be clickable. Such as when inspecting a Promise value.
1 parent 0417546 commit 8e3db09

File tree

1 file changed

+32
-19
lines changed
  • packages/react-devtools-shared/src/devtools/views/Components

1 file changed

+32
-19
lines changed

packages/react-devtools-shared/src/devtools/views/Components/KeyValue.js

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,13 @@ export default function KeyValue({
210210
canRenameTheCurrentPath = canRenamePathsAtDepth(depth);
211211
}
212212

213+
const hasChildren =
214+
typeof value === 'object' &&
215+
value !== null &&
216+
(canEditValues ||
217+
(isArray(value) && value.length > 0) ||
218+
Object.entries(value).length > 0);
219+
213220
let renderedName;
214221
if (isDirectChildOfAnArray) {
215222
if (canDeletePaths) {
@@ -218,27 +225,37 @@ export default function KeyValue({
218225
);
219226
} else {
220227
renderedName = (
221-
<span className={styles.Name}>
228+
<span
229+
className={styles.Name}
230+
onClick={isInspectable || hasChildren ? toggleIsOpen : null}>
222231
{name}
223232
{!!hookName && <span className={styles.HookName}>({hookName})</span>}
233+
<span className={styles.AfterName}>:</span>
224234
</span>
225235
);
226236
}
227237
} else if (canRenameTheCurrentPath) {
228238
renderedName = (
229-
<EditableName
230-
allowEmpty={canDeletePaths}
231-
className={styles.EditableName}
232-
initialValue={name}
233-
overrideName={renamePath}
234-
path={path}
235-
/>
239+
<>
240+
<EditableName
241+
allowEmpty={canDeletePaths}
242+
className={styles.EditableName}
243+
initialValue={name}
244+
overrideName={renamePath}
245+
path={path}
246+
/>
247+
<span className={styles.AfterName}>:</span>
248+
</>
236249
);
237250
} else {
238251
renderedName = (
239-
<span className={styles.Name} data-testname="NonEditableName">
252+
<span
253+
className={styles.Name}
254+
data-testname="NonEditableName"
255+
onClick={isInspectable || hasChildren ? toggleIsOpen : null}>
240256
{name}
241257
{!!hookName && <span className={styles.HookName}>({hookName})</span>}
258+
<span className={styles.AfterName}>:</span>
242259
</span>
243260
);
244261
}
@@ -286,7 +303,6 @@ export default function KeyValue({
286303
style={style}>
287304
<div className={styles.ExpandCollapseToggleSpacer} />
288305
{renderedName}
289-
<div className={styles.AfterName}>:</div>
290306
{canEditValues ? (
291307
<EditableValue
292308
overrideValue={overrideValue}
@@ -328,7 +344,6 @@ export default function KeyValue({
328344
style={style}>
329345
<div className={styles.ExpandCollapseToggleSpacer} />
330346
{renderedName}
331-
<div className={styles.AfterName}>:</div>
332347
<span
333348
className={styles.Link}
334349
onClick={() => {
@@ -365,7 +380,6 @@ export default function KeyValue({
365380
<div className={styles.ExpandCollapseToggleSpacer} />
366381
)}
367382
{renderedName}
368-
<div className={styles.AfterName}>:</div>
369383
<span
370384
className={styles.Value}
371385
onClick={isInspectable ? toggleIsOpen : undefined}>
@@ -388,7 +402,6 @@ export default function KeyValue({
388402
}
389403
} else {
390404
if (isArray(value)) {
391-
const hasChildren = value.length > 0 || canEditValues;
392405
const displayName = getMetaValueLabel(value);
393406

394407
children = value.map((innerValue, index) => (
@@ -449,12 +462,11 @@ export default function KeyValue({
449462
ref={contextMenuTriggerRef}
450463
style={style}>
451464
{hasChildren ? (
452-
<ExpandCollapseToggle isOpen={isOpen} setIsOpen={setIsOpen} />
465+
<ExpandCollapseToggle isOpen={isOpen} setIsOpen={toggleIsOpen} />
453466
) : (
454467
<div className={styles.ExpandCollapseToggleSpacer} />
455468
)}
456469
{renderedName}
457-
<div className={styles.AfterName}>:</div>
458470
<span
459471
className={styles.Value}
460472
onClick={hasChildren ? toggleIsOpen : undefined}>
@@ -472,7 +484,6 @@ export default function KeyValue({
472484
entries.sort(alphaSortEntries);
473485
}
474486

475-
const hasChildren = entries.length > 0 || canEditValues;
476487
const displayName = getMetaValueLabel(value);
477488

478489
children = entries.map(([key, keyValue]): ReactElement<any> => (
@@ -531,12 +542,11 @@ export default function KeyValue({
531542
ref={contextMenuTriggerRef}
532543
style={style}>
533544
{hasChildren ? (
534-
<ExpandCollapseToggle isOpen={isOpen} setIsOpen={setIsOpen} />
545+
<ExpandCollapseToggle isOpen={isOpen} setIsOpen={toggleIsOpen} />
535546
) : (
536547
<div className={styles.ExpandCollapseToggleSpacer} />
537548
)}
538549
{renderedName}
539-
<div className={styles.AfterName}>:</div>
540550
<span
541551
className={styles.Value}
542552
onClick={hasChildren ? toggleIsOpen : undefined}>
@@ -567,7 +577,10 @@ function DeleteToggle({deletePath, name, path}) {
567577
title="Delete entry">
568578
<ButtonIcon type="delete" />
569579
</Button>
570-
<span className={styles.Name}>{name}</span>
580+
<span className={styles.Name}>
581+
{name}
582+
<span className={styles.AfterName}>:</span>
583+
</span>
571584
</>
572585
);
573586
}

0 commit comments

Comments
 (0)