import React, { useState, useEffect } from "react"; import Papa from "papaparse"; import { config as envConfig, debugLog } from "../utils/config"; const Step3 = ({ uploadedFile, fileMetadata, config, setConfig, stepNumber, stepTitle, stepIcon, enabled = true, // Add validation props apiKey, isApiKeyValid, s3Link, }) => { const [columns, setColumns] = useState([]); useEffect(() => { if (uploadedFile) { debugLog("Parsing uploaded file for columns", { fileName: uploadedFile.name, }); // Parse the uploaded file to get column names Papa.parse(uploadedFile, { complete: (results) => { if (results.data.length > 0) { const headers = Object.keys(results.data[0]); setColumns(headers); debugLog("Columns extracted from file", { columns: headers }); // Set first column as default target if not already set if (!config.targetColumn && headers.length > 0) { setConfig((prev) => ({ ...prev, targetColumn: headers[0], fileSizeBytes: fileMetadata?.fileSizeBytes || 0, sourceFileRows: fileMetadata?.sourceFileRows || 0, })); } // Set default number of rows from environment config if not already set if (!config.numRows || config.numRows === 100) { setConfig((prev) => ({ ...prev, numRows: envConfig.defaultNumRecords, fileSizeBytes: fileMetadata?.fileSizeBytes || 0, sourceFileRows: fileMetadata?.sourceFileRows || 0, })); debugLog("Set default number of rows", { numRows: envConfig.defaultNumRecords, }); } } }, header: true, skipEmptyLines: true, }); } }, [ uploadedFile, config.targetColumn, config.numRows, setConfig, fileMetadata?.fileSizeBytes, fileMetadata?.sourceFileRows, ]); const handleNumRowsChange = (e) => { // Prevent action if step is disabled if (!enabled) return; const numRows = parseInt(e.target.value, 10); debugLog("Number of rows changed", { numRows }); setConfig((prev) => ({ ...prev, numRows: numRows, fileSizeBytes: fileMetadata?.fileSizeBytes || 0, sourceFileRows: fileMetadata?.sourceFileRows || 0, })); }; const handleTargetColumnChange = (e) => { // Prevent action if step is disabled if (!enabled) return; const targetColumn = e.target.value; debugLog("Target column changed", { targetColumn }); setConfig((prev) => ({ ...prev, targetColumn: targetColumn, fileSizeBytes: fileMetadata?.fileSizeBytes || 0, sourceFileRows: fileMetadata?.sourceFileRows || 0, })); }; return (

{stepNumber} {stepIcon} {stepTitle}

Configure the parameters for your synthetic data generation process

📊 Data Generation Settings

{config.numRows} rows
{columns.length > 0 && (

📋 Available Columns ({columns.length})

{columns.map((column, index) => ( {column} ))}
)}
); }; export default Step3;