122 lines
3.6 KiB
React
122 lines
3.6 KiB
React
|
|
||
|
|
||
|
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>
|
||
|
)
|
||
|
}
|
||
|
}
|