Improve lazy loading (#12186)

WIP, using preview app to test performance (which was very bad)
This commit is contained in:
Félix Malfait
2025-05-22 15:07:01 +02:00
committed by GitHub
parent 4ac47c2a1b
commit 79b4b3f783
26 changed files with 697 additions and 104 deletions

View File

@ -1,7 +1,7 @@
import styled from '@emotion/styled';
import { useState } from 'react';
import { useDropzone } from 'react-dropzone';
import * as XLSX from 'xlsx-ugnis';
import { read, WorkBook } from 'xlsx-ugnis';
import { useSpreadsheetImportInternal } from '@/spreadsheet-import/hooks/useSpreadsheetImportInternal';
import { readFileAsync } from '@/spreadsheet-import/utils/readFilesAsync';
@ -84,7 +84,7 @@ const StyledText = styled.span`
`;
type DropZoneProps = {
onContinue: (data: XLSX.WorkBook, file: File) => void;
onContinue: (data: WorkBook, file: File) => void;
isLoading: boolean;
};
@ -119,7 +119,7 @@ export const DropZone = ({ onContinue, isLoading }: DropZoneProps) => {
onDropAccepted: async ([file]) => {
setLoading(true);
const arrayBuffer = await readFileAsync(file);
const workbook = XLSX.read(arrayBuffer, {
const workbook = read(arrayBuffer, {
cellDates: true,
codepage: 65001, // UTF-8 codepage
dateNF: dateFormat,

View File

@ -1,10 +1,10 @@
import * as XLSX from 'xlsx-ugnis';
import { utils } from 'xlsx-ugnis';
import { mapWorkbook } from '@/spreadsheet-import/utils/mapWorkbook';
describe('mapWorkbook', () => {
it('should map the workbook to a 2D array of strings', () => {
const inputWorkbook = XLSX.utils.book_new();
const inputWorkbook = utils.book_new();
const inputSheetData = [
['Name', 'Age'],
['John', '30'],
@ -12,8 +12,8 @@ describe('mapWorkbook', () => {
];
const expectedOutput = inputSheetData;
const worksheet = XLSX.utils.aoa_to_sheet(inputSheetData);
XLSX.utils.book_append_sheet(inputWorkbook, worksheet, 'Sheet1');
const worksheet = utils.aoa_to_sheet(inputSheetData);
utils.book_append_sheet(inputWorkbook, worksheet, 'Sheet1');
const result = mapWorkbook(inputWorkbook);
@ -21,7 +21,7 @@ describe('mapWorkbook', () => {
});
it('should map the specified sheet of the workbook to a 2D array of strings', () => {
const inputWorkbook = XLSX.utils.book_new();
const inputWorkbook = utils.book_new();
const inputSheet1Data = [
['Name', 'Age'],
['John', '30'],
@ -34,10 +34,10 @@ describe('mapWorkbook', () => {
];
const expectedOutput = inputSheet2Data;
const worksheet1 = XLSX.utils.aoa_to_sheet(inputSheet1Data);
const worksheet2 = XLSX.utils.aoa_to_sheet(inputSheet2Data);
XLSX.utils.book_append_sheet(inputWorkbook, worksheet1, 'Sheet1');
XLSX.utils.book_append_sheet(inputWorkbook, worksheet2, 'Sheet2');
const worksheet1 = utils.aoa_to_sheet(inputSheet1Data);
const worksheet2 = utils.aoa_to_sheet(inputSheet2Data);
utils.book_append_sheet(inputWorkbook, worksheet1, 'Sheet1');
utils.book_append_sheet(inputWorkbook, worksheet2, 'Sheet2');
const result = mapWorkbook(inputWorkbook, 'Sheet2');

View File

@ -1,8 +1,8 @@
import * as XLSX from 'xlsx-ugnis';
import { utils, WorkBook } from 'xlsx-ugnis';
export const mapWorkbook = (workbook: XLSX.WorkBook, sheetName?: string) => {
export const mapWorkbook = (workbook: WorkBook, sheetName?: string) => {
const worksheet = workbook.Sheets[sheetName || workbook.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(worksheet, {
const data = utils.sheet_to_json(worksheet, {
header: 1,
blankrows: false,
raw: false,