AutorÃa | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.import PluginManagementTable from 'core_admin/plugin_management_table';import {call as fetchMany} from 'core/ajax';import {refreshTableContent} from 'core_table/dynamic';import Pending from 'core/pending';import {fetchNotifications} from 'core/notification';import {prefetchStrings} from 'core/prefetch';import {getString} from 'core/str';import DeleteCancelModal from 'core/modal_delete_cancel';import ModalEvents from 'core/modal_events';let watching = false;/*** Handles setting plugin state for the AI provider management table.** @module core_ai/aiprovider_instance_management_table* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/export default class extends PluginManagementTable {constructor() {super();this.addClickHandler(this.handleDelete);}/*** Initialise an instance of the class.** This is just a way of making it easier to initialise an instance of the class from PHP.*/static init() {if (watching) {return;}prefetchStrings('core_ai', ['providerinstancedelete','providerinstancedeleteconfirm',]);watching = true;new this();}/*** Call the delete service.** @param {string} methodname The web service to call* @param {number} providerid The provider id.* @return {Promise} The promise.*/deleteProvider(methodname, providerid) {return fetchMany([{methodname,args: {providerid,},}])[0];}/*** Handle delete.** @param {HTMLElement} tableRoot* @param {Event} e*/async handleDelete(tableRoot, e) {const deleteElement = e.target.closest('[data-delete-method]');if (deleteElement) {e.preventDefault();const providerId = e.target.dataset.id;const deleteMethod = e.target.dataset.deleteMethod;const bodyParams = {provider: e.target.dataset.provider,name: e.target.dataset.name,};const modal = await DeleteCancelModal.create({title: getString('providerinstancedelete', 'core_ai'),body: getString('providerinstancedeleteconfirm', 'core_ai', bodyParams),show: true,removeOnClose: true,});// Handle delete event.modal.getRoot().on(ModalEvents.delete, async(e) => {e.preventDefault();const pendingPromise = new Pending('core_table/dynamic:deleteProvider');await this.deleteProvider(deleteMethod, providerId);// Reload the table, so we get the updated list of providers, and any messages.await Promise.all([refreshTableContent(tableRoot),fetchNotifications(),]);modal.destroy();pendingPromise.resolve();});}}}