import { SpreadsheetImportFields } from '@/spreadsheet-import/types'; import lavenstein from 'js-levenshtein'; type AutoMatchAccumulator = { distance: number; value: T; }; export const findMatch = ( header: string, fields: SpreadsheetImportFields, autoMapDistance: number, ): T | undefined => { const smallestValue = fields.reduce>((acc, field) => { const distance = Math.min( ...[ lavenstein(field.key, header), ...(field.alternateMatches?.map((alternate) => lavenstein(alternate, header), ) || []), ], ); return distance < acc.distance || acc.distance === undefined ? ({ value: field.key, distance } as AutoMatchAccumulator) : acc; }, {} as AutoMatchAccumulator); return smallestValue.distance <= autoMapDistance ? smallestValue.value : undefined; };