import type { Filter1DEntry, Filter2DEntry } from '@zakodium/nmr-types'; import type { Spectrum1D, Spectrum2D } from '@zakodium/nmrium-core'; import { useMemo } from 'react'; import type { ExtractFilterEntry } from '../../data/types/common/ExtractFilterEntry.js'; import type { FilterEntry } from '../../data/types/common/FilterEntry.js'; import useSpectrum from './useSpectrum.js'; const emptyData = { filters: [] }; type FilterReturnType = T extends Filter1DEntry['name'] ? ExtractFilterEntry : T extends Filter2DEntry['name'] ? ExtractFilterEntry : null; export function useFilter( filterID: T, ): FilterReturnType | null { const { filters } = useSpectrum(emptyData) as Spectrum1D | Spectrum2D; return useMemo(() => { if (!filters?.length) return null; const filter = filters.find((filter) => filter.name === filterID); return (filter as FilterReturnType) ?? null; }, [filterID, filters]); }