import $ from "jquery"; import _ from "underscore"; import { Toast } from "@/composables/toast"; import _l from "@/utils/localization"; import Modal from "@/utils/modal"; import mod_library_model from "./library-model"; let progress = 0; let items_total = 0; let progressStep = 0; const chain_call_control = {}; const modal = new Modal(); /** * Delete the selected items. Atomic. One by one. */ export function deleteSelectedItems(checkedRows, onRemove, refreshTable, refreshTableContent) { var dataset_ids = []; var folder_ids = []; if (checkedRows.length === 0) { Toast.info("You must select at least one item for deletion."); } else { var template = templateDeletingItemsProgressBar(); modal.show({ closing_events: true, title: _l("Deleting selected items"), body: template({}), buttons: { Close: () => { modal.hide(); }, }, }); // init the control counters chain_call_control.total_number = 0; chain_call_control.failed_number = 0; checkedRows.forEach((row) => { const row_id = row.id; if (row_id !== undefined) { if (row_id.substring(0, 1) == "F") { folder_ids.push(row_id); } else { dataset_ids.push(row_id); } } }); // init the progress bar items_total = dataset_ids.length + folder_ids.length; progressStep = 100 / items_total; progress = 0; // prepare the dataset items to be added var items_to_delete = []; for (let i = dataset_ids.length - 1; i >= 0; i--) { var dataset = new mod_library_model.Item({ id: dataset_ids[i], }); items_to_delete.push(dataset); } for (let i = folder_ids.length - 1; i >= 0; i--) { var folder = new mod_library_model.FolderAsModel({ id: folder_ids[i], }); items_to_delete.push(folder); } chain_call_control.total_number = items_total; // call the recursive function to call ajax one after each other (request FIFO queue) chainCallDeletingItems(items_to_delete, onRemove, refreshTable, refreshTableContent); } } function templateDeletingItemsProgressBar() { return _.template( `