Files
bakery-ia/frontend/src/hooks/business/onboarding/services/useTenantCreation.ts
2025-09-07 22:54:14 +02:00

89 lines
2.4 KiB
TypeScript

/**
* Tenant creation service - Simplified implementation
*/
import { useCallback, useState } from 'react';
import { useRegisterBakery } from '../../../../api';
import { useTenantStore } from '../../../../stores/tenant.store';
import { useOnboardingStore } from '../core/store';
import type { BakeryRegistration, TenantResponse } from '../../../../api';
export const useTenantCreation = () => {
const registerBakeryMutation = useRegisterBakery();
const { setCurrentTenant, loadUserTenants } = useTenantStore();
const { setStepData } = useOnboardingStore();
// Simple, direct state management
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [isSuccess, setIsSuccess] = useState(false);
const [tenantData, setTenantData] = useState<TenantResponse | null>(null);
const createTenant = useCallback(async (bakeryData: BakeryRegistration): Promise<boolean> => {
if (!bakeryData) {
setError('Los datos de la panadería son requeridos');
return false;
}
setIsLoading(true);
setError(null);
try {
// Call API to register bakery
const tenantResponse: TenantResponse = await registerBakeryMutation.mutateAsync(bakeryData);
// Update tenant store
setCurrentTenant(tenantResponse);
// Reload user tenants
await loadUserTenants();
// Update state
setTenantData(tenantResponse);
setIsSuccess(true);
// Update onboarding data
setStepData('setup', {
bakery: {
...bakeryData,
tenantCreated: true,
tenant_id: tenantResponse.id,
} as any,
});
console.log('✅ Tenant created successfully');
return true;
} catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Error creating tenant';
setError(errorMessage);
setIsSuccess(false);
return false;
} finally {
setIsLoading(false);
}
}, [registerBakeryMutation, setCurrentTenant, loadUserTenants, setStepData]);
const clearError = useCallback(() => {
setError(null);
}, []);
const reset = useCallback(() => {
setIsLoading(false);
setError(null);
setIsSuccess(false);
setTenantData(null);
}, []);
return {
// State
isLoading,
error,
isSuccess,
tenantData,
// Actions
createTenant,
clearError,
reset,
};
};