|
|
@ -4,7 +4,7 @@ import React from 'react'
|
|
|
|
import domtoimage from 'dom-to-image'
|
|
|
|
import domtoimage from 'dom-to-image'
|
|
|
|
import Spinner from 'react-spinner'
|
|
|
|
import Spinner from 'react-spinner'
|
|
|
|
import dynamic from 'next/dynamic'
|
|
|
|
import dynamic from 'next/dynamic'
|
|
|
|
import Dropzone from 'react-dropzone'
|
|
|
|
import Dropzone from 'dropperx'
|
|
|
|
|
|
|
|
|
|
|
|
// Ours
|
|
|
|
// Ours
|
|
|
|
import Button from './Button'
|
|
|
|
import Button from './Button'
|
|
|
@ -243,14 +243,6 @@ class Editor extends React.Component {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
onDrop([file]) {
|
|
|
|
onDrop([file]) {
|
|
|
|
if (!file) return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const reader = new FileReader()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO abstract this into Dropperx
|
|
|
|
|
|
|
|
reader.onload = event => {
|
|
|
|
|
|
|
|
file.content = event.target.result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isImage(file)) {
|
|
|
|
if (isImage(file)) {
|
|
|
|
this.updateState({
|
|
|
|
this.updateState({
|
|
|
|
backgroundImage: file.content,
|
|
|
|
backgroundImage: file.content,
|
|
|
@ -263,13 +255,6 @@ class Editor extends React.Component {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (isImage(file)) {
|
|
|
|
|
|
|
|
reader.readAsDataURL(file)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
reader.readAsText(file, 'UTF-8')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updateTheme(theme) {
|
|
|
|
updateTheme(theme) {
|
|
|
|
this.updateSetting('theme', theme)
|
|
|
|
this.updateSetting('theme', theme)
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -338,11 +323,7 @@ class Editor extends React.Component {
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<React.Fragment>
|
|
|
|
<React.Fragment>
|
|
|
|
<Dropzone accept="image/*, text/*, application/*" onDrop={this.onDrop}>
|
|
|
|
<div className="editor">
|
|
|
|
{({ getRootProps, isDragAccept }) => {
|
|
|
|
|
|
|
|
const root = getRootProps()
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
<div className="editor" {...root}>
|
|
|
|
|
|
|
|
<Toolbar>
|
|
|
|
<Toolbar>
|
|
|
|
<Themes key={theme} updateTheme={this.updateTheme} theme={theme} />
|
|
|
|
<Themes key={theme} updateTheme={this.updateTheme} theme={theme} />
|
|
|
|
<Dropdown
|
|
|
|
<Dropdown
|
|
|
@ -393,9 +374,11 @@ class Editor extends React.Component {
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</Toolbar>
|
|
|
|
</Toolbar>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Dropzone accept="image/*, text/*, application/*" onDrop={this.onDrop}>
|
|
|
|
|
|
|
|
{({ canDrop }) => (
|
|
|
|
<Overlay
|
|
|
|
<Overlay
|
|
|
|
isOver={isDragAccept}
|
|
|
|
isOver={canDrop}
|
|
|
|
title={`Drop your file here to import ${isDragAccept ? '✋' : '✊'}`}
|
|
|
|
title={`Drop your file here to import ${canDrop ? '✋' : '✊'}`}
|
|
|
|
>
|
|
|
|
>
|
|
|
|
{/*key ensures Carbon's internal language state is updated when it's changed by Dropdown*/}
|
|
|
|
{/*key ensures Carbon's internal language state is updated when it's changed by Dropdown*/}
|
|
|
|
<Carbon
|
|
|
|
<Carbon
|
|
|
@ -410,14 +393,12 @@ class Editor extends React.Component {
|
|
|
|
{code != null ? code : DEFAULT_CODE}
|
|
|
|
{code != null ? code : DEFAULT_CODE}
|
|
|
|
</Carbon>
|
|
|
|
</Carbon>
|
|
|
|
</Overlay>
|
|
|
|
</Overlay>
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
)
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
</Dropzone>
|
|
|
|
</Dropzone>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<style jsx>
|
|
|
|
<style jsx>
|
|
|
|
{`
|
|
|
|
{`
|
|
|
|
.editor {
|
|
|
|
.editor {
|
|
|
|
outline: none;
|
|
|
|
|
|
|
|
background: ${COLORS.BLACK};
|
|
|
|
background: ${COLORS.BLACK};
|
|
|
|
border: 3px solid ${COLORS.SECONDARY};
|
|
|
|
border: 3px solid ${COLORS.SECONDARY};
|
|
|
|
border-radius: 8px;
|
|
|
|
border-radius: 8px;
|
|
|
|