wochenbericht-manager/src/jsx/ui/fileLoader.jsx

122 lines
3.6 KiB
JavaScript

import React from 'react';
import {DB} from '../static/storage'
//var SQL = require('sql.js');
//const moment = require('moment');
var BASE64_MARKER = ';base64,';
function convertDataURIToBinary(dataURI) {
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
export class FileLoader extends React.Component {
constructor(props) {
super(props);
this.handleFileSelect = this.handleFileSelect.bind(this);
this.createNew = this.createNew.bind(this);
}
b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
/*if (!f.type.match('image.*')) {
continue;
}*/
console.log(f.type)
var reader = new FileReader();
// Closure to capture the file information.
var me = this;
reader.onload = (function (theFile) {
return function (e) {
// Render thumbnail.
console.log(e.target.result)
console.log(theFile)
var blob = me.b64toBlob(e.target.result.split('base64,')[1],theFile.type);
console.log(blob)
//var fi = new FileReader();
//var f_ = fi.readAsDataURL(e.target.result);
var uInt8Array = new Uint8Array(convertDataURIToBinary(e.target.result));
DB.loadDB(uInt8Array);
//DB.loadDate('2018-06-25 22:00:00.000 +00:00');
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
console.log(f)
}
}
createNew(){
DB.newDB();
}
render() {
return (
<div id="fileloader-frame">
<div className="contents">
<button onClick={this.createNew}>Neue Wochenberichtsmappe</button>
<hr/>
<input type="file" id="files" name="files[]" onChange={this.handleFileSelect}/>
<output id="list"></output>
<hr/>
Erstellt von:<br/><a rel="noopener noreferrer" target="_blank" href="https://lucajaents.ch">Luca Jäntsch</a>
</div>
</div>);
}
}
export class Export extends React.Component{
constructor(props){
super(props);
this.state = {
}
}
render(){
return (
<div>
</div>
)
}
}