demarches-normaliennes/app/javascript/controllers/email_france_connect_controller.ts
simon lehericey 2a25171738
Fix: allow custom email (!), require a mail confirmation
previous code was wrong, it was impossible to choose another email than the FC one
2024-12-13 11:37:20 +01:00

63 lines
1.6 KiB
TypeScript

import { ApplicationController } from './application_controller';
export class EmailFranceConnectController extends ApplicationController {
static targets = [
'useFranceConnectEmail',
'emailField',
'submit',
'emailInput',
'form'
];
emailFieldTarget!: HTMLElement;
useFranceConnectEmailTargets!: HTMLInputElement[];
submitTarget!: HTMLButtonElement;
emailInputTarget!: HTMLInputElement;
formTarget!: HTMLFormElement;
fcEmailPathValue!: string;
customEmailPathValue!: string;
static values = {
fcEmailPath: String,
customEmailPath: String
};
triggerEmailField() {
if (this.useFCEmail()) {
this.emailFieldTarget.classList.add('hidden');
this.emailFieldTarget.setAttribute('aria-hidden', 'true');
this.emailInputTarget.removeAttribute('required');
this.emailInputTarget.value = '';
this.formTarget.action = this.fcEmailPathValue;
} else {
this.emailFieldTarget.classList.remove('hidden');
this.emailFieldTarget.setAttribute('aria-hidden', 'false');
this.emailInputTarget.setAttribute('required', '');
this.formTarget.action = this.customEmailPathValue;
}
}
triggerSubmitDisabled() {
if (this.useFCEmail() || this.isEmailInputFilled()) {
this.submitTarget.disabled = false;
} else {
this.submitTarget.disabled = true;
}
}
useFCEmail() {
return (
this.useFranceConnectEmailTargets.find((target) => target.checked)
?.value === 'true' || false
);
}
isEmailInputFilled() {
return this.emailInputTarget.value.length > 0;
}
}