Start integrating the onboarding flow with backend 10
This commit is contained in:
@@ -108,6 +108,72 @@ export const useImportCsvFile = (
|
||||
};
|
||||
|
||||
// Combined validation and import hook for easier use
|
||||
// Validation-only hook for onboarding
|
||||
export const useValidateFileOnly = () => {
|
||||
const validateCsv = useValidateCsvFile();
|
||||
const validateJson = useValidateJsonData();
|
||||
|
||||
const validateFile = async (
|
||||
tenantId: string,
|
||||
file: File,
|
||||
options?: {
|
||||
onProgress?: (stage: string, progress: number, message: string) => void;
|
||||
}
|
||||
): Promise<{
|
||||
validationResult?: ImportValidationResponse;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}> => {
|
||||
try {
|
||||
let validationResult: ImportValidationResponse | undefined;
|
||||
|
||||
options?.onProgress?.('validating', 20, 'Validando estructura del archivo...');
|
||||
|
||||
const fileExtension = file.name.split('.').pop()?.toLowerCase();
|
||||
if (fileExtension === 'csv') {
|
||||
validationResult = await validateCsv.mutateAsync({ tenantId, file });
|
||||
} else if (fileExtension === 'json') {
|
||||
const jsonData = await file.text().then(text => JSON.parse(text));
|
||||
validationResult = await validateJson.mutateAsync({ tenantId, data: jsonData });
|
||||
} else {
|
||||
throw new Error('Formato de archivo no soportado. Use CSV o JSON.');
|
||||
}
|
||||
|
||||
options?.onProgress?.('validating', 50, 'Verificando integridad de datos...');
|
||||
|
||||
if (!validationResult.is_valid) {
|
||||
const errorMessage = validationResult.errors && validationResult.errors.length > 0
|
||||
? validationResult.errors.join(', ')
|
||||
: 'Error de validación desconocido';
|
||||
throw new Error(`Archivo inválido: ${errorMessage}`);
|
||||
}
|
||||
|
||||
// Report validation success with details
|
||||
options?.onProgress?.('completed', 100,
|
||||
`Archivo validado: ${validationResult.valid_records} registros válidos de ${validationResult.total_records} totales`
|
||||
);
|
||||
|
||||
return {
|
||||
validationResult,
|
||||
success: true,
|
||||
};
|
||||
} catch (error) {
|
||||
const errorMessage = error instanceof Error ? error.message : 'Error validando archivo';
|
||||
options?.onProgress?.('error', 0, errorMessage);
|
||||
|
||||
return {
|
||||
success: false,
|
||||
error: errorMessage,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
validateFile,
|
||||
};
|
||||
};
|
||||
|
||||
// Full validation + import hook (for later use)
|
||||
export const useValidateAndImportFile = () => {
|
||||
const validateCsv = useValidateCsvFile();
|
||||
const validateJson = useValidateJsonData();
|
||||
@@ -147,9 +213,17 @@ export const useValidateAndImportFile = () => {
|
||||
|
||||
options?.onProgress?.('validating', 50, 'Verificando integridad de datos...');
|
||||
|
||||
if (!validationResult.valid) {
|
||||
throw new Error(`Archivo inválido: ${validationResult.errors?.join(', ')}`);
|
||||
if (!validationResult.is_valid) {
|
||||
const errorMessage = validationResult.errors && validationResult.errors.length > 0
|
||||
? validationResult.errors.join(', ')
|
||||
: 'Error de validación desconocido';
|
||||
throw new Error(`Archivo inválido: ${errorMessage}`);
|
||||
}
|
||||
|
||||
// Report validation success with details
|
||||
options?.onProgress?.('validating', 60,
|
||||
`Archivo validado: ${validationResult.valid_records} registros válidos de ${validationResult.total_records} totales`
|
||||
);
|
||||
}
|
||||
|
||||
// Step 2: Import
|
||||
@@ -180,12 +254,18 @@ export const useValidateAndImportFile = () => {
|
||||
throw new Error('Formato de archivo no soportado. Use CSV o JSON.');
|
||||
}
|
||||
|
||||
options?.onProgress?.('completed', 100, 'Importación completada');
|
||||
// Report completion with details
|
||||
const completionMessage = importResult.success
|
||||
? `Importación completada: ${importResult.records_processed} registros procesados`
|
||||
: `Importación fallida: ${importResult.errors?.join(', ') || 'Error desconocido'}`;
|
||||
|
||||
options?.onProgress?.('completed', 100, completionMessage);
|
||||
|
||||
return {
|
||||
validationResult,
|
||||
importResult,
|
||||
success: true,
|
||||
success: importResult.success,
|
||||
error: importResult.success ? undefined : (importResult.errors?.join(', ') || 'Error en la importación'),
|
||||
};
|
||||
} catch (error) {
|
||||
const errorMessage = error instanceof Error ? error.message : 'Error procesando archivo';
|
||||
|
||||
Reference in New Issue
Block a user