I’m trying to update edit/new actions to get a confirmation modal but when I confirm into the modal window, the page page reload and nothing persist in the database.
Any solutions ?
ModuleCrudController (src/Controller/Admin/ModuleCrudController.php) :
public function configureActions(Actions $actions): Actions
{
return $actions
->update(Crud::PAGE_INDEX, Action::NEW,
fn(Action $action) => $action
->setLabel('Ajouter un module'))
->update(Crud::PAGE_INDEX, Action::BATCH_DELETE,
fn(Action$action) => $action
->setLabel('Supprimer'))
->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER,
fn(Action $action) => $action
->setLabel('Créer et ajouter un nouveau module')
->displayAsLink()
->addCssClass('confirm-action')
->setHtmlAttributes([
'data-bs-toggle' => 'modal',
'data-bs-target' => '#modal-confirm',
]));
ModuleCrudController (src/Controller/Admin/ModuleCrudController.php) :
public function configureAssets(Assets $assets): Assets
{
$assets->addJsFile('assets/js/confirm-modal.js');
return parent::configureAssets($assets);
}
layout.html.twig (templates/bundles/EasyAdminBundle/layout.html.twig) :
{% extends '@!EasyAdmin/layout.html.twig' %}
{% block content_footer_wrapper %}
<div id="modal-confirm" class="modal fade" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<h4>Êtes-vous sûr ?</h4>
<p>Parce que ça va faire des trucs de fifou</p>
</div>
<div class="modal-footer">
<button type="button" data-bs-dismiss="modal" class="btn btn-secondary">
<span class="btn-label">{{ 'action.cancel'|trans([], 'EasyAdminBundle') }}</span>
</button>
<button type="button" data-bs-dismiss="modal" class="btn btn-success" id="modal-confirm-button">
<span class="btn-label">{{ 'action.confirm'|trans([], 'EasyAdminBundle') }}</span>
</button>
</div>
</div>
</div>
</div>
{% endblock %}
confirm-modal.js (public/assets/js/confirm-modal.js) :
document.addEventListener("DOMContentLoaded",(
function() {
document.querySelectorAll(".confirm-action").forEach((function(e){
e.addEventListener("click",(function(t){
t.preventDefault();
document.querySelector("#modal-confirm-button").addEventListener("click",(function(){
location.replace(e.getAttribute("href"));
}));
}));
}));
}
));