UNPKG

@eixox/jetfuel-firebase-react

Version:
69 lines (64 loc) 2.13 kB
import firebase from "firebase"; import Xsettings from "./Xsettings.js"; const firebaseStorageReference = Xsettings.firebase.storage().ref(); /** * A simple storage handling class for the firebase storage; */ export default class XfirebaseStorage { /** * Initializes the class; */ constructor() { this.uploads = []; } buildUploadTask(upload) { var childRef = firebaseStorageReference.child(upload.name); switch (upload.type) { case "text": case "content": case "string": return childRef.putString(upload.content); case "data_url": case "dataUrl": return childRef.putString(upload.content, "data_url"); case "base64url": return childRef.putString(upload.content, "base64url"); case "base64": return childRef.putString(upload.content, "base64"); default: return childRef.put(upload.content, upload.metadata); } } upload(upload) { upload.owner = this; upload.task = this.buildUploadTask(upload); upload.task.on( firebase.storage.TaskEvent.STATE_CHANGED, function(snapshot) { if (upload.onProgress) upload.onProgress(upload, snapshot); if (upload.owner.onProgress) upload.owner.onProgress(upload, snapshot); }, function(error) { if (upload.onError) upload.onError(upload, error); if (upload.owner.onError) upload.owner.onError(upload, error); }, function() { upload.downloadURL = upload.task.snapshot.downloadURL; if (upload.onComplete) upload.onComplete(upload, upload.task.snapshot); if (upload.owner.onComplete) upload.owner.onComplete(upload, upload.task.snapshot); for (var i = 0; i < upload.owner.uploads.length; i++) if (upload.owner.uploads[i] === upload) { upload.owner.uploads.splice(i, 1); break; } } ); upload.getProgress = function() { var snapshot = this.task.snapshot; return snapshot.bytesTransferred / snapshot.totalBytes * 100; }; this.uploads.push(upload); return upload; } }