@eixox/jetfuel-firebase-react
Version:
Our jetfuel lib to connect react to firebase
69 lines (64 loc) • 2.13 kB
JavaScript
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;
}
}