UNPKG

@lonelyplanet/dotcom-core

Version:

This package is meant to house some of our more common UI and shared libs across dotcom applications.

99 lines (90 loc) 2.18 kB
import { IBookmark } from "@lonelyplanet/open-planet-node/dist/resources/bookmark"; import { IBookmarkList } from "@lonelyplanet/open-planet-node/dist/resources/bookmarkList"; import { Action, handleActions } from "redux-actions"; import { IUpdateBookmarkDoneAction } from "../actions/bookmark"; import { ADD_BOOKMARK_DONE, LIST_CREATE_DONE, LIST_UPDATE_DONE, UPDATE_BOOKMARK_DONE, } from "../constants/bookmark"; const initialState: IBookmarkReducerState = { lists: [], }; export interface IBookmarkReducerState { lists: IBookmarkList[]; } export interface IBookmarkActionsPayload extends IBookmarkList { id?: string; listId?: string; bookmark?: any; entries?: any; } export const bookmark = handleActions< IBookmarkReducerState, IBookmarkActionsPayload > ({ [ADD_BOOKMARK_DONE]: (state, action) => { return { ...state, lists: state.lists.map((list) => { if (list.id === action.payload.listId) { return { ...list, entries: [ ...list.entries, { ...action.payload.bookmark, }, ], }; } return list; }), }; }, [UPDATE_BOOKMARK_DONE]: (state, action) => ({ ...state, lists: state.lists.map((list) => { if (list.id === action.payload.listId) { const entries = list.entries.map((entry) => { if (entry.id === action.payload.bookmark.id) { return { ...action.payload.bookmark, }; } return entry; }); return { ...list, entries, }; } return list; }), }), [LIST_CREATE_DONE]: (state, action) => ({ ...state, lists: [ ...state.lists, { ...action.payload, }, ], }), [LIST_UPDATE_DONE]: (state, action) => ({ ...state, lists: state.lists.map((list) => { if (list.id === action.payload.id) { return { ...list, ...action.payload, entries: list.entries, }; } return list; }), }), }, initialState); export default bookmark;