Improve onboarding

This commit is contained in:
Urtzi Alfaro
2025-12-18 13:26:32 +01:00
parent f76b3f8e6b
commit f10a2b92ea
42 changed files with 2175 additions and 984 deletions

View File

@@ -15,11 +15,33 @@ interface RegisterTenantStepProps {
isLastStep: boolean;
}
// Map bakeryType to business_model
const getBakeryBusinessModel = (bakeryType: string | null): string => {
switch (bakeryType) {
case 'production':
return 'central_baker_satellite'; // Production-focused bakery
case 'retail':
return 'retail_bakery'; // Retail/finishing bakery
case 'mixed':
return 'hybrid_bakery'; // Mixed model (enterprise or hybrid)
default:
return 'individual_bakery'; // Default fallback
}
};
export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
onComplete,
isFirstStep
}) => {
const wizardContext = useWizardContext();
// Check if user is enterprise tier for conditional labels
const subscriptionTier = localStorage.getItem('subscription_tier');
const isEnterprise = subscriptionTier === 'enterprise';
// Get business_model from wizard context's bakeryType
const businessModel = getBakeryBusinessModel(wizardContext.state.bakeryType);
const [formData, setFormData] = useState<BakeryRegistration>({
name: '',
address: '',
@@ -27,9 +49,20 @@ export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
phone: '',
city: 'Madrid',
business_type: 'bakery',
business_model: 'individual_bakery'
business_model: businessModel
});
// Update business_model when bakeryType changes in context
React.useEffect(() => {
const newBusinessModel = getBakeryBusinessModel(wizardContext.state.bakeryType);
if (newBusinessModel !== formData.business_model) {
setFormData(prev => ({
...prev,
business_model: newBusinessModel
}));
}
}, [wizardContext.state.bakeryType, formData.business_model]);
const [errors, setErrors] = useState<Record<string, string>>({});
const registerBakery = useRegisterBakery();
@@ -110,6 +143,12 @@ export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
return;
}
console.log('📝 Registering tenant with data:', {
bakeryType: wizardContext.state.bakeryType,
business_model: formData.business_model,
formData
});
try {
const tenant = await registerBakery.mutateAsync(formData);
@@ -167,8 +206,8 @@ export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
<div className="space-y-4 md:space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6">
<Input
label="Nombre de la Panadería"
placeholder="Ingresa el nombre de tu panadería"
label={isEnterprise ? "Nombre del Obrador Central" : "Nombre de la Panadería"}
placeholder={isEnterprise ? "Ingresa el nombre de tu obrador central" : "Ingresa el nombre de tu panadería"}
value={formData.name}
onChange={(e) => handleInputChange('name', e.target.value)}
error={errors.name}
@@ -191,7 +230,7 @@ export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
</label>
<AddressAutocomplete
value={formData.address}
placeholder="Enter bakery address..."
placeholder={isEnterprise ? "Dirección del obrador central..." : "Dirección de tu panadería..."}
onAddressSelect={(address) => {
console.log('Selected:', address.display_name);
handleAddressSelect(address);
@@ -236,10 +275,10 @@ export const RegisterTenantStep: React.FC<RegisterTenantStepProps> = ({
<Button
onClick={handleSubmit}
isLoading={registerBakery.isPending}
loadingText="Registrando..."
loadingText={isEnterprise ? "Registrando obrador..." : "Registrando..."}
size="lg"
>
Crear Panadería y Continuar
{isEnterprise ? "Crear Obrador Central y Continuar" : "Crear Panadería y Continuar"}
</Button>
</div>
</div>