mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-28 14:16:41 +07:00
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import assocPath from 'ramda/es/assocPath';
|
|
import omit from 'ramda/es/omit';
|
|
|
|
import { UPLOAD_ACTIONS, EMPTY_UPLOAD_STATUS } from './constants';
|
|
import {
|
|
uploadAddStatus, uploadDropStatus, uploadSetStatus, uploadAddFile
|
|
} from './actions';
|
|
import { IUploadState } from './reducer';
|
|
|
|
const addStatus = (
|
|
state: IUploadState,
|
|
{ temp_id, status, }: ReturnType<typeof uploadAddStatus>
|
|
): IUploadState => assocPath(
|
|
['statuses'],
|
|
{ ...state.statuses, [temp_id]: { ...EMPTY_UPLOAD_STATUS, ...status, }, },
|
|
state
|
|
);
|
|
|
|
const dropStatus = (
|
|
state: IUploadState,
|
|
{ temp_id, }: ReturnType<typeof uploadDropStatus>
|
|
): IUploadState => assocPath(['statuses'], omit([temp_id], state.statuses), state);
|
|
|
|
const setStatus = (
|
|
state: IUploadState,
|
|
{ temp_id, status, }: ReturnType<typeof uploadSetStatus>
|
|
): IUploadState => assocPath(
|
|
['statuses'],
|
|
{
|
|
...state.statuses,
|
|
[temp_id]: { ...(state.statuses[temp_id] || EMPTY_UPLOAD_STATUS), ...status, },
|
|
},
|
|
state
|
|
);
|
|
|
|
const addFile = (state: IUploadState, { file, }: ReturnType<typeof uploadAddFile>): IUploadState => assocPath(['files'], { ...state.files, [file.id]: file, }, state);
|
|
|
|
export const UPLOAD_HANDLERS = {
|
|
[UPLOAD_ACTIONS.ADD_STATUS]: addStatus,
|
|
[UPLOAD_ACTIONS.DROP_STATUS]: dropStatus,
|
|
[UPLOAD_ACTIONS.SET_STATUS]: setStatus,
|
|
[UPLOAD_ACTIONS.ADD_FILE]: addFile,
|
|
};
|