import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { labelsForCurrentBoardSelector, makeCardByIdSelector, makeLabelsByCardIdSelector, makeNotificationsTotalByCardIdSelector, makeTasksByCardIdSelector, makeUsersByCardIdSelector, membershipsForCurrentProjectSelector, } from '../selectors'; import { addLabelToCard, addUserToCard, createLabelInCurrentBoard, deleteCard, deleteLabel, removeLabelFromCard, removeUserFromCard, updateLabel, updateCard, } from '../actions/entry'; import Card from '../components/Card'; const makeMapStateToProps = () => { const cardByIdSelector = makeCardByIdSelector(); const usersByCardIdSelector = makeUsersByCardIdSelector(); const labelsByCardIdSelector = makeLabelsByCardIdSelector(); const tasksByCardIdSelector = makeTasksByCardIdSelector(); const notificationsTotalByCardIdSelector = makeNotificationsTotalByCardIdSelector(); return (state, { id, index }) => { const allProjectMemberships = membershipsForCurrentProjectSelector(state); const allLabels = labelsForCurrentBoardSelector(state); const { name, deadline, timer, isPersisted, } = cardByIdSelector(state, id); const users = usersByCardIdSelector(state, id); const labels = labelsByCardIdSelector(state, id); const tasks = tasksByCardIdSelector(state, id); const notificationsTotal = notificationsTotalByCardIdSelector(state, id); return { id, index, name, deadline, timer, isPersisted, notificationsTotal, users, labels, tasks, allProjectMemberships, allLabels, }; }; }; const mapDispatchToProps = (dispatch, { id }) => bindActionCreators( { onUpdate: (data) => updateCard(id, data), onDelete: () => deleteCard(id), onUserAdd: (userId) => addUserToCard(userId, id), onUserRemove: (userId) => removeUserFromCard(userId, id), onLabelAdd: (labelId) => addLabelToCard(labelId, id), onLabelRemove: (labelId) => removeLabelFromCard(labelId, id), onLabelCreate: (data) => createLabelInCurrentBoard(data), onLabelUpdate: (labelId, data) => updateLabel(labelId, data), onLabelDelete: (labelId) => deleteLabel(labelId), }, dispatch, ); export default connect( makeMapStateToProps, mapDispatchToProps, )(Card);