Browse Source

Remove app devtools

master
Gaëtan Renaudeau 7 years ago
parent
commit
d7ab8c4128
  1. 2
      src/components/App.js
  2. 298
      src/components/DevTools.js
  3. 29
      src/components/layout/Dev.js
  4. 43
      src/helpers/cpuUsage.js
  5. 20
      src/internals/index.js
  6. 57
      src/main/app.js
  7. 11
      src/main/bridge.js
  8. 9
      src/main/menu.js

2
src/components/App.js

@ -16,7 +16,6 @@ import Onboarding from 'components/Onboarding'
import ThrowBlock from 'components/ThrowBlock'
import Default from 'components/layout/Default'
import Dev from 'components/layout/Dev'
import Print from 'components/layout/Print'
import CounterValues from 'helpers/countervalues'
import { BridgeSyncProvider } from 'bridge/BridgeSyncContext'
@ -41,7 +40,6 @@ const App = ({
<Onboarding />
<ConnectedRouter history={history}>
<Switch>
{(__DEV__ || DEV_TOOLS) && <Route path="/dev" component={Dev} />}
<Route path="/print" component={Print} />
<Route component={Default} />
</Switch>

298
src/components/DevTools.js

@ -1,298 +0,0 @@
// @flow
/* eslint-disable import/no-named-as-default-member */
import React, { PureComponent } from 'react'
import { remote, ipcRenderer } from 'electron'
import { translate } from 'react-i18next'
import styled from 'styled-components'
import color from 'color'
import fs from 'fs'
import path from 'path'
import takeRight from 'lodash/takeRight'
import last from 'lodash/last'
import reduce from 'lodash/fp/reduce'
import flow from 'lodash/fp/flow'
import filter from 'lodash/fp/filter'
import sortBy from 'lodash/fp/sortBy'
import chunk from 'lodash/chunk'
import Chart from 'components/base/Chart'
import Box from 'components/base/Box'
import Bar from 'components/base/Bar'
import CopyToClipboard from 'components/base/CopyToClipboard'
import staticPath from 'helpers/staticPath'
import theme from 'styles/theme'
const getLanguages = p => fs.readdirSync(p).filter(f => fs.statSync(path.join(p, f)).isDirectory())
const languages = getLanguages(path.join(staticPath, '/i18n'))
const mainWindow = remote.BrowserWindow.getAllWindows().find(w => w.name === 'MainWindow')
type HslColor = {
color: Array<number>,
}
type ColorType = {
name: string,
val: string,
isDark: boolean,
color: {
isDark: () => boolean,
hsl: () => HslColor,
},
}
type SimpleType = {
name: string,
val: string,
}
const transform = flow(
reduce.convert({ cap: false })((acc, cur, key) => {
const c = color(cur)
return [
...acc,
{
name: key,
val: cur,
color: c,
isDark: c.isDark(),
},
]
}, []),
filter(el => el.name !== 'transparent'),
sortBy(el => el.color.hsl().color[2]),
)
const colors: Array<ColorType> = transform(theme.colors)
const spaces: Array<SimpleType> = theme.space.map((s, i) => ({
name: s.toString(),
val: i.toString(),
}))
const fontSizes: Array<SimpleType> = theme.fontSizes.map((s, i) => ({
name: s.toString(),
val: i.toString(),
}))
const Container = styled(Box).attrs({
bg: 'dark',
p: 5,
grow: true,
color: 'white',
fontSize: 3,
})``
const Title = styled(Box).attrs({
color: 'white',
})`
text-transform: uppercase;
`
const Items = styled(Box).attrs({
horizontal: true,
flow: 4,
})``
const Item = styled(Box).attrs({
alignItems: 'center',
bg: 'dark',
borderRadius: 1,
color: 'white',
justifyContent: 'center',
py: 2,
px: 4,
})`
border: 2px solid ${p => p.theme.colors.white};
flex: 1;
overflow: hidden;
cursor: pointer;
`
type State = {
cpuUsage: Object,
}
class DevTools extends PureComponent<any, State> {
state = {
cpuUsage: {},
}
componentDidMount() {
ipcRenderer.on('msg', this.handleMessage)
}
componentWillUnmount() {
ipcRenderer.removeListener('msg', this.handleMessage)
}
handleMessage = (e: any, { type, data }: Object) => {
if (type === 'usage.cpu') {
this.setState(prev => ({
cpuUsage: {
...prev.cpuUsage,
[data.name]: takeRight(
[
...(prev.cpuUsage[data.name] || []),
{
date: new Date().getTime().toString(),
value: parseFloat(data.value),
},
],
10,
),
},
}))
}
}
handleChangeLanguage = lang => () => {
mainWindow.webContents.send('msg', {
type: 'application.changeLanguage',
data: lang,
})
}
handleStartSync = () =>
mainWindow.webContents.send('msg', {
type: 'accounts.sync.start',
})
handleStopSync = () =>
mainWindow.webContents.send('msg', {
type: 'accounts.sync.stop',
})
render() {
const { cpuUsage } = this.state
return (
<Container>
<Box grow flow={4}>
<Section title="Colors">
{chunk(colors, 5).map((c, i) => (
<Items
key={i} // eslint-disable-line react/no-array-index-key
>
{c.map(color => (
<CopyToClipboard
key={color.name}
data={color.name}
render={copy => <Color color={color} onClick={copy} />}
/>
))}
</Items>
))}
</Section>
<Section title="Space">
{chunk(spaces, 5).map((s, i) => (
<Items
key={i} // eslint-disable-line react/no-array-index-key
>
{s.map(space => (
<CopyToClipboard
key={space.val}
data={space.val}
render={copy => <Item onClick={copy}>{space.name}</Item>}
/>
))}
</Items>
))}
</Section>
<Section title="Font Sizes">
{chunk(fontSizes, 5).map((f, i) => (
<Items
key={i} // eslint-disable-line react/no-array-index-key
>
{f.map(fontSize => (
<CopyToClipboard
key={fontSize.val}
data={fontSize.val}
render={copy => <Item onClick={copy}>{fontSize.name}</Item>}
/>
))}
</Items>
))}
</Section>
<Bar size={2} color="white" />
<Section title="Languages" horizontal>
{languages.map(lang => (
<Item key={lang} onClick={this.handleChangeLanguage(lang)} style={{ flex: 0 }}>
{lang}
</Item>
))}
</Section>
<Bar size={2} color="white" />
<Section title="Sync Accounts" horizontal>
<Item onClick={this.handleStartSync} style={{ flex: 0 }}>
Start
</Item>
<Item onClick={this.handleStopSync} style={{ flex: 0 }}>
Stop
</Item>
</Section>
<Bar size={2} color="white" />
<Section title="CPU Usage">
{chunk(Object.keys(cpuUsage).sort(), 2).map((l, i) => (
<Items
key={i} // eslint-disable-line react/no-array-index-key
>
{l.map(k => (
<Box key={k} style={{ flex: 1 }}>
<Box horizontal alignItems="center" flow={2}>
<Box fontSize={1}>{last(cpuUsage[k]).value}%</Box>
<Box>{k}</Box>
</Box>
<Box>
<Chart
id={k}
data={cpuUsage[k]}
dateFormat="%Q"
color="#8884d8"
height={50}
hideAxis
isInteractive={false}
/>
</Box>
</Box>
))}
</Items>
))}
</Section>
</Box>
</Container>
)
}
}
const Color = ({ onClick, color }: { onClick: Function, color: ColorType }) => (
<Item bg={color.val} color={color.isDark ? 'white' : 'dark'} onClick={onClick}>
{color.name}
</Item>
)
const Section = ({
title,
children,
horizontal,
}: {
title: string,
children: any,
horizontal?: boolean,
}) => (
<Box flow={2}>
<Title>{title}</Title>
<Box flow={4} horizontal={horizontal}>
{children}
</Box>
</Box>
)
Section.defaultProps = {
horizontal: false,
}
export default translate()(DevTools)

29
src/components/layout/Dev.js

@ -1,29 +0,0 @@
// @flow
import React, { PureComponent } from 'react'
import styled from 'styled-components'
import Box from 'components/base/Box'
import GrowScroll from 'components/base/GrowScroll'
import DevTools from 'components/DevTools'
const Container = styled(Box).attrs({
grow: true,
})`
height: 100%;
`
class Dev extends PureComponent<{}> {
render() {
return (
<Container>
<GrowScroll>
<DevTools />
</GrowScroll>
</Container>
)
}
}
export default Dev

43
src/helpers/cpuUsage.js

@ -1,43 +0,0 @@
const TIMEOUT_CPU_USAGE = 5e3
const wait = ms => new Promise(resolve => setTimeout(resolve, ms))
const cpuUsage = async (startTime, startUsage) => {
await wait(500)
const newStartTime = process.hrtime()
const newStartUsage = process.cpuUsage()
const elapTime = process.hrtime(startTime)
const elapUsage = process.cpuUsage(startUsage)
startTime = newStartTime
startUsage = newStartUsage
const elapTimeMS = elapTime[0] * 1e3 + elapTime[1] / 1e6
const elapUserMS = elapUsage.user / 1e3
const elapSystMS = elapUsage.system / 1e3
const cpuPercent = (100 * (elapUserMS + elapSystMS) / elapTimeMS).toFixed(1)
return {
cpuPercent,
newStartTime: startTime,
newStartUsage: startUsage,
}
}
export default callback => {
const initCpuUsage = async (startTime, startUsage) => {
const { cpuPercent, newStartTime, newStartUsage } = await cpuUsage(startTime, startUsage)
callback(cpuPercent)
setTimeout(() => initCpuUsage(newStartTime, newStartUsage), TIMEOUT_CPU_USAGE)
}
const startTime = process.hrtime()
const startUsage = process.cpuUsage()
initCpuUsage(startTime, startUsage)
}

20
src/internals/index.js

@ -3,12 +3,10 @@
import objectPath from 'object-path'
import capitalize from 'lodash/capitalize'
import cpuUsage from 'helpers/cpuUsage'
require('../env')
require('../init-sentry')
const { DEV_TOOLS, FORK_TYPE } = process.env
const { FORK_TYPE } = process.env
process.title = `${require('../../package.json').productName} ${capitalize(FORK_TYPE)}`
@ -44,19 +42,3 @@ process.on('message', payload => {
handler(sendEvent, data)
}
})
if (__DEV__ || DEV_TOOLS) {
cpuUsage(cpuPercent =>
sendEvent(
'usage.cpu',
{
name: FORK_TYPE,
value: cpuPercent,
},
{
window: 'DevWindow',
kill: false,
},
),
)
}

57
src/main/app.js

@ -15,13 +15,7 @@ let mainWindow = null
let forceClose = false
const {
UPGRADE_EXTENSIONS,
ELECTRON_WEBPACK_WDS_PORT,
DEV_TOOLS,
DEV_TOOLS_MODE,
HIDE_DEV_WINDOW,
} = process.env
const { UPGRADE_EXTENSIONS, ELECTRON_WEBPACK_WDS_PORT, DEV_TOOLS, DEV_TOOLS_MODE } = process.env
const devTools = __DEV__ || DEV_TOOLS
@ -204,51 +198,6 @@ function createMainWindow() {
return window
}
function createDevWindow() {
const MIN_HEIGHT = 500
const MIN_WIDTH = 360
const savedPositions = db.getIn('settings', 'window.DevWindow.positions', null)
const width = MIN_WIDTH
const height = MIN_HEIGHT
const windowOptions = {
...defaultWindowOptions,
...(savedPositions !== null ? savedPositions : {}),
fullscreenable: false,
resizable: false,
height,
minHeight: MIN_HEIGHT,
minWidth: MIN_WIDTH,
show: false,
skipTaskbar: true,
title: 'Dev Tools',
width,
}
const window = new BrowserWindow(windowOptions)
window.name = 'DevWindow'
const url = getDefaultUrl()
saveWindowSettings(window)
window.loadURL(`${url}#/dev`)
window.setMenu(null)
window.on('close', handleCloseWindow(window))
window.on('ready-to-show', () => window.show())
// Don't want to use HTML <title>
window.on('page-title-updated', e => e.preventDefault())
return window
}
app.on('before-quit', () => {
forceClose = true
})
@ -287,10 +236,6 @@ app.on('ready', async () => {
await installExtensions()
}
if (devTools && !HIDE_DEV_WINDOW) {
createDevWindow()
}
Menu.setApplicationMenu(menu)
mainWindow = createMainWindow()

11
src/main/bridge.js

@ -6,8 +6,6 @@ import { BrowserWindow, ipcMain, app } from 'electron'
import objectPath from 'object-path'
import path from 'path'
import cpuUsage from 'helpers/cpuUsage'
import setupAutoUpdater, { quitAndInstall } from './autoUpdate'
const { DEV_TOOLS } = process.env
@ -100,12 +98,3 @@ ipcMain.on('msg', (event: any, payload) => {
const send = (type: string, data: *) => event.sender.send('msg', { type, data })
handler(send, data, type)
})
if (__DEV__ || DEV_TOOLS) {
cpuUsage(cpuPercent =>
sendEventToWindow('DevWindow', {
type: 'usage.cpu',
data: { name: 'main', value: cpuPercent },
}),
)
}

9
src/main/menu.js

@ -44,15 +44,6 @@ const template = [
...props(
__DEV__ || DEV_TOOLS,
[
{
label: 'App Dev Tools',
click() {
const devWindow = BrowserWindow.getAllWindows().find(w => w.name === 'DevWindow')
if (devWindow) {
devWindow.show()
}
},
},
{
label: 'Main Window Dev Tools',
click() {

Loading…
Cancel
Save