diff --git a/components/Carbon.js b/components/Carbon.js
index cd31b3f..b81c1f5 100644
--- a/components/Carbon.js
+++ b/components/Carbon.js
@@ -1,4 +1,4 @@
-import React, { PureComponent } from 'react'
+import React from 'react'
import * as hljs from 'highlight.js'
import ResizeObserver from 'resize-observer-polyfill'
import debounce from 'lodash.debounce'
@@ -23,7 +23,7 @@ const handleLanguageChange = (newCode, props) => {
return { language: props.config.language }
}
-class Carbon extends PureComponent {
+class Carbon extends React.PureComponent {
constructor(props) {
super(props)
diff --git a/components/Collapse.js b/components/Collapse.js
index d925d7b..d6b38c3 100644
--- a/components/Collapse.js
+++ b/components/Collapse.js
@@ -1,20 +1,15 @@
import React from 'react'
import Toggle from './Toggle'
-class Collapse extends React.Component {
- constructor(props) {
- super(props)
- this.state = {
- open: false
- }
- }
+import { toggle } from '../lib/util'
- toggle = () => {
- this.setState(state => ({
- open: !state.open
- }))
+class Collapse extends React.PureComponent {
+ state = {
+ open: false
}
+ toggle = () => this.setState(toggle('open'))
+
render() {
if (this.state.open) {
return this.props.children
diff --git a/components/Dropdown.js b/components/Dropdown.js
index ff95533..ef31c68 100644
--- a/components/Dropdown.js
+++ b/components/Dropdown.js
@@ -1,11 +1,11 @@
-import React, { PureComponent } from 'react'
+import React from 'react'
import Downshift from 'downshift'
import matchSorter from 'match-sorter'
import ArrowDown from './svg/Arrowdown'
import CheckMark from './svg/Checkmark'
import { COLORS } from '../lib/constants'
-class Dropdown extends PureComponent {
+class Dropdown extends React.PureComponent {
state = {
inputValue: this.props.selected.name,
itemsToShow: this.props.list
diff --git a/components/Editor.js b/components/Editor.js
index 0c05359..5942454 100644
--- a/components/Editor.js
+++ b/components/Editor.js
@@ -121,10 +121,10 @@ class Editor extends React.Component {
// if safari, get image from api
const isPNG = format !== 'svg'
if (
- this.props.api.image,
+ (this.props.api.image,
navigator.userAgent.indexOf('Safari') !== -1 &&
- navigator.userAgent.indexOf('Chrome') === -1 &&
- isPNG
+ navigator.userAgent.indexOf('Chrome') === -1 &&
+ isPNG)
) {
const encodedState = serializeState(this.state)
return this.props.api.image(encodedState)
diff --git a/components/ExportSizeSelect.js b/components/ExportSizeSelect.js
index 4318ee9..40a7787 100644
--- a/components/ExportSizeSelect.js
+++ b/components/ExportSizeSelect.js
@@ -2,7 +2,7 @@ import React from 'react'
import Checkmark from './svg/Checkmark'
import { EXPORT_SIZES, COLORS } from '../lib/constants'
-export default class extends React.Component {
+class ExportSizeSelect extends React.Component {
constructor(props) {
super(props)
this.state = { isVisible: false }
@@ -91,3 +91,5 @@ export default class extends React.Component {
)
}
}
+
+export default ExportSizeSelect
diff --git a/components/ImagePicker.js b/components/ImagePicker.js
index 9f36ed8..d740554 100644
--- a/components/ImagePicker.js
+++ b/components/ImagePicker.js
@@ -120,7 +120,7 @@ export default class extends React.Component {
Click the button below to upload a background image:
diff --git a/components/Language.js b/components/Language.js
deleted file mode 100644
index 090abcc..0000000
--- a/components/Language.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-
-export default ({ language }) => (
-
- {language.name}
-
-
-)
diff --git a/components/Meta.js b/components/Meta.js
index f6e5ddb..c6b57c3 100644
--- a/components/Meta.js
+++ b/components/Meta.js
@@ -10,7 +10,7 @@ const CDN_STYLESHEETS = THEMES.filter(
t => t.hasStylesheet !== false && LOCAL_STYLESHEETS.indexOf(t.id) < 0
)
-export default () => {
+export default function Meta() {
const onBrowser = typeof window !== 'undefined'
return (
diff --git a/components/RandomImage.js b/components/RandomImage.js
index af518de..ffcd111 100644
--- a/components/RandomImage.js
+++ b/components/RandomImage.js
@@ -28,7 +28,6 @@ class RandomImage extends React.Component {
}
cache = []
- imageUrls = {}
// fetch images in browser (we require window.FileReader)
componentDidMount() {
@@ -43,6 +42,10 @@ class RandomImage extends React.Component {
}
selectImage() {
+ if (this.state.loading) {
+ return
+ }
+
const image = this.cache[this.state.cacheIndex]
this.setState({ loading: true })
@@ -61,9 +64,11 @@ class RandomImage extends React.Component {
}
nextImage() {
- if (this.state.loading) return
+ if (this.state.loading) {
+ return
+ }
- this.setState({ cacheIndex: this.state.cacheIndex + 1 })
+ this.setState(state => ({ cacheIndex: state.cacheIndex + 1 }))
if (this.state.cacheIndex > this.cache.length - 2) {
this.updateCache()
diff --git a/components/Settings.js b/components/Settings.js
index ec18dee..b8e94f7 100644
--- a/components/Settings.js
+++ b/components/Settings.js
@@ -10,7 +10,7 @@ import WindowPointer from './WindowPointer'
import Collapse from './Collapse'
import { COLORS } from '../lib/constants'
-import { formatCode } from '../lib/util'
+import { toggle, formatCode } from '../lib/util'
class Settings extends React.Component {
constructor(props) {
@@ -23,7 +23,7 @@ class Settings extends React.Component {
}
toggle() {
- this.setState({ isVisible: !this.state.isVisible })
+ this.setState(toggle('isVisible'))
}
handleClickOutside() {
diff --git a/components/Slider.js b/components/Slider.js
index 1ce0231..2f4574c 100644
--- a/components/Slider.js
+++ b/components/Slider.js
@@ -1,6 +1,6 @@
import React from 'react'
-export default class extends React.Component {
+class Slider extends React.Component {
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
@@ -77,3 +77,5 @@ export default class extends React.Component {
)
}
}
+
+export default Slider
diff --git a/components/ThemeSelect.js b/components/ThemeSelect.js
index f25b05c..2019085 100644
--- a/components/ThemeSelect.js
+++ b/components/ThemeSelect.js
@@ -5,13 +5,8 @@ import { COLORS } from '../lib/constants'
const WINDOW_THEMES_MAP = { none: None, sharp: Sharp, bw: BW }
export const WINDOW_THEMES = Object.keys(WINDOW_THEMES_MAP)
-export default class extends React.Component {
- constructor(props) {
- super(props)
- this.select = this.select.bind(this)
- }
-
- select(theme) {
+class ThemeSelect extends React.Component {
+ select = theme => {
if (this.props.selected !== theme) {
this.props.onChange(theme)
}
@@ -76,3 +71,5 @@ export default class extends React.Component {
)
}
}
+
+export default ThemeSelect
diff --git a/components/Toggle.js b/components/Toggle.js
index 0fac015..c6b7df0 100644
--- a/components/Toggle.js
+++ b/components/Toggle.js
@@ -1,15 +1,8 @@
import React from 'react'
import Checkmark from './svg/Checkmark'
-export default class extends React.Component {
- constructor(props) {
- super(props)
- this.toggle = this.toggle.bind(this)
- }
-
- toggle() {
- this.props.onChange(!this.props.enabled)
- }
+class Toggle extends React.PureComponent {
+ toggle = () => this.props.onChange(!this.props.enabled)
render() {
return (
@@ -32,3 +25,5 @@ export default class extends React.Component {
)
}
}
+
+export default Toggle
diff --git a/lib/util.js b/lib/util.js
index 1f80ffe..a7082f7 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -12,6 +12,8 @@ const parse = v => {
}
}
+export const toggle = stateField => state => ({ [stateField]: !state[stateField] })
+
// https://gist.github.com/alexgibson/1704515
// TODO use https://github.com/sindresorhus/escape-goat/
export const escapeHtml = s => {
diff --git a/package.json b/package.json
index a9fa743..8344959 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
"export": "next export",
"test": "npm run cy:run --",
"deploy": "now",
- "prettier": "prettier --config .prettierrc --write *.js {components,api,lib,pages}/**/*.js",
+ "prettier": "prettier --config .prettierrc --write {.,components,api,lib,pages}/*.js {components,api,lib,pages}/**/*.js",
"lint": "eslint components/*.js lib/*.js pages/*.js api/handlers/*.js api/*.js",
"precommit": "npm run contrib:build && git add README.md && lint-staged",
"contrib:add": "all-contributors add",
@@ -65,7 +65,7 @@
},
"lint-staged": {
"*.js": [
- "prettier",
+ "prettier --write",
"git add"
]
},
diff --git a/pages/about.js b/pages/about.js
index 8de9f84..39f2eb5 100644
--- a/pages/about.js
+++ b/pages/about.js
@@ -47,9 +47,11 @@ export default () => (
If you use the 'Tweet' button, Carbon will automatically make your image
- accessible. However, if you want to manually tweet your carbon image, please check
- out this page
- {' '}to found out how to make your Twitter images accessible.
+ accessible. However, if you want to manually tweet your carbon image, please check out{' '}
+
+ this page
+ {' '}
+ to found out how to make your Twitter images accessible.
diff --git a/pages/index.js b/pages/index.js
index 82f04c1..bb63594 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,6 +1,6 @@
// Theirs
import React from 'react'
-import { withRouter } from "next/router";
+import { withRouter } from 'next/router'
// Ours
import Editor from '../components/Editor'
@@ -28,4 +28,4 @@ function onEditorUpdate(state) {
saveState(localStorage, s)
}
-export default withRouter(Index);
+export default withRouter(Index)