Skip to content

Commit c0edd37

Browse files
committed
add globalPinsEnabled feature flag to the pinned view container
1 parent e97b110 commit c0edd37

File tree

3 files changed

+81
-3
lines changed

3 files changed

+81
-3
lines changed

Diff for: tensorboard/webapp/metrics/views/main_view/main_view_test.ts

+67-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import {MainViewComponent, SHARE_BUTTON_COMPONENT} from './main_view_component';
6969
import {MainViewContainer} from './main_view_container';
7070
import {PinnedViewComponent} from './pinned_view_component';
7171
import {PinnedViewContainer} from './pinned_view_container';
72+
import {buildMockState} from '../../../testing/utils';
7273

7374
@Component({
7475
selector: 'card-view',
@@ -182,7 +183,11 @@ describe('metrics main view', () => {
182183
],
183184
providers: [
184185
provideMockStore({
185-
initialState: appStateFromMetricsState(buildMetricsState()),
186+
initialState: {
187+
...buildMockState({
188+
...appStateFromMetricsState(buildMetricsState()),
189+
}),
190+
},
186191
}),
187192
],
188193
// Skip errors for card renderers, which are tested separately.
@@ -1606,6 +1611,67 @@ describe('metrics main view', () => {
16061611
expect(indicator).toBeTruthy();
16071612
});
16081613
});
1614+
1615+
describe('clear all pins button', () => {
1616+
beforeEach(() => {
1617+
store.overrideSelector(selectors.getEnableGlobalPins, true);
1618+
});
1619+
1620+
it('does not show the button if getEnableGlobalPins is false', () => {
1621+
store.overrideSelector(selectors.getEnableGlobalPins, false);
1622+
store.overrideSelector(selectors.getPinnedCardsWithMetadata, []);
1623+
const fixture = TestBed.createComponent(MainViewContainer);
1624+
fixture.detectChanges();
1625+
1626+
const clearAllButton = fixture.debugElement.query(
1627+
By.css('[aria-label="Clear all pinned cards"]')
1628+
);
1629+
expect(clearAllButton).toBeNull();
1630+
});
1631+
1632+
it('does not show the button if there is no pinned card', () => {
1633+
store.overrideSelector(selectors.getPinnedCardsWithMetadata, []);
1634+
const fixture = TestBed.createComponent(MainViewContainer);
1635+
fixture.detectChanges();
1636+
1637+
const clearAllButton = fixture.debugElement.query(
1638+
By.css('[aria-label="Clear all pinned cards"]')
1639+
);
1640+
expect(clearAllButton).toBeNull();
1641+
});
1642+
1643+
it('shows the button if there is a pinned card', () => {
1644+
store.overrideSelector(selectors.getPinnedCardsWithMetadata, [
1645+
{cardId: 'card1', ...createCardMetadata(PluginType.SCALARS)},
1646+
{cardId: 'card2', ...createCardMetadata(PluginType.IMAGES)},
1647+
]);
1648+
const fixture = TestBed.createComponent(MainViewContainer);
1649+
fixture.detectChanges();
1650+
1651+
const clearAllButton = fixture.debugElement.query(
1652+
By.css('[aria-label="Clear all pinned cards"]')
1653+
);
1654+
expect(clearAllButton).toBeTruthy();
1655+
});
1656+
1657+
it('dispatch clear all action when the button is clicked', () => {
1658+
store.overrideSelector(selectors.getPinnedCardsWithMetadata, [
1659+
{cardId: 'card1', ...createCardMetadata(PluginType.SCALARS)},
1660+
{cardId: 'card2', ...createCardMetadata(PluginType.IMAGES)},
1661+
]);
1662+
const fixture = TestBed.createComponent(MainViewContainer);
1663+
fixture.detectChanges();
1664+
1665+
const clearAllButton = fixture.debugElement.query(
1666+
By.css('[aria-label="Clear all pinned cards"]')
1667+
);
1668+
clearAllButton.nativeElement.click();
1669+
1670+
expect(dispatchedActions).toEqual([
1671+
actions.metricsClearAllPinnedCards(),
1672+
]);
1673+
});
1674+
});
16091675
});
16101676

16111677
describe('slideout menu', () => {

Diff for: tensorboard/webapp/metrics/views/main_view/pinned_view_component.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,15 @@ import {CardIdWithMetadata} from '../metrics_view_types';
4545
</span>
4646
</span>
4747
</div>
48-
<div class="right-items" *ngIf="cardIdsWithMetadata.length > 0">
49-
<button mat-stroked-button (click)="onClearAllPinsClicked.emit()">
48+
<div
49+
class="right-items"
50+
*ngIf="cardIdsWithMetadata.length > 0 && globalPinsEnabled"
51+
>
52+
<button
53+
mat-stroked-button
54+
aria-label="Clear all pinned cards"
55+
(click)="onClearAllPinsClicked.emit()"
56+
>
5057
Clear all pins
5158
</button>
5259
</div>
@@ -67,5 +74,6 @@ export class PinnedViewComponent {
6774
@Input() cardObserver!: CardObserver;
6875
@Input() cardIdsWithMetadata!: CardIdWithMetadata[];
6976
@Input() lastPinnedCardTime!: number;
77+
@Input() globalPinsEnabled: boolean = false;
7078
@Output() onClearAllPinsClicked = new EventEmitter<void>();
7179
}

Diff for: tensorboard/webapp/metrics/views/main_view/pinned_view_container.ts

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {getLastPinnedCardTime, getPinnedCardsWithMetadata} from '../../store';
2222
import {CardObserver} from '../card_renderer/card_lazy_loader';
2323
import {CardIdWithMetadata} from '../metrics_view_types';
2424
import {metricsClearAllPinnedCards} from '../../actions';
25+
import {getEnableGlobalPins} from '../../../selectors';
2526

2627
@Component({
2728
selector: 'metrics-pinned-view',
@@ -30,6 +31,7 @@ import {metricsClearAllPinnedCards} from '../../actions';
3031
[cardIdsWithMetadata]="cardIdsWithMetadata$ | async"
3132
[lastPinnedCardTime]="lastPinnedCardTime$ | async"
3233
[cardObserver]="cardObserver"
34+
[globalPinsEnabled]="globalPinsEnabled$ | async"
3335
(onClearAllPinsClicked)="onClearAllPinsClicked()"
3436
></metrics-pinned-view-component>
3537
`,
@@ -50,6 +52,8 @@ export class PinnedViewContainer {
5052
skip(1)
5153
);
5254

55+
readonly globalPinsEnabled$ = this.store.select(getEnableGlobalPins);
56+
5357
onClearAllPinsClicked() {
5458
this.store.dispatch(metricsClearAllPinnedCards());
5559
}

0 commit comments

Comments
 (0)