diff --git a/client/src/api/cards.js b/client/src/api/cards.js index 5240038..4153157 100755 --- a/client/src/api/cards.js +++ b/client/src/api/cards.js @@ -41,6 +41,12 @@ const createCard = (listId, data, headers) => item: transformCard(body.item), })); +const copyCard = (listId, data, headers) => + socket.post(`/lists/${listId}/cards`, transformCardData(data), headers).then((body) => ({ + ...body, + item: transformCard(body.item), + })); + const getCard = (id, headers) => socket.get(`/cards/${id}`, undefined, headers).then((body) => ({ ...body, @@ -84,4 +90,5 @@ export default { makeHandleCardCreate, makeHandleCardUpdate, makeHandleCardDelete, + copyCard, }; diff --git a/client/src/components/CardCopyStep/CardCopyStep.jsx b/client/src/components/CardCopyStep/CardCopyStep.jsx index 54a517d..70ae2e9 100644 --- a/client/src/components/CardCopyStep/CardCopyStep.jsx +++ b/client/src/components/CardCopyStep/CardCopyStep.jsx @@ -61,7 +61,7 @@ const CardCopyStep = React.memo( console.log('test'); } */ - onCopyCard(selectedList.id, path, false); + onCopyCard(selectedList.id, path); onClose(); }, [onCopyCard, selectedList.id, path, onClose]); diff --git a/client/src/constants/ActionTypes.js b/client/src/constants/ActionTypes.js index 74d7840..8510f4f 100644 --- a/client/src/constants/ActionTypes.js +++ b/client/src/constants/ActionTypes.js @@ -199,6 +199,8 @@ export default { CARD_DELETE_HANDLE: 'CARD_DELETE_HANDLE', CARD_COPY_HANDLE: 'CARD_COPY_HANDLE', CARD_COPY: 'CARD_COPY', + CARD_COPY__SUCCESS: 'CARD_COPY__SUCCESS', + CARD_COPY__FAILURE: 'CARD_COPY__FAILURE', /* Tasks */ diff --git a/client/src/containers/BoardsContainer.js b/client/src/containers/BoardsContainer.js index 090218b..d0e6aee 100755 --- a/client/src/containers/BoardsContainer.js +++ b/client/src/containers/BoardsContainer.js @@ -25,7 +25,7 @@ const mapDispatchToProps = (dispatch) => onMove: entryActions.moveBoard, onDelete: entryActions.deleteBoard, onSort: entryActions.sortBoard, - onCopyCard: entryActions.createCard, + onCopyCard: entryActions.copyCard, }, dispatch, ); diff --git a/client/src/containers/CardContainer.js b/client/src/containers/CardContainer.js index d506262..caaa8f4 100755 --- a/client/src/containers/CardContainer.js +++ b/client/src/containers/CardContainer.js @@ -72,7 +72,7 @@ const mapDispatchToProps = (dispatch, { id }) => onLabelUpdate: (labelId, data) => entryActions.updateLabel(labelId, data), onLabelMove: (labelId, index) => entryActions.moveLabel(labelId, index), onLabelDelete: (labelId) => entryActions.deleteLabel(labelId), - onCopyCard: (listId, data) => entryActions.createCard(listId, data, false), + onCopyCard: (listId, data) => entryActions.copyCard(listId, data, false), }, dispatch, ); diff --git a/client/src/containers/ListContainer.js b/client/src/containers/ListContainer.js index f50afc0..62496af 100755 --- a/client/src/containers/ListContainer.js +++ b/client/src/containers/ListContainer.js @@ -36,6 +36,7 @@ const mapDispatchToProps = (dispatch, { id }) => onDelete: () => entryActions.deleteList(id), onCardCreate: (data, autoOpen) => entryActions.createCard(id, data, autoOpen), onSort: (data) => entryActions.sortList(id, data), + onCardCopy: (data, autoOpen) => entryActions.copyCard(id, data, autoOpen), }, dispatch, ); diff --git a/client/src/models/Card.js b/client/src/models/Card.js index 8ac9c7b..3272929 100755 --- a/client/src/models/Card.js +++ b/client/src/models/Card.js @@ -175,6 +175,11 @@ export default class extends BaseModel { Card.withId(payload.localId).delete(); Card.upsert(payload.card); + break; + case ActionTypes.CARD_COPY__SUCCESS: + Card.withId(payload.localId).delete(); + Card.upsert(payload.card); + break; case ActionTypes.CARD_UPDATE: Card.withId(payload.id).update(payload.data); diff --git a/client/src/sagas/core/services/cards.js b/client/src/sagas/core/services/cards.js index 40c3db8..399b226 100644 --- a/client/src/sagas/core/services/cards.js +++ b/client/src/sagas/core/services/cards.js @@ -1,4 +1,4 @@ -import { call, put, select } from 'redux-saga/effects'; +import { call, put, select, all } from 'redux-saga/effects'; import { goToBoard, goToCard } from './router'; import request from '../request'; @@ -6,6 +6,7 @@ import selectors from '../../../selectors'; import actions from '../../../actions'; import api from '../../../api'; import { createLocalId } from '../../../utils/local-id'; +import { addLabelToCard } from './labels'; export function* createCard(listId, data, autoOpen) { const { boardId } = yield select(selectors.selectListById, listId); @@ -39,6 +40,11 @@ export function* createCard(listId, data, autoOpen) { if (autoOpen) { yield call(goToCard, card.id); } + + // Add labels to card + const arr = []; + Object.keys(nextData.labels).map((key) => arr.push(nextData.labels[key].id)); + yield all(arr?.map((label) => call(addLabelToCard, label, card.id))); } export function* handleCardCreate(card) { diff --git a/client/src/sagas/core/services/index.js b/client/src/sagas/core/services/index.js index 55d1175..833cbfe 100644 --- a/client/src/sagas/core/services/index.js +++ b/client/src/sagas/core/services/index.js @@ -15,6 +15,7 @@ import attachments from './attachments'; import activities from './activities'; import commentActivities from './comment-activities'; import notifications from './notifications'; +import copycards from './copycards'; export default { ...router, @@ -34,4 +35,5 @@ export default { ...activities, ...commentActivities, ...notifications, + ...copycards, };