diff --git a/src/component/panels/filtersPanel/Filters/ExclusionZonesOptionsPanel.tsx b/src/component/panels/filtersPanel/Filters/ExclusionZonesOptionsPanel.tsx index c07c4aa807..8a21c2f885 100644 --- a/src/component/panels/filtersPanel/Filters/ExclusionZonesOptionsPanel.tsx +++ b/src/component/panels/filtersPanel/Filters/ExclusionZonesOptionsPanel.tsx @@ -73,6 +73,7 @@ export default function ExclusionZonesOptionsPanel( setValue( 'zones', getValues('zones').filter((_, i) => i !== index), + { shouldDirty: true }, ); }, [getValues, setValue], diff --git a/src/component/panels/filtersPanel/Filters/FiltersSectionsPanel.tsx b/src/component/panels/filtersPanel/Filters/FiltersSectionsPanel.tsx index e5f7c48612..82427ac874 100644 --- a/src/component/panels/filtersPanel/Filters/FiltersSectionsPanel.tsx +++ b/src/component/panels/filtersPanel/Filters/FiltersSectionsPanel.tsx @@ -27,6 +27,15 @@ export const nonRemovableFilters = new Set([ 'digitalFilter', 'digitalFilter2D', ]); +const readOnlyFilters = new Set([ + 'digitalFilter', + 'shiftX', + 'exclusionZones', + 'fft', + 'digitalFilter2D', + 'fftDimension1', + 'fftDimension2', +]); const IconButton = styled(Button)` font-size: 16px; @@ -121,9 +130,14 @@ function FilterElements(props: FilterElementsProps) { }); } + const isEditable = + !hideFilterRestoreButton && + activeFilterID !== id && + !readOnlyFilters.has(name); + return ( <> - {!hideFilterRestoreButton && activeFilterID !== id && ( + {isEditable && ( { if (Filters?.[selectedTool]) { openSection(selectedTool); + return; } - }, [filters, selectedTool]); + + const filter = filters.find((filter) => filter.id === activeFilterID); + + if (filter) { + openSection(filter.name); + } + }, [activeFilterID, filters, selectedTool]); const filtersList = [...filters]; diff --git a/src/component/reducer/actions/FiltersActions.ts b/src/component/reducer/actions/FiltersActions.ts index ff822f2794..e332233716 100644 --- a/src/component/reducer/actions/FiltersActions.ts +++ b/src/component/reducer/actions/FiltersActions.ts @@ -446,9 +446,13 @@ function rollbackSpectrumByFilter( const filterIndex = spectrum.filters.findIndex((f) => f[searchBy] === key); if (filterIndex === -1 || reset) { if (draft.tempData) { - const activeFilterIndex = toolData.activeFilterID - ? spectrum.filters.findIndex((f) => f.id === toolData.activeFilterID) - : spectrum.filters.length - 1; + const activeFilterIndex = + !reset && toolData.activeFilterID + ? spectrum.filters.findIndex( + (f) => f.id === toolData.activeFilterID, + ) + : spectrum.filters.length; + const filters = spectrum.filters.slice(0, activeFilterIndex); reapplyFilters(spectrum, filters); } @@ -793,6 +797,8 @@ function handleShiftSpectrumAlongXAxis( return; } + const activeFilterIndex = getActiveFilterIndex(draft); + //apply filter into the spectrum const options = action.payload; @@ -808,9 +814,14 @@ function handleShiftSpectrumAlongXAxis( applyFilter: false, }); - Filters1DManager.applyFilters(draft.data[index] as Spectrum1D, [ - { name: 'shiftX', value: { shift } }, - ]); + Filters1DManager.applyFilters( + draft.data[index] as Spectrum1D, + [{ name: 'shiftX', value: { shift } }], + { + filterIndex: activeFilterIndex, + forceReapply: activeFilterIndex !== -1, + }, + ); updateView(draft, shiftX.domainUpdateRules); } @@ -824,9 +835,14 @@ function handleShiftSpectrumAlongXAxis( searchBy: 'name', applyFilter: false, }); - Filters2DManager.applyFilters(draft.data[index] as Spectrum2D, [ - { name: 'shift2DX', value: { shift: shiftX } }, - ]); + Filters2DManager.applyFilters( + draft.data[index] as Spectrum2D, + [{ name: 'shift2DX', value: { shift: shiftX } }], + { + filterIndex: activeFilterIndex, + forceReapply: activeFilterIndex !== -1, + }, + ); updateView(draft, shift2DX.domainUpdateRules); } @@ -836,9 +852,14 @@ function handleShiftSpectrumAlongXAxis( searchBy: 'name', applyFilter: false, }); - Filters2DManager.applyFilters(draft.data[index] as Spectrum2D, [ - { name: 'shift2DY', value: { shift: shiftY } }, - ]); + Filters2DManager.applyFilters( + draft.data[index] as Spectrum2D, + [{ name: 'shift2DY', value: { shift: shiftY } }], + { + filterIndex: activeFilterIndex, + forceReapply: activeFilterIndex !== -1, + }, + ); updateView(draft, shift2DY.domainUpdateRules); } diff --git a/src/component/reducer/actions/ToolsActions.ts b/src/component/reducer/actions/ToolsActions.ts index 94bf9c7758..bffb47e73d 100644 --- a/src/component/reducer/actions/ToolsActions.ts +++ b/src/component/reducer/actions/ToolsActions.ts @@ -148,10 +148,11 @@ function handleResetSelectedTool(draft: Draft) { resetSelectedTool(draft); } function resetSelectedTool(draft: Draft) { - if ( - draft.toolOptions.selectedTool && - Tools[draft.toolOptions.selectedTool].isFilter - ) { + const { + selectedTool, + data: { activeFilterID }, + } = draft.toolOptions; + if ((selectedTool && Tools[selectedTool].isFilter) || activeFilterID) { resetTool(draft, { reset: true, toolId: draft.toolOptions.selectedTool }); } }