hotfix: merge with develop
This commit is contained in:
commit
8e9816b031
|
@ -4,9 +4,10 @@
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"node": true,
|
"node": true,
|
||||||
"mocha": true
|
"mocha": true,
|
||||||
|
"jest/globals": true
|
||||||
},
|
},
|
||||||
"plugins": ["flowtype"],
|
"plugins": ["flowtype", "jest"],
|
||||||
"settings": {
|
"settings": {
|
||||||
"flowtype": {
|
"flowtype": {
|
||||||
"onlyFilesWithFlowAnnotation": true
|
"onlyFilesWithFlowAnnotation": true
|
||||||
|
@ -34,10 +35,12 @@
|
||||||
"error",
|
"error",
|
||||||
{
|
{
|
||||||
"code": 120,
|
"code": 120,
|
||||||
|
"tabWidth": 2,
|
||||||
"ignoreUrls": true,
|
"ignoreUrls": true,
|
||||||
"ignoreComments": true,
|
"ignoreComments": true,
|
||||||
"ignoreStrings": true,
|
"ignoreStrings": true,
|
||||||
"ignorePattern": "<p[^>]*>.*?</p>"
|
"ignorePattern": "<p[^>]*>.*?</p>",
|
||||||
|
"ignoreTrailingComments": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,3 +5,5 @@ dist
|
||||||
flow-coverage
|
flow-coverage
|
||||||
build
|
build
|
||||||
.docz
|
.docz
|
||||||
|
coverage
|
||||||
|
flow-typed
|
|
@ -24,7 +24,7 @@ yarn install
|
||||||
To run the application on port 8080
|
To run the application on port 8080
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn dev
|
yarn start
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
import configureStore from 'redux-mock-store';
|
||||||
|
|
||||||
|
import { ADD_TODO, addTodo } from '../../app/redux/modules/todo';
|
||||||
|
|
||||||
|
const store = configureStore()();
|
||||||
|
|
||||||
|
describe('Todo Actions', () => {
|
||||||
|
beforeEach(() => store.clearActions());
|
||||||
|
|
||||||
|
test('should create an action to add a new todo', () => {
|
||||||
|
const text = 'Hello World!';
|
||||||
|
|
||||||
|
store.dispatch(addTodo(text));
|
||||||
|
expect(store.getActions()[0]).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
type: ADD_TODO,
|
||||||
|
payload: {
|
||||||
|
text,
|
||||||
|
id: expect.any(String),
|
||||||
|
editing: false,
|
||||||
|
createdAt: expect.any(Number),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,20 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { render } from 'react-testing-library';
|
||||||
|
import { MemoryRouter } from 'react-router-dom';
|
||||||
|
import 'jest-dom/extend-expect';
|
||||||
|
|
||||||
|
import { SidebarComponent } from '../../app/components/Sidebar';
|
||||||
|
|
||||||
|
describe('<Sidebar />', () => {
|
||||||
|
describe('render()', () => {
|
||||||
|
test('should render correctly', () => {
|
||||||
|
const { asFragment } = render(
|
||||||
|
<MemoryRouter>
|
||||||
|
<SidebarComponent />
|
||||||
|
</MemoryRouter>,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(asFragment()).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,30 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`<Sidebar /> render() should render correctly 1`] = `
|
||||||
|
<DocumentFragment>
|
||||||
|
<div
|
||||||
|
class="sc-bdVaJa fnXMXv"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
href="/"
|
||||||
|
>
|
||||||
|
Dashboard
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="/send"
|
||||||
|
>
|
||||||
|
Send
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="/receive"
|
||||||
|
>
|
||||||
|
Receive
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="/settings"
|
||||||
|
>
|
||||||
|
Settings
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</DocumentFragment>
|
||||||
|
`;
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { getApp } from '../setup/utils';
|
||||||
|
|
||||||
|
describe('ZCash', () => {
|
||||||
|
const app = getApp();
|
||||||
|
|
||||||
|
beforeEach(() => app.start());
|
||||||
|
afterEach(() => {
|
||||||
|
app.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should open the window', () => {
|
||||||
|
app.client.getWindowCount().then((count) => {
|
||||||
|
expect(count).equal(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,25 @@
|
||||||
|
import todoReducer, { ADD_TODO } from '../../app/redux/modules/todo';
|
||||||
|
|
||||||
|
describe('Todo Reducer', () => {
|
||||||
|
test('should return the valid initial state', () => {
|
||||||
|
const action = { type: 'UNKNOWN_ACTION' };
|
||||||
|
const initialState = [];
|
||||||
|
|
||||||
|
expect(todoReducer(undefined, action)).toEqual(initialState);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should add a new todo', () => {
|
||||||
|
const action = {
|
||||||
|
type: ADD_TODO,
|
||||||
|
payload: {
|
||||||
|
id: 'abc123',
|
||||||
|
text: 'Hello World!',
|
||||||
|
editing: false,
|
||||||
|
createdAt: new Date().getTime(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const expectedState = [action.payload];
|
||||||
|
|
||||||
|
expect(todoReducer(undefined, action)).toEqual(expectedState);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,2 @@
|
||||||
|
jest.DEFAULT_TIMEOUT_INTERVAL = 20000;
|
||||||
|
jest.setTimeout(20000);
|
|
@ -0,0 +1,11 @@
|
||||||
|
import electron from 'electron';
|
||||||
|
import { Application } from 'spectron';
|
||||||
|
|
||||||
|
export const TIMEOUT = 10000;
|
||||||
|
|
||||||
|
export const getApp = () => new Application({
|
||||||
|
path: electron,
|
||||||
|
args: ['.'],
|
||||||
|
startTimeout: TIMEOUT,
|
||||||
|
waitTimeout: TIMEOUT,
|
||||||
|
});
|
|
@ -1,15 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import uuidv4 from 'uuid/v4';
|
|
||||||
import { ADD_TODO } from '../constants/actions';
|
|
||||||
import { getTimestamp } from '../utils/timestamp';
|
|
||||||
|
|
||||||
export const addTodo = (text: string) => ({
|
|
||||||
type: ADD_TODO,
|
|
||||||
payload: {
|
|
||||||
text,
|
|
||||||
id: uuidv4(),
|
|
||||||
editing: false,
|
|
||||||
createdAt: getTimestamp(),
|
|
||||||
},
|
|
||||||
});
|
|
|
@ -1,8 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { CANCEL_UPDATE_TODO } from '../constants/actions';
|
|
||||||
|
|
||||||
export const cancelUpdateTodo = (id: string) => ({
|
|
||||||
type: CANCEL_UPDATE_TODO,
|
|
||||||
payload: { id },
|
|
||||||
});
|
|
|
@ -1,8 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { DELETE_TODO } from '../constants/actions';
|
|
||||||
|
|
||||||
export const deleteTodo = (id: string) => ({
|
|
||||||
type: DELETE_TODO,
|
|
||||||
payload: { id },
|
|
||||||
});
|
|
|
@ -1,8 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { TOGGLE_EDIT_TODO } from '../constants/actions';
|
|
||||||
|
|
||||||
export const toggleEdit = (id: string) => ({
|
|
||||||
type: TOGGLE_EDIT_TODO,
|
|
||||||
payload: { id },
|
|
||||||
});
|
|
|
@ -1,11 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { UPDATE_TODO } from '../constants/actions';
|
|
||||||
|
|
||||||
export const updateTodo = (id: string, text: string) => ({
|
|
||||||
type: UPDATE_TODO,
|
|
||||||
payload: {
|
|
||||||
text,
|
|
||||||
id,
|
|
||||||
},
|
|
||||||
});
|
|
14
app/app.js
14
app/app.js
|
@ -5,18 +5,18 @@ import { Provider } from 'react-redux';
|
||||||
import { ConnectedRouter } from 'connected-react-router';
|
import { ConnectedRouter } from 'connected-react-router';
|
||||||
import { ThemeProvider } from 'styled-components';
|
import { ThemeProvider } from 'styled-components';
|
||||||
|
|
||||||
import { configureStore, history } from './store/configure';
|
import { configureStore, history } from './redux/create';
|
||||||
import { Router } from './router/container';
|
import { Router } from './router/container';
|
||||||
import theme from './theme';
|
import theme from './theme';
|
||||||
|
|
||||||
const store = configureStore({});
|
const store = configureStore({});
|
||||||
|
|
||||||
export default () => (
|
export default () => (
|
||||||
<Provider store={store}>
|
<ThemeProvider theme={theme}>
|
||||||
<ConnectedRouter history={history}>
|
<Provider store={store}>
|
||||||
<ThemeProvider theme={theme}>
|
<ConnectedRouter history={history}>
|
||||||
<Router />
|
<Router />
|
||||||
</ThemeProvider>
|
</ConnectedRouter>
|
||||||
</ConnectedRouter>
|
</Provider>
|
||||||
</Provider>
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,7 +13,7 @@ const Wrapper = styled.div`
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background: #ccc;
|
background-color: ${props => props.theme.colors.secondary};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const StyledLink = styled(Link)`
|
const StyledLink = styled(Link)`
|
||||||
|
|
|
@ -3,7 +3,8 @@ name: Sidebar
|
||||||
---
|
---
|
||||||
|
|
||||||
import { Playground, PropsTable } from 'docz'
|
import { Playground, PropsTable } from 'docz'
|
||||||
import { SidebarComponent } from './index.js'
|
import { SidebarComponent } from './Sidebar.js'
|
||||||
|
import { DoczWrapper } from '../theme.js'
|
||||||
|
|
||||||
# Sidebar
|
# Sidebar
|
||||||
|
|
||||||
|
@ -12,5 +13,7 @@ import { SidebarComponent } from './index.js'
|
||||||
## Basic usage
|
## Basic usage
|
||||||
|
|
||||||
<Playground>
|
<Playground>
|
||||||
<SidebarComponent />
|
<DoczWrapper>
|
||||||
|
{() => <SidebarComponent />}
|
||||||
|
</DoczWrapper>
|
||||||
</Playground>
|
</Playground>
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
export const ADD_TODO = 'ADD_TODO';
|
|
||||||
export const DELETE_TODO = 'DELETE_TODO';
|
|
||||||
export const UPDATE_TODO = 'UPDATE_TODO';
|
|
||||||
export const TOGGLE_EDIT_TODO = 'TOGGLE_EDIT_TODO';
|
|
||||||
export const CANCEL_UPDATE_TODO = 'CANCEL_UPDATE_TODO';
|
|
|
@ -2,11 +2,10 @@
|
||||||
|
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import TodoView from '../views/todo';
|
import TodoView from '../views/todo';
|
||||||
import { addTodo } from '../actions/add-todo';
|
import {
|
||||||
import { deleteTodo } from '../actions/delete-todo';
|
addTodo, deleteTodo, toggleEdit, updateTodo, cancelUpdateTodo,
|
||||||
import { toggleEdit } from '../actions/toggle-edit-todo';
|
} from '../redux/modules/todo';
|
||||||
import { updateTodo } from '../actions/update-todo';
|
|
||||||
import { cancelUpdateTodo } from '../actions/cancel-update-todo';
|
|
||||||
import type { AppState } from '../types/app-state';
|
import type { AppState } from '../types/app-state';
|
||||||
import type { Dispatch } from '../types/redux';
|
import type { Dispatch } from '../types/redux';
|
||||||
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import {
|
|
||||||
ADD_TODO,
|
|
||||||
DELETE_TODO,
|
|
||||||
UPDATE_TODO,
|
|
||||||
CANCEL_UPDATE_TODO,
|
|
||||||
TOGGLE_EDIT_TODO,
|
|
||||||
} from '../constants/actions';
|
|
||||||
import type { TodoType } from '../types/todo';
|
|
||||||
import type { Action } from '../types/redux';
|
|
||||||
|
|
||||||
const initialState = [];
|
|
||||||
|
|
||||||
export default (state: Array<TodoType> = initialState, action: Action) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case ADD_TODO:
|
|
||||||
return [
|
|
||||||
...state,
|
|
||||||
action.payload,
|
|
||||||
];
|
|
||||||
case DELETE_TODO:
|
|
||||||
// $FlowFixMe
|
|
||||||
return state.filter((todo: Object) => todo.id !== action.payload.id);
|
|
||||||
case TOGGLE_EDIT_TODO: {
|
|
||||||
const { id } = action.payload;
|
|
||||||
const todos = [...state];
|
|
||||||
const index = todos.map(todo => todo.id).indexOf(id);
|
|
||||||
todos[index].editing = true;
|
|
||||||
|
|
||||||
return todos;
|
|
||||||
}
|
|
||||||
case UPDATE_TODO: {
|
|
||||||
const { id, text } = action.payload;
|
|
||||||
const todos = [...state];
|
|
||||||
const index = todos.map(todo => todo.id).indexOf(id);
|
|
||||||
todos[index].text = text;
|
|
||||||
todos[index].editing = false;
|
|
||||||
|
|
||||||
return todos;
|
|
||||||
}
|
|
||||||
case CANCEL_UPDATE_TODO: {
|
|
||||||
const { id } = action.payload;
|
|
||||||
const todos = [...state];
|
|
||||||
const index = todos.map(todo => todo.id).indexOf(id);
|
|
||||||
todos[index].editing = false;
|
|
||||||
|
|
||||||
return todos;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
|
import { createStore, applyMiddleware, compose } from 'redux';
|
||||||
|
import { routerMiddleware } from 'connected-react-router';
|
||||||
|
import { createBrowserHistory } from 'history';
|
||||||
|
import thunk from 'redux-thunk';
|
||||||
|
import { createRootReducer } from './modules/reducer';
|
||||||
|
|
||||||
|
export const history = createBrowserHistory();
|
||||||
|
|
||||||
|
const shouldEnableDevTools = (process.env.NODE_ENV !== 'production' || process.env.NODE_ENV !== 'staging') && window.devToolsExtension;
|
||||||
|
|
||||||
|
export const configureStore = (initialState: Object) => {
|
||||||
|
const middleware = applyMiddleware(thunk, routerMiddleware(history));
|
||||||
|
|
||||||
|
const enhancer = compose(
|
||||||
|
middleware,
|
||||||
|
shouldEnableDevTools ? window.devToolsExtension() : f => f,
|
||||||
|
);
|
||||||
|
|
||||||
|
return createStore(createRootReducer(history), initialState, enhancer);
|
||||||
|
};
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
import { combineReducers } from 'redux';
|
import { combineReducers } from 'redux';
|
||||||
import { connectRouter } from 'connected-react-router';
|
import { connectRouter } from 'connected-react-router';
|
||||||
|
import type { History } from 'react-router-dom';
|
||||||
|
|
||||||
import todoReducer from './todo';
|
import todoReducer from './todo';
|
||||||
|
|
||||||
export const createRootReducer = (history: Object) => combineReducers({
|
export const createRootReducer = (history: History) => combineReducers({
|
||||||
todos: todoReducer,
|
todos: todoReducer,
|
||||||
router: connectRouter(history),
|
router: connectRouter(history),
|
||||||
});
|
});
|
|
@ -0,0 +1,78 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
|
import UUID from 'uuid/v4';
|
||||||
|
|
||||||
|
import { getTimestamp } from '../../utils/timestamp';
|
||||||
|
|
||||||
|
import type { Action } from '../../types/redux';
|
||||||
|
import type { TodoType } from '../../types/todo';
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
export const ADD_TODO = 'ADD_TODO';
|
||||||
|
export const DELETE_TODO = 'DELETE_TODO';
|
||||||
|
export const UPDATE_TODO = 'UPDATE_TODO';
|
||||||
|
export const TOGGLE_EDIT_TODO = 'TOGGLE_EDIT_TODO';
|
||||||
|
export const CANCEL_UPDATE_TODO = 'CANCEL_UPDATE_TODO';
|
||||||
|
|
||||||
|
// Actions Creators
|
||||||
|
export const addTodo = (text: string) => ({
|
||||||
|
type: ADD_TODO,
|
||||||
|
payload: {
|
||||||
|
text,
|
||||||
|
id: UUID(),
|
||||||
|
editing: false,
|
||||||
|
createdAt: getTimestamp(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export const cancelUpdateTodo = (id: string) => ({
|
||||||
|
type: CANCEL_UPDATE_TODO,
|
||||||
|
payload: { id },
|
||||||
|
});
|
||||||
|
|
||||||
|
export const deleteTodo = (id: string) => ({
|
||||||
|
type: DELETE_TODO,
|
||||||
|
payload: { id },
|
||||||
|
});
|
||||||
|
|
||||||
|
export const toggleEdit = (id: string) => ({
|
||||||
|
type: TOGGLE_EDIT_TODO,
|
||||||
|
payload: { id },
|
||||||
|
});
|
||||||
|
|
||||||
|
export const updateTodo = (id: string, text: string) => ({
|
||||||
|
type: UPDATE_TODO,
|
||||||
|
payload: {
|
||||||
|
text,
|
||||||
|
id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initial State
|
||||||
|
const initialState = [];
|
||||||
|
|
||||||
|
// Reducers
|
||||||
|
export default (state: Array<TodoType> = initialState, action: Action): Array<TodoType> => {
|
||||||
|
switch (action.type) {
|
||||||
|
case ADD_TODO:
|
||||||
|
return [...state, action.payload];
|
||||||
|
case DELETE_TODO:
|
||||||
|
return state.filter((todo: TodoType) => todo.id !== action.payload.id);
|
||||||
|
case TOGGLE_EDIT_TODO: {
|
||||||
|
const { id } = action.payload;
|
||||||
|
return state.map(todo => (todo.id === id ? { ...todo, editing: true } : todo));
|
||||||
|
}
|
||||||
|
case UPDATE_TODO: {
|
||||||
|
const { id, text } = action.payload;
|
||||||
|
return state.map(todo => (todo.id === id ? { ...todo, editing: false, text } : todo));
|
||||||
|
}
|
||||||
|
case CANCEL_UPDATE_TODO: {
|
||||||
|
const { id } = action.payload;
|
||||||
|
return state.map(todo => (todo.id === id ? { ...todo, editing: false } : todo));
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// SideEffects
|
|
@ -1,35 +0,0 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { createStore, applyMiddleware, compose } from 'redux';
|
|
||||||
import { routerMiddleware } from 'connected-react-router';
|
|
||||||
import { createBrowserHistory } from 'history';
|
|
||||||
import thunk from 'redux-thunk';
|
|
||||||
import { createRootReducer } from '../reducers';
|
|
||||||
|
|
||||||
export const history = createBrowserHistory();
|
|
||||||
|
|
||||||
export const configureStore = (initialState: Object) => {
|
|
||||||
let enhancer;
|
|
||||||
const middleware = applyMiddleware(
|
|
||||||
thunk,
|
|
||||||
routerMiddleware(history),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
|
||||||
process.env.NODE_ENV !== 'production'
|
|
||||||
|| process.env.NODE_ENV !== 'staging'
|
|
||||||
) {
|
|
||||||
enhancer = compose(
|
|
||||||
middleware,
|
|
||||||
window.devToolsExtension ? window.devToolsExtension() : f => f,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
enhancer = compose(middleware);
|
|
||||||
}
|
|
||||||
|
|
||||||
return createStore(
|
|
||||||
createRootReducer(history),
|
|
||||||
initialState,
|
|
||||||
enhancer,
|
|
||||||
);
|
|
||||||
};
|
|
10
app/theme.js
10
app/theme.js
|
@ -1,9 +1,11 @@
|
||||||
// @flow
|
// @flow
|
||||||
|
import React from 'react';
|
||||||
|
import { ThemeProvider } from 'styled-components';
|
||||||
import theme from 'styled-theming';
|
import theme from 'styled-theming';
|
||||||
|
|
||||||
import { DARK } from './constants/themes';
|
import { DARK } from './constants/themes';
|
||||||
|
|
||||||
export default {
|
const appTheme = {
|
||||||
mode: DARK,
|
mode: DARK,
|
||||||
fontFamily: 'Open Sans',
|
fontFamily: 'Open Sans',
|
||||||
colors: {
|
colors: {
|
||||||
|
@ -21,3 +23,9 @@ export default {
|
||||||
paragraph: 12,
|
paragraph: 12,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default appTheme;
|
||||||
|
|
||||||
|
/* eslint-disable react/prop-types */
|
||||||
|
// $FlowFixMe
|
||||||
|
export const DoczWrapper = ({ children }) => <ThemeProvider theme={appTheme}>{children()}</ThemeProvider>;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
24
package.json
24
package.json
|
@ -19,7 +19,9 @@
|
||||||
"preelectron:prepare": "yarn build",
|
"preelectron:prepare": "yarn build",
|
||||||
"icon:build": "./node_modules/.bin/electron-icon-maker --input=build-assets/icon.png --output=./build",
|
"icon:build": "./node_modules/.bin/electron-icon-maker --input=build-assets/icon.png --output=./build",
|
||||||
"docz:dev": "docz dev",
|
"docz:dev": "docz dev",
|
||||||
"docz:build": "docz build"
|
"docz:build": "docz build",
|
||||||
|
"test": "jest",
|
||||||
|
"test:watch": "jest --watch"
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
"name": "André Neves",
|
"name": "André Neves",
|
||||||
|
@ -53,17 +55,23 @@
|
||||||
"eslint-config-airbnb": "^17.1.0",
|
"eslint-config-airbnb": "^17.1.0",
|
||||||
"eslint-plugin-flowtype": "^3.2.0",
|
"eslint-plugin-flowtype": "^3.2.0",
|
||||||
"eslint-plugin-import": "^2.14.0",
|
"eslint-plugin-import": "^2.14.0",
|
||||||
|
"eslint-plugin-jest": "^22.1.0",
|
||||||
"eslint-plugin-jsx-a11y": "^6.0.3",
|
"eslint-plugin-jsx-a11y": "^6.0.3",
|
||||||
"eslint-plugin-react": "^7.7.0",
|
"eslint-plugin-react": "^7.7.0",
|
||||||
"file-loader": "^2.0.0",
|
"file-loader": "^2.0.0",
|
||||||
"flow-bin": "^0.87.0",
|
"flow-bin": "^0.87.0",
|
||||||
"glow": "^1.2.2",
|
"glow": "^1.2.2",
|
||||||
"html-webpack-plugin": "^3.1.0",
|
"html-webpack-plugin": "^3.1.0",
|
||||||
|
"jest": "^23.6.0",
|
||||||
|
"jest-dom": "^2.1.1",
|
||||||
"node-sass": "^4.8.3",
|
"node-sass": "^4.8.3",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"pre-commit": "^1.2.2",
|
"pre-commit": "^1.2.2",
|
||||||
|
"react-testing-library": "^5.3.1",
|
||||||
"redux-logger": "^3.0.6",
|
"redux-logger": "^3.0.6",
|
||||||
|
"redux-mock-store": "^1.5.3",
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^7.1.0",
|
||||||
|
"spectron": "^5.0.0",
|
||||||
"style-loader": "^0.23.1",
|
"style-loader": "^0.23.1",
|
||||||
"uglifyjs-webpack-plugin": "^2.0.1",
|
"uglifyjs-webpack-plugin": "^2.0.1",
|
||||||
"wait-on": "^3.2.0",
|
"wait-on": "^3.2.0",
|
||||||
|
@ -106,7 +114,10 @@
|
||||||
"./node_modules/**/*"
|
"./node_modules/**/*"
|
||||||
],
|
],
|
||||||
"linux": {
|
"linux": {
|
||||||
"icon": "./build/icons/png"
|
"icon": "./build/icons/png",
|
||||||
|
"target": [
|
||||||
|
"deb"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"mac": {
|
"mac": {
|
||||||
"category": "public.app-category.productivity",
|
"category": "public.app-category.productivity",
|
||||||
|
@ -116,5 +127,14 @@
|
||||||
"dmg"
|
"dmg"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"setupTestFrameworkScriptFile": "<rootDir>/__tests__/setup/jest.js",
|
||||||
|
"testPathIgnorePatterns": [
|
||||||
|
"<rootDir>/__tests__/setup/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"babel-core": "7.0.0-bridge.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue