import { h, Component } from 'preact'; import { updater, toggle, When } from '../../lib/util'; import Fab from '../fab'; import Header from '../header'; // import Drawer from 'async!../drawer'; import Home from '../home'; import * as style from './style.scss'; type Props = { url?: String } type FileObj = { id: any, data: any, error: Error | DOMError | String, file: File, loading: Boolean }; type State = { showDrawer: Boolean, showFab: Boolean, files: FileObj[] }; let counter = 0; export default class App extends Component { state: State = { showDrawer: false, showFab: true, files: [] }; loadFile = (file: File) => { let fileObj = { id: ++counter, file, error: null, loading: true, data: null }; this.setState({ files: [fileObj] }); let fr = new FileReader(); // fr.readAsArrayBuffer(); fr.onerror = () => { let files = this.state.files.slice(); files.splice(0, files.indexOf(fileObj), { ...fileObj, error: fr.error, loading: false }); this.setState({ files }); }; fr.onloadend = () => { let files = this.state.files.slice(); files.splice(0, files.indexOf(fileObj), { ...fileObj, data: fr.result, loading: false }); this.setState({ files }); }; fr.readAsDataURL(file); }; enableDrawer = false; openDrawer = updater(this, 'showDrawer', true); closeDrawer = updater(this, 'showDrawer', false); toggleDrawer = updater(this, 'showDrawer', toggle); openFab = updater(this, 'showFab', true); closeFab = updater(this, 'showFab', false); toggleFab = updater(this, 'showFab', toggle); render({ url }, { showDrawer, showFab, files }) { if (showDrawer) this.enableDrawer = true; return (
{/* Avoid loading & rendering the drawer until the first time it is shown. */} {/* */} {/* Note: this is normally where a with auto code-splitting goes. Since we don't seem to need one (yet?), it's omitted. */}
{/* This ends up in the body when prerendered, which makes it load async. */}
); } }