Improve GDPR implementation

This commit is contained in:
Urtzi Alfaro
2025-10-16 07:28:04 +02:00
parent dbb48d8e2c
commit b6cb800758
37 changed files with 4876 additions and 307 deletions

View File

@@ -25,6 +25,8 @@ interface SimpleUserRegistration {
password: string;
confirmPassword: string;
acceptTerms: boolean;
marketingConsent: boolean;
analyticsConsent: boolean;
}
// Define the steps for the registration process
@@ -41,7 +43,9 @@ export const RegisterForm: React.FC<RegisterFormProps> = ({
email: '',
password: '',
confirmPassword: '',
acceptTerms: false
acceptTerms: false,
marketingConsent: false,
analyticsConsent: false
});
const [errors, setErrors] = useState<Partial<SimpleUserRegistration>>({});
@@ -135,10 +139,15 @@ export const RegisterForm: React.FC<RegisterFormProps> = ({
subscription_plan: selectedPlan,
use_trial: useTrial,
payment_method_id: paymentMethodId,
// Include consent data
terms_accepted: formData.acceptTerms,
privacy_accepted: formData.acceptTerms,
marketing_consent: formData.marketingConsent,
analytics_consent: formData.analyticsConsent,
};
await register(registrationData);
showSuccessToast(t('auth:register.registering', '¡Bienvenido! Tu cuenta ha sido creada correctamente.'), {
title: t('auth:alerts.success_create', 'Cuenta creada exitosamente')
});
@@ -407,15 +416,47 @@ export const RegisterForm: React.FC<RegisterFormProps> = ({
/>
<label htmlFor="acceptTerms" className="text-sm text-text-secondary cursor-pointer">
Acepto los{' '}
<a href="#" className="text-color-primary hover:text-color-primary-dark underline">
<a href="/terms" target="_blank" rel="noopener noreferrer" className="text-color-primary hover:text-color-primary-dark underline">
términos y condiciones
</a>{' '}
de uso
y la{' '}
<a href="/privacy" target="_blank" rel="noopener noreferrer" className="text-color-primary hover:text-color-primary-dark underline">
política de privacidad
</a>{' '}
<span className="text-color-error">*</span>
</label>
</div>
{errors.acceptTerms && (
<p className="text-color-error text-sm ml-7">{errors.acceptTerms}</p>
)}
<div className="flex items-start space-x-3">
<input
type="checkbox"
id="marketingConsent"
checked={formData.marketingConsent}
onChange={handleInputChange('marketingConsent')}
className="mt-1 h-4 w-4 rounded border-border-primary text-color-primary focus:ring-color-primary focus:ring-offset-0"
disabled={isLoading}
/>
<label htmlFor="marketingConsent" className="text-sm text-text-secondary cursor-pointer">
Deseo recibir comunicaciones de marketing y promociones
</label>
</div>
<div className="flex items-start space-x-3">
<input
type="checkbox"
id="analyticsConsent"
checked={formData.analyticsConsent}
onChange={handleInputChange('analyticsConsent')}
className="mt-1 h-4 w-4 rounded border-border-primary text-color-primary focus:ring-color-primary focus:ring-offset-0"
disabled={isLoading}
/>
<label htmlFor="analyticsConsent" className="text-sm text-text-secondary cursor-pointer">
Acepto el uso de cookies analíticas para mejorar la experiencia
</label>
</div>
</div>
<div className="flex justify-end pt-4">