1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-19 13:19:44 +02:00

Move from prettier-eslint to eslint-plugin-prettier, update dependencies

This commit is contained in:
Maksim Eltyshev 2020-02-03 18:42:31 +05:00
parent f0e7fb8fd1
commit 9c7c96a780
254 changed files with 5539 additions and 5170 deletions

View file

@ -1 +0,0 @@
SKIP_PREFLIGHT_CHECK=true

6186
client/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,6 @@
"scripts": { "scripts": {
"build": "react-scripts build", "build": "react-scripts build",
"eject": "react-scripts eject", "eject": "react-scripts eject",
"format": "prettier-eslint --write \"src/**/*.*(js|jsx)\"",
"lint": "eslint --ext js,jsx src", "lint": "eslint --ext js,jsx src",
"start": "react-scripts start", "start": "react-scripts start",
"test": "react-scripts test" "test": "react-scripts test"
@ -25,11 +24,26 @@
"env": { "env": {
"browser": true "browser": true
}, },
"parser": "babel-eslint",
"plugins": [
"prettier"
],
"extends": [ "extends": [
"airbnb", "airbnb",
"airbnb/hooks" "airbnb/hooks",
"plugin:prettier/recommended",
"prettier/react"
], ],
"parser": "babel-eslint" "rules": {
"prettier/prettier": [
"error",
{
"printWidth": 100,
"singleQuote": true,
"trailingComma": "all"
}
]
}
}, },
"dependencies": { "dependencies": {
"classnames": "^2.2.6", "classnames": "^2.2.6",
@ -37,7 +51,7 @@
"date-fns": "^2.9.0", "date-fns": "^2.9.0",
"dequal": "^1.0.0", "dequal": "^1.0.0",
"history": "^4.10.1", "history": "^4.10.1",
"i18next": "^19.0.3", "i18next": "^19.1.0",
"i18next-browser-languagedetector": "^4.0.1", "i18next-browser-languagedetector": "^4.0.1",
"initials": "^3.0.1", "initials": "^3.0.1",
"lodash": "^4.17.15", "lodash": "^4.17.15",
@ -46,12 +60,12 @@
"react-beautiful-dnd": "^12.2.0", "react-beautiful-dnd": "^12.2.0",
"react-datepicker": "^2.11.0", "react-datepicker": "^2.11.0",
"react-dom": "^16.12.0", "react-dom": "^16.12.0",
"react-i18next": "^11.3.0", "react-i18next": "^11.3.1",
"react-input-mask": "^2.0.4", "react-input-mask": "^2.0.4",
"react-markdown": "^4.3.1", "react-markdown": "^4.3.1",
"react-redux": "^7.1.3", "react-redux": "^7.1.3",
"react-router-dom": "^5.1.2", "react-router-dom": "^5.1.2",
"react-scripts": "3.3.0", "react-scripts": "3.3.1",
"react-textarea-autosize": "^7.1.2", "react-textarea-autosize": "^7.1.2",
"redux": "^4.0.5", "redux": "^4.0.5",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
@ -61,17 +75,18 @@
"sails.io.js": "^1.2.1", "sails.io.js": "^1.2.1",
"semantic-ui-react": "^0.88.2", "semantic-ui-react": "^0.88.2",
"socket.io-client": "^2.3.0", "socket.io-client": "^2.3.0",
"validator": "^12.1.0", "validator": "^12.2.0",
"whatwg-fetch": "^3.0.0" "whatwg-fetch": "^3.0.0"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^5.16.0", "eslint": "^6.8.0",
"eslint-config-airbnb": "^18.0.1", "eslint-config-airbnb": "^18.0.1",
"eslint-plugin-import": "^2.20.0", "eslint-config-prettier": "^6.10.0",
"eslint-plugin-import": "^2.20.1",
"eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.17.0", "eslint-plugin-prettier": "^3.1.2",
"eslint-plugin-react-hooks": "^1.7.0", "eslint-plugin-react": "^7.18.3",
"prettier-eslint": "^9.0.1", "eslint-plugin-react-hooks": "^2.3.0",
"prettier-eslint-cli": "^5.0.0" "prettier": "1.19.1"
} }
} }

View file

@ -1,2 +1,3 @@
# https://www.robotstxt.org/robotstxt.html # https://www.robotstxt.org/robotstxt.html
User-agent: * User-agent: *
Disallow:

View file

