mcServerWebsite/assets/controllers/login_dropdown_controller.js
2026-03-25 19:49:56 +01:00

57 lines
1.5 KiB
JavaScript

import { Controller } from '@hotwired/stimulus';
/**
* Contrôleur Stimulus pour le dropdown de connexion
* Attache les événements de manière robuste et compatible avec Turbo
*/
export default class extends Controller {
static targets = ['wrapper', 'toggle', 'dropdown'];
connect() {
this.setupListeners();
// Ouvrir le dropdown s'il y a une erreur de connexion
const loginError = this.element.querySelector('.login-error');
if (loginError && this.dropdownTarget) {
this.open();
}
}
setupListeners() {
// Clic sur le bouton toggle
this.toggleTarget.addEventListener('click', (e) => {
e.stopPropagation();
this.toggle();
});
// Clic en dehors du dropdown
document.addEventListener('click', (e) => {
if (!this.wrapperTarget.contains(e.target)) {
this.close();
}
});
// Touche Echap
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
this.close();
}
});
}
toggle() {
const isOpen = this.dropdownTarget.classList.contains('open');
isOpen ? this.close() : this.open();
}
open() {
this.dropdownTarget.classList.add('open');
this.toggleTarget.setAttribute('aria-expanded', 'true');
}
close() {
this.dropdownTarget.classList.remove('open');
this.toggleTarget.setAttribute('aria-expanded', 'false');
}
}