Skip to content

Commit de96fb2

Browse files
committed
improve dependent keys ux
1 parent ea7c146 commit de96fb2

File tree

3 files changed

+55
-21
lines changed

3 files changed

+55
-21
lines changed

app/components/object-inspector/dependent-keys.hbs

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
<li class="mixin__property-dependency-list relative">
22
{{svg-jar "dependent-key-connection" width="20px" height="10px"}}
33
<ul class="m-0 p-0 list-none">
4-
{{#each @keys as |depKey|}}
5-
<li class="mixin__property-dependency-item relative text-base12 text-sm">
6-
{{#if (match depKey "")}}
4+
{{#each @keys as |dep|}}
5+
<li
6+
class="mixin__property-dependency-item relative text-base12 text-sm {{if dep.changed 'text-spec01'}}"
7+
title={{if dep.changed 'this property changed'}}
8+
>
9+
{{#if dep.child}}
710
<span
811
class="mixin__property-dependency-name subkey"
912
data-label="object-property-name"
1013
>
11-
{{depKey}}
14+
• -- {{dep.child}}
1215
</span>
1316
{{else}}
1417
{{svg-jar
@@ -20,9 +23,10 @@
2023
class="mixin__property-dependency-name"
2124
data-label="object-property-name"
2225
>
23-
{{depKey}}
26+
{{dep.name}}
2427
</span>
2528
{{/if}}
29+
{{#if dep.changed}}🔸{{/if}}
2630
</li>
2731
{{/each}}
2832
</ul>

ember_debug/object-inspector.js

+28-8
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,9 @@ function getTrackedDependencies(object, property, tagInfo) {
238238
const cpDesc = emberMeta(object).peekDescriptors(property);
239239
const dependentKeys = [];
240240
if (cpDesc) {
241-
dependentKeys.push(...(cpDesc._dependentKeys || []));
241+
dependentKeys.push(
242+
...(cpDesc._dependentKeys || []).map((k) => ({ name: k }))
243+
);
242244
}
243245
if (HAS_GLIMMER_TRACKING) {
244246
const ownTag = tagForProperty(object, property);
@@ -258,26 +260,44 @@ function getTrackedDependencies(object, property, tagInfo) {
258260

259261
const hasChange = maxRevision !== minRevision;
260262

263+
const names = new Set();
264+
261265
Object.entries(mapping).forEach(([objName, props]) => {
266+
if (names.has(objName)) {
267+
return;
268+
}
269+
names.add(objName);
262270
if (props.size > 1) {
263-
dependentKeys.push(objName);
271+
dependentKeys.push({ name: objName });
264272
props.forEach((p) => {
265-
const changed = hasChange && p[1] >= maxRevision ? ' 🔸' : '';
266-
dependentKeys.push(' • -- ' + p[0] + changed);
273+
const changed = hasChange && p[1] >= maxRevision;
274+
const obj = {
275+
child: p[0],
276+
};
277+
if (changed) {
278+
obj.changed = true;
279+
}
280+
dependentKeys.push(obj);
267281
});
268282
}
269283
if (props.size === 1) {
270284
const p = [...props][0];
271-
const changed = hasChange && p[1] >= maxRevision ? ' 🔸' : '';
272-
dependentKeys.push(objName + '.' + p[0] + changed);
285+
const changed = hasChange && p[1] >= maxRevision;
286+
const obj = {
287+
name: objName + '.' + p[0],
288+
};
289+
if (changed) {
290+
obj.changed = true;
291+
}
292+
dependentKeys.push(obj);
273293
}
274294
if (props.size === 0) {
275-
dependentKeys.push(objName);
295+
dependentKeys.push({ name: objName });
276296
}
277297
});
278298
}
279299

280-
return [...new Set([...dependentKeys])];
300+
return [...dependentKeys];
281301
}
282302

283303
export default class extends DebugPort {

tests/ember_debug/object-inspector-test.js

+18-8
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,14 @@ module('Ember Debug - Object Inspector', function (hooks) {
280280
assert.strictEqual(prop.value.inspect, '"item1item2tracked"');
281281
let dependentKeys =
282282
compareVersion(VERSION, '3.16.10') === 0
283-
? 'item1,item2,trackedProperty'
284-
: 'ObjectWithTracked, • -- item1, • -- item2,Object:My Object.trackedProperty';
285-
assert.strictEqual(prop.dependentKeys.toString(), dependentKeys);
283+
? [{ name: 'item1' }, { name: 'item2' }, { name: 'trackedProperty' }]
284+
: [
285+
{ name: 'ObjectWithTracked' },
286+
{ child: 'item1' },
287+
{ child: 'item2' },
288+
{ name: 'Object:My Object.trackedProperty' },
289+
];
290+
assert.deepEqual(prop.dependentKeys, dependentKeys);
286291

287292
prop = secondDetail.properties[2];
288293
assert.strictEqual(prop.name, 'get');
@@ -305,9 +310,14 @@ module('Ember Debug - Object Inspector', function (hooks) {
305310
assert.strictEqual(prop.value.inspect, '"item1-changeditem2tracked"');
306311
dependentKeys =
307312
compareVersion(VERSION, '3.16.10') === 0
308-
? 'item1,item2,trackedProperty'
309-
: 'ObjectWithTracked, • -- item1 🔸, • -- item2,Object:My Object.trackedProperty';
310-
assert.strictEqual(prop.dependentKeys.toString(), dependentKeys);
313+
? [{ name: 'item1' }, { name: 'item2' }, { name: 'trackedProperty' }]
314+
: [
315+
{ name: 'ObjectWithTracked' },
316+
{ child: 'item1', changed: true },
317+
{ child: 'item2' },
318+
{ name: 'Object:My Object.trackedProperty' },
319+
];
320+
assert.deepEqual(prop.dependentKeys, dependentKeys);
311321
});
312322

313323
skip('Correct mixin order with es6 class', async function (assert) {
@@ -937,8 +947,8 @@ module('Ember Debug - Object Inspector', function (hooks) {
937947
let serializedComputedProperty = message.details[1].properties[2];
938948

939949
assert.strictEqual(serializedComputedProperty.code, computedFn.toString());
940-
assert.strictEqual(serializedComputedProperty.dependentKeys[0], 'foo');
941-
assert.strictEqual(serializedComputedProperty.dependentKeys[1], 'bar');
950+
assert.strictEqual(serializedComputedProperty.dependentKeys[0].name, 'foo');
951+
assert.strictEqual(serializedComputedProperty.dependentKeys[1].name, 'bar');
942952
});
943953

944954
test('Views are correctly handled when destroyed during transitions', async function (assert) {

0 commit comments

Comments
 (0)