From 7e603d855dca94a00dd3b32ef7608ac8cab229d1 Mon Sep 17 00:00:00 2001 From: Kristina Date: Wed, 6 Aug 2025 08:52:34 -0500 Subject: [PATCH] Transformations: Transformation refID filters should include non-existant refIDs if no recovery was made (#109008) * Show refIds if nothing is recovered * Add test * Preserve function returning undefined if there are no recovered or selected refIDs * cuter * add context and remove testing by sibling --------- Co-authored-by: Leon Sorokin --- .../MatchersUI/FieldsByFrameRefIdMatcher.test.tsx | 6 ++++++ .../src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.test.tsx b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.test.tsx index 7646f67735c..edcf354ef6d 100644 --- a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.test.tsx +++ b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.test.tsx @@ -109,4 +109,10 @@ describe('RefIDMultiPicker', () => { expect(mockOnChange).toHaveBeenLastCalledWith(['A', 'B']); /* eslint-enable testing-library/prefer-user-event */ }); + + // in the scenario where a refID filter was saved, but is no longer valid, it should still show. + it('Should display a refID that does not exist in the selection', async () => { + multiSetup({ value: '/^(?:merge-A-B-C)$/' }); + expect(screen.getByText('merge-A-B-C')).toBeInTheDocument(); + }); }); diff --git a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx index 87175cbb057..30899db375a 100644 --- a/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx +++ b/packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx @@ -129,7 +129,6 @@ export function RefIDMultiPicker({ value, data, onChange, placeholder }: MultiPr const currentValue = useMemo(() => { let extractedRefIds = new Set(); - if (value) { if (value.startsWith('/^')) { try { @@ -152,8 +151,10 @@ export function RefIDMultiPicker({ value, data, onChange, placeholder }: MultiPr } const newRefIds = [...extractedRefIds].map(toOption); + const recoveredRefIDs = + recoverMultiRefIdMissing(newRefIds, priorSelectionState.refIds, priorSelectionState.value) ?? []; - return recoverMultiRefIdMissing(newRefIds, priorSelectionState.refIds, priorSelectionState.value); + return recoveredRefIDs.length > 0 ? recoveredRefIDs : newRefIds.length > 0 ? newRefIds : undefined; }, [value, listOfRefIds, priorSelectionState]); const onFilterChange = useCallback(