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

Fix attachment duplication on add

This commit is contained in:
Maksim Eltyshev 2020-04-23 05:56:02 +05:00
parent dc66a93e18
commit cb2f795ef1
8 changed files with 36 additions and 7 deletions

View file

@ -10,8 +10,8 @@ export const transformAttachment = (attachment) => ({
/* Actions */
const createAttachment = (cardId, data, headers) =>
http.post(`/cards/${cardId}/attachments`, data, headers).then((body) => ({
const createAttachment = (cardId, data, requestId, headers) =>
http.post(`/cards/${cardId}/attachments?requestId=${requestId}`, data, headers).then((body) => ({
...body,
item: transformAttachment(body.item),
}));

View file

@ -23,7 +23,7 @@ export function* createAttachmentRequest(cardId, localId, data) {
);
try {
const { item } = yield call(request, api.createAttachment, cardId, data);
const { item } = yield call(request, api.createAttachment, cardId, data, localId);
const action = createAttachmentSucceeded(localId, item);
yield put(action);

View file

@ -5,6 +5,7 @@ import { logoutService } from './login';
import { closeModalService } from './modal';
import { deleteNotificationsRequest, fetchUsersRequest } from '../requests';
import {
attachmentWithIdExistsSelector,
currentModalSelector,
currentUserIdSelector,
currentUserSelector,
@ -208,8 +209,12 @@ export function* deleteTaskReceivedService(task) {
yield put(deleteTaskReceived(task));
}
export function* createAttachmentReceivedService(attachment) {
export function* createAttachmentReceivedService(attachment, requestId) {
const exists = yield select(attachmentWithIdExistsSelector, requestId);
if (!exists) {
yield put(createAttachmentReceived(attachment));
}
}
export function* updateAttachmentReceivedService(attachment) {

View file

@ -156,8 +156,8 @@ const createSocketEventsChannel = () =>
emit([deleteTaskReceivedService, item]);
};
const handleAttachmentCreate = api.makeHandleAttachmentCreate(({ item }) => {
emit([createAttachmentReceivedService, item]);
const handleAttachmentCreate = api.makeHandleAttachmentCreate(({ item, requestId }) => {
emit([createAttachmentReceivedService, item, requestId]);
});
const handleAttachmentUpdate = api.makeHandleAttachmentUpdate(({ item }) => {

View file

@ -0,0 +1,11 @@
import { createSelector } from 'redux-orm';
import orm from '../orm';
// eslint-disable-next-line import/prefer-default-export
export const attachmentWithIdExistsSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Attachment }, id) => Attachment.idExists(id),
);

View file

@ -3,4 +3,5 @@ export * from './all';
export * from './path';
export * from './current';
export * from './by-id';
export * from './boolean';
export * from './next-position';

View file

@ -11,6 +11,10 @@ module.exports = {
regex: /^[0-9]+$/,
required: true,
},
requestId: {
type: 'string',
isNotEmptyString: true,
},
},
exits: {
@ -58,6 +62,7 @@ module.exports = {
isImage: file.extra.isImage,
name: file.filename,
},
inputs.requestId,
this.req,
);

View file

@ -12,6 +12,12 @@ module.exports = {
type: 'json',
required: true,
},
requestId: {
type: 'string',
isNotEmptyString: true,
allowNull: true,
defaultsTo: null,
},
request: {
type: 'ref',
},
@ -29,6 +35,7 @@ module.exports = {
'attachmentCreate',
{
item: attachment,
requestId: inputs.requestId,
},
inputs.request,
);