Skip to content

Commit 6ea22fd

Browse files
committed
Add enable saving pins checkbox in the settings view component
1 parent dec6a63 commit 6ea22fd

File tree

5 files changed

+82
-0
lines changed

5 files changed

+82
-0
lines changed

tensorboard/webapp/metrics/views/right_pane/right_pane_test.ts

+38
Original file line numberDiff line numberDiff line change
@@ -548,5 +548,43 @@ describe('metrics right_pane', () => {
548548
).toHaveClass('toggle-opened');
549549
});
550550
});
551+
552+
describe('saving pins check box', () => {
553+
beforeEach(() => {
554+
store.overrideSelector(selectors.getEnableGlobalPins, true);
555+
store.overrideSelector(selectors.getMetricsSavingPinsEnabled, false);
556+
});
557+
558+
it('does not render if getEnableGlobalPins feature flag is false', () => {
559+
store.overrideSelector(selectors.getEnableGlobalPins, false);
560+
const fixture = TestBed.createComponent(SettingsViewContainer);
561+
fixture.detectChanges();
562+
563+
expect(select(fixture, '.saving-pins')).toBeFalsy();
564+
});
565+
566+
it('renders checked saving pins check box if isSavingpinsEnabled is true', () => {
567+
store.overrideSelector(selectors.getMetricsSavingPinsEnabled, true);
568+
569+
const fixture = TestBed.createComponent(SettingsViewContainer);
570+
fixture.detectChanges();
571+
572+
expect(
573+
select(fixture, '.saving-pins input').componentInstance.checked
574+
).toBeTrue();
575+
});
576+
577+
it('dispatches metricsEnableSavingPinsToggled on toggle', () => {
578+
const fixture = TestBed.createComponent(SettingsViewContainer);
579+
fixture.detectChanges();
580+
581+
const checkbox = select(fixture, '.saving-pins input');
582+
checkbox.nativeElement.click();
583+
584+
expect(dispatchSpy).toHaveBeenCalledWith(
585+
actions.metricsEnableSavingPinsToggled()
586+
);
587+
});
588+
});
551589
});
552590
});

tensorboard/webapp/metrics/views/right_pane/settings_view_component.ng.html

+13
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,19 @@ <h3 class="section-title">General</h3>
9393
</button>
9494
</div>
9595
</div>
96+
97+
<div class="control-row saving-pins" *ngIf="globalPinsFeatureEnabled">
98+
<mat-checkbox
99+
[checked]="isSavingPinsEnabled"
100+
(change)="onEnableSavingPinsToggled.emit()"
101+
>Enable saving pins (Scalars only)</mat-checkbox
102+
>
103+
<mat-icon
104+
class="info"
105+
svgIcon="help_outline_24px"
106+
title="When saving pins are enabled, pinned cards will be shared across multiple experiments."
107+
></mat-icon>
108+
</div>
96109
</section>
97110

98111
<section class="scalars">

tensorboard/webapp/metrics/views/right_pane/settings_view_component.scss

+13
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,16 @@ tb-dropdown {
146146
margin-left: 28px;
147147
}
148148
}
149+
150+
.saving-pins {
151+
align-items: center;
152+
display: flex;
153+
154+
.info {
155+
$_dim: 15px;
156+
height: $_dim;
157+
margin-left: 5px;
158+
width: $_dim;
159+
min-width: $_dim;
160+
}
161+
}

tensorboard/webapp/metrics/views/right_pane/settings_view_component.ts

+3
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,15 @@ export class SettingsViewComponent {
7070
@Input() linkedTimeSelection!: TimeSelection | null;
7171
@Input() stepMinMax!: {min: number; max: number};
7272
@Input() isSlideOutMenuOpen!: boolean;
73+
@Input() isSavingPinsEnabled!: boolean;
74+
@Input() globalPinsFeatureEnabled: boolean = false;
7375

7476
@Output() linkedTimeToggled = new EventEmitter<void>();
7577

7678
@Output() stepSelectorToggled = new EventEmitter<void>();
7779
@Output() rangeSelectionToggled = new EventEmitter<void>();
7880
@Output() onSlideOutToggled = new EventEmitter<void>();
81+
@Output() onEnableSavingPinsToggled = new EventEmitter<void>();
7982

8083
@Input() isImageSupportEnabled!: boolean;
8184

tensorboard/webapp/metrics/views/right_pane/settings_view_container.ts

+15
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
metricsChangeScalarSmoothing,
2929
metricsChangeTooltipSort,
3030
metricsChangeXAxisType,
31+
metricsEnableSavingPinsToggled,
3132
metricsResetCardWidth,
3233
metricsResetImageBrightness,
3334
metricsResetImageContrast,
@@ -83,6 +84,9 @@ import {HistogramMode, TooltipSort, XAxisType} from '../../types';
8384
(stepSelectorToggled)="onStepSelectorToggled()"
8485
(rangeSelectionToggled)="onRangeSelectionToggled()"
8586
(onSlideOutToggled)="onSlideOutToggled()"
87+
[isSavingPinsEnabled]="isSavingPinsEnabled$ | async"
88+
(onEnableSavingPinsToggled)="onEnableSavingPinsToggled()"
89+
[globalPinsFeatureEnabled]="globalPinsFeatureEnabled$ | async"
8690
>
8791
</metrics-dashboard-settings-component>
8892
`,
@@ -146,6 +150,13 @@ export class SettingsViewContainer {
146150
readonly imageShowActualSize$ = this.store.select(
147151
selectors.getMetricsImageShowActualSize
148152
);
153+
readonly isSavingPinsEnabled$ = this.store.select(
154+
selectors.getMetricsSavingPinsEnabled
155+
);
156+
// Feature flag for global pins.
157+
readonly globalPinsFeatureEnabled$ = this.store.select(
158+
selectors.getEnableGlobalPins
159+
);
149160

150161
onTooltipSortChanged(sort: TooltipSort) {
151162
this.store.dispatch(metricsChangeTooltipSort({sort}));
@@ -222,4 +233,8 @@ export class SettingsViewContainer {
222233
onSlideOutToggled() {
223234
this.store.dispatch(metricsSlideoutMenuToggled());
224235
}
236+
237+
onEnableSavingPinsToggled() {
238+
this.store.dispatch(metricsEnableSavingPinsToggled());
239+
}
225240
}

0 commit comments

Comments
 (0)