mirror of
https://github.com/usatiuk/photos.git
synced 2025-10-28 23:37:48 +01:00
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { Reducer } from "redux";
|
|
import { IPhotoReqJSON } from "~../../src/entity/Photo";
|
|
import { UserAction, UserTypes } from "~redux/user/actions";
|
|
import { PhotoAction, PhotoTypes } from "./actions";
|
|
|
|
export interface IPhotosState {
|
|
photos: IPhotoReqJSON[] | null;
|
|
fetching: boolean;
|
|
fetchingError: string | null;
|
|
fetchingSpinner: boolean;
|
|
}
|
|
|
|
const defaultPhotosState: IPhotosState = {
|
|
photos: null,
|
|
fetching: false,
|
|
fetchingError: null,
|
|
fetchingSpinner: false,
|
|
};
|
|
|
|
export const photosReducer: Reducer<IPhotosState, PhotoAction> = (
|
|
state: IPhotosState = defaultPhotosState,
|
|
action: PhotoAction | UserAction,
|
|
) => {
|
|
switch (action.type) {
|
|
case UserTypes.USER_LOGOUT:
|
|
return defaultPhotosState;
|
|
case PhotoTypes.PHOTOS_LOAD_START:
|
|
return {
|
|
...defaultPhotosState,
|
|
fetching: true,
|
|
fetchingSpinner: false,
|
|
};
|
|
case PhotoTypes.PHOTOS_START_FETCHING_SPINNER:
|
|
return { ...state, fetchingSpinner: true };
|
|
case PhotoTypes.PHOTOS_LOAD_SUCCESS:
|
|
return { ...defaultPhotosState, photos: action.photos };
|
|
case PhotoTypes.PHOTOS_LOAD_FAIL:
|
|
return { ...defaultPhotosState, fetchingError: action.error };
|
|
default:
|
|
return state;
|
|
}
|
|
return state;
|
|
};
|