mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
70 lines (62 loc) • 1.85 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {combineReducers} from 'redux';
import {FileTypes} from 'action_types';
import {RequestStatus} from '../../constants';
import {GenericAction} from 'types/actions';
import {FilesRequestsStatuses, RequestStatusType} from 'types/requests';
import {initialRequestState} from './helpers';
export function handleUploadFilesRequest(
REQUEST: string,
SUCCESS: string,
FAILURE: string,
CANCEL: string,
state: RequestStatusType,
action: GenericAction,
): RequestStatusType {
switch (action.type) {
case REQUEST:
return {
...state,
status: RequestStatus.STARTED,
};
case SUCCESS:
return {
...state,
status: RequestStatus.SUCCESS,
error: null,
};
case FAILURE: {
let error = action.error;
if (error instanceof Error) {
error = error.hasOwnProperty('intl') ? {...error} : error.toString();
}
return {
...state,
status: RequestStatus.FAILURE,
error,
};
}
case CANCEL:
return {
...state,
status: RequestStatus.CANCELLED,
error: null,
};
default:
return state;
}
}
function uploadFiles(state: RequestStatusType = initialRequestState(), action: GenericAction): RequestStatusType {
return handleUploadFilesRequest(
FileTypes.UPLOAD_FILES_REQUEST,
FileTypes.UPLOAD_FILES_SUCCESS,
FileTypes.UPLOAD_FILES_FAILURE,
FileTypes.UPLOAD_FILES_CANCEL,
state,
action,
);
}
export default (combineReducers({
uploadFiles,
}) as (b: FilesRequestsStatuses, a: GenericAction) => FilesRequestsStatuses);