@ -2,21 +2,21 @@ import ActionTypes from '../constants/ActionTypes';
/* Events */ /* Events */
export const createActionReceived = (action) => ({ export const createActionReceived = action => ({
type: ActionTypes.ACTION_CREATE_RECEIVED, type: ActionTypes.ACTION_CREATE_RECEIVED,
payload: { payload: {
action, action,
}, },
}); });
export const updateActionReceived = (action) => ({ export const updateActionReceived = action => ({
type: ActionTypes.ACTION_UPDATE_RECEIVED, type: ActionTypes.ACTION_UPDATE_RECEIVED,
payload: { payload: {
action, action,
}, },
}); });
export const deleteActionReceived = (action) => ({ export const deleteActionReceived = action => ({
type: ActionTypes.ACTION_DELETE_RECEIVED, type: ActionTypes.ACTION_DELETE_RECEIVED,
payload: { payload: {
action, action,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Events */ /* Events */
export const fetchActionsRequested = (cardId) => ({ export const fetchActionsRequested = cardId => ({
type: ActionTypes.ACTIONS_FETCH_REQUESTED, type: ActionTypes.ACTIONS_FETCH_REQUESTED,
payload: { payload: {
cardId, cardId,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createBoard = (board) => ({ export const createBoard = board => ({
type: ActionTypes.BOARD_CREATE, type: ActionTypes.BOARD_CREATE,
payload: { payload: {
board, board,
@ -17,7 +17,7 @@ export const updateBoard = (id, data) => ({
}, },
}); });
export const deleteBoard = (id) => ({ export const deleteBoard = id => ({
type: ActionTypes.BOARD_DELETE, type: ActionTypes.BOARD_DELETE,
payload: { payload: {
id, id,
@ -61,7 +61,7 @@ export const createBoardReceived = (board, lists, labels) => ({
}, },
}); });
export const fetchBoardRequested = (id) => ({ export const fetchBoardRequested = id => ({
type: ActionTypes.BOARD_FETCH_REQUESTED, type: ActionTypes.BOARD_FETCH_REQUESTED,
payload: { payload: {
id, id,
@ -105,7 +105,7 @@ export const updateBoardRequested = (id, data) => ({
}, },
}); });
export const updateBoardSucceeded = (board) => ({ export const updateBoardSucceeded = board => ({
type: ActionTypes.BOARD_UPDATE_SUCCEEDED, type: ActionTypes.BOARD_UPDATE_SUCCEEDED,
payload: { payload: {
board, board,
@ -120,21 +120,21 @@ export const updateBoardFailed = (id, error) => ({
}, },
}); });
export const updateBoardReceived = (board) => ({ export const updateBoardReceived = board => ({
type: ActionTypes.BOARD_UPDATE_RECEIVED, type: ActionTypes.BOARD_UPDATE_RECEIVED,
payload: { payload: {
board, board,
}, },
}); });
export const deleteBoardRequested = (id) => ({ export const deleteBoardRequested = id => ({
type: ActionTypes.BOARD_DELETE_REQUESTED, type: ActionTypes.BOARD_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteBoardSucceeded = (board) => ({ export const deleteBoardSucceeded = board => ({
type: ActionTypes.BOARD_DELETE_SUCCEEDED, type: ActionTypes.BOARD_DELETE_SUCCEEDED,
payload: { payload: {
board, board,
@ -149,7 +149,7 @@ export const deleteBoardFailed = (id, error) => ({
}, },
}); });
export const deleteBoardReceived = (board) => ({ export const deleteBoardReceived = board => ({
type: ActionTypes.BOARD_DELETE_RECEIVED, type: ActionTypes.BOARD_DELETE_RECEIVED,
payload: { payload: {
board, board,

View file

@ -2,28 +2,28 @@ import ActionTypes from '../constants/ActionTypes';
/* Events */ /* Events */
export const createCardLabelRequested = (data) => ({ export const createCardLabelRequested = data => ({
type: ActionTypes.CARD_LABEL_CREATE_REQUESTED, type: ActionTypes.CARD_LABEL_CREATE_REQUESTED,
payload: { payload: {
data, data,
}, },
}); });
export const createCardLabelSucceeded = (cardLabel) => ({ export const createCardLabelSucceeded = cardLabel => ({
type: ActionTypes.CARD_LABEL_CREATE_SUCCEEDED, type: ActionTypes.CARD_LABEL_CREATE_SUCCEEDED,
payload: { payload: {
cardLabel, cardLabel,
}, },
}); });
export const createCardLabelFailed = (error) => ({ export const createCardLabelFailed = error => ({
type: ActionTypes.CARD_LABEL_CREATE_FAILED, type: ActionTypes.CARD_LABEL_CREATE_FAILED,
payload: { payload: {
error, error,
}, },
}); });
export const createCardLabelReceived = (cardLabel) => ({ export const createCardLabelReceived = cardLabel => ({
type: ActionTypes.CARD_LABEL_CREATE_RECEIVED, type: ActionTypes.CARD_LABEL_CREATE_RECEIVED,
payload: { payload: {
cardLabel, cardLabel,
@ -38,7 +38,7 @@ export const deleteCardLabelRequested = (cardId, labelId) => ({
}, },
}); });
export const deleteCardLabelSucceeded = (cardLabel) => ({ export const deleteCardLabelSucceeded = cardLabel => ({
type: ActionTypes.CARD_LABEL_DELETE_SUCCEEDED, type: ActionTypes.CARD_LABEL_DELETE_SUCCEEDED,
payload: { payload: {
cardLabel, cardLabel,
@ -54,7 +54,7 @@ export const deleteCardLabelFailed = (cardId, labelId, error) => ({
}, },
}); });
export const deleteCardLabelReceived = (cardLabel) => ({ export const deleteCardLabelReceived = cardLabel => ({
type: ActionTypes.CARD_LABEL_DELETE_RECEIVED, type: ActionTypes.CARD_LABEL_DELETE_RECEIVED,
payload: { payload: {
cardLabel, cardLabel,

View file

@ -2,28 +2,28 @@ import ActionTypes from '../constants/ActionTypes';
/* Events */ /* Events */
export const createCardMembershipRequested = (data) => ({ export const createCardMembershipRequested = data => ({
type: ActionTypes.CARD_MEMBERSHIP_CREATE_REQUESTED, type: ActionTypes.CARD_MEMBERSHIP_CREATE_REQUESTED,
payload: { payload: {
data, data,
}, },
}); });
export const createCardMembershipSucceeded = (cardMembership) => ({ export const createCardMembershipSucceeded = cardMembership => ({
type: ActionTypes.CARD_MEMBERSHIP_CREATE_SUCCEEDED, type: ActionTypes.CARD_MEMBERSHIP_CREATE_SUCCEEDED,
payload: { payload: {
cardMembership, cardMembership,
}, },
}); });
export const createCardMembershipFailed = (error) => ({ export const createCardMembershipFailed = error => ({
type: ActionTypes.CARD_MEMBERSHIP_CREATE_FAILED, type: ActionTypes.CARD_MEMBERSHIP_CREATE_FAILED,
payload: { payload: {
error, error,
}, },
}); });
export const createCardMembershipReceived = (cardMembership) => ({ export const createCardMembershipReceived = cardMembership => ({
type: ActionTypes.CARD_MEMBERSHIP_CREATE_RECEIVED, type: ActionTypes.CARD_MEMBERSHIP_CREATE_RECEIVED,
payload: { payload: {
cardMembership, cardMembership,
@ -38,7 +38,7 @@ export const deleteCardMembershipRequested = (cardId, userId) => ({
}, },
}); });
export const deleteCardMembershipSucceeded = (cardMembership) => ({ export const deleteCardMembershipSucceeded = cardMembership => ({
type: ActionTypes.CARD_MEMBERSHIP_DELETE_SUCCEEDED, type: ActionTypes.CARD_MEMBERSHIP_DELETE_SUCCEEDED,
payload: { payload: {
cardMembership, cardMembership,
@ -54,7 +54,7 @@ export const deleteCardMembershipFailed = (cardId, userId, error) => ({
}, },
}); });
export const deleteCardMembershipReceived = (cardMembership) => ({ export const deleteCardMembershipReceived = cardMembership => ({
type: ActionTypes.CARD_MEMBERSHIP_DELETE_RECEIVED, type: ActionTypes.CARD_MEMBERSHIP_DELETE_RECEIVED,
payload: { payload: {
cardMembership, cardMembership,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createCard = (card) => ({ export const createCard = card => ({
type: ActionTypes.CARD_CREATE, type: ActionTypes.CARD_CREATE,
payload: { payload: {
card, card,
@ -17,7 +17,7 @@ export const updateCard = (id, data) => ({
}, },
}); });
export const deleteCard = (id) => ({ export const deleteCard = id => ({
type: ActionTypes.CARD_DELETE, type: ActionTypes.CARD_DELETE,
payload: { payload: {
id, id,
@ -50,21 +50,21 @@ export const createCardFailed = (localId, error) => ({
}, },
}); });
export const createCardReceived = (card) => ({ export const createCardReceived = card => ({
type: ActionTypes.CARD_CREATE_RECEIVED, type: ActionTypes.CARD_CREATE_RECEIVED,
payload: { payload: {
card, card,
}, },
}); });
export const fetchCardRequested = (id) => ({ export const fetchCardRequested = id => ({
type: ActionTypes.CARD_FETCH_REQUESTED, type: ActionTypes.CARD_FETCH_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const fetchCardSucceeded = (card) => ({ export const fetchCardSucceeded = card => ({
type: ActionTypes.CARD_FETCH_SUCCEEDED, type: ActionTypes.CARD_FETCH_SUCCEEDED,
payload: { payload: {
card, card,
@ -87,7 +87,7 @@ export const updateCardRequested = (id, data) => ({
}, },
}); });
export const updateCardSucceeded = (card) => ({ export const updateCardSucceeded = card => ({
type: ActionTypes.CARD_UPDATE_SUCCEEDED, type: ActionTypes.CARD_UPDATE_SUCCEEDED,
payload: { payload: {
card, card,
@ -102,21 +102,21 @@ export const updateCardFailed = (id, error) => ({
}, },
}); });
export const updateCardReceived = (card) => ({ export const updateCardReceived = card => ({
type: ActionTypes.CARD_UPDATE_RECEIVED, type: ActionTypes.CARD_UPDATE_RECEIVED,
payload: { payload: {
card, card,
}, },
}); });
export const deleteCardRequested = (id) => ({ export const deleteCardRequested = id => ({
type: ActionTypes.CARD_DELETE_REQUESTED, type: ActionTypes.CARD_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteCardSucceeded = (card) => ({ export const deleteCardSucceeded = card => ({
type: ActionTypes.CARD_DELETE_SUCCEEDED, type: ActionTypes.CARD_DELETE_SUCCEEDED,
payload: { payload: {
card, card,
@ -131,7 +131,7 @@ export const deleteCardFailed = (id, error) => ({
}, },
}); });
export const deleteCardReceived = (card) => ({ export const deleteCardReceived = card => ({
type: ActionTypes.CARD_DELETE_RECEIVED, type: ActionTypes.CARD_DELETE_RECEIVED,
payload: { payload: {
card, card,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createCommentAction = (action) => ({ export const createCommentAction = action => ({
type: ActionTypes.COMMENT_ACTION_CREATE, type: ActionTypes.COMMENT_ACTION_CREATE,
payload: { payload: {
action, action,
@ -17,7 +17,7 @@ export const updateCommentAction = (id, data) => ({
}, },
}); });
export const deleteCommentAction = (id) => ({ export const deleteCommentAction = id => ({
type: ActionTypes.COMMENT_ACTION_DELETE, type: ActionTypes.COMMENT_ACTION_DELETE,
payload: { payload: {
id, id,
@ -58,7 +58,7 @@ export const updateCommentActionRequested = (id, data) => ({
}, },
}); });
export const updateCommentActionSucceeded = (action) => ({ export const updateCommentActionSucceeded = action => ({
type: ActionTypes.COMMENT_ACTION_UPDATE_SUCCEEDED, type: ActionTypes.COMMENT_ACTION_UPDATE_SUCCEEDED,
payload: { payload: {
action, action,
@ -73,14 +73,14 @@ export const updateCommentActionFailed = (id, error) => ({
}, },
}); });
export const deleteCommentActionRequested = (id) => ({ export const deleteCommentActionRequested = id => ({
type: ActionTypes.COMMENT_ACTION_DELETE_REQUESTED, type: ActionTypes.COMMENT_ACTION_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteCommentActionSucceeded = (action) => ({ export const deleteCommentActionSucceeded = action => ({
type: ActionTypes.COMMENT_ACTION_DELETE_SUCCEEDED, type: ActionTypes.COMMENT_ACTION_DELETE_SUCCEEDED,
payload: { payload: {
action, action,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createBoardInCurrentProject = (data) => ({ export const createBoardInCurrentProject = data => ({
type: EntryActionTypes.BOARD_IN_CURRENT_PROJECT_CREATE, type: EntryActionTypes.BOARD_IN_CURRENT_PROJECT_CREATE,
payload: { payload: {
data, data,
@ -23,7 +23,7 @@ export const moveBoard = (id, index) => ({
}, },
}); });
export const deleteBoard = (id) => ({ export const deleteBoard = id => ({
type: EntryActionTypes.BOARD_DELETE, type: EntryActionTypes.BOARD_DELETE,
payload: { payload: {
id, id,

View file

@ -16,7 +16,7 @@ export const updateCard = (id, data) => ({
}, },
}); });
export const updateCurrentCard = (data) => ({ export const updateCurrentCard = data => ({
type: EntryActionTypes.CURRENT_CARD_UPDATE, type: EntryActionTypes.CURRENT_CARD_UPDATE,
payload: { payload: {
data, data,
@ -32,7 +32,7 @@ export const moveCard = (id, listId, index) => ({
}, },
}); });
export const deleteCard = (id) => ({ export const deleteCard = id => ({
type: EntryActionTypes.CARD_DELETE, type: EntryActionTypes.CARD_DELETE,
payload: { payload: {
id, id,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createCommentActionInCurrentCard = (data) => ({ export const createCommentActionInCurrentCard = data => ({
type: EntryActionTypes.COMMENT_ACTION_IN_CURRENT_CARD_CREATE, type: EntryActionTypes.COMMENT_ACTION_IN_CURRENT_CARD_CREATE,
payload: { payload: {
data, data,
@ -15,7 +15,7 @@ export const updateCommentAction = (id, data) => ({
}, },
}); });
export const deleteCommentAction = (id) => ({ export const deleteCommentAction = id => ({
type: EntryActionTypes.COMMENT_ACTION_DELETE, type: EntryActionTypes.COMMENT_ACTION_DELETE,
payload: { payload: {
id, id,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createLabelInCurrentBoard = (data) => ({ export const createLabelInCurrentBoard = data => ({
type: EntryActionTypes.LABEL_IN_CURRENT_BOARD_CREATE, type: EntryActionTypes.LABEL_IN_CURRENT_BOARD_CREATE,
payload: { payload: {
data, data,
@ -15,7 +15,7 @@ export const updateLabel = (id, data) => ({
}, },
}); });
export const deleteLabel = (id) => ({ export const deleteLabel = id => ({
type: EntryActionTypes.LABEL_DELETE, type: EntryActionTypes.LABEL_DELETE,
payload: { payload: {
id, id,
@ -30,7 +30,7 @@ export const addLabelToCard = (id, cardId) => ({
}, },
}); });
export const addLabelToCurrentCard = (id) => ({ export const addLabelToCurrentCard = id => ({
type: EntryActionTypes.LABEL_TO_CURRENT_CARD_ADD, type: EntryActionTypes.LABEL_TO_CURRENT_CARD_ADD,
payload: { payload: {
id, id,
@ -45,21 +45,21 @@ export const removeLabelFromCard = (id, cardId) => ({
}, },
}); });
export const removeLabelFromCurrentCard = (id) => ({ export const removeLabelFromCurrentCard = id => ({
type: EntryActionTypes.LABEL_FROM_CURRENT_CARD_REMOVE, type: EntryActionTypes.LABEL_FROM_CURRENT_CARD_REMOVE,
payload: { payload: {
id, id,
}, },
}); });
export const addLabelToFilterInCurrentBoard = (id) => ({ export const addLabelToFilterInCurrentBoard = id => ({
type: EntryActionTypes.LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD, type: EntryActionTypes.LABEL_TO_FILTER_IN_CURRENT_BOARD_ADD,
payload: { payload: {
id, id,
}, },
}); });
export const removeLabelFromFilterInCurrentBoard = (id) => ({ export const removeLabelFromFilterInCurrentBoard = id => ({
type: EntryActionTypes.LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE, type: EntryActionTypes.LABEL_FROM_FILTER_IN_CURRENT_BOARD_REMOVE,
payload: { payload: {
id, id,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createListInCurrentBoard = (data) => ({ export const createListInCurrentBoard = data => ({
type: EntryActionTypes.LIST_IN_CURRENT_BOARD_CREATE, type: EntryActionTypes.LIST_IN_CURRENT_BOARD_CREATE,
payload: { payload: {
data, data,
@ -23,7 +23,7 @@ export const moveList = (id, index) => ({
}, },
}); });
export const deleteList = (id) => ({ export const deleteList = id => ({
type: EntryActionTypes.LIST_DELETE, type: EntryActionTypes.LIST_DELETE,
payload: { payload: {
id, id,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const authenticate = (data) => ({ export const authenticate = data => ({
type: EntryActionTypes.AUTHENTICATE, type: EntryActionTypes.AUTHENTICATE,
payload: { payload: {
data, data,

View file

@ -1,7 +1,7 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
// eslint-disable-next-line import/prefer-default-export // eslint-disable-next-line import/prefer-default-export
export const deleteNotification = (id) => ({ export const deleteNotification = id => ({
type: EntryActionTypes.NOTIFICATION_DELETE, type: EntryActionTypes.NOTIFICATION_DELETE,
payload: { payload: {
id, id,

View file

@ -1,13 +1,13 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createMembershipInCurrentProject = (data) => ({ export const createMembershipInCurrentProject = data => ({
type: EntryActionTypes.MEMBERSHIP_IN_CURRENT_PROJECT_CREATE, type: EntryActionTypes.MEMBERSHIP_IN_CURRENT_PROJECT_CREATE,
payload: { payload: {
data, data,
}, },
}); });
export const deleteProjectMembership = (id) => ({ export const deleteProjectMembership = id => ({
type: EntryActionTypes.PROJECT_MEMBERSHIP_DELETE, type: EntryActionTypes.PROJECT_MEMBERSHIP_DELETE,
payload: { payload: {
id, id,

View file

@ -1,13 +1,13 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createProject = (data) => ({ export const createProject = data => ({
type: EntryActionTypes.PROJECT_CREATE, type: EntryActionTypes.PROJECT_CREATE,
payload: { payload: {
data, data,
}, },
}); });
export const updateCurrentProject = (data) => ({ export const updateCurrentProject = data => ({
type: EntryActionTypes.CURRENT_PROJECT_UPDATE, type: EntryActionTypes.CURRENT_PROJECT_UPDATE,
payload: { payload: {
data, data,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createTaskInCurrentCard = (data) => ({ export const createTaskInCurrentCard = data => ({
type: EntryActionTypes.TASK_IN_CURRENT_CARD_CREATE, type: EntryActionTypes.TASK_IN_CURRENT_CARD_CREATE,
payload: { payload: {
data, data,
@ -15,7 +15,7 @@ export const updateTask = (id, data) => ({
}, },
}); });
export const deleteTask = (id) => ({ export const deleteTask = id => ({
type: EntryActionTypes.TASK_DELETE, type: EntryActionTypes.TASK_DELETE,
payload: { payload: {
id, id,

View file

@ -1,6 +1,6 @@
import EntryActionTypes from '../../constants/EntryActionTypes'; import EntryActionTypes from '../../constants/EntryActionTypes';
export const createUser = (data) => ({ export const createUser = data => ({
type: EntryActionTypes.USER_CREATE, type: EntryActionTypes.USER_CREATE,
payload: { payload: {
data, data,
@ -20,14 +20,14 @@ export const updateUser = (id, data) => ({
}, },
}); });
export const updateCurrentUser = (data) => ({ export const updateCurrentUser = data => ({
type: EntryActionTypes.CURRENT_USER_UPDATE, type: EntryActionTypes.CURRENT_USER_UPDATE,
payload: { payload: {
data, data,
}, },
}); });
export const updateCurrentUserEmail = (data) => ({ export const updateCurrentUserEmail = data => ({
type: EntryActionTypes.CURRENT_USER_EMAIL_UPDATE, type: EntryActionTypes.CURRENT_USER_EMAIL_UPDATE,
payload: { payload: {
data, data,
@ -39,7 +39,7 @@ export const clearCurrentUserEmailUpdateError = () => ({
payload: {}, payload: {},
}); });
export const updateCurrentUserPassword = (data) => ({ export const updateCurrentUserPassword = data => ({
type: EntryActionTypes.CURRENT_USER_PASSWORD_UPDATE, type: EntryActionTypes.CURRENT_USER_PASSWORD_UPDATE,
payload: { payload: {
data, data,
@ -51,14 +51,14 @@ export const clearCurrentUserPasswordUpdateError = () => ({
payload: {}, payload: {},
}); });
export const uploadCurrentUserAvatar = (file) => ({ export const uploadCurrentUserAvatar = file => ({
type: EntryActionTypes.CURRENT_USER_AVATAR_UPLOAD, type: EntryActionTypes.CURRENT_USER_AVATAR_UPLOAD,
payload: { payload: {
file, file,
}, },
}); });
export const deleteUser = (id) => ({ export const deleteUser = id => ({
type: EntryActionTypes.USER_DELETE, type: EntryActionTypes.USER_DELETE,
payload: { payload: {
id, id,
@ -73,7 +73,7 @@ export const addUserToCard = (id, cardId) => ({
}, },
}); });
export const addUserToCurrentCard = (id) => ({ export const addUserToCurrentCard = id => ({
type: EntryActionTypes.USER_TO_CURRENT_CARD_ADD, type: EntryActionTypes.USER_TO_CURRENT_CARD_ADD,
payload: { payload: {
id, id,
@ -88,21 +88,21 @@ export const removeUserFromCard = (id, cardId) => ({
}, },
}); });
export const removeUserFromCurrentCard = (id) => ({ export const removeUserFromCurrentCard = id => ({
type: EntryActionTypes.USER_FROM_CURRENT_CARD_REMOVE, type: EntryActionTypes.USER_FROM_CURRENT_CARD_REMOVE,
payload: { payload: {
id, id,
}, },
}); });
export const addUserToFilterInCurrentBoard = (id) => ({ export const addUserToFilterInCurrentBoard = id => ({
type: EntryActionTypes.USER_TO_FILTER_IN_CURRENT_BOARD_ADD, type: EntryActionTypes.USER_TO_FILTER_IN_CURRENT_BOARD_ADD,
payload: { payload: {
id, id,
}, },
}); });
export const removeUserFromFilterInCurrentBoard = (id) => ({ export const removeUserFromFilterInCurrentBoard = id => ({
type: EntryActionTypes.USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE, type: EntryActionTypes.USER_FROM_FILTER_IN_CURRENT_BOARD_REMOVE,
payload: { payload: {
id, id,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createLabel = (label) => ({ export const createLabel = label => ({
type: ActionTypes.LABEL_CREATE, type: ActionTypes.LABEL_CREATE,
payload: { payload: {
label, label,
@ -17,7 +17,7 @@ export const updateLabel = (id, data) => ({
}, },
}); });
export const deleteLabel = (id) => ({ export const deleteLabel = id => ({
type: ActionTypes.LABEL_DELETE, type: ActionTypes.LABEL_DELETE,
payload: { payload: {
id, id,
@ -82,7 +82,7 @@ export const createLabelFailed = (localId, error) => ({
}, },
}); });
export const createLabelReceived = (label) => ({ export const createLabelReceived = label => ({
type: ActionTypes.LABEL_CREATE_RECEIVED, type: ActionTypes.LABEL_CREATE_RECEIVED,
payload: { payload: {
label, label,
@ -97,7 +97,7 @@ export const updateLabelRequested = (id, data) => ({
}, },
}); });
export const updateLabelSucceeded = (label) => ({ export const updateLabelSucceeded = label => ({
type: ActionTypes.LABEL_UPDATE_SUCCEEDED, type: ActionTypes.LABEL_UPDATE_SUCCEEDED,
payload: { payload: {
label, label,
@ -112,21 +112,21 @@ export const updateLabelFailed = (id, error) => ({
}, },
}); });
export const updateLabelReceived = (label) => ({ export const updateLabelReceived = label => ({
type: ActionTypes.LABEL_UPDATE_RECEIVED, type: ActionTypes.LABEL_UPDATE_RECEIVED,
payload: { payload: {
label, label,
}, },
}); });
export const deleteLabelRequested = (id) => ({ export const deleteLabelRequested = id => ({
type: ActionTypes.LABEL_DELETE_REQUESTED, type: ActionTypes.LABEL_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteLabelSucceeded = (label) => ({ export const deleteLabelSucceeded = label => ({
type: ActionTypes.LABEL_DELETE_SUCCEEDED, type: ActionTypes.LABEL_DELETE_SUCCEEDED,
payload: { payload: {
label, label,
@ -141,7 +141,7 @@ export const deleteLabelFailed = (id, error) => ({
}, },
}); });
export const deleteLabelReceived = (label) => ({ export const deleteLabelReceived = label => ({
type: ActionTypes.LABEL_DELETE_RECEIVED, type: ActionTypes.LABEL_DELETE_RECEIVED,
payload: { payload: {
label, label,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createList = (list) => ({ export const createList = list => ({
type: ActionTypes.LIST_CREATE, type: ActionTypes.LIST_CREATE,
payload: { payload: {
list, list,
@ -17,7 +17,7 @@ export const updateList = (id, data) => ({
}, },
}); });
export const deleteList = (id) => ({ export const deleteList = id => ({
type: ActionTypes.LIST_DELETE, type: ActionTypes.LIST_DELETE,
payload: { payload: {
id, id,
@ -50,7 +50,7 @@ export const createListFailed = (localId, error) => ({
}, },
}); });
export const createListReceived = (list) => ({ export const createListReceived = list => ({
type: ActionTypes.LIST_CREATE_RECEIVED, type: ActionTypes.LIST_CREATE_RECEIVED,
payload: { payload: {
list, list,
@ -65,7 +65,7 @@ export const updateListRequested = (id, data) => ({
}, },
}); });
export const updateListSucceeded = (list) => ({ export const updateListSucceeded = list => ({
type: ActionTypes.LIST_UPDATE_SUCCEEDED, type: ActionTypes.LIST_UPDATE_SUCCEEDED,
payload: { payload: {
list, list,
@ -80,21 +80,21 @@ export const updateListFailed = (id, error) => ({
}, },
}); });
export const updateListReceived = (list) => ({ export const updateListReceived = list => ({
type: ActionTypes.LIST_UPDATE_RECEIVED, type: ActionTypes.LIST_UPDATE_RECEIVED,
payload: { payload: {
list, list,
}, },
}); });
export const deleteListRequested = (id) => ({ export const deleteListRequested = id => ({
type: ActionTypes.LIST_DELETE_REQUESTED, type: ActionTypes.LIST_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteListSucceeded = (list) => ({ export const deleteListSucceeded = list => ({
type: ActionTypes.LIST_DELETE_SUCCEEDED, type: ActionTypes.LIST_DELETE_SUCCEEDED,
payload: { payload: {
list, list,
@ -109,7 +109,7 @@ export const deleteListFailed = (id, error) => ({
}, },
}); });
export const deleteListReceived = (list) => ({ export const deleteListReceived = list => ({
type: ActionTypes.LIST_DELETE_RECEIVED, type: ActionTypes.LIST_DELETE_RECEIVED,
payload: { payload: {
list, list,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const authenticate = (data) => ({ export const authenticate = data => ({
type: ActionTypes.AUTHENTICATE, type: ActionTypes.AUTHENTICATE,
payload: { payload: {
data, data,
@ -21,21 +21,21 @@ export const logout = () => ({
/* Events */ /* Events */
export const authenticateRequested = (data) => ({ export const authenticateRequested = data => ({
type: ActionTypes.AUTHENTICATE_REQUESTED, type: ActionTypes.AUTHENTICATE_REQUESTED,
payload: { payload: {
data, data,
}, },
}); });
export const authenticateSucceeded = (accessToken) => ({ export const authenticateSucceeded = accessToken => ({
type: ActionTypes.AUTHENTICATE_SUCCEEDED, type: ActionTypes.AUTHENTICATE_SUCCEEDED,
payload: { payload: {
accessToken, accessToken,
}, },
}); });
export const authenticateFailed = (error) => ({ export const authenticateFailed = error => ({
type: ActionTypes.AUTHENTICATE_FAILED, type: ActionTypes.AUTHENTICATE_FAILED,
payload: { payload: {
error, error,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const openModal = (type) => ({ export const openModal = type => ({
type: ActionTypes.MODAL_OPEN, type: ActionTypes.MODAL_OPEN,
payload: { payload: {
type, type,

View file

@ -12,7 +12,7 @@ export const createNotificationReceived = (notification, user, card, action) =>
}, },
}); });
export const deleteNotificationReceived = (notification) => ({ export const deleteNotificationReceived = notification => ({
type: ActionTypes.NOTIFICATION_DELETE_RECEIVED, type: ActionTypes.NOTIFICATION_DELETE_RECEIVED,
payload: { payload: {
notification, notification,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const deleteNotifications = (ids) => ({ export const deleteNotifications = ids => ({
type: ActionTypes.NOTIFICATIONS_DELETE, type: ActionTypes.NOTIFICATIONS_DELETE,
payload: { payload: {
ids, ids,
@ -26,21 +26,21 @@ export const fetchNotificationsSucceeded = (notifications, users, cards, actions
}, },
}); });
export const fetchNotificationsFailed = (error) => ({ export const fetchNotificationsFailed = error => ({
type: ActionTypes.NOTIFICATIONS_FETCH_FAILED, type: ActionTypes.NOTIFICATIONS_FETCH_FAILED,
payload: { payload: {
error, error,
}, },
}); });
export const deleteNotificationsRequested = (ids) => ({ export const deleteNotificationsRequested = ids => ({
type: ActionTypes.NOTIFICATIONS_DELETE_REQUESTED, type: ActionTypes.NOTIFICATIONS_DELETE_REQUESTED,
payload: { payload: {
ids, ids,
}, },
}); });
export const deleteNotificationsSucceeded = (notifications) => ({ export const deleteNotificationsSucceeded = notifications => ({
type: ActionTypes.NOTIFICATIONS_DELETE_SUCCEEDED, type: ActionTypes.NOTIFICATIONS_DELETE_SUCCEEDED,
payload: { payload: {
notifications, notifications,

View file

@ -2,14 +2,14 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createProjectMembership = (projectMembership) => ({ export const createProjectMembership = projectMembership => ({
type: ActionTypes.PROJECT_MEMBERSHIP_CREATE, type: ActionTypes.PROJECT_MEMBERSHIP_CREATE,
payload: { payload: {
projectMembership, projectMembership,
}, },
}); });
export const deleteProjectMembership = (id) => ({ export const deleteProjectMembership = id => ({
type: ActionTypes.PROJECT_MEMBERSHIP_DELETE, type: ActionTypes.PROJECT_MEMBERSHIP_DELETE,
payload: { payload: {
id, id,
@ -50,14 +50,14 @@ export const createProjectMembershipReceived = (projectMembership, user) => ({
}, },
}); });
export const deleteProjectMembershipRequested = (id) => ({ export const deleteProjectMembershipRequested = id => ({
type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_REQUESTED, type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteProjectMembershipSucceeded = (projectMembership) => ({ export const deleteProjectMembershipSucceeded = projectMembership => ({
type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_SUCCEEDED, type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_SUCCEEDED,
payload: { payload: {
projectMembership, projectMembership,
@ -72,7 +72,7 @@ export const deleteProjectMembershipFailed = (id, error) => ({
}, },
}); });
export const deleteProjectMembershipReceived = (projectMembership) => ({ export const deleteProjectMembershipReceived = projectMembership => ({
type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_RECEIVED, type: ActionTypes.PROJECT_MEMBERSHIP_DELETE_RECEIVED,
payload: { payload: {
projectMembership, projectMembership,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createProject = (data) => ({ export const createProject = data => ({
type: ActionTypes.PROJECT_CREATE, type: ActionTypes.PROJECT_CREATE,
payload: { payload: {
data, data,
@ -17,7 +17,7 @@ export const updateProject = (id, data) => ({
}, },
}); });
export const deleteProject = (id) => ({ export const deleteProject = id => ({
type: ActionTypes.PROJECT_DELETE, type: ActionTypes.PROJECT_DELETE,
payload: { payload: {
id, id,
@ -26,7 +26,7 @@ export const deleteProject = (id) => ({
/* Events */ /* Events */
export const createProjectRequested = (data) => ({ export const createProjectRequested = data => ({
type: ActionTypes.PROJECT_CREATE_REQUESTED, type: ActionTypes.PROJECT_CREATE_REQUESTED,
payload: { payload: {
data, data,
@ -43,7 +43,7 @@ export const createProjectSucceeded = (project, users, projectMemberships, board
}, },
}); });
export const createProjectFailed = (error) => ({ export const createProjectFailed = error => ({
type: ActionTypes.PROJECT_CREATE_FAILED, type: ActionTypes.PROJECT_CREATE_FAILED,
payload: { payload: {
error, error,
@ -68,7 +68,7 @@ export const updateProjectRequested = (id, data) => ({
}, },
}); });
export const updateProjectSucceeded = (project) => ({ export const updateProjectSucceeded = project => ({
type: ActionTypes.PROJECT_UPDATE_SUCCEEDED, type: ActionTypes.PROJECT_UPDATE_SUCCEEDED,
payload: { payload: {
project, project,
@ -83,21 +83,21 @@ export const updateProjectFailed = (id, error) => ({
}, },
}); });
export const updateProjectReceived = (project) => ({ export const updateProjectReceived = project => ({
type: ActionTypes.PROJECT_UPDATE_RECEIVED, type: ActionTypes.PROJECT_UPDATE_RECEIVED,
payload: { payload: {
project, project,
}, },
}); });
export const deleteProjectRequested = (id) => ({ export const deleteProjectRequested = id => ({
type: ActionTypes.PROJECT_DELETE_REQUESTED, type: ActionTypes.PROJECT_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteProjectSucceeded = (project) => ({ export const deleteProjectSucceeded = project => ({
type: ActionTypes.PROJECT_DELETE_SUCCEEDED, type: ActionTypes.PROJECT_DELETE_SUCCEEDED,
payload: { payload: {
project, project,
@ -112,7 +112,7 @@ export const deleteProjectFailed = (id, error) => ({
}, },
}); });
export const deleteProjectReceived = (project) => ({ export const deleteProjectReceived = project => ({
type: ActionTypes.PROJECT_DELETE_RECEIVED, type: ActionTypes.PROJECT_DELETE_RECEIVED,
payload: { payload: {
project, project,

View file

@ -17,7 +17,7 @@ export const fetchProjectsSucceeded = (projects, users, projectMemberships, boar
}, },
}); });
export const fetchProjectsFailed = (error) => ({ export const fetchProjectsFailed = error => ({
type: ActionTypes.PROJECTS_FETCH_FAILED, type: ActionTypes.PROJECTS_FETCH_FAILED,
payload: { payload: {
error, error,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createTask = (task) => ({ export const createTask = task => ({
type: ActionTypes.TASK_CREATE, type: ActionTypes.TASK_CREATE,
payload: { payload: {
task, task,
@ -17,7 +17,7 @@ export const updateTask = (id, data) => ({
}, },
}); });
export const deleteTask = (id) => ({ export const deleteTask = id => ({
type: ActionTypes.TASK_DELETE, type: ActionTypes.TASK_DELETE,
payload: { payload: {
id, id,
@ -50,7 +50,7 @@ export const createTaskFailed = (localId, error) => ({
}, },
}); });
export const createTaskReceived = (task) => ({ export const createTaskReceived = task => ({
type: ActionTypes.TASK_CREATE_RECEIVED, type: ActionTypes.TASK_CREATE_RECEIVED,
payload: { payload: {
task, task,
@ -65,7 +65,7 @@ export const updateTaskRequested = (id, data) => ({
}, },
}); });
export const updateTaskSucceeded = (task) => ({ export const updateTaskSucceeded = task => ({
type: ActionTypes.TASK_UPDATE_SUCCEEDED, type: ActionTypes.TASK_UPDATE_SUCCEEDED,
payload: { payload: {
task, task,
@ -80,21 +80,21 @@ export const updateTaskFailed = (id, error) => ({
}, },
}); });
export const updateTaskReceived = (task) => ({ export const updateTaskReceived = task => ({
type: ActionTypes.TASK_UPDATE_RECEIVED, type: ActionTypes.TASK_UPDATE_RECEIVED,
payload: { payload: {
task, task,
}, },
}); });
export const deleteTaskRequested = (id) => ({ export const deleteTaskRequested = id => ({
type: ActionTypes.TASK_DELETE_REQUESTED, type: ActionTypes.TASK_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteTaskSucceeded = (task) => ({ export const deleteTaskSucceeded = task => ({
type: ActionTypes.TASK_DELETE_SUCCEEDED, type: ActionTypes.TASK_DELETE_SUCCEEDED,
payload: { payload: {
task, task,
@ -109,7 +109,7 @@ export const deleteTaskFailed = (id, error) => ({
}, },
}); });
export const deleteTaskReceived = (task) => ({ export const deleteTaskReceived = task => ({
type: ActionTypes.TASK_DELETE_RECEIVED, type: ActionTypes.TASK_DELETE_RECEIVED,
payload: { payload: {
task, task,

View file

@ -2,7 +2,7 @@ import ActionTypes from '../constants/ActionTypes';
/* Actions */ /* Actions */
export const createUser = (data) => ({ export const createUser = data => ({
type: ActionTypes.USER_CREATE, type: ActionTypes.USER_CREATE,
payload: { payload: {
data, data,
@ -22,21 +22,21 @@ export const updateUser = (id, data) => ({
}, },
}); });
export const clearUserEmailUpdateError = (id) => ({ export const clearUserEmailUpdateError = id => ({
type: ActionTypes.USER_EMAIL_UPDATE_ERROR_CLEAR, type: ActionTypes.USER_EMAIL_UPDATE_ERROR_CLEAR,
payload: { payload: {
id, id,
}, },
}); });
export const clearUserPasswordUpdateError = (id) => ({ export const clearUserPasswordUpdateError = id => ({
type: ActionTypes.USER_PASSWORD_UPDATE_ERROR_CLEAR, type: ActionTypes.USER_PASSWORD_UPDATE_ERROR_CLEAR,
payload: { payload: {
id, id,
}, },
}); });
export const deleteUser = (id) => ({ export const deleteUser = id => ({
type: ActionTypes.USER_DELETE, type: ActionTypes.USER_DELETE,
payload: { payload: {
id, id,
@ -78,28 +78,28 @@ export const removeUserFromBoardFilter = (id, boardId) => ({
/* Events */ /* Events */
export const createUserRequested = (data) => ({ export const createUserRequested = data => ({
type: ActionTypes.USER_CREATE_REQUESTED, type: ActionTypes.USER_CREATE_REQUESTED,
payload: { payload: {
data, data,
}, },
}); });
export const createUserSucceeded = (user) => ({ export const createUserSucceeded = user => ({
type: ActionTypes.USER_CREATE_SUCCEEDED, type: ActionTypes.USER_CREATE_SUCCEEDED,
payload: { payload: {
user, user,
}, },
}); });
export const createUserFailed = (error) => ({ export const createUserFailed = error => ({
type: ActionTypes.USER_CREATE_FAILED, type: ActionTypes.USER_CREATE_FAILED,
payload: { payload: {
error, error,
}, },
}); });
export const createUserReceived = (user) => ({ export const createUserReceived = user => ({
type: ActionTypes.USER_CREATE_RECEIVED, type: ActionTypes.USER_CREATE_RECEIVED,
payload: { payload: {
user, user,
@ -111,14 +111,14 @@ export const fetchCurrentUserRequested = () => ({
payload: {}, payload: {},
}); });
export const fetchCurrentUserSucceeded = (user) => ({ export const fetchCurrentUserSucceeded = user => ({
type: ActionTypes.CURRENT_USER_FETCH_SUCCEEDED, type: ActionTypes.CURRENT_USER_FETCH_SUCCEEDED,
payload: { payload: {
user, user,
}, },
}); });
export const fetchCurrentUserFailed = (error) => ({ export const fetchCurrentUserFailed = error => ({
type: ActionTypes.CURRENT_USER_FETCH_FAILED, type: ActionTypes.CURRENT_USER_FETCH_FAILED,
payload: { payload: {
error, error,
@ -133,7 +133,7 @@ export const updateUserRequested = (id, data) => ({
}, },
}); });
export const updateUserSucceeded = (user) => ({ export const updateUserSucceeded = user => ({
type: ActionTypes.USER_UPDATE_SUCCEEDED, type: ActionTypes.USER_UPDATE_SUCCEEDED,
payload: { payload: {
user, user,
@ -148,7 +148,7 @@ export const updateUserFailed = (id, error) => ({
}, },
}); });
export const updateUserReceived = (user) => ({ export const updateUserReceived = user => ({
type: ActionTypes.USER_UPDATE_RECEIVED, type: ActionTypes.USER_UPDATE_RECEIVED,
payload: { payload: {
user, user,
@ -187,7 +187,7 @@ export const updateUserPasswordRequested = (id, data) => ({
}, },
}); });
export const updateUserPasswordSucceeded = (id) => ({ export const updateUserPasswordSucceeded = id => ({
type: ActionTypes.USER_PASSWORD_UPDATE_SUCCEEDED, type: ActionTypes.USER_PASSWORD_UPDATE_SUCCEEDED,
payload: { payload: {
id, id,
@ -202,7 +202,7 @@ export const updateUserPasswordFailed = (id, error) => ({
}, },
}); });
export const uploadUserAvatarRequested = (id) => ({ export const uploadUserAvatarRequested = id => ({
type: ActionTypes.USER_AVATAR_UPLOAD_REQUESTED, type: ActionTypes.USER_AVATAR_UPLOAD_REQUESTED,
payload: { payload: {
id, id,
@ -225,14 +225,14 @@ export const uploadUserAvatarFailed = (id, error) => ({
}, },
}); });
export const deleteUserRequested = (id) => ({ export const deleteUserRequested = id => ({
type: ActionTypes.USER_DELETE_REQUESTED, type: ActionTypes.USER_DELETE_REQUESTED,
payload: { payload: {
id, id,
}, },
}); });
export const deleteUserSucceeded = (user) => ({ export const deleteUserSucceeded = user => ({
type: ActionTypes.USER_DELETE_SUCCEEDED, type: ActionTypes.USER_DELETE_SUCCEEDED,
payload: { payload: {
user, user,
@ -247,7 +247,7 @@ export const deleteUserFailed = (id, error) => ({
}, },
}); });
export const deleteUserReceived = (user) => ({ export const deleteUserReceived = user => ({
type: ActionTypes.USER_DELETE_RECEIVED, type: ActionTypes.USER_DELETE_RECEIVED,
payload: { payload: {
user, user,

View file

@ -7,14 +7,14 @@ export const fetchUsersRequested = () => ({
payload: {}, payload: {},
}); });
export const fetchUsersSucceeded = (users) => ({ export const fetchUsersSucceeded = users => ({
type: ActionTypes.USERS_FETCH_SUCCEEDED, type: ActionTypes.USERS_FETCH_SUCCEEDED,
payload: { payload: {
users, users,
}, },
}); });
export const fetchUsersFailed = (error) => ({ export const fetchUsersFailed = error => ({
type: ActionTypes.USERS_FETCH_FAILED, type: ActionTypes.USERS_FETCH_FAILED,
payload: { payload: {
error, error,

View file

@ -2,21 +2,22 @@ import socket from './socket';
/* Transformers */ /* Transformers */
export const transformAction = (action) => ({ export const transformAction = action => ({
...action, ...action,
createdAt: new Date(action.createdAt), createdAt: new Date(action.createdAt),
}); });
/* Actions */ /* Actions */
const getActions = (cardId, data, headers) => socket.get(`/cards/${cardId}/actions`, data, headers).then((body) => ({ const getActions = (cardId, data, headers) =>
...body, socket.get(`/cards/${cardId}/actions`, data, headers).then(body => ({
items: body.items.map(transformAction), ...body,
})); items: body.items.map(transformAction),
}));
/* Event handlers */ /* Event handlers */
const makeHandleActionCreate = (next) => (body) => { const makeHandleActionCreate = next => body => {
next({ next({
...body, ...body,
item: transformAction(body.item), item: transformAction(body.item),

View file

@ -3,15 +3,17 @@ import { transformCard } from './cards';
/* Actions */ /* Actions */
const createBoard = (projectId, data, headers) => socket.post(`/projects/${projectId}/boards`, data, headers); const createBoard = (projectId, data, headers) =>
socket.post(`/projects/${projectId}/boards`, data, headers);
const getBoard = (id, headers) => socket.get(`/boards/${id}`, undefined, headers).then((body) => ({ const getBoard = (id, headers) =>
...body, socket.get(`/boards/${id}`, undefined, headers).then(body => ({
included: { ...body,
...body.included, included: {
cards: body.included.cards.map(transformCard), ...body.included,
}, cards: body.included.cards.map(transformCard),
})); },
}));
const updateBoard = (id, data, headers) => socket.patch(`/boards/${id}`, data, headers); const updateBoard = (id, data, headers) => socket.patch(`/boards/${id}`, data, headers);

View file

@ -2,9 +2,11 @@ import socket from './socket';
/* Actions */ /* Actions */
const createCardLabel = (cardId, data, headers) => socket.post(`/cards/${cardId}/labels`, data, headers); const createCardLabel = (cardId, data, headers) =>
socket.post(`/cards/${cardId}/labels`, data, headers);
const deleteCardLabel = (cardId, labelId, headers) => socket.delete(`/cards/${cardId}/labels/${labelId}`, undefined, headers); const deleteCardLabel = (cardId, labelId, headers) =>
socket.delete(`/cards/${cardId}/labels/${labelId}`, undefined, headers);
export default { export default {
createCardLabel, createCardLabel,

View file

@ -2,9 +2,11 @@ import socket from './socket';
/* Actions */ /* Actions */
const createCardMembership = (cardId, data, headers) => socket.post(`/cards/${cardId}/memberships`, data, headers); const createCardMembership = (cardId, data, headers) =>
socket.post(`/cards/${cardId}/memberships`, data, headers);
const deleteCardMembership = (cardId, userId, headers) => socket.delete(`/cards/${cardId}/memberships?userId=${userId}`, undefined, headers); const deleteCardMembership = (cardId, userId, headers) =>
socket.delete(`/cards/${cardId}/memberships?userId=${userId}`, undefined, headers);
export default { export default {
createCardMembership, createCardMembership,

View file

@ -2,7 +2,7 @@ import socket from './socket';
/* Transformers */ /* Transformers */
export const transformCard = (card) => ({ export const transformCard = card => ({
...card, ...card,
...(card.dueDate && { ...(card.dueDate && {
dueDate: new Date(card.dueDate), dueDate: new Date(card.dueDate),
@ -17,7 +17,7 @@ export const transformCard = (card) => ({
}), }),
}); });
export const transformCardData = (data) => ({ export const transformCardData = data => ({
...data, ...data,
...(data.dueDate && { ...(data.dueDate && {
dueDate: data.dueDate.toISOString(), dueDate: data.dueDate.toISOString(),
@ -34,29 +34,33 @@ export const transformCardData = (data) => ({
/* Actions */ /* Actions */
const createCard = (listId, data, headers) => socket.post(`/lists/${listId}/cards`, transformCardData(data), headers).then((body) => ({ const createCard = (listId, data, headers) =>
...body, socket.post(`/lists/${listId}/cards`, transformCardData(data), headers).then(body => ({
item: transformCard(body.item), ...body,
})); item: transformCard(body.item),
}));
const getCard = (id, headers) => socket.get(`/cards/${id}`, undefined, headers).then((body) => ({ const getCard = (id, headers) =>
...body, socket.get(`/cards/${id}`, undefined, headers).then(body => ({
item: transformCard(body.item), ...body,
})); item: transformCard(body.item),
}));
const updateCard = (id, data, headers) => socket.patch(`/cards/${id}`, transformCardData(data), headers).then((body) => ({ const updateCard = (id, data, headers) =>
...body, socket.patch(`/cards/${id}`, transformCardData(data), headers).then(body => ({
item: transformCard(body.item), ...body,
})); item: transformCard(body.item),
}));
const deleteCard = (id, headers) => socket.delete(`/cards/${id}`, undefined, headers).then((body) => ({ const deleteCard = (id, headers) =>
...body, socket.delete(`/cards/${id}`, undefined, headers).then(body => ({
item: transformCard(body.item), ...body,
})); item: transformCard(body.item),
}));
/* Event handlers */ /* Event handlers */
const makeHandleCardCreate = (next) => (body) => { const makeHandleCardCreate = next => body => {
next({ next({
...body, ...body,
item: transformCard(body.item), item: transformCard(body.item),

View file

@ -3,20 +3,23 @@ import { transformAction } from './actions';
/* Actions */ /* Actions */
const createCommentAction = (cardId, data, headers) => socket.post(`/cards/${cardId}/comment-actions`, data, headers).then((body) => ({ const createCommentAction = (cardId, data, headers) =>
...body, socket.post(`/cards/${cardId}/comment-actions`, data, headers).then(body => ({
item: transformAction(body.item), ...body,
})); item: transformAction(body.item),
}));
const updateCommentAction = (id, data, headers) => socket.patch(`/comment-actions/${id}`, data, headers).then((body) => ({ const updateCommentAction = (id, data, headers) =>
...body, socket.patch(`/comment-actions/${id}`, data, headers).then(body => ({
item: transformAction(body.item), ...body,
})); item: transformAction(body.item),
}));
const deleteCommentAction = (id, headers) => socket.delete(`/comment-actions/${id}`, undefined, headers).then((body) => ({ const deleteCommentAction = (id, headers) =>
...body, socket.delete(`/comment-actions/${id}`, undefined, headers).then(body => ({
item: transformAction(body.item), ...body,
})); item: transformAction(body.item),
}));
export default { export default {
createCommentAction, createCommentAction,

View file

@ -5,7 +5,7 @@ import Config from '../constants/Config';
const http = {}; const http = {};
// TODO: all methods // TODO: all methods
['POST'].forEach((method) => { ['POST'].forEach(method => {
http[method.toLowerCase()] = (url, data, headers) => { http[method.toLowerCase()] = (url, data, headers) => {
const formData = Object.keys(data).reduce((result, key) => { const formData = Object.keys(data).reduce((result, key) => {
result.append(key, data[key]); result.append(key, data[key]);
@ -18,10 +18,12 @@ const http = {};
headers, headers,
body: formData, body: formData,
}) })
.then((response) => response.json().then((body) => ({ .then(response =>
body, response.json().then(body => ({
isError: response.status !== 200, body,
}))) isError: response.status !== 200,
})),
)
.then(({ body, isError }) => { .then(({ body, isError }) => {
if (isError) { if (isError) {
throw body; throw body;

View file

@ -2,7 +2,8 @@ import socket from './socket';
/* Actions */ /* Actions */
const createLabel = (boardId, data, headers) => socket.post(`/boards/${boardId}/labels`, data, headers); const createLabel = (boardId, data, headers) =>
socket.post(`/boards/${boardId}/labels`, data, headers);
const updateLabel = (id, data, headers) => socket.patch(`/labels/${id}`, data, headers); const updateLabel = (id, data, headers) => socket.patch(`/labels/${id}`, data, headers);

View file

@ -2,7 +2,8 @@ import socket from './socket';
/* Actions */ /* Actions */
const createList = (boardId, data, headers) => socket.post(`/boards/${boardId}/lists`, data, headers); const createList = (boardId, data, headers) =>
socket.post(`/boards/${boardId}/lists`, data, headers);
const updateList = (id, data, headers) => socket.patch(`/lists/${id}`, data, headers); const updateList = (id, data, headers) => socket.patch(`/lists/${id}`, data, headers);

View file

@ -4,20 +4,22 @@ import { transformAction } from './actions';
/* Actions */ /* Actions */
const getNotifications = (headers) => socket.get('/notifications', undefined, headers).then((body) => ({ const getNotifications = headers =>
...body, socket.get('/notifications', undefined, headers).then(body => ({
included: { ...body,
...body.included, included: {
cards: body.included.cards.map(transformCard), ...body.included,
actions: body.included.actions.map(transformAction), cards: body.included.cards.map(transformCard),
}, actions: body.included.actions.map(transformAction),
})); },
}));
const updateNotifications = (ids, data, headers) => socket.patch(`/notifications/${ids.join(',')}`, data, headers); const updateNotifications = (ids, data, headers) =>
socket.patch(`/notifications/${ids.join(',')}`, data, headers);
/* Event handlers */ /* Event handlers */
const makeHandleNotificationCreate = (next) => (body) => { const makeHandleNotificationCreate = next => body => {
next({ next({
...body, ...body,
included: { included: {

View file

@ -2,9 +2,11 @@ import socket from './socket';
/* Actions */ /* Actions */
const createProjectMembership = (projectId, data, headers) => socket.post(`/projects/${projectId}/memberships`, data, headers); const createProjectMembership = (projectId, data, headers) =>
socket.post(`/projects/${projectId}/memberships`, data, headers);
const deleteProjectMembership = (id, headers) => socket.delete(`/project-memberships/${id}`, undefined, headers); const deleteProjectMembership = (id, headers) =>
socket.delete(`/project-memberships/${id}`, undefined, headers);
export default { export default {
createProjectMembership, createProjectMembership,

View file

@ -2,7 +2,7 @@ import socket from './socket';
/* Actions */ /* Actions */
const getProjects = (headers) => socket.get('/projects', undefined, headers); const getProjects = headers => socket.get('/projects', undefined, headers);
const createProject = (data, headers) => socket.post('/projects', data, headers); const createProject = (data, headers) => socket.post('/projects', data, headers);

View file

@ -15,24 +15,25 @@ const { socket } = io;
socket.connect = socket._connect; // eslint-disable-line no-underscore-dangle socket.connect = socket._connect; // eslint-disable-line no-underscore-dangle
['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].forEach((method) => { ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].forEach(method => {
socket[method.toLowerCase()] = (url, data, headers) => new Promise((resolve, reject) => { socket[method.toLowerCase()] = (url, data, headers) =>
socket.request( new Promise((resolve, reject) => {
{ socket.request(
method, {
data, method,
headers, data,
url: `/api${url}`, headers,
}, url: `/api${url}`,
(_, { body, error }) => { },
if (error) { (_, { body, error }) => {
reject(body); if (error) {
} else { reject(body);
resolve(body); } else {
} resolve(body);
}, }
); },
}); );
});
}); });
export default socket; export default socket;

View file

@ -3,25 +3,27 @@ import socket from './socket';
/* Actions */ /* Actions */
const getUsers = (headers) => socket.get('/users', undefined, headers); const getUsers = headers => socket.get('/users', undefined, headers);
const createUser = (data, headers) => socket.post('/users', data, headers); const createUser = (data, headers) => socket.post('/users', data, headers);
const getCurrentUser = (headers) => socket.get('/users/me', undefined, headers); const getCurrentUser = headers => socket.get('/users/me', undefined, headers);
const updateUser = (id, data, headers) => socket.patch(`/users/${id}`, data, headers); const updateUser = (id, data, headers) => socket.patch(`/users/${id}`, data, headers);
const updateUserEmail = (id, data, headers) => socket.patch(`/users/${id}/email`, data, headers); const updateUserEmail = (id, data, headers) => socket.patch(`/users/${id}/email`, data, headers);
const updateUserPassword = (id, data, headers) => socket.patch(`/users/${id}/password`, data, headers); const updateUserPassword = (id, data, headers) =>
socket.patch(`/users/${id}/password`, data, headers);
const uploadUserAvatar = (id, file, headers) => http.post( const uploadUserAvatar = (id, file, headers) =>
`/users/${id}/upload-avatar`, http.post(
{ `/users/${id}/upload-avatar`,
file, {
}, file,
headers, },
); headers,
);
const deleteUser = (id, headers) => socket.delete(`/users/${id}`, undefined, headers); const deleteUser = (id, headers) => socket.delete(`/users/${id}`, undefined, headers);

View file

@ -1,18 +1,14 @@
import React, { useCallback, useEffect, useRef } from 'react'; import React, { useCallback, useEffect, useRef } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { import { Button, Form, Header, Modal } from 'semantic-ui-react';
Button, Form, Header, Modal,
} from 'semantic-ui-react';
import { Input } from '../../lib/custom-ui'; import { Input } from '../../lib/custom-ui';
import { useForm } from '../../hooks'; import { useForm } from '../../hooks';
import styles from './AddProjectModal.module.css'; import styles from './AddProjectModal.module.css';
const AddProjectModal = React.memo(({ const AddProjectModal = React.memo(({ defaultData, isSubmitting, onCreate, onClose }) => {
defaultData, isSubmitting, onCreate, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange] = useForm(() => ({ const [data, handleFieldChange] = useForm(() => ({

View file

@ -1,7 +1,5 @@
import isEmail from 'validator/lib/isEmail'; import isEmail from 'validator/lib/isEmail';
import React, { import React, { useCallback, useEffect, useMemo, useRef } from 'react';
useCallback, useEffect, useMemo, useRef,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Form, Message } from 'semantic-ui-react'; import { Button, Form, Message } from 'semantic-ui-react';
@ -13,7 +11,7 @@ import { useForm } from '../../hooks';
import styles from './AddUserPopup.module.css'; import styles from './AddUserPopup.module.css';
const createMessage = (error) => { const createMessage = error => {
if (!error) { if (!error) {
return error; return error;
} }
@ -32,9 +30,7 @@ const createMessage = (error) => {
}; };
const AddUserPopup = React.memo( const AddUserPopup = React.memo(
({ ({ defaultData, isSubmitting, error, onCreate, onMessageDismiss, onClose }) => {
defaultData, isSubmitting, error, onCreate, onMessageDismiss, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const wasSubmitting = usePrevious(isSubmitting); const wasSubmitting = usePrevious(isSubmitting);

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Form, Input } from 'semantic-ui-react'; import { Button, Form, Input } from 'semantic-ui-react';
@ -44,7 +42,7 @@ const AddList = React.forwardRef(({ children, onCreate }, ref) => {
}, [open]); }, [open]);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.key === 'Escape') { if (event.key === 'Escape') {
close(); close();
} }

View file

@ -13,7 +13,7 @@ import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-ic
import styles from './Board.module.css'; import styles from './Board.module.css';
const parseDndId = (dndId) => dndId.split(':')[1]; const parseDndId = dndId => dndId.split(':')[1];
const Board = React.memo( const Board = React.memo(
({ ({
@ -41,12 +41,10 @@ const Board = React.memo(
}, []); }, []);
const handleDragEnd = useCallback( const handleDragEnd = useCallback(
({ ({ draggableId, type, source, destination }) => {
draggableId, type, source, destination,
}) => {
if ( if (
!destination !destination ||
|| (source.droppableId === destination.droppableId && source.index === destination.index) (source.droppableId === destination.droppableId && source.index === destination.index)
) { ) {
return; return;
} }

View file

@ -26,14 +26,14 @@ const Filter = React.memo(
const [t] = useTranslation(); const [t] = useTranslation();
const handleUserRemoveClick = useCallback( const handleUserRemoveClick = useCallback(
(id) => { id => {
onUserRemove(id); onUserRemove(id);
}, },
[onUserRemove], [onUserRemove],
); );
const handleLabelRemoveClick = useCallback( const handleLabelRemoveClick = useCallback(
(id) => { id => {
onLabelRemove(id); onLabelRemove(id);
}, },
[onLabelRemove], [onLabelRemove],
@ -44,7 +44,7 @@ const Filter = React.memo(
<span className={styles.filter}> <span className={styles.filter}>
<ProjectMembershipsPopup <ProjectMembershipsPopup
items={allProjectMemberships} items={allProjectMemberships}
currentUserIds={users.map((user) => user.id)} currentUserIds={users.map(user => user.id)}
title={t('common.filterByMembers', { title={t('common.filterByMembers', {
context: 'title', context: 'title',
})} })}
@ -56,7 +56,7 @@ const Filter = React.memo(
{users.length === 0 && <span className={styles.filterLabel}>{t('common.all')}</span>} {users.length === 0 && <span className={styles.filterLabel}>{t('common.all')}</span>}
</button> </button>
</ProjectMembershipsPopup> </ProjectMembershipsPopup>
{users.map((user) => ( {users.map(user => (
<span key={user.id} className={styles.filterItem}> <span key={user.id} className={styles.filterItem}>
<User <User
name={user.name} name={user.name}
@ -70,7 +70,7 @@ const Filter = React.memo(
<span className={styles.filter}> <span className={styles.filter}>
<LabelsPopup <LabelsPopup
items={allLabels} items={allLabels}
currentIds={labels.map((label) => label.id)} currentIds={labels.map(label => label.id)}
title={t('common.filterByLabels', { title={t('common.filterByLabels', {
context: 'title', context: 'title',
})} })}
@ -85,7 +85,7 @@ const Filter = React.memo(
{labels.length === 0 && <span className={styles.filterLabel}>{t('common.all')}</span>} {labels.length === 0 && <span className={styles.filterLabel}>{t('common.all')}</span>}
</button> </button>
</LabelsPopup> </LabelsPopup>
{labels.map((label) => ( {labels.map(label => (
<span key={label.id} className={styles.filterItem}> <span key={label.id} className={styles.filterItem}>
<Label <Label
name={label.name} name={label.name}

View file

@ -18,9 +18,7 @@ import EditPopup from './EditPopup';
import styles from './Boards.module.css'; import styles from './Boards.module.css';
const Boards = React.memo( const Boards = React.memo(
({ ({ items, currentId, isEditable, onCreate, onUpdate, onMove, onDelete }) => {
items, currentId, isEditable, onCreate, onUpdate, onMove, onDelete,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleDragStart = useCallback(() => { const handleDragStart = useCallback(() => {
@ -46,76 +44,78 @@ const Boards = React.memo(
); );
const handleDelete = useCallback( const handleDelete = useCallback(
(id) => { id => {
onDelete(id); onDelete(id);
}, },
[onDelete], [onDelete],
); );
const renderItems = useCallback( const renderItems = useCallback(
(safeItems) => safeItems.map((item) => ( safeItems =>
<div key={item.id} className={styles.tabWrapper}> safeItems.map(item => (
<div className={classNames(styles.tab, item.id === currentId && styles.tabActive)}> <div key={item.id} className={styles.tabWrapper}>
{item.isPersisted ? ( <div className={classNames(styles.tab, item.id === currentId && styles.tabActive)}>
<Link {item.isPersisted ? (
to={Paths.BOARDS.replace(':id', item.id)} <Link
title={item.name} to={Paths.BOARDS.replace(':id', item.id)}
className={styles.link} title={item.name}
> className={styles.link}
{item.name} >
</Link> {item.name}
) : ( </Link>
<span className={styles.link}>{item.name}</span> ) : (
)} <span className={styles.link}>{item.name}</span>
)}
</div>
</div> </div>
</div> )),
)),
[currentId], [currentId],
); );
const renderEditableItems = useCallback( const renderEditableItems = useCallback(
(safeItems) => safeItems.map((item, index) => ( safeItems =>
<Draggable safeItems.map((item, index) => (
key={item.id} <Draggable
draggableId={item.id} key={item.id}
index={index} draggableId={item.id}
isDragDisabled={!item.isPersisted} index={index}
> isDragDisabled={!item.isPersisted}
{({ innerRef, draggableProps, dragHandleProps }) => ( >
// eslint-disable-next-line react/jsx-props-no-spreading {({ innerRef, draggableProps, dragHandleProps }) => (
<div {...draggableProps} ref={innerRef} className={styles.tabWrapper}> // eslint-disable-next-line react/jsx-props-no-spreading
<div className={classNames(styles.tab, item.id === currentId && styles.tabActive)}> <div {...draggableProps} ref={innerRef} className={styles.tabWrapper}>
{item.isPersisted ? ( <div className={classNames(styles.tab, item.id === currentId && styles.tabActive)}>
<Link {item.isPersisted ? (
{...dragHandleProps} // eslint-disable-line react/jsx-props-no-spreading <Link
to={Paths.BOARDS.replace(':id', item.id)} {...dragHandleProps} // eslint-disable-line react/jsx-props-no-spreading
title={item.name} to={Paths.BOARDS.replace(':id', item.id)}
className={styles.link} title={item.name}
> className={styles.link}
{item.name} >
</Link> {item.name}
) : ( </Link>
// eslint-disable-next-line react/jsx-props-no-spreading ) : (
<span {...dragHandleProps} className={styles.link}> // eslint-disable-next-line react/jsx-props-no-spreading
{item.name} <span {...dragHandleProps} className={styles.link}>
</span> {item.name}
)} </span>
{item.isPersisted && ( )}
<EditPopup {item.isPersisted && (
defaultData={pick(item, 'name')} <EditPopup
onUpdate={(data) => handleUpdate(item.id, data)} defaultData={pick(item, 'name')}
onDelete={() => handleDelete(item.id)} onUpdate={data => handleUpdate(item.id, data)}
> onDelete={() => handleDelete(item.id)}
<Button className={classNames(styles.editButton, styles.target)}> >
<Icon fitted name="pencil" size="small" /> <Button className={classNames(styles.editButton, styles.target)}>
</Button> <Icon fitted name="pencil" size="small" />
</EditPopup> </Button>
)} </EditPopup>
)}
</div>
</div> </div>
</div> )}
)} </Draggable>
</Draggable> )),
)),
[currentId, handleUpdate, handleDelete], [currentId, handleUpdate, handleDelete],
); );

View file

@ -15,9 +15,7 @@ const StepTypes = {
DELETE: 'DELETE', DELETE: 'DELETE',
}; };
const EditStep = React.memo(({ const EditStep = React.memo(({ defaultData, onUpdate, onDelete, onClose }) => {
defaultData, onUpdate, onDelete, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange] = useForm(() => ({ const [data, handleFieldChange] = useForm(() => ({

View file

@ -70,7 +70,7 @@ const ActionsStep = React.memo(
}, [openStep]); }, [openStep]);
const handleDueDateUpdate = useCallback( const handleDueDateUpdate = useCallback(
(dueDate) => { dueDate => {
onUpdate({ onUpdate({
dueDate, dueDate,
}); });
@ -79,7 +79,7 @@ const ActionsStep = React.memo(
); );
const handleTimerUpdate = useCallback( const handleTimerUpdate = useCallback(
(timer) => { timer => {
onUpdate({ onUpdate({
timer, timer,
}); });

View file

@ -49,7 +49,7 @@ const Card = React.memo(
}, []); }, []);
const handleNameUpdate = useCallback( const handleNameUpdate = useCallback(
(newName) => { newName => {
onUpdate({ onUpdate({
name: newName, name: newName,
}); });
@ -65,7 +65,7 @@ const Card = React.memo(
<> <>
{labels.length > 0 && ( {labels.length > 0 && (
<span className={styles.labels}> <span className={styles.labels}>
{labels.map((label) => ( {labels.map(label => (
<span key={label.id} className={classNames(styles.attachment, styles.attachmentLeft)}> <span key={label.id} className={classNames(styles.attachment, styles.attachmentLeft)}>
<Label name={label.name} color={label.color} size="tiny" /> <Label name={label.name} color={label.color} size="tiny" />
</span> </span>
@ -101,7 +101,7 @@ const Card = React.memo(
)} )}
{users.length > 0 && ( {users.length > 0 && (
<span className={classNames(styles.attachments, styles.attachmentsRight)}> <span className={classNames(styles.attachments, styles.attachmentsRight)}>
{users.map((user) => ( {users.map(user => (
<span key={user.id} className={classNames(styles.attachment, styles.attachmentRight)}> <span key={user.id} className={classNames(styles.attachment, styles.attachmentRight)}>
<User name={user.name} avatar={user.avatar} size="tiny" /> <User name={user.name} avatar={user.avatar} size="tiny" />
</span> </span>
@ -136,9 +136,9 @@ const Card = React.memo(
isPersisted, isPersisted,
}} }}
projectMemberships={allProjectMemberships} projectMemberships={allProjectMemberships}
currentUserIds={users.map((user) => user.id)} currentUserIds={users.map(user => user.id)}
labels={allLabels} labels={allLabels}
currentLabelIds={labels.map((label) => label.id)} currentLabelIds={labels.map(label => label.id)}
onNameEdit={handleNameEdit} onNameEdit={handleNameEdit}
onUpdate={onUpdate} onUpdate={onUpdate}
onDelete={onDelete} onDelete={onDelete}

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -52,7 +50,7 @@ const EditName = React.forwardRef(({ children, defaultValue, onUpdate }, ref) =>
); );
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
switch (event.key) { switch (event.key) {
case 'Enter': case 'Enter':
event.preventDefault(); event.preventDefault();

View file

@ -10,7 +10,7 @@ const Tasks = React.memo(({ items }) => {
const [isOpened, toggleOpened] = useToggle(); const [isOpened, toggleOpened] = useToggle();
const handleToggleClick = useCallback( const handleToggleClick = useCallback(
(event) => { event => {
event.preventDefault(); event.preventDefault();
toggleOpened(); toggleOpened();
@ -18,7 +18,7 @@ const Tasks = React.memo(({ items }) => {
[toggleOpened], [toggleOpened],
); );
const completedItems = items.filter((item) => item.isCompleted); const completedItems = items.filter(item => item.isCompleted);
return ( return (
<> <>
@ -47,7 +47,7 @@ const Tasks = React.memo(({ items }) => {
</div> </div>
{isOpened && ( {isOpened && (
<ul className={styles.tasks}> <ul className={styles.tasks}>
{items.map((item) => ( {items.map(item => (
<li <li
key={item.id} key={item.id}
className={classNames(styles.task, item.isCompleted && styles.taskCompleted)} className={classNames(styles.task, item.isCompleted && styles.taskCompleted)}

View file

@ -1,9 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { import { Comment, Icon, Loader, Visibility } from 'semantic-ui-react';
Comment, Icon, Loader, Visibility,
} from 'semantic-ui-react';
import { ActionTypes } from '../../../constants/Enums'; import { ActionTypes } from '../../../constants/Enums';
import AddComment from './AddComment'; import AddComment from './AddComment';
@ -32,7 +30,7 @@ const Actions = React.memo(
); );
const handleCommentDelete = useCallback( const handleCommentDelete = useCallback(
(id) => { id => {
onCommentDelete(id); onCommentDelete(id);
}, },
[onCommentDelete], [onCommentDelete],
@ -53,26 +51,28 @@ const Actions = React.memo(
<div className={styles.moduleHeader}>{t('common.actions')}</div> <div className={styles.moduleHeader}>{t('common.actions')}</div>
<div className={styles.wrapper}> <div className={styles.wrapper}>
<Comment.Group> <Comment.Group>
{items.map((item) => (item.type === ActionTypes.COMMENT_CARD ? ( {items.map(item =>
<Item.Comment item.type === ActionTypes.COMMENT_CARD ? (
key={item.id} <Item.Comment
data={item.data} key={item.id}
createdAt={item.createdAt} data={item.data}
isPersisted={item.isPersisted} createdAt={item.createdAt}
user={item.user} isPersisted={item.isPersisted}
isEditable={isEditable} user={item.user}
onUpdate={(data) => handleCommentUpdate(item.id, data)} isEditable={isEditable}
onDelete={() => handleCommentDelete(item.id)} onUpdate={data => handleCommentUpdate(item.id, data)}
/> onDelete={() => handleCommentDelete(item.id)}
) : ( />
<Item ) : (
key={item.id} <Item
type={item.type} key={item.id}
data={item.data} type={item.type}
createdAt={item.createdAt} data={item.data}
user={item.user} createdAt={item.createdAt}
/> user={item.user}
)))} />
),
)}
</Comment.Group> </Comment.Group>
</div> </div>
{isFetching ? ( {isFetching ? (

View file

@ -35,7 +35,7 @@ const AddComment = React.memo(({ onCreate }) => {
}, [onCreate, data, setData]); }, [onCreate, data, setData]);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.ctrlKey && event.key === 'Enter') { if (event.ctrlKey && event.key === 'Enter') {
submit(); submit();
} }

View file

@ -1,7 +1,5 @@
import dequal from 'dequal'; import dequal from 'dequal';
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -59,7 +57,7 @@ const EditComment = React.forwardRef(({ children, defaultData, onUpdate }, ref)
); );
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.ctrlKey && event.key === 'Enter') { if (event.ctrlKey && event.key === 'Enter') {
submit(); submit();
} }

View file

@ -10,9 +10,7 @@ import User from '../../User';
import styles from './Item.module.css'; import styles from './Item.module.css';
const Item = React.memo(({ const Item = React.memo(({ type, data, createdAt, user }) => {
type, data, createdAt, user,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
let contentNode; let contentNode;

View file

@ -12,9 +12,7 @@ import DeletePopup from '../../DeletePopup';
import styles from './ItemComment.module.css'; import styles from './ItemComment.module.css';
const ItemComment = React.memo( const ItemComment = React.memo(
({ ({ data, createdAt, isPersisted, user, isEditable, onUpdate, onDelete }) => {
data, createdAt, isPersisted, user, isEditable, onUpdate, onDelete,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const editComment = useRef(null); const editComment = useRef(null);

View file

@ -2,9 +2,7 @@ import React, { useCallback } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classNames from 'classnames'; import classNames from 'classnames';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { import { Button, Grid, Icon, Modal } from 'semantic-ui-react';
Button, Grid, Icon, Modal,
} from 'semantic-ui-react';
import { Markdown } from '../../lib/custom-ui'; import { Markdown } from '../../lib/custom-ui';
import NameField from './NameField'; import NameField from './NameField';
@ -60,7 +58,7 @@ const CardModal = React.memo(
const [t] = useTranslation(); const [t] = useTranslation();
const handleNameUpdate = useCallback( const handleNameUpdate = useCallback(
(newName) => { newName => {
onUpdate({ onUpdate({
name: newName, name: newName,
}); });
@ -69,7 +67,7 @@ const CardModal = React.memo(
); );
const handleDescriptionUpdate = useCallback( const handleDescriptionUpdate = useCallback(
(newDescription) => { newDescription => {
onUpdate({ onUpdate({
description: newDescription, description: newDescription,
}); });
@ -78,7 +76,7 @@ const CardModal = React.memo(
); );
const handleDueDateUpdate = useCallback( const handleDueDateUpdate = useCallback(
(newDueDate) => { newDueDate => {
onUpdate({ onUpdate({
dueDate: newDueDate, dueDate: newDueDate,
}); });
@ -87,7 +85,7 @@ const CardModal = React.memo(
); );
const handleTimerUpdate = useCallback( const handleTimerUpdate = useCallback(
(newTimer) => { newTimer => {
onUpdate({ onUpdate({
timer: newTimer, timer: newTimer,
}); });
@ -101,8 +99,8 @@ const CardModal = React.memo(
}); });
}, [isSubscribed, onUpdate]); }, [isSubscribed, onUpdate]);
const userIds = users.map((user) => user.id); const userIds = users.map(user => user.id);
const labelIds = labels.map((label) => label.id); const labelIds = labels.map(label => label.id);
return ( return (
<Modal open closeIcon size="small" centered={false} onClose={onClose}> <Modal open closeIcon size="small" centered={false} onClose={onClose}>
@ -128,7 +126,7 @@ const CardModal = React.memo(
context: 'title', context: 'title',
})} })}
</div> </div>
{users.map((user) => ( {users.map(user => (
<span key={user.id} className={styles.attachment}> <span key={user.id} className={styles.attachment}>
<ProjectMembershipsPopup <ProjectMembershipsPopup
items={allProjectMemberships} items={allProjectMemberships}
@ -162,7 +160,7 @@ const CardModal = React.memo(
context: 'title', context: 'title',
})} })}
</div> </div>
{labels.map((label) => ( {labels.map(label => (
<span key={label.id} className={styles.attachment}> <span key={label.id} className={styles.attachment}>
<LabelsPopup <LabelsPopup
key={label.id} key={label.id}

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -53,7 +51,7 @@ const EditDescription = React.forwardRef(({ children, defaultValue, onUpdate },
}, [open]); }, [open]);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.ctrlKey && event.key === 'Enter') { if (event.ctrlKey && event.key === 'Enter') {
submit(); submit();
} }

View file

@ -18,7 +18,7 @@ const NameField = React.memo(({ defaultValue, onUpdate }) => {
isFocused.current = true; isFocused.current = true;
}, []); }, []);
const handleKeyDown = useCallback((event) => { const handleKeyDown = useCallback(event => {
if (event.key === 'Enter') { if (event.key === 'Enter') {
event.preventDefault(); event.preventDefault();

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -62,7 +60,7 @@ const Add = React.forwardRef(({ children, onCreate }, ref) => {
}, [open]); }, [open]);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.key === 'Enter') { if (event.key === 'Enter') {
event.preventDefault(); event.preventDefault();

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -52,7 +50,7 @@ const EditName = React.forwardRef(({ children, defaultValue, onUpdate }, ref) =>
); );
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
if (event.key === 'Enter') { if (event.key === 'Enter') {
event.preventDefault(); event.preventDefault();

View file

@ -8,9 +8,7 @@ import ActionsPopup from './ActionsPopup';
import styles from './Item.module.css'; import styles from './Item.module.css';
const Item = React.memo(({ const Item = React.memo(({ name, isCompleted, isPersisted, onUpdate, onDelete }) => {
name, isCompleted, isPersisted, onUpdate, onDelete,
}) => {
const editName = useRef(null); const editName = useRef(null);
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
@ -20,7 +18,7 @@ const Item = React.memo(({
}, [isPersisted]); }, [isPersisted]);
const handleNameUpdate = useCallback( const handleNameUpdate = useCallback(
(newName) => { newName => {
onUpdate({ onUpdate({
name: newName, name: newName,
}); });

View file

@ -8,9 +8,7 @@ import Add from './Add';
import styles from './Tasks.module.css'; import styles from './Tasks.module.css';
const Tasks = React.memo(({ const Tasks = React.memo(({ items, onCreate, onUpdate, onDelete }) => {
items, onCreate, onUpdate, onDelete,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleUpdate = useCallback( const handleUpdate = useCallback(
@ -21,13 +19,13 @@ const Tasks = React.memo(({
); );
const handleDelete = useCallback( const handleDelete = useCallback(
(id) => { id => {
onDelete(id); onDelete(id);
}, },
[onDelete], [onDelete],
); );
const completedItems = items.filter((item) => item.isCompleted); const completedItems = items.filter(item => item.isCompleted);
return ( return (
<> <>
@ -41,13 +39,13 @@ const Tasks = React.memo(({
className={styles.progress} className={styles.progress}
/> />
)} )}
{items.map((item) => ( {items.map(item => (
<Item <Item
key={item.id} key={item.id}
name={item.name} name={item.name}
isCompleted={item.isCompleted} isCompleted={item.isCompleted}
isPersisted={item.isPersisted} isPersisted={item.isPersisted}
onUpdate={(data) => handleUpdate(item.id, data)} onUpdate={data => handleUpdate(item.id, data)}
onDelete={() => handleDelete(item.id)} onDelete={() => handleDelete(item.id)}
/> />
))} ))}

View file

@ -5,9 +5,7 @@ import { Popup } from '../../lib/custom-ui';
import styles from './DeleteStep.module.css'; import styles from './DeleteStep.module.css';
const DeleteStep = React.memo(({ const DeleteStep = React.memo(({ title, content, buttonContent, onConfirm, onBack }) => (
title, content, buttonContent, onConfirm, onBack,
}) => (
<> <>
<Popup.Header onBack={onBack}>{title}</Popup.Header> <Popup.Header onBack={onBack}>{title}</Popup.Header>
<Popup.Content> <Popup.Content>

View file

@ -35,9 +35,7 @@ const FORMATS = {
medium: 'longDateTime', medium: 'longDateTime',
}; };
const DueDate = React.memo(({ const DueDate = React.memo(({ value, size, isDisabled, onClick }) => {
value, size, isDisabled, onClick,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const style = { const style = {

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useMemo, useRef } from 'react';
useCallback, useEffect, useMemo, useRef,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import DatePicker from 'react-datepicker'; import DatePicker from 'react-datepicker';
@ -12,9 +10,7 @@ import { useForm } from '../../hooks';
import styles from './EditDueDateStep.module.css'; import styles from './EditDueDateStep.module.css';
const EditDueDateStep = React.memo(({ const EditDueDateStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => {
defaultValue, onUpdate, onBack, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange, setData] = useForm(() => { const [data, handleFieldChange, setData] = useForm(() => {
@ -51,8 +47,8 @@ const EditDueDateStep = React.memo(({
}, [data.date, t]); }, [data.date, t]);
const handleDatePickerChange = useCallback( const handleDatePickerChange = useCallback(
(date) => { date => {
setData((prevData) => ({ setData(prevData => ({
...prevData, ...prevData,
date: t('format:date', { date: t('format:date', {
postProcess: 'formatDate', postProcess: 'formatDate',

View file

@ -7,13 +7,11 @@ import { useToggle } from '../../lib/hooks';
import { Input, Popup } from '../../lib/custom-ui'; import { Input, Popup } from '../../lib/custom-ui';
import { useForm } from '../../hooks'; import { useForm } from '../../hooks';
import { import { createTimer, getTimerParts, startTimer, stopTimer, updateTimer } from '../../utils/timer';
createTimer, getTimerParts, startTimer, stopTimer, updateTimer,
} from '../../utils/timer';
import styles from './EditTimerStep.module.css'; import styles from './EditTimerStep.module.css';
const createData = (timer) => { const createData = timer => {
if (!timer) { if (!timer) {
return { return {
hours: '0', hours: '0',
@ -31,9 +29,7 @@ const createData = (timer) => {
}; };
}; };
const EditTimerStep = React.memo(({ const EditTimerStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => {
defaultValue, onUpdate, onBack, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange, setData] = useForm(() => createData(defaultValue)); const [data, handleFieldChange, setData] = useForm(() => createData(defaultValue));
const [isEditing, toggleEdit] = useToggle(); const [isEditing, toggleEdit] = useToggle();
@ -158,8 +154,8 @@ const EditTimerStep = React.memo(({
</div> </div>
{isEditing && <Button positive content={t('action.save')} />} {isEditing && <Button positive content={t('action.save')} />}
</Form> </Form>
{!isEditing {!isEditing &&
&& (defaultValue && defaultValue.startedAt ? ( (defaultValue && defaultValue.startedAt ? (
<Button positive content={t('action.stop')} icon="pause" onClick={handleStopClick} /> <Button positive content={t('action.stop')} icon="pause" onClick={handleStopClick} />
) : ( ) : (
<Button positive content={t('action.start')} icon="play" onClick={handleStartClick} /> <Button positive content={t('action.start')} icon="play" onClick={handleStartClick} />

View file

@ -16,7 +16,7 @@ const NotificationsStep = React.memo(({ items, onDelete, onClose }) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleDelete = useCallback( const handleDelete = useCallback(
(id) => { id => {
onDelete(id); onDelete(id);
}, },
[onDelete], [onDelete],
@ -77,28 +77,28 @@ const NotificationsStep = React.memo(({ items, onDelete, onClose }) => {
<Popup.Header>{t('common.notifications')}</Popup.Header> <Popup.Header>{t('common.notifications')}</Popup.Header>
<Popup.Content> <Popup.Content>
{items.length > 0 {items.length > 0
? items.map((item) => ( ? items.map(item => (
<div key={item.id} className={styles.wrapper}> <div key={item.id} className={styles.wrapper}>
{item.card && item.action ? ( {item.card && item.action ? (
<> <>
<User <User
name={item.action.user.name} name={item.action.user.name}
avatar={item.action.user.avatar} avatar={item.action.user.avatar}
size="large" size="large"
/> />
<span className={styles.content}>{renderItemContent(item)}</span> <span className={styles.content}>{renderItemContent(item)}</span>
</> </>
) : ( ) : (
<div className={styles.deletedContent}>{t('common.cardOrActionAreDeleted')}</div> <div className={styles.deletedContent}>{t('common.cardOrActionAreDeleted')}</div>
)} )}
<Button <Button
type="button" type="button"
icon="close" icon="close"
className={styles.button} className={styles.button}
onClick={() => handleDelete(item.id)} onClick={() => handleDelete(item.id)}
/> />
</div> </div>
)) ))
: t('common.noUnreadNotifications')} : t('common.noUnreadNotifications')}
</Popup.Content> </Popup.Content>
</> </>

View file

@ -34,9 +34,7 @@ const STYLES = {
}, },
}; };
const Label = React.memo(({ const Label = React.memo(({ name, color, size, isDisabled, onClick }) => {
name, color, size, isDisabled, onClick,
}) => {
const style = { const style = {
...STYLES[size], ...STYLES[size],
background: LabelColors.MAP[color], background: LabelColors.MAP[color],

View file

@ -16,9 +16,7 @@ const StepTypes = {
DELETE: 'DELETE', DELETE: 'DELETE',
}; };
const EditStep = React.memo(({ const EditStep = React.memo(({ defaultData, onUpdate, onDelete, onBack }) => {
defaultData, onUpdate, onDelete, onBack,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange] = useForm(() => ({ const [data, handleFieldChange] = useForm(() => ({

View file

@ -7,9 +7,7 @@ import LabelColors from '../../constants/LabelColors';
import styles from './Item.module.css'; import styles from './Item.module.css';
const Item = React.memo(({ const Item = React.memo(({ name, color, isPersisted, isActive, onSelect, onDeselect, onEdit }) => {
name, color, isPersisted, isActive, onSelect, onDeselect, onEdit,
}) => {
const handleToggleClick = useCallback(() => { const handleToggleClick = useCallback(() => {
if (isActive) { if (isActive) {
onDeselect(); onDeselect();

View file

@ -18,9 +18,7 @@ const StepTypes = {
}; };
const LabelsStep = React.memo( const LabelsStep = React.memo(
({ ({ items, currentIds, title, onSelect, onDeselect, onCreate, onUpdate, onDelete, onBack }) => {
items, currentIds, title, onSelect, onDeselect, onCreate, onUpdate, onDelete, onBack,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [step, openStep, handleBack] = useSteps(); const [step, openStep, handleBack] = useSteps();
@ -29,7 +27,7 @@ const LabelsStep = React.memo(
}, [openStep]); }, [openStep]);
const handleEdit = useCallback( const handleEdit = useCallback(
(id) => { id => {
openStep(StepTypes.EDIT, { openStep(StepTypes.EDIT, {
id, id,
}); });
@ -38,14 +36,14 @@ const LabelsStep = React.memo(
); );
const handleSelect = useCallback( const handleSelect = useCallback(
(id) => { id => {
onSelect(id); onSelect(id);
}, },
[onSelect], [onSelect],
); );
const handleDeselect = useCallback( const handleDeselect = useCallback(
(id) => { id => {
onDeselect(id); onDeselect(id);
}, },
[onDeselect], [onDeselect],
@ -59,7 +57,7 @@ const LabelsStep = React.memo(
); );
const handleDelete = useCallback( const handleDelete = useCallback(
(id) => { id => {
onDelete(id); onDelete(id);
}, },
[onDelete], [onDelete],
@ -70,13 +68,13 @@ const LabelsStep = React.memo(
case StepTypes.ADD: case StepTypes.ADD:
return <AddStep onCreate={onCreate} onBack={handleBack} />; return <AddStep onCreate={onCreate} onBack={handleBack} />;
case StepTypes.EDIT: { case StepTypes.EDIT: {
const currentItem = items.find((item) => item.id === step.params.id); const currentItem = items.find(item => item.id === step.params.id);
if (currentItem) { if (currentItem) {
return ( return (
<EditStep <EditStep
defaultData={pick(currentItem, ['name', 'color'])} defaultData={pick(currentItem, ['name', 'color'])}
onUpdate={(data) => handleUpdate(currentItem.id, data)} onUpdate={data => handleUpdate(currentItem.id, data)}
onDelete={() => handleDelete(currentItem.id)} onDelete={() => handleDelete(currentItem.id)}
onBack={handleBack} onBack={handleBack}
/> />
@ -95,7 +93,7 @@ const LabelsStep = React.memo(
<> <>
<Popup.Header onBack={onBack}>{t(title)}</Popup.Header> <Popup.Header onBack={onBack}>{t(title)}</Popup.Header>
<Popup.Content> <Popup.Content>
{items.map((item) => ( {items.map(item => (
<Item <Item
key={item.id} key={item.id}
name={item.name} name={item.name}

View file

@ -14,9 +14,7 @@ const StepTypes = {
DELETE: 'DELETE', DELETE: 'DELETE',
}; };
const ActionsStep = React.memo(({ const ActionsStep = React.memo(({ onNameEdit, onCardAdd, onDelete, onClose }) => {
onNameEdit, onCardAdd, onDelete, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [step, openStep, handleBack] = useSteps(); const [step, openStep, handleBack] = useSteps();

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
@ -62,7 +60,7 @@ const AddCard = React.forwardRef(({ children, onCreate }, ref) => {
}, [open]); }, [open]);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
switch (event.key) { switch (event.key) {
case 'Enter': case 'Enter':
event.preventDefault(); event.preventDefault();

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
useCallback, useEffect, useImperativeHandle, useRef, useState,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
import { TextArea } from 'semantic-ui-react'; import { TextArea } from 'semantic-ui-react';
@ -44,12 +42,12 @@ const EditName = React.forwardRef(({ children, defaultValue, onUpdate }, ref) =>
[open, close], [open, close],
); );
const handleFieldClick = useCallback((event) => { const handleFieldClick = useCallback(event => {
event.stopPropagation(); event.stopPropagation();
}, []); }, []);
const handleFieldKeyDown = useCallback( const handleFieldKeyDown = useCallback(
(event) => { event => {
switch (event.key) { switch (event.key) {
case 'Enter': case 'Enter':
event.preventDefault(); event.preventDefault();

View file

@ -15,9 +15,7 @@ import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-ic
import styles from './List.module.css'; import styles from './List.module.css';
const List = React.memo( const List = React.memo(
({ ({ id, index, name, isPersisted, cardIds, onUpdate, onDelete, onCardCreate }) => {
id, index, name, isPersisted, cardIds, onUpdate, onDelete, onCardCreate,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const addCard = useRef(null); const addCard = useRef(null);
@ -30,7 +28,7 @@ const List = React.memo(
}, [isPersisted]); }, [isPersisted]);
const handleNameUpdate = useCallback( const handleNameUpdate = useCallback(
(newName) => { newName => {
onUpdate({ onUpdate({
name: newName, name: newName,
}); });

View file

@ -1,13 +1,9 @@
import React, { import React, { useCallback, useEffect, useMemo, useRef } from 'react';
useCallback, useEffect, useMemo, useRef,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classNames from 'classnames'; import classNames from 'classnames';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import isEmail from 'validator/lib/isEmail'; import isEmail from 'validator/lib/isEmail';
import { import { Form, Grid, Header, Message } from 'semantic-ui-react';
Form, Grid, Header, Message,
} from 'semantic-ui-react';
import { useDidUpdate, usePrevious, useToggle } from '../../lib/hooks'; import { useDidUpdate, usePrevious, useToggle } from '../../lib/hooks';
import { Input } from '../../lib/custom-ui'; import { Input } from '../../lib/custom-ui';
@ -15,7 +11,7 @@ import { useForm } from '../../hooks';
import styles from './Login.module.css'; import styles from './Login.module.css';
const createMessage = (error) => { const createMessage = error => {
if (!error) { if (!error) {
return error; return error;
} }
@ -50,9 +46,7 @@ const createMessage = (error) => {
}; };
const Login = React.memo( const Login = React.memo(
({ ({ defaultData, isSubmitting, error, onAuthenticate, onMessageDismiss }) => {
defaultData, isSubmitting, error, onAuthenticate, onMessageDismiss,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const wasSubmitting = usePrevious(isSubmitting); const wasSubmitting = usePrevious(isSubmitting);
@ -99,7 +93,7 @@ const Login = React.memo(
break; break;
case 'Password is not valid': case 'Password is not valid':
setData((prevData) => ({ setData(prevData => ({
...prevData, ...prevData,
password: '', password: '',
})); }));

View file

@ -8,13 +8,11 @@ import UserItem from './UserItem';
import styles from './AddMembershipPopup.module.css'; import styles from './AddMembershipPopup.module.css';
const AddMembershipStep = React.memo(({ const AddMembershipStep = React.memo(({ users, currentUserIds, onCreate, onClose }) => {
users, currentUserIds, onCreate, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleUserSelect = useCallback( const handleUserSelect = useCallback(
(id) => { id => {
onCreate({ onCreate({
userId: id, userId: id,
}); });
@ -33,7 +31,7 @@ const AddMembershipStep = React.memo(({
</Popup.Header> </Popup.Header>
<Popup.Content> <Popup.Content>
<div className={styles.menu}> <div className={styles.menu}>
{users.map((user) => ( {users.map(user => (
<UserItem <UserItem
key={user.id} key={user.id}
name={user.name} name={user.name}

View file

@ -6,9 +6,7 @@ import User from '../../User';
import styles from './UserItem.module.css'; import styles from './UserItem.module.css';
const UserItem = React.memo(({ const UserItem = React.memo(({ name, avatar, isActive, onSelect }) => (
name, avatar, isActive, onSelect,
}) => (
<button <button
type="button" type="button"
disabled={isActive} disabled={isActive}

View file

@ -15,9 +15,7 @@ const StepTypes = {
DELETE: 'DELETE', DELETE: 'DELETE',
}; };
const EditStep = React.memo(({ const EditStep = React.memo(({ defaultData, onUpdate, onDelete, onClose }) => {
defaultData, onUpdate, onDelete, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [data, handleFieldChange] = useForm(() => ({ const [data, handleFieldChange] = useForm(() => ({

View file

@ -22,7 +22,7 @@ const Project = React.memo(
onMembershipDelete, onMembershipDelete,
}) => { }) => {
const handleMembershipDelete = useCallback( const handleMembershipDelete = useCallback(
(id) => { id => {
onMembershipDelete(id); onMembershipDelete(id);
}, },
[onMembershipDelete], [onMembershipDelete],
@ -47,7 +47,7 @@ const Project = React.memo(
<span className={styles.name}>{name}</span> <span className={styles.name}>{name}</span>
)} )}
<span className={styles.users}> <span className={styles.users}>
{memberships.map((membership) => ( {memberships.map(membership => (
<span key={membership.id} className={styles.user}> <span key={membership.id} className={styles.user}>
<EditMembershipPopup <EditMembershipPopup
user={membership.user} user={membership.user}
@ -67,7 +67,7 @@ const Project = React.memo(
{isEditable && ( {isEditable && (
<AddMembershipPopup <AddMembershipPopup
users={allUsers} users={allUsers}
currentUserIds={memberships.map((membership) => membership.user.id)} currentUserIds={memberships.map(membership => membership.user.id)}
onCreate={onMembershipCreate} onCreate={onMembershipCreate}
> >
<Button icon="add user" className={styles.addUser} /> <Button icon="add user" className={styles.addUser} />

View file

@ -7,9 +7,7 @@ import User from '../User';
import styles from './Item.module.css'; import styles from './Item.module.css';
const Item = React.memo(({ const Item = React.memo(({ isPersisted, isActive, user, onUserSelect, onUserDeselect }) => {
isPersisted, isActive, user, onUserSelect, onUserDeselect,
}) => {
const handleToggleClick = useCallback(() => { const handleToggleClick = useCallback(() => {
if (isActive) { if (isActive) {
onUserDeselect(); onUserDeselect();

View file

@ -9,20 +9,18 @@ import Item from './Item';
import styles from './ProjectMembershipsStep.module.css'; import styles from './ProjectMembershipsStep.module.css';
const ProjectMembershipsStep = React.memo( const ProjectMembershipsStep = React.memo(
({ ({ items, currentUserIds, title, onUserSelect, onUserDeselect, onBack }) => {
items, currentUserIds, title, onUserSelect, onUserDeselect, onBack,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleUserSelect = useCallback( const handleUserSelect = useCallback(
(id) => { id => {
onUserSelect(id); onUserSelect(id);
}, },
[onUserSelect], [onUserSelect],
); );
const handleUserDeselect = useCallback( const handleUserDeselect = useCallback(
(id) => { id => {
onUserDeselect(id); onUserDeselect(id);
}, },
[onUserDeselect], [onUserDeselect],
@ -33,7 +31,7 @@ const ProjectMembershipsStep = React.memo(
<Popup.Header onBack={onBack}>{t(title)}</Popup.Header> <Popup.Header onBack={onBack}>{t(title)}</Popup.Header>
<Popup.Content> <Popup.Content>
<Menu secondary vertical className={styles.menu}> <Menu secondary vertical className={styles.menu}>
{items.map((item) => ( {items.map(item => (
<Item <Item
key={item.id} key={item.id}
isPersisted={item.isPersisted} isPersisted={item.isPersisted}

View file

@ -12,16 +12,14 @@ import { ReactComponent as PlusIcon } from '../../assets/images/plus-icon.svg';
import styles from './Projects.module.css'; import styles from './Projects.module.css';
const Projects = React.memo(({ const Projects = React.memo(({ items, currentId, isEditable, onAdd }) => {
items, currentId, isEditable, onAdd,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
if (isUndefined(currentId)) { if (isUndefined(currentId)) {
return ( return (
<Container className={styles.cardsWrapper}> <Container className={styles.cardsWrapper}>
<Grid className={styles.gridFix}> <Grid className={styles.gridFix}>
{items.map((item) => ( {items.map(item => (
<Grid.Column key={item.id} mobile={8} computer={4}> <Grid.Column key={item.id} mobile={8} computer={4}>
<Link <Link
to={ to={

View file

@ -32,9 +32,7 @@ const STYLES = {
}, },
}; };
const Timer = React.memo(({ const Timer = React.memo(({ startedAt, total, size, isDisabled, onClick }) => {
startedAt, total, size, isDisabled, onClick,
}) => {
const prevStartedAt = usePrevious(startedAt); const prevStartedAt = usePrevious(startedAt);
const forceUpdate = useForceUpdate(); const forceUpdate = useForceUpdate();

View file

@ -55,7 +55,7 @@ const COLORS = [
'#2c3e50', // Midnight blue '#2c3e50', // Midnight blue
]; ];
const getColor = (name) => { const getColor = name => {
let sum = 0; let sum = 0;
for (let i = 0; i < name.length; i += 1) { for (let i = 0; i < name.length; i += 1) {
sum += name.charCodeAt(i); sum += name.charCodeAt(i);
@ -64,9 +64,7 @@ const getColor = (name) => {
return COLORS[sum % COLORS.length]; return COLORS[sum % COLORS.length];
}; };
const User = React.memo(({ const User = React.memo(({ name, avatar, size, isDisabled, onClick }) => {
name, avatar, size, isDisabled, onClick,
}) => {
const style = { const style = {
...STYLES[size], ...STYLES[size],
background: avatar ? `url("${avatar}")` : getColor(name), background: avatar ? `url("${avatar}")` : getColor(name),

View file

@ -9,9 +9,7 @@ import User from '../User';
import styles from './EditAvatarStep.module.css'; import styles from './EditAvatarStep.module.css';
const EditAvatarStep = React.memo( const EditAvatarStep = React.memo(
({ ({ defaultValue, name, isUploading, onUpload, onClear, onBack }) => {
defaultValue, name, isUploading, onUpload, onClear, onBack,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const field = useRef(null); const field = useRef(null);

View file

@ -1,7 +1,5 @@
import isEmail from 'validator/lib/isEmail'; import isEmail from 'validator/lib/isEmail';
import React, { import React, { useCallback, useEffect, useMemo, useRef } from 'react';
useCallback, useEffect, useMemo, useRef,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Form, Message } from 'semantic-ui-react'; import { Button, Form, Message } from 'semantic-ui-react';
@ -12,7 +10,7 @@ import { useForm } from '../../hooks';
import styles from './EditNameStep.module.css'; import styles from './EditNameStep.module.css';
const createMessage = (error) => { const createMessage = error => {
if (!error) { if (!error) {
return error; return error;
} }
@ -37,9 +35,7 @@ const createMessage = (error) => {
}; };
const EditEmailStep = React.memo( const EditEmailStep = React.memo(
({ ({ defaultData, email, isSubmitting, error, onUpdate, onMessageDismiss, onBack, onClose }) => {
defaultData, email, isSubmitting, error, onUpdate, onMessageDismiss, onBack, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const wasSubmitting = usePrevious(isSubmitting); const wasSubmitting = usePrevious(isSubmitting);
@ -92,7 +88,7 @@ const EditEmailStep = React.memo(
break; break;
case 'Current password is not valid': case 'Current password is not valid':
setData((prevData) => ({ setData(prevData => ({
...prevData, ...prevData,
currentPassword: '', currentPassword: '',
})); }));

View file

@ -8,9 +8,7 @@ import { useField } from '../../hooks';
import styles from './EditNameStep.module.css'; import styles from './EditNameStep.module.css';
const EditNameStep = React.memo(({ const EditNameStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => {
defaultValue, onUpdate, onBack, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const [value, handleFieldChange] = useField(defaultValue); const [value, handleFieldChange] = useField(defaultValue);

View file

@ -1,6 +1,4 @@
import React, { import React, { useCallback, useEffect, useMemo, useRef } from 'react';
useCallback, useEffect, useMemo, useRef,
} from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Button, Form, Message } from 'semantic-ui-react'; import { Button, Form, Message } from 'semantic-ui-react';
@ -11,7 +9,7 @@ import { useForm } from '../../hooks';
import styles from './EditNameStep.module.css'; import styles from './EditNameStep.module.css';
const createMessage = (error) => { const createMessage = error => {
if (!error) { if (!error) {
return error; return error;
} }
@ -31,9 +29,7 @@ const createMessage = (error) => {
}; };
const EditPasswordStep = React.memo( const EditPasswordStep = React.memo(
({ ({ defaultData, isSubmitting, error, onUpdate, onMessageDismiss, onBack, onClose }) => {
defaultData, isSubmitting, error, onUpdate, onMessageDismiss, onBack, onClose,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const wasSubmitting = usePrevious(isSubmitting); const wasSubmitting = usePrevious(isSubmitting);
@ -72,7 +68,7 @@ const EditPasswordStep = React.memo(
if (!error) { if (!error) {
onClose(); onClose();
} else if (error.message === 'Current password is not valid') { } else if (error.message === 'Current password is not valid') {
setData((prevData) => ({ setData(prevData => ({
...prevData, ...prevData,
currentPassword: '', currentPassword: '',
})); }));

View file

@ -57,7 +57,7 @@ const UserStep = React.memo(
}, [openStep]); }, [openStep]);
const handleNameUpdate = useCallback( const handleNameUpdate = useCallback(
(newName) => { newName => {
onUpdate({ onUpdate({
name: newName, name: newName,
}); });

View file

@ -7,9 +7,7 @@ import DeletePopup from '../DeletePopup';
import styles from './Item.module.css'; import styles from './Item.module.css';
const Item = React.memo(({ const Item = React.memo(({ name, email, isAdmin, onUpdate, onDelete }) => {
name, email, isAdmin, onUpdate, onDelete,
}) => {
const [t] = useTranslation(); const [t] = useTranslation();
const handleIsAdminChange = useCallback(() => { const handleIsAdminChange = useCallback(() => {

Some files were not shown because too many files have changed in this diff Show more