Migrate to a monorepo structure (#2909)
This commit is contained in:
@ -0,0 +1,31 @@
|
||||
import lavenstein from 'js-levenshtein';
|
||||
|
||||
import { Fields } from '@/spreadsheet-import/types';
|
||||
|
||||
type AutoMatchAccumulator<T> = {
|
||||
distance: number;
|
||||
value: T;
|
||||
};
|
||||
|
||||
export const findMatch = <T extends string>(
|
||||
header: string,
|
||||
fields: Fields<T>,
|
||||
autoMapDistance: number,
|
||||
): T | undefined => {
|
||||
const smallestValue = fields.reduce<AutoMatchAccumulator<T>>((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<T>)
|
||||
: acc;
|
||||
}, {} as AutoMatchAccumulator<T>);
|
||||
return smallestValue.distance <= autoMapDistance
|
||||
? smallestValue.value
|
||||
: undefined;
|
||||
};
|
||||
Reference in New Issue
Block a user