Skip to content

Commit 87e05e9

Browse files
authored
refactor(devtools): create a reusable component for all prop mat-trees
Create a reusable component for object property inspection.
1 parent e311f3d commit 87e05e9

55 files changed

Lines changed: 1094 additions & 671 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

devtools/projects/ng-devtools-backend/src/lib/router-tree.spec.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ describe('parseRoutes', () => {
1616
component: 'App Root',
1717
path: 'App Root',
1818
children: [],
19-
data: [],
2019
isAux: false,
2120
isLazy: false,
2221
isActive: true,
@@ -31,7 +30,6 @@ describe('parseRoutes', () => {
3130
expect(parsedRoutes).toEqual({
3231
'component': 'App Root',
3332
'path': 'App Root',
34-
'data': [],
3533
'children': [],
3634
'isAux': false,
3735
'isLazy': false,
@@ -121,10 +119,8 @@ describe('parseRoutes', () => {
121119
'canMatchGuards': [],
122120
'canDeactivateGuards': [],
123121
'providers': [],
124-
'resolvers': [],
125122
'path': '/(outlet:component-one)',
126123
'pathMatch': undefined,
127-
'data': [],
128124
'isAux': true,
129125
'isLazy': false,
130126
'isActive': false,
@@ -136,11 +132,10 @@ describe('parseRoutes', () => {
136132
'canMatchGuards': [],
137133
'canDeactivateGuards': [],
138134
'providers': [],
139-
'resolvers': [],
140135
'path': '/component-two',
141136
'pathMatch': undefined,
142137
'title': 'Component Two',
143-
'data': [{'key': 'name', 'value': 'component-two'}],
138+
'data': {name: 'component-two'},
144139
'isAux': false,
145140
'isLazy': false,
146141
'isActive': false,
@@ -152,11 +147,9 @@ describe('parseRoutes', () => {
152147
'canMatchGuards': [],
153148
'canDeactivateGuards': [],
154149
'providers': [],
155-
'resolvers': [],
156150
'path': '/component-two/component-two-one',
157151
'pathMatch': undefined,
158152
'title': '[Function]',
159-
'data': [],
160153
'isAux': false,
161154
'isLazy': false,
162155
'isActive': false,
@@ -168,11 +161,9 @@ describe('parseRoutes', () => {
168161
'canMatchGuards': [],
169162
'canDeactivateGuards': [],
170163
'providers': [],
171-
'resolvers': [],
172164
'path': '/component-two/component-two-two',
173165
'pathMatch': undefined,
174166
'title': 'titleResolver',
175-
'data': [],
176167
'isAux': false,
177168
'isLazy': false,
178169
'isActive': false,
@@ -186,10 +177,8 @@ describe('parseRoutes', () => {
186177
'canMatchGuards': [],
187178
'canDeactivateGuards': [],
188179
'providers': [],
189-
'resolvers': [],
190180
'path': '/lazy',
191181
'pathMatch': undefined,
192-
'data': [],
193182
'isAux': false,
194183
'isLazy': true,
195184
'isActive': false,
@@ -201,10 +190,8 @@ describe('parseRoutes', () => {
201190
'canMatchGuards': [],
202191
'canDeactivateGuards': [],
203192
'providers': [],
204-
'resolvers': [],
205193
'path': '/redirect',
206194
'pathMatch': undefined,
207-
'data': [],
208195
'isAux': false,
209196
'isLazy': false,
210197
'isActive': false,
@@ -217,10 +204,8 @@ describe('parseRoutes', () => {
217204
'canMatchGuards': [],
218205
'canDeactivateGuards': [],
219206
'providers': [],
220-
'resolvers': [],
221207
'path': '/redirect-fn',
222208
'pathMatch': undefined,
223-
'data': [],
224209
'isAux': false,
225210
'isLazy': false,
226211
'isActive': false,
@@ -233,10 +218,8 @@ describe('parseRoutes', () => {
233218
'canMatchGuards': [],
234219
'canDeactivateGuards': [],
235220
'providers': [],
236-
'resolvers': [],
237221
'path': '/redirect-named-fn',
238222
'pathMatch': undefined,
239-
'data': [],
240223
'isAux': false,
241224
'isLazy': false,
242225
'isActive': false,
@@ -245,7 +228,6 @@ describe('parseRoutes', () => {
245228
],
246229
'isAux': false,
247230
'isLazy': false,
248-
'data': [],
249231
'isActive': true,
250232
} as any);
251233
});
@@ -428,7 +410,7 @@ describe('parseRoutes', () => {
428410

429411
const parsedRoutes = parseRoutes(nestedRouter as any);
430412

431-
expect(parsedRoutes.children![0].resolvers).toEqual([{key: 'user', value: 'userResolver'}]);
413+
expect(parsedRoutes.children![0].resolvers).toEqual({user: 'userResolver'});
432414
});
433415

434416
it('should handle resolvers with arrow functions', () => {
@@ -448,7 +430,7 @@ describe('parseRoutes', () => {
448430

449431
const parsedRoutes = parseRoutes(nestedRouter as any);
450432

451-
expect(parsedRoutes.children![0].resolvers).toEqual([{key: 'data', value: 'dataResolver'}]);
433+
expect(parsedRoutes.children![0].resolvers).toEqual({data: 'dataResolver'});
452434
});
453435

454436
it('should handle multiple resolvers on a single route', () => {
@@ -478,11 +460,11 @@ describe('parseRoutes', () => {
478460

479461
const parsedRoutes = parseRoutes(nestedRouter as any);
480462

481-
expect(parsedRoutes.children![0].resolvers).toEqual([
482-
{key: 'user', value: 'userResolver'},
483-
{key: 'settings', value: 'settingsResolver'},
484-
{key: 'permissions', value: 'PermissionsResolver'},
485-
]);
463+
expect(parsedRoutes.children![0].resolvers).toEqual({
464+
user: 'userResolver',
465+
settings: 'settingsResolver',
466+
permissions: 'PermissionsResolver',
467+
});
486468
});
487469

488470
it('should handle nested routes with resolvers', () => {
@@ -516,12 +498,10 @@ describe('parseRoutes', () => {
516498

517499
const parsedRoutes = parseRoutes(nestedRouter as any);
518500

519-
expect(parsedRoutes.children![0].resolvers).toEqual([
520-
{key: 'parentData', value: 'parentResolver'},
521-
]);
522-
expect(parsedRoutes.children![0].children![0].resolvers).toEqual([
523-
{key: 'childData', value: 'childResolver'},
524-
]);
501+
expect(parsedRoutes.children![0].resolvers).toEqual({parentData: 'parentResolver'});
502+
expect(parsedRoutes.children![0].children![0].resolvers).toEqual({
503+
childData: 'childResolver',
504+
});
525505
});
526506
});
527507

devtools/projects/ng-devtools-backend/src/lib/router-tree.ts

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ export function parseRoutes(router: Router): Route {
8585
isAux: false,
8686
isLazy: false,
8787
isActive: true, // Root is always active.
88-
data: [],
8988
};
9089

9190
return root;
@@ -134,8 +133,6 @@ function assignChildrenToParent(
134133
canDeactivateGuards: getGuardNames(child, 'canDeactivate'),
135134
providers: getProviderName(child),
136135
path: routePath,
137-
data: [],
138-
resolvers: [],
139136
isAux,
140137
isLazy,
141138
isActive,
@@ -169,25 +166,15 @@ function assignChildrenToParent(
169166
}
170167

171168
if (child.resolve) {
172-
for (const el in child.resolve) {
173-
if (child.resolve.hasOwnProperty(el)) {
174-
routeConfig?.resolvers?.push({
175-
key: el,
176-
value: getClassOrFunctionName(child.resolve[el]),
177-
});
178-
}
169+
routeConfig.resolvers = {};
170+
171+
for (const [name, resolver] of Object.entries(child.resolve)) {
172+
routeConfig.resolvers[name] = getClassOrFunctionName(resolver);
179173
}
180174
}
181175

182176
if (child.data) {
183-
for (const el in child.data) {
184-
if (child.data.hasOwnProperty(el)) {
185-
routeConfig?.data?.push({
186-
key: el,
187-
value: child.data[el],
188-
});
189-
}
190-
}
177+
routeConfig.data = child.data;
191178
}
192179

193180
return routeConfig;

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ ng_project(
3232
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab",
3333
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/signal-graph:signal-graph-manager",
3434
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/signals-view:signals-tab",
35+
"//devtools/projects/ng-devtools/src/lib/shared/object-tree-explorer:types",
3536
"//devtools/projects/ng-devtools/src/lib/shared/split",
3637
"//devtools/projects/ng-devtools/src/lib/shared/split:responsive-split",
3738
"//devtools/projects/protocol",
@@ -54,6 +55,7 @@ ts_test_library(
5455
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver",
5556
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab",
5657
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/signal-graph:signal-graph-manager",
58+
"//devtools/projects/ng-devtools/src/lib/shared/object-tree-explorer:types",
5759
"//devtools/projects/protocol",
5860
],
5961
)

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ import {FlatNode} from './directive-forest/component-data-source';
4141
import {DirectiveForestComponent} from './directive-forest/directive-forest.component';
4242
import {IndexedNode} from './directive-forest/index-forest';
4343
import {constructPathOfKeysToPropertyValue} from './property-resolver/directive-property-resolver';
44-
import {
45-
ElementPropertyResolver,
46-
FlatNode as PropertyFlatNode,
47-
} from './property-resolver/element-property-resolver';
44+
import {ElementPropertyResolver} from './property-resolver/element-property-resolver';
45+
import {FlatNode as PropertyFlatNode} from '../../shared/object-tree-explorer/object-tree-types';
4846
import {PropertyTabComponent} from './property-tab/property-tab.component';
4947
import {FormsModule} from '@angular/forms';
5048
import {Platform} from '@angular/cdk/platform';

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ import SpyObj = jasmine.SpyObj;
1919
import {By} from '@angular/platform-browser';
2020
import {FrameManager} from '../../application-services/frame_manager';
2121
import {Component, CUSTOM_ELEMENTS_SCHEMA, output, input} from '@angular/core';
22-
import {ElementPropertyResolver, FlatNode} from './property-resolver/element-property-resolver';
22+
import {ElementPropertyResolver} from './property-resolver/element-property-resolver';
2323
import {BreadcrumbsComponent} from './directive-forest/breadcrumbs/breadcrumbs.component';
2424
import {PropertyTabComponent} from './property-tab/property-tab.component';
2525
import {SignalGraphManager} from './signal-graph/signal-graph-manager';
26+
import {FlatNode} from '../../shared/object-tree-explorer/object-tree-types';
2627

2728
@Component({
2829
selector: 'ng-directive-forest',

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ng_project(
1919
"//:node_modules/rxjs",
2020
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing",
2121
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest",
22+
"//devtools/projects/ng-devtools/src/lib/shared/object-tree-explorer:types",
2223
"//devtools/projects/protocol",
2324
],
2425
)
@@ -37,6 +38,7 @@ ts_test_library(
3738
"//:node_modules/@angular/core",
3839
"//:node_modules/@angular/material",
3940
"//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest",
41+
"//devtools/projects/ng-devtools/src/lib/shared/object-tree-explorer:types",
4042
"//devtools/projects/protocol",
4143
],
4244
)

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
*/
88

99
import {Descriptor} from '../../../../../../protocol';
10-
11-
import {Property} from './element-property-resolver';
10+
import {Property} from '../../../shared/object-tree-explorer/object-tree-types';
1211

1312
export const arrayifyProps = (
1413
props: {[prop: string]: Descriptor} | Descriptor[],

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import {
1717
Properties,
1818
} from '../../../../../../protocol';
1919

20-
import {FlatNode, Property} from './element-property-resolver';
2120
import {getTreeFlattener} from './flatten';
2221
import {PropertyDataSource} from './property-data-source';
2322
import {getExpandedDirectiveProperties} from './property-expanded-directive-properties';
23+
import {FlatNode, Property} from '../../../shared/object-tree-explorer/object-tree-types';
2424

2525
export interface DirectiveTreeData {
2626
dataSource: PropertyDataSource;

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import {Injectable} from '@angular/core';
1010
import {
1111
ComponentExplorerViewProperties,
12-
Descriptor,
1312
DirectivePosition,
1413
DirectivesProperties,
1514
Events,
@@ -20,18 +19,6 @@ import {IndexedNode} from '../directive-forest/index-forest';
2019

2120
import {DirectivePropertyResolver} from './directive-property-resolver';
2221

23-
export interface FlatNode {
24-
expandable: boolean;
25-
prop: Property;
26-
level: number;
27-
}
28-
29-
export interface Property {
30-
name: string;
31-
descriptor: Descriptor;
32-
parent: Property | null;
33-
}
34-
3522
@Injectable()
3623
export class ElementPropertyResolver {
3724
private _directivePropertiesController = new Map<string, DirectivePropertyResolver>();

devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/flatten.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {Descriptor, PropType} from '../../../../../../protocol';
1111
import {Observable} from 'rxjs';
1212

1313
import {arrayifyProps} from './arrayify-props';
14-
import {FlatNode, Property} from './element-property-resolver';
14+
import {FlatNode, Property} from '../../../shared/object-tree-explorer/object-tree-types';
1515

1616
export const getTreeFlattener = () =>
1717
new MatTreeFlattener(

0 commit comments

Comments
 (0)