/** * Tenant creation service - Clean, standardized implementation */ import { useCallback } from 'react'; import { useRegisterBakery } from '../../../../api'; import { useTenantStore } from '../../../../stores/tenant.store'; import { useOnboardingStore } from '../core/store'; import { createServiceHook } from '../utils/createServiceHook'; import type { TenantCreationState } from '../core/types'; import type { BakeryRegistration, TenantResponse } from '../../../../api'; const useTenantCreationService = createServiceHook({ initialState: { tenantData: null, }, }); export const useTenantCreation = () => { const service = useTenantCreationService(); const registerBakeryMutation = useRegisterBakery(); const { setCurrentTenant, loadUserTenants } = useTenantStore(); const { setStepData } = useOnboardingStore(); const createTenant = useCallback(async (bakeryData: BakeryRegistration): Promise => { if (!bakeryData) { service.setError('Los datos de la panaderĂ­a son requeridos'); return false; } const result = await service.executeAsync(async () => { // Call API to register bakery const tenantResponse: TenantResponse = await registerBakeryMutation.mutateAsync(bakeryData); // Update tenant store console.log('useTenantCreation - Setting current tenant:', tenantResponse); setCurrentTenant(tenantResponse); // Reload user tenants await loadUserTenants(); // Update onboarding data setStepData('setup', { bakery: { ...bakeryData, tenantCreated: true, tenant_id: tenantResponse.id, } as any, }); console.log('useTenantCreation - Tenant created and set successfully'); return tenantResponse; }); return result.success; }, [service, registerBakeryMutation, setCurrentTenant, loadUserTenants, setStepData]); return { // State isLoading: service.isLoading, error: service.error, isSuccess: service.isSuccess, tenantData: service.tenantData, // Actions createTenant, clearError: service.clearError, reset: service.reset, }; };