Fix new Frontend 7
This commit is contained in:
@@ -12,12 +12,12 @@ import { ApiErrorHandler } from '../utils';
|
||||
* Authentication Interceptor
|
||||
* Automatically adds authentication headers to requests
|
||||
*/
|
||||
export class AuthInterceptor {
|
||||
class AuthInterceptor {
|
||||
static setup() {
|
||||
apiClient.addRequestInterceptor({
|
||||
onRequest: async (config: RequestConfig) => {
|
||||
const token = localStorage.getItem('auth_token');
|
||||
|
||||
|
||||
if (token) {
|
||||
config.headers = {
|
||||
...config.headers,
|
||||
@@ -58,7 +58,7 @@ export class AuthInterceptor {
|
||||
* Logging Interceptor
|
||||
* Logs API requests and responses for debugging
|
||||
*/
|
||||
export class LoggingInterceptor {
|
||||
class LoggingInterceptor {
|
||||
static setup() {
|
||||
apiClient.addRequestInterceptor({
|
||||
onRequest: async (config: RequestConfig) => {
|
||||
@@ -120,7 +120,7 @@ export class LoggingInterceptor {
|
||||
* Tenant Context Interceptor
|
||||
* Automatically adds tenant context to tenant-scoped requests
|
||||
*/
|
||||
export class TenantInterceptor {
|
||||
class TenantInterceptor {
|
||||
private static currentTenantId: string | null = null;
|
||||
|
||||
static setCurrentTenant(tenantId: string | null) {
|
||||
@@ -160,7 +160,7 @@ export class TenantInterceptor {
|
||||
* Error Recovery Interceptor
|
||||
* Handles automatic token refresh and retry logic
|
||||
*/
|
||||
export class ErrorRecoveryInterceptor {
|
||||
class ErrorRecoveryInterceptor {
|
||||
private static isRefreshing = false;
|
||||
private static failedQueue: Array<{
|
||||
resolve: (token: string) => void;
|
||||
@@ -261,7 +261,7 @@ export class ErrorRecoveryInterceptor {
|
||||
* Performance Monitoring Interceptor
|
||||
* Tracks API performance metrics
|
||||
*/
|
||||
export class PerformanceInterceptor {
|
||||
class PerformanceInterceptor {
|
||||
private static metrics: Array<{
|
||||
url: string;
|
||||
method: string;
|
||||
@@ -351,7 +351,9 @@ export class PerformanceInterceptor {
|
||||
export const setupInterceptors = () => {
|
||||
AuthInterceptor.setup();
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const isDevelopment = import.meta.env.DEV;
|
||||
|
||||
if (isDevelopment) {
|
||||
LoggingInterceptor.setup();
|
||||
PerformanceInterceptor.setup();
|
||||
}
|
||||
|
||||
@@ -61,6 +61,8 @@ export interface TenantSubscription {
|
||||
|
||||
export interface TenantCreate {
|
||||
name: string;
|
||||
postal_code: string;
|
||||
phone: string;
|
||||
description?: string;
|
||||
settings?: Partial<TenantSettings>;
|
||||
location?: TenantLocation;
|
||||
|
||||
@@ -2,9 +2,13 @@ import React, { useState } from 'react';
|
||||
import { ChevronLeft, ChevronRight, Upload, MapPin, Store, Factory, Check } from 'lucide-react';
|
||||
import toast from 'react-hot-toast';
|
||||
|
||||
import { useTenant, useTraining, useData, useAuth } from '../../api/hooks';
|
||||
import { TenantCreate } from '../../api/types';
|
||||
import { UserResponse } from '../../api/types';
|
||||
import {
|
||||
useTenant,
|
||||
useTraining,
|
||||
useData,
|
||||
useAuth,
|
||||
TenantCreate
|
||||
} from '../../api';
|
||||
|
||||
interface OnboardingPageProps {
|
||||
user: any;
|
||||
@@ -40,8 +44,7 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
|
||||
|
||||
const { createTenant, isLoading: tenantLoading } = useTenant();
|
||||
const { startTrainingJob } = useTraining();
|
||||
const { uploadSalesHistory, validateSalesData, uploadProgress } = useData();
|
||||
const [ setUploadProgress ] = useState<number>(0);
|
||||
const { uploadSalesHistory, validateSalesData } = useData();
|
||||
|
||||
const steps = [
|
||||
{ id: 1, title: 'Datos de Panadería', icon: Store },
|
||||
@@ -99,11 +102,20 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
|
||||
const tenantData: TenantCreate = {
|
||||
name: bakeryData.name,
|
||||
address: bakeryData.address,
|
||||
business_type: bakeryData.businessType,
|
||||
business_type:"bakery",
|
||||
postal_code: "28010",
|
||||
phone: "+34655334455",
|
||||
coordinates: bakeryData.coordinates,
|
||||
products: bakeryData.products,
|
||||
has_historical_data: bakeryData.hasHistoricalData,
|
||||
};
|
||||
|
||||
const token = localStorage.getItem('auth_token');
|
||||
if (!token) {
|
||||
toast.error('Sesión expirada. Por favor, inicia sesión nuevamente.');
|
||||
// Redirect to login or handle authentication error
|
||||
return;
|
||||
}
|
||||
|
||||
const newTenant = await createTenant(tenantData);
|
||||
const tenantId = newTenant.id;
|
||||
@@ -147,10 +159,7 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
|
||||
|
||||
const uploadResult = await uploadSalesHistory(tenantId, bakeryData.csvFile, {
|
||||
source: 'onboarding_upload',
|
||||
validate_only: false,
|
||||
onProgress: (progress) => {
|
||||
setUploadProgress(progress.percentage);
|
||||
}
|
||||
validate_only: false
|
||||
});
|
||||
|
||||
toast.dismiss('csv-upload');
|
||||
@@ -188,9 +197,6 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
|
||||
throw new Error(`Upload failed: ${uploadResult.errors?.join(', ') || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
// Reset progress when done
|
||||
setUploadProgress(0);
|
||||
|
||||
} catch (uploadError) {
|
||||
// Handle validation or upload error gracefully
|
||||
console.error('CSV validation/upload error:', uploadError);
|
||||
@@ -210,11 +216,16 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
|
||||
|
||||
} catch (error) {
|
||||
console.error('Onboarding completion error:', error);
|
||||
const errorMessage = error instanceof Error ? error.message : 'Error al completar la configuración';
|
||||
toast.error(errorMessage);
|
||||
|
||||
// 🔧 ADD: Better error handling for auth issues
|
||||
if (error instanceof Error && error.message.includes('401')) {
|
||||
toast.error('Sesión expirada. Por favor, inicia sesión nuevamente.');
|
||||
} else {
|
||||
toast.error('Error en la configuración. Inténtalo de nuevo.');
|
||||
}
|
||||
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
setUploadProgress(0); // Reset progress in case of error
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user