feat: add Stimulus import modal controller

This commit is contained in:
thibaud-leclere
2026-03-29 10:23:19 +02:00
parent c9880baddb
commit 300699fa82

View File

@@ -0,0 +1,59 @@
import { Controller } from '@hotwired/stimulus';
export default class extends Controller {
static targets = ['overlay', 'fileInput', 'feedback', 'submitBtn'];
open() {
this.overlayTarget.hidden = false;
}
close() {
this.overlayTarget.hidden = true;
this.fileInputTarget.value = '';
this.feedbackTarget.hidden = true;
}
async submit() {
const file = this.fileInputTarget.files[0];
if (!file) {
this._showFeedback('Veuillez sélectionner un fichier.', true);
return;
}
if (!file.name.endsWith('.csv')) {
this._showFeedback('Seuls les fichiers CSV sont acceptés.', true);
return;
}
this.submitBtnTarget.disabled = true;
const formData = new FormData();
formData.append('file', file);
try {
const response = await fetch('/api/imports', {
method: 'POST',
body: formData,
});
if (!response.ok) {
const data = await response.json();
this._showFeedback(data.error || 'Une erreur est survenue.', true);
return;
}
this._showFeedback('Import lancé !', false);
setTimeout(() => this.close(), 1500);
} catch (e) {
this._showFeedback('Une erreur est survenue.', true);
} finally {
this.submitBtnTarget.disabled = false;
}
}
_showFeedback(message, isError) {
this.feedbackTarget.textContent = message;
this.feedbackTarget.className = isError ? 'modal-feedback error' : 'modal-feedback success';
this.feedbackTarget.hidden = false;
}
}