import { MainImageManager as GalleryImage } from "./MainImageManager.js"; const MAX_GALLERY = 20; export function GalleryManager() { return { /** * All images uploaded. * @type {Array} */ images: [], /** * Forward to this.images.length * @returns {number} */ get number(){ return this.images.length; }, /** * Verify if all images has been uploaded or not. * @return {boolean} */ get allUploaded(){ for(const IMG of this.images){ if( IMG.serverFilePath == null ){ return false; } } return true; }, /** * Return if there is an error on an image or not. * * @returns {null|Array} */ get error(){ const RESPONSE = []; for( const IMG of this.images ){ if( IMG.error !== null ) RESPONSE.push( IMG.error ); } if( RESPONSE.length === 0 ) return null; return RESPONSE; }, /** * Superior or equal than 20. * @returns {boolean} */ get isFull(){ return this.images.length >= MAX_GALLERY; }, /** * Reload image if there is an error or edition. * * @param {Array} oldPaths */ init( oldPaths = null ){ if( oldPaths === null || oldPaths.length <= 0 ) return; for( const PATH of oldPaths ){ if( this.isFull ) break; const IMG = GalleryImage(); IMG.getOldImage( PATH ); this.images.push(IMG); } }, /** * Upload images, refresh the preview and store images if there is a problem. * * @param {Event} e * @returns {Promise} */ async handleSubmitFiles(e){ const FILES = e.target.files; if( !FILES || FILES.length <= 0 ) return; // No file uploaded. for( const FILE of FILES ){ if( this.isFull ) break; const IMG = GalleryImage(); IMG.name = FILE.name; IMG.type = FILE.type; this.images.push(IMG); const IMG_FROM_LIST = this.images[this.images.length - 1]; await IMG_FROM_LIST.uploadImageToTemporary( FILE ); await new Promise( resolve => { const READER = new FileReader(); READER.onload = (e2) => { IMG_FROM_LIST.preview = e2.target.result; resolve(); } READER.onerror = () => resolve(); READER.readAsDataURL(FILE); }); } }, /** * Remove specific file. * @param {number} index */ handleRemoveFile(index){ this.images[index].handleRemoveFile(null); this.images.splice(index, 1); } } }