import { calculate as calculateHashes } from "../hashes.js"; export function HashesManager( wire ) { return { /** * Wire variable instance. */ $wire: wire, /** * If a file hash is currently calculated or not. * @type {boolean} */ isCalculating: false, /** * An error on hash calculation. * @type {any|null} */ error: null, async handleSubmitFile(){ if( this.isCalculating === true ) // Calculation already done for another file. return; this.error = null; // Reset. const FILE = await this.openFileInput(); if( !FILE ) return; // No file sent. this.isCalculating = true; try { const RESULT = await calculateHashes(FILE); await this.$wire.addHash(RESULT.filename, RESULT.crc32, RESULT.sha1); // Send a signal to livewire. } catch(err) { this.error = err.message; } finally { this.isCalculating = false; } }, /** * Open a specific file. * @returns {Promise} */ async openFileInput(){ return new Promise(resolve => { const input = document.createElement("input"); input.type = "file"; input.onchange = () => resolve(input.files[0] ?? null ); input.oncancel = () => resolve(null); input.click(); }); } } }