diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.html b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.html index dcf76212232..5b3716f52e8 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.html +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.html @@ -1,38 +1,56 @@ {{label()}} @switch (type()) { - @case ('chip') { - - } @case ('flag') { - {{ rowValue() }} + {{ rowValue() || 'false' }} } @case ('list') { -
- @for (provider of dataArray(); track $index) { - - } -
+ @for (provider of dataArray(); track $index) { +
+ {{ provider || '[empty string] ' }} +
+ } } @default { - - @if (renderValueAsJson()) { - {{ rowValue() | json }} - } @else { - {{ rowValue() }} - } - +
+ + @if (rowValue() && renderValueAsJson()) { + {{ rowValue() | json }} + } @else { + {{ rowValue() || '[empty string] ' }} + } +
} } + + + @if (actionBtnType() !== 'none') { + + } + diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.scss b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.scss index 95c05f8a6f9..ab7f43acd21 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.scss +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.scss @@ -13,11 +13,35 @@ border-color: var(--red-06); } -.chips-container { - display: flex; - flex-wrap: wrap; - gap: 0.375rem; - overflow-wrap: normal; +button { + width: 16px; + height: 16px; + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + color: var(--quaternary-contrast); + + &:not([disabled]):hover { + color: var(--primary-contrast); + } + + &[disabled] { + cursor: default; + color: var(--quinary-contrast); + } + + mat-icon { + font-size: 14px; + width: 14px; + height: 14px; + + &.view-source { + font-size: 16px; + width: 16px; + height: 16px; + } + } } td { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.spec.ts index d1a32cfbc7c..0dd5bc9336d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.spec.ts @@ -74,10 +74,11 @@ describe('RouteDetailsRowComponent', () => { expect(dataElements[0].nativeElement.innerText).toEqual('false'); }); - it('should render a label and chip data', () => { + it('should render a label with an action button', () => { fixture.componentRef.setInput('type', 'chip'); fixture.componentRef.setInput('data', {name: 'Component Name'}); fixture.componentRef.setInput('dataKey', 'name'); + fixture.componentRef.setInput('actionBtnType', 'view-source'); fixture.detectChanges(); const labelElement = fixture.debugElement.query(By.css('th')); @@ -85,13 +86,14 @@ describe('RouteDetailsRowComponent', () => { const dataElements = fixture.debugElement.queryAll(By.css('button')); expect(dataElements.length).toEqual(1); - expect(dataElements[0].nativeElement.innerText).toEqual('Component Name'); }); - it('should render a label and chip data disabled', () => { + it('should render a label with a disabled action button', () => { fixture.componentRef.setInput('type', 'chip'); fixture.componentRef.setInput('data', {name: 'Lazy Component Name'}); fixture.componentRef.setInput('dataKey', 'name'); + fixture.componentRef.setInput('actionBtnType', 'view-source'); + fixture.componentRef.setInput('actionBtnDisabled', true); fixture.detectChanges(); const labelElement = fixture.debugElement.query(By.css('th')); @@ -99,7 +101,6 @@ describe('RouteDetailsRowComponent', () => { const dataElements = fixture.debugElement.queryAll(By.css('button')); expect(dataElements.length).toEqual(1); - expect(dataElements[0].nativeElement.innerText).toEqual('Lazy Component Name'); expect(dataElements[0].nativeElement.disabled).toEqual(true); }); @@ -107,6 +108,7 @@ describe('RouteDetailsRowComponent', () => { fixture.componentRef.setInput('type', 'list'); fixture.componentRef.setInput('data', {providers: ['Guard 1', 'Guard 2']}); fixture.componentRef.setInput('dataKey', 'providers'); + fixture.componentRef.setInput('actionBtnType', 'view-source'); fixture.detectChanges(); const labelElement = fixture.debugElement.query(By.css('th')); @@ -114,7 +116,5 @@ describe('RouteDetailsRowComponent', () => { const dataElements = fixture.debugElement.queryAll(By.css('button')); expect(dataElements.length).toEqual(2); - expect(dataElements[0].nativeElement.innerText).toEqual('Guard 1'); - expect(dataElements[1].nativeElement.innerText).toEqual('Guard 2'); }); }); diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.ts index b2707abe99e..0fa7a2f7581 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/route-details-row.component.ts @@ -7,17 +7,20 @@ */ import {Component, computed, input, output, ChangeDetectionStrategy} from '@angular/core'; +import {JsonPipe, NgTemplateOutlet} from '@angular/common'; +import {MatIcon} from '@angular/material/icon'; import {ButtonComponent} from '../../shared/button/button.component'; -import {JsonPipe} from '@angular/common'; import {RouterTreeNode} from './router-tree-fns'; +import {MatTooltip} from '@angular/material/tooltip'; -export type RowType = 'text' | 'chip' | 'flag' | 'list'; +export type RowType = 'text' | 'flag' | 'list'; +export type ActionBtnType = 'none' | 'view-source' | 'navigate'; @Component({ selector: '[ng-route-details-row]', templateUrl: './route-details-row.component.html', styleUrls: ['./route-details-row.component.scss'], - imports: [ButtonComponent, JsonPipe], + imports: [NgTemplateOutlet, ButtonComponent, JsonPipe, MatIcon, MatTooltip], changeDetection: ChangeDetectionStrategy.OnPush, }) export class RouteDetailsRowComponent { @@ -26,8 +29,11 @@ export class RouteDetailsRowComponent { readonly dataKey = input.required(); readonly renderValueAsJson = input(false); readonly type = input('text'); + readonly actionBtnType = input('none'); + readonly actionBtnTooltip = input(''); + readonly actionBtnDisabled = input(false); - readonly btnClick = output(); + readonly actionBtnClick = output(); readonly rowValue = computed(() => { return this.data()[this.dataKey() as keyof RouterTreeNode]; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.html b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.html index 046ff75e6d6..9a17ddb4f92 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.html +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.html @@ -47,134 +47,147 @@ - - +
+
+ - @if (!data.isRedirect) { - - } + @if (!data.redirectTo) { + + } @else { + + } - @if (data.pathMatch) { - - } - @if (route?.data?.data?.length > 0) { - - } - @if (data.canActivateGuards && data.canActivateGuards.length > 0) { - - } - @if (data.canActivateChildGuards && data.canActivateChildGuards.length > 0) { - - } - @if (data.canDeactivateGuards && data.canDeactivateGuards.length > 0) { - - } - @if (data.canMatchGuards && data.canMatchGuards.length > 0) { - - } + @if (data.pathMatch) { + + } + @if (route?.data?.data?.length > 0) { + + } + @if (data.canActivateGuards && data.canActivateGuards.length > 0) { + + } + @if (data.canActivateChildGuards && data.canActivateChildGuards.length > 0) { + + } + @if (data.canDeactivateGuards && data.canDeactivateGuards.length > 0) { + + } + @if (data.canMatchGuards && data.canMatchGuards.length > 0) { + + } - @if (data.providers && data.providers.length > 0) { + @if (data.providers && data.providers.length > 0) { + + } + @if (data.title) { + + } - } - @if (data.title) { - } - - - - - - @if (data.redirectTo) { + - } -
+ + } diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.scss b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.scss index 2607c8b90fd..2135d30796b 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.scss +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.scss @@ -29,7 +29,9 @@ .side-pane { position: relative; - padding: 1rem; + display: flex; + flex-direction: column; + height: 100%; .close-btn { position: absolute; @@ -47,10 +49,13 @@ @extend %heading-400; margin: 0; padding-top: 0; + padding: 1rem; } - table { - margin-top: 1rem; + .scrollable-wrapper { + padding: 0 1rem 1rem 1rem; + height: 100%; + overflow-y: auto; } } diff --git a/devtools/projects/ng-devtools/src/styles/_tables.scss b/devtools/projects/ng-devtools/src/styles/_tables.scss index 43e532fe88b..de01b0a1e41 100644 --- a/devtools/projects/ng-devtools/src/styles/_tables.scss +++ b/devtools/projects/ng-devtools/src/styles/_tables.scss @@ -7,8 +7,6 @@ table.ng-table { width: 100%; tr { - height: 38px; - th { @extend %body-bold-01; margin: 0; @@ -37,6 +35,6 @@ table.ng-table { border-bottom: 1px solid var(--senary-contrast); overflow: hidden; text-overflow: ellipsis; - padding: 0 0.375rem; + padding: 0.625rem 0.375rem; } }