<img width="800" alt="Screenshot 2025-06-11 at 17 45 13" src="https://github.com/user-attachments/assets/ecc04d41-d74a-424a-9f83-14a793cf4268" /> closes https://github.com/twentyhq/core-team-issues/issues/905
43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import { useSpreadsheetImportInternal } from '@/spreadsheet-import/hooks/useSpreadsheetImportInternal';
|
|
import {
|
|
initialComputedColumnsSelector,
|
|
matchColumnsState,
|
|
} from '@/spreadsheet-import/steps/components/MatchColumnsStep/components/states/initialComputedColumnsState';
|
|
import { suggestedFieldsByColumnHeaderState } from '@/spreadsheet-import/steps/components/MatchColumnsStep/components/states/suggestedFieldsByColumnHeaderState';
|
|
import { ImportedRow } from '@/spreadsheet-import/types';
|
|
import { getMatchedColumnsWithFuse } from '@/spreadsheet-import/utils/getMatchedColumnsWithFuse';
|
|
import { useRecoilCallback } from 'recoil';
|
|
|
|
export const useComputeColumnSuggestionsAndAutoMatch = <T extends string>() => {
|
|
const { fields, autoMapHeaders } = useSpreadsheetImportInternal<T>();
|
|
|
|
const computeColumnSuggestionsAndAutoMatch = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
async ({
|
|
headerValues,
|
|
data,
|
|
}: {
|
|
headerValues: ImportedRow;
|
|
data: ImportedRow[];
|
|
}) => {
|
|
if (autoMapHeaders) {
|
|
const columns = snapshot
|
|
.getLoadable(initialComputedColumnsSelector(headerValues))
|
|
.getValue();
|
|
|
|
const { matchedColumns, suggestedFieldsByColumnHeader } =
|
|
getMatchedColumnsWithFuse({ columns, fields, data });
|
|
|
|
set(matchColumnsState, matchedColumns);
|
|
set(
|
|
suggestedFieldsByColumnHeaderState,
|
|
suggestedFieldsByColumnHeader,
|
|
);
|
|
}
|
|
},
|
|
[autoMapHeaders, fields],
|
|
);
|
|
|
|
return computeColumnSuggestionsAndAutoMatch;
|
|
};
|