refactor: allow user to review import map

This commit is contained in:
Carlos Valente
2025-11-02 10:59:08 +01:00
committed by Carlos Valente
parent becd734ea8
commit 162693e19e
3 changed files with 15 additions and 10 deletions
@@ -15,10 +15,10 @@ interface ImportReviewProps {
customFields: CustomFields;
onFinished: () => void;
onCancel: () => void;
onBack: () => void;
}
export default function ImportReview(props: ImportReviewProps) {
const { rundown, customFields, onFinished, onCancel } = props;
export default function ImportReview({ rundown, customFields, onFinished, onCancel, onBack }: ImportReviewProps) {
const { data: currentRundown } = useRundown();
const [loading, setLoading] = useState(false);
const { importRundown } = useGoogleSheet();
@@ -55,6 +55,9 @@ export default function ImportReview(props: ImportReviewProps) {
<Button onClick={handleCancel} variant='ghosted' disabled={loading}>
Cancel
</Button>
<Button onClick={onBack} variant='subtle' disabled={loading}>
Back
</Button>
<Button onClick={applyImport} variant='primary' loading={loading}>
Apply
</Button>
@@ -39,6 +39,7 @@ export default function SourcesPanel() {
const setCustomFields = useSheetStore((state) => state.setCustomFields);
const setSheetId = useSheetStore((state) => state.setSheetId);
const sheetId = useSheetStore((state) => state.sheetId);
const resetPreview = useSheetStore((state) => state.resetPreview);
const fileInputRef = useRef<HTMLInputElement>(null);
@@ -221,6 +222,7 @@ export default function SourcesPanel() {
customFields={customFields}
onFinished={handleFinished}
onCancel={cancelImportMap}
onBack={resetPreview}
/>
)}
</Panel.Card>
@@ -20,6 +20,7 @@ import { parseCustomFields } from '../custom-fields/customFields.parser.js';
import { parseExcel } from './excel.parser.js';
import { rundownToTabular } from './excel.utils.js';
// we keep the excel data in memory to allow the flow upload -> preview
let excelData: WorkBook = xlsx.utils.book_new();
/**
@@ -33,6 +34,8 @@ export async function readExcelFile(filePath: string) {
if (extname(filePath) != '.xlsx') {
throw new Error('Wrong file format');
}
// clear the data
excelData = xlsx.readFile(filePath, { cellDates: true, cellFormula: false });
await deleteFile(filePath);
@@ -55,18 +58,15 @@ export function generateRundownPreview(options: ImportMap): { rundown: Rundown;
const arrayOfData: unknown[][] = xlsx.utils.sheet_to_json(data, { header: 1, blankrows: false, raw: false });
const dataFromExcel = parseExcel(arrayOfData, getProjectCustomFields(), options.worksheet, options);
const parsedCustomFields = parseCustomFields(dataFromExcel);
// we run the parsed data through an extra step to ensure the objects shape
const rundown = parseRundown(dataFromExcel.rundown, parsedCustomFields);
if (rundown.order.length === 0) {
if (dataFromExcel.rundown.flatOrder.length === 0) {
throw new Error(`Could not find data to import in the worksheet: ${options.worksheet}`);
}
// clear the data
excelData = xlsx.utils.book_new();
// we run the parsed data through an extra step to ensure the objects shape
const customFields = parseCustomFields(dataFromExcel);
const rundown = parseRundown(dataFromExcel.rundown, customFields);
return { rundown, customFields: parsedCustomFields };
return { rundown, customFields };
}
/**