import React from 'react' import HTML5Backend from 'react-dnd-html5-backend' import { DragDropContext } from 'react-dnd' import Axios from 'axios' import domtoimage from 'dom-to-image' import Page from '../components/Page' import ReadFileDropContainer from '../components/ReadFileDropContainer' import Toolbar from '../components/Toolbar' import CodeImage from '../components/CodeImage' import api from '../lib/api' import { THEMES, LANGUAGES, PALETTE, DEFAULT_CODE } from '../lib/constants' class Editor extends React.Component { /* pathname, asPath, err, req, res */ static async getInitialProps ({ asPath }) { try { if (asPath !== '/') { const content = await api.getGist(asPath) return { content } } } catch (e) { console.log(e) } return {} } constructor() { super() this.state = { background: '#ABB8C3', theme: THEMES[0].id, language: 'javascript', // TODO LANGUAGES[0] dropShadow: true, windowControls: true, paddingVertical: '48px', paddingHorizontal: '32px' } } save () { // domtoimage.toPng(document.getElementById('container')) domtoimage.toPng(document.getElementById('container')) .then((dataUrl) => { const link = document.createElement('a') link.download = 'snippet.png' link.href = dataUrl link.click() }) } upload () { domtoimage.toBlob(document.getElementById('container')) .then(api.uploadImage) .then(res => res.data.id) .then(id => `http://i.imgur.com/${id}`) .then(console.log) } render () { return ( {/* TODO this doesn't update the render */} { console.log(droppedContent) this.setState({ droppedContent }) }} >
this.setState({ background: color })} onThemeChange={theme => this.setState({ theme: theme.id })} onLanguageChange={language => this.setState({ language })} onSettingsChange={(key, value) => this.setState({ [key]: value })} bg={this.state.background} enabled={this.state} /> {this.state.droppedContent || this.props.content || DEFAULT_CODE}
) } } export default DragDropContext(HTML5Backend)(Editor)