import { DOCUMENTS } from 'app/modules/documents/store/documents.constants'; import { DocumentsState } from './documents.types'; import { AnyAction } from 'redux'; export const defaultDocumentsState: DocumentsState = { categories: [], filters: { categoryIds: [], bookmarksOnly: false, }, collection: [], collectionLimit: DOCUMENTS.DEFAULT_COLLECTION_LIMIT, bookmarks: [], }; const documentsReducer = (state = defaultDocumentsState, action: AnyAction = { type: '' }) => { switch (action.type) { case DOCUMENTS.ADD_CATEGORY_FILTER: return { ...state, filters: { ...state.filters, categoryIds: [ ...state.filters.categoryIds, action.payload ], }, }; case DOCUMENTS.REMOVE_CATEGORY_FILTER: return { ...state, filters: { ...state.filters, categoryIds: state.filters.categoryIds.filter(categoryId => categoryId !== action.payload), }, }; case DOCUMENTS.RESET_CATEGORY_FILTER: return { ...state, filters: { ...state.filters, categoryIds: [], }, }; case DOCUMENTS.SET_BOOKMARKS_FILTER: return { ...state, filters: { ...state.filters, bookmarksOnly: action.payload, }, }; case DOCUMENTS.SET_COLLECTION: return { ...state, collection: action.payload, }; case DOCUMENTS.SET_COLLECTION_LIMIT: return { ...state, collectionLimit: state.collectionLimit + DOCUMENTS.DEFAULT_COLLECTION_LIMIT, }; case DOCUMENTS.RESET_COLLECTION_LIMIT: return { ...state, collectionLimit: defaultDocumentsState.collectionLimit, }; case DOCUMENTS.SET_CATEGORIES: return { ...state, categories: action.payload, }; case DOCUMENTS.FETCH_BOOKMARKS_SUCCESS: return { ...state, bookmarks: action.payload, }; case DOCUMENTS.ADD_BOOKMARK_SUCCESS: return { ...state, bookmarks: [ ...state.bookmarks, action.payload ], }; case DOCUMENTS.REMOVE_BOOKMARK_SUCCESS: return { ...state, bookmarks: state.bookmarks.filter(bookmark => bookmark !== action.payload), }; default: return state; } }; export { documentsReducer };