Skip to content

Commit 57c6a47

Browse files
committed
add metricsClearAllPinnedCards action and related reducer
1 parent 6f1cbcb commit 57c6a47

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

tensorboard/webapp/metrics/actions/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -277,5 +277,9 @@ export const metricsUnresolvedPinnedCardsFromLocalStorageAdded = createAction(
277277
props<{cards: CardUniqueInfo[]}>()
278278
);
279279

280+
export const metricsClearAllPinnedCards = createAction(
281+
'[Metrics] Clear all pinned cards'
282+
);
283+
280284
// TODO(jieweiwu): Delete after internal code is updated.
281285
export const stepSelectorTimeSelectionChanged = timeSelectionChanged;

tensorboard/webapp/metrics/store/metrics_reducers.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1525,7 +1525,30 @@ const reducer = createReducer(
15251525
],
15261526
};
15271527
}
1528-
)
1528+
),
1529+
on(actions.metricsClearAllPinnedCards, (state) => {
1530+
let nextCardMetadataMap = {...state.cardMetadataMap};
1531+
let nextCardStepIndexMap = {...state.cardStepIndex};
1532+
let nextCardStateMap = {...state.cardStateMap};
1533+
let nextLastPinnedCardTime = state.lastPinnedCardTime;
1534+
1535+
for (const [cardId, _] of state.pinnedCardToOriginal) {
1536+
delete nextCardMetadataMap[cardId];
1537+
delete nextCardStepIndexMap[cardId];
1538+
delete nextCardStateMap[cardId];
1539+
}
1540+
1541+
return {
1542+
...state,
1543+
cardMetadataMap: nextCardMetadataMap,
1544+
cardStateMap: nextCardStateMap,
1545+
cardStepIndex: nextCardStepIndexMap,
1546+
cardToPinnedCopy: new Map(),
1547+
cardToPinnedCopyCache: new Map(),
1548+
pinnedCardToOriginal: new Map(),
1549+
lastPinnedCardTime: nextLastPinnedCardTime,
1550+
};
1551+
})
15291552
);
15301553

15311554
export function reducers(state: MetricsState | undefined, action: Action) {

tensorboard/webapp/metrics/store/metrics_reducers_test.ts

+52
Original file line numberDiff line numberDiff line change
@@ -4488,5 +4488,57 @@ describe('metrics reducers', () => {
44884488
expect(state2.unresolvedImportedPinnedCards).toEqual([fakePinnedCard]);
44894489
});
44904490
});
4491+
4492+
describe('#metricsClearAllPinnedCards', () => {
4493+
it('unpins all pinned cards', () => {
4494+
const beforeState = buildMetricsState({
4495+
cardMetadataMap: {
4496+
card1: createScalarCardMetadata(),
4497+
pinnedCopy1: createScalarCardMetadata(),
4498+
card2: createScalarCardMetadata(),
4499+
pinnedCopy2: createScalarCardMetadata(),
4500+
},
4501+
cardList: ['card1', 'card2'],
4502+
cardStepIndex: {
4503+
card1: buildStepIndexMetadata({index: 10}),
4504+
pinnedCopy1: buildStepIndexMetadata({index: 20}),
4505+
card2: buildStepIndexMetadata({index: 11}),
4506+
pinnedCopy2: buildStepIndexMetadata({index: 21}),
4507+
},
4508+
cardToPinnedCopy: new Map([
4509+
['card1', 'pinnedCopy1'],
4510+
['card2', 'pinnedCopy2'],
4511+
]),
4512+
cardToPinnedCopyCache: new Map([
4513+
['card1', 'pinnedCopy1'],
4514+
['card2', 'pinnedCopy2'],
4515+
]),
4516+
pinnedCardToOriginal: new Map([
4517+
['pinnedCopy1', 'card1'],
4518+
['pinnedCopy2', 'card2'],
4519+
]),
4520+
});
4521+
const nextState = reducers(
4522+
beforeState,
4523+
actions.metricsClearAllPinnedCards()
4524+
);
4525+
4526+
const expectedState = buildMetricsState({
4527+
cardMetadataMap: {
4528+
card1: createScalarCardMetadata(),
4529+
card2: createScalarCardMetadata(),
4530+
},
4531+
cardList: ['card1', 'card2'],
4532+
cardStepIndex: {
4533+
card1: buildStepIndexMetadata({index: 10}),
4534+
card2: buildStepIndexMetadata({index: 11}),
4535+
},
4536+
cardToPinnedCopy: new Map(),
4537+
cardToPinnedCopyCache: new Map(),
4538+
pinnedCardToOriginal: new Map(),
4539+
});
4540+
expect(nextState).toEqual(expectedState);
4541+
});
4542+
});
44914543
});
44924544
});

0 commit comments

Comments
 (0)