| Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/src/backend/ |
| Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/src/backend/remove-multiple.js |
import { ajax as Ajax, Runtime } from 'main.core';
import UploaderError from '../uploader-error';
import type UploaderFile from '../uploader-file';
import type Server from './server';
import type RemoveController from './remove-controller';
import type ServerLoadController from './server-load-controller';
type Queue = {
tasks: Array<{ controller: ServerLoadController, file: UploaderFile }>,
remove: Function,
xhr: XMLHttpRequest,
}
const queues: WeakMap<Server, Queue> = new WeakMap();
export function removeMultiple(controller: RemoveController, file: UploaderFile)
{
const server = controller.getServer();
let queue = queues.get(server);
if (!queue)
{
queue = {
tasks: [],
remove: Runtime.debounce(removeInternal, 1000, server),
xhr: null,
};
queues.set(server, queue);
}
queue.tasks.push({ controller, file });
queue.remove();
}
function removeInternal()
{
const server: Server = this;
const queue = queues.get(server);
if (!queue)
{
return;
}
const { tasks } = queue;
queues.delete(server);
const fileIds = [];
tasks.forEach(task => {
const file: UploaderFile = task.file;
if (file.getServerId() !== null)
{
fileIds.push(file.getServerId());
}
});
if (fileIds.length === 0)
{
return;
}
const controllerOptions = server.getControllerOptions();
Ajax.runAction('ui.fileuploader.remove', {
data: {
fileIds: fileIds,
},
getParameters: {
controller: server.getController(),
controllerOptions: controllerOptions ? JSON.stringify(controllerOptions) : null,
},
onrequeststart: (xhr) => {
queue.xhr = xhr;
},
})
.then(response => {
if (response.data?.files)
{
const fileResults = {};
response.data.files.forEach((fileResult) => {
fileResults[fileResult.id] = fileResult;
});
tasks.forEach(task => {
const { controller, file } = task;
const fileResult = fileResults[file.getServerId()] || null;
if (fileResult && fileResult.success)
{
controller.emit('onRemove', { fileId: fileResult.id });
}
else
{
const error = UploaderError.createFromAjaxErrors(fileResult?.errors);
controller.emit('onError', { error });
}
});
}
else
{
const error = new UploaderError('SERVER_ERROR');
tasks.forEach(task => {
const { controller } = task;
controller.emit('onError', { error: error.clone() });
});
}
})
.catch(response => {
const error = UploaderError.createFromAjaxErrors(response.errors);
tasks.forEach(task => {
const { controller } = task;
controller.emit('onError', { error: error.clone() });
});
})
;
}