Skip to content

Commit

Permalink
add metricsClearAllPinnedCards action and related reducer
Browse files Browse the repository at this point in the history
  • Loading branch information
roseayeon committed Apr 11, 2024
1 parent 6f1cbcb commit 57c6a47
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
4 changes: 4 additions & 0 deletions tensorboard/webapp/metrics/actions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -277,5 +277,9 @@ export const metricsUnresolvedPinnedCardsFromLocalStorageAdded = createAction(
props<{cards: CardUniqueInfo[]}>()
);

export const metricsClearAllPinnedCards = createAction(
'[Metrics] Clear all pinned cards'
);

// TODO(jieweiwu): Delete after internal code is updated.
export const stepSelectorTimeSelectionChanged = timeSelectionChanged;
25 changes: 24 additions & 1 deletion tensorboard/webapp/metrics/store/metrics_reducers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1525,7 +1525,30 @@ const reducer = createReducer(
],
};
}
)
),
on(actions.metricsClearAllPinnedCards, (state) => {
let nextCardMetadataMap = {...state.cardMetadataMap};
let nextCardStepIndexMap = {...state.cardStepIndex};
let nextCardStateMap = {...state.cardStateMap};
let nextLastPinnedCardTime = state.lastPinnedCardTime;

for (const [cardId, _] of state.pinnedCardToOriginal) {
delete nextCardMetadataMap[cardId];
delete nextCardStepIndexMap[cardId];
delete nextCardStateMap[cardId];
}

return {
...state,
cardMetadataMap: nextCardMetadataMap,
cardStateMap: nextCardStateMap,
cardStepIndex: nextCardStepIndexMap,
cardToPinnedCopy: new Map(),
cardToPinnedCopyCache: new Map(),
pinnedCardToOriginal: new Map(),
lastPinnedCardTime: nextLastPinnedCardTime,
};
})
);

export function reducers(state: MetricsState | undefined, action: Action) {
Expand Down
52 changes: 52 additions & 0 deletions tensorboard/webapp/metrics/store/metrics_reducers_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4488,5 +4488,57 @@ describe('metrics reducers', () => {
expect(state2.unresolvedImportedPinnedCards).toEqual([fakePinnedCard]);
});
});

describe('#metricsClearAllPinnedCards', () => {
it('unpins all pinned cards', () => {
const beforeState = buildMetricsState({
cardMetadataMap: {
card1: createScalarCardMetadata(),
pinnedCopy1: createScalarCardMetadata(),
card2: createScalarCardMetadata(),
pinnedCopy2: createScalarCardMetadata(),
},
cardList: ['card1', 'card2'],
cardStepIndex: {
card1: buildStepIndexMetadata({index: 10}),
pinnedCopy1: buildStepIndexMetadata({index: 20}),
card2: buildStepIndexMetadata({index: 11}),
pinnedCopy2: buildStepIndexMetadata({index: 21}),
},
cardToPinnedCopy: new Map([
['card1', 'pinnedCopy1'],
['card2', 'pinnedCopy2'],
]),
cardToPinnedCopyCache: new Map([
['card1', 'pinnedCopy1'],
['card2', 'pinnedCopy2'],
]),
pinnedCardToOriginal: new Map([
['pinnedCopy1', 'card1'],
['pinnedCopy2', 'card2'],
]),
});
const nextState = reducers(
beforeState,
actions.metricsClearAllPinnedCards()
);

const expectedState = buildMetricsState({
cardMetadataMap: {
card1: createScalarCardMetadata(),
card2: createScalarCardMetadata(),
},
cardList: ['card1', 'card2'],
cardStepIndex: {
card1: buildStepIndexMetadata({index: 10}),
card2: buildStepIndexMetadata({index: 11}),
},
cardToPinnedCopy: new Map(),
cardToPinnedCopyCache: new Map(),
pinnedCardToOriginal: new Map(),
});
expect(nextState).toEqual(expectedState);
});
});
});
});

0 comments on commit 57c6a47

Please sign in to comment.