34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { Channel } from '../data-types';
|
|
import ClientController from '../client-controller.js';
|
|
import BaseElements from './require/base-elements.js';
|
|
import IState from './require/elements-state.js';
|
|
|
|
import { $, $$, $$$, $$$$ } from './require/q-module';
|
|
|
|
class ShouldNeverHappenError extends Error {
|
|
constructor(...args: any[]) {
|
|
super(...args);
|
|
this.name = 'ShouldNeverHappenError';
|
|
}
|
|
}
|
|
|
|
export default function createUploadOverlayFromDataTransferItem(state: IState, server: ClientController, channel: Channel, dataTransferItem: DataTransferItem): HTMLElement {
|
|
const { document } = state;
|
|
$.setDocument(document);
|
|
|
|
let file = dataTransferItem.getAsFile();
|
|
if (file === null) throw new ShouldNeverHappenError('no file in the data transfer item');
|
|
let element = BaseElements.createUploadOverlay(document, {
|
|
server: server, channel: channel, resourceName: file.name,
|
|
resourceBuffFunc: async () => {
|
|
if (file === null) throw new ShouldNeverHappenError('no file in the data transfer item');
|
|
return Buffer.from(await file.arrayBuffer());
|
|
},
|
|
resourceSizeFunc: () => {
|
|
if (file === null) throw new ShouldNeverHappenError('no file in the data transfer item');
|
|
return file.size;
|
|
}
|
|
});
|
|
return element;
|
|
}
|