formiojs
Version:
Common js library for client side interaction with <form.io>
160 lines (134 loc) • 4.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es.function.name.js");
var _uuid = require("uuid");
var _nativePromiseOnly = _interopRequireDefault(require("native-promise-only"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var indexeddb = function indexeddb() {
return {
title: 'indexedDB',
name: 'indexeddb',
uploadFile: function uploadFile(file, fileName, dir, progressCallback, url, options) {
var _this = this;
if (!('indexedDB' in window)) {
console.log('This browser doesn\'t support IndexedDB');
return;
}
return new _nativePromiseOnly.default(function (resolve) {
var request = indexedDB.open(options.indexeddb, 3);
request.onsuccess = function (event) {
var db = event.target.result;
resolve(db);
};
request.onupgradeneeded = function (e) {
var db = e.target.result;
db.createObjectStore(options.indexeddbTable);
};
}).then(function (db) {
var reader = new FileReader();
return new _nativePromiseOnly.default(function (resolve, reject) {
reader.onload = function () {
var blobObject = new Blob([file], {
type: file.type
});
var id = (0, _uuid.v4)(blobObject);
var data = {
id: id,
data: blobObject,
name: file.name,
size: file.size,
type: file.type,
url: url
};
var trans = db.transaction([options.indexeddbTable], 'readwrite');
var addReq = trans.objectStore(options.indexeddbTable).put(data, id);
addReq.onerror = function (e) {
console.log('error storing data');
console.error(e);
};
trans.oncomplete = function () {
resolve({
storage: 'indexeddb',
name: file.name,
size: file.size,
type: file.type,
url: url,
id: id
});
};
};
reader.onerror = function () {
return reject(_this);
};
reader.readAsDataURL(file);
});
});
},
downloadFile: function downloadFile(file, options) {
var _this2 = this;
return new _nativePromiseOnly.default(function (resolve) {
var request = indexedDB.open(options.indexeddb, 3);
request.onsuccess = function (event) {
var db = event.target.result;
resolve(db);
};
}).then(function (db) {
return new _nativePromiseOnly.default(function (resolve, reject) {
var trans = db.transaction([options.indexeddbTable], 'readonly');
var store = trans.objectStore(options.indexeddbTable).get(file.id);
store.onsuccess = function () {
trans.oncomplete = function () {
var result = store.result;
var dbFile = new File([store.result.data], file.name, {
type: store.result.type
});
var reader = new FileReader();
reader.onload = function (event) {
result.url = event.target.result;
result.storage = file.storage;
resolve(result);
};
reader.onerror = function () {
return reject(_this2);
};
reader.readAsDataURL(dbFile);
};
};
store.onerror = function () {
return reject(_this2);
};
});
});
},
deleteFile: function deleteFile(file, options) {
var _this3 = this;
return new _nativePromiseOnly.default(function (resolve) {
var request = indexedDB.open(options.indexeddb, 3);
request.onsuccess = function (event) {
var db = event.target.result;
resolve(db);
};
}).then(function (db) {
return new _nativePromiseOnly.default(function (resolve, reject) {
var trans = db.transaction([options.indexeddbTable], 'readwrite');
var store = trans.objectStore(options.indexeddbTable).delete(file.id);
store.onsuccess = function () {
trans.oncomplete = function () {
var result = store.result;
resolve(result);
};
};
store.onerror = function () {
return reject(_this3);
};
});
});
}
};
};
indexeddb.title = 'IndexedDB';
var _default = indexeddb;
exports.default = _default;