providerdeleteconfirm.js
94 lines
// This file is part of Moodle - http://moodle.org/ //
// This file is part of Moodle - http://moodle.org/ //
// Moodle is free software: you can redistribute it and/or modify
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// (at your option) any later version.
//
//
// Moodle is distributed in the hope that it will be useful,
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// GNU General Public License for more details.
//
//
// You should have received a copy of the GNU General Public License
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
/**
* AI provider deletion confirmation.
* AI provider deletion confirmation.
* Renders a confirmation modal when deleting an AI provider.
* Renders a confirmation modal when deleting an AI provider.
*
*
* @module core_ai/providerdeleteconfirm
* @module core_ai/providerdeleteconfirm
* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>
* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
*/
import {getString} from 'core/str';
import {getString} from 'core/str';
import {prefetchStrings} from 'core/prefetch';
import DeleteCancelModal from 'core/modal_delete_cancel';
import DeleteCancelModal from 'core/modal_delete_cancel';
import ModalEvents from 'core/modal_events';
import ModalEvents from 'core/modal_events';
import Ajax from 'core/ajax';
import Ajax from 'core/ajax';
import {refreshTableContent} from 'core_table/dynamic';
import {fetchNotifications} from 'core/notification';
import * as Selectors from 'core_table/local/dynamic/selectors';
import * as DynamicTable from 'core_table/dynamic';
/**
/**
* Call the delete service.
* Call the delete service.
*
*
* @param {String} providerid The provider id.
* @param {String} providerid The provider id.
* @return {Promise} The promise.
* @return {Promise} The promise.
*/
*/
const deleteProviderService = async(providerid) => Ajax.call([{
const deleteProviderService = async(providerid) => Ajax.call([{
methodname: 'core_ai_delete_provider_instance',
methodname: 'core_ai_delete_provider_instance',
args: {
args: {
providerid: providerid,
providerid: providerid,
},
},
}])[0];
}])[0];
/**
/**
* Handle the delete event.
* Handle the delete event.
* Calls the delete service and reloads the page.
* Calls the delete service and reloads the page.
*
*
* @param {String} providerid The provider id.
* @param {String} providerid The provider id.
* @returns {Promise<void>}
* @returns {Promise<void>}
*/
*/
const handleDelete = async(providerid) => {
const handleDelete = async(providerid) => {
await deleteProviderService(providerid);
await deleteProviderService(providerid);
// Refresh the page, so we get the updated list of providers, and any messages.
// Reload the table, so we get the updated list of providers, and any messages.
window.location.reload();
const tableRoot = document.querySelector(Selectors.main.region);
await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
};
};
/**
/**
* Show the delete confirmation modal.
* Show the delete confirmation modal.
*
*
* @param {Event} e The event object.
* @param {Event} e The event object.
*/
*/
const showDeleteModal = async(e) => {
const showDeleteModal = async(e) => {
const providerid = e.target.dataset.id;
const providerid = e.target.dataset.id;
const provider = e.target.dataset.provider;
const provider = e.target.dataset.provider;
const name = e.target.dataset.name;
const name = e.target.dataset.name;
const bodyparams = {
const bodyparams = {
provider: provider,
provider: provider,
name: name,
name: name,
};
};
const modal = await DeleteCancelModal.create({
const modal = await DeleteCancelModal.create({
title: await getString('providerinstancedelete', 'core_ai'),
title: getString('providerinstancedelete', 'core_ai'),
body: await getString('providerinstancedeleteconfirm', 'core_ai', bodyparams),
body: getString('providerinstancedeleteconfirm', 'core_ai', bodyparams),
show: true,
show: true,
removeOnClose: true,
removeOnClose: true,
});
});
// Handle delete event.
// Handle delete event.
modal.getRoot().on(ModalEvents.delete, (e) => {
modal.getRoot().on(ModalEvents.delete, (e) => {
e.preventDefault();
e.preventDefault();
handleDelete(providerid);
handleDelete(providerid);
modal.destroy();
modal.destroy();
});
});
};
};
/**
/**
* Initialise the delete listeners.
* Initialise the delete listeners.
*
*
*/
*/
export const init = () => {
export const init = () => {
prefetchStrings('core_ai', [
'providerinstancedelete',
'providerinstancedeleteconfirm',
]);
document.querySelectorAll('.ai-provider-delete').forEach((button) => {
document.querySelectorAll('.ai-provider-delete').forEach((button) => {
button.addEventListener('click', (e) => {
button.addEventListener('click', (e) => {
e.preventDefault();
e.preventDefault();
showDeleteModal(e);
showDeleteModal(e);
});
});
});
});
document.addEventListener(DynamicTable.Events.tableContentRefreshed, () => {
init();
}, {once: true});
};
};