communication-react-19
Version:
React library for building modern communication user experiences utilizing Azure Communication Services (React 19 compatible fork)
48 lines • 2.66 kB
JavaScript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/* @conditional-compile-remove(rich-text-editor-image-upload) */
import { AttachmentUploadActionType } from '../file-sharing/AttachmentUpload';
/* @conditional-compile-remove(rich-text-editor-image-upload) */
/**
* @internal
*/
export const ImageUploadReducer = (state, action) => {
const messageId = action.messageId;
const messageState = state && state[messageId];
switch (action.type) {
case AttachmentUploadActionType.Set:
if (!messageState || messageState.length === 0) {
return Object.assign(Object.assign({}, state), { [messageId]: action.newUploads });
}
return Object.assign(Object.assign({}, state), { [messageId]: messageState.filter((v) => !v.metadata.error).concat(action.newUploads) });
case AttachmentUploadActionType.Completed:
if (!messageState) {
return state;
}
return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId
? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { id: action.id, url: action.url, progress: 1 }) }) : v) });
case AttachmentUploadActionType.Failed:
if (!messageState) {
return state;
}
return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId
? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { error: {
message: action.message
} }) }) : v) });
case AttachmentUploadActionType.Remove:
if (!messageState) {
return state;
}
return Object.assign(Object.assign({}, state), { [messageId]: messageState.filter((v) => !v.metadata.error).filter((v) => v.metadata.id !== action.id) });
case AttachmentUploadActionType.Progress:
if (!messageState) {
return state;
}
return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId ? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { progress: action.progress }) }) : v) });
case AttachmentUploadActionType.Clear:
return Object.assign(Object.assign({}, state), { [messageId]: [] });
default:
return state;
}
};
//# sourceMappingURL=ImageUploadReducer.js.map