UNPKG

@hmcts/media-viewer

Version:
125 lines 17.3 kB
import * as fromBookmarks from '../actions/bookmark.actions'; import { StoreUtils } from '../store-utils'; import { generateBookmarkEntities } from '../bookmarks-store-utils'; export const initialBookmarksState = { bookmarks: [], bookmarkEntities: {}, bookmarkPageEntities: {}, editableBookmark: undefined, loaded: false, loading: false, scrollTop: null, }; export function bookmarksReducer(state = initialBookmarksState, action) { switch (action.type) { case fromBookmarks.LOAD_BOOKMARKS: { return { ...state, loading: true }; } case fromBookmarks.LOAD_BOOKMARKS_SUCCESS: case fromBookmarks.LOAD_BOOKMARKS_FAIL: { const bookmarks = action.payload.status === 200 ? action.payload.body : []; const bookmarkEntities = generateBookmarkEntities(bookmarks); const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarks, 'pageNumber'); return { ...state, bookmarks, bookmarkEntities, bookmarkPageEntities, loaded: true }; } case fromBookmarks.CREATE_BOOKMARK_SUCCESS: { const bookmark = action.payload; const bookmarkEntities = { ...state.bookmarkEntities, [bookmark.id]: bookmark, }; const bookmarkArray = Object.keys(bookmarkEntities).map(key => bookmarkEntities[key]); const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarkArray, 'pageNumber'); const editableBookmark = bookmark.id; return { ...state, bookmarkEntities, editableBookmark, bookmarkPageEntities, loading: false, loaded: true }; } case fromBookmarks.MOVE_BOOKMARK_SUCCESS: { const movedBookmarks = generateBookmarkEntities(action.payload); const bookmarkEntities = { ...state.bookmarkEntities, ...movedBookmarks }; return { ...state, bookmarkEntities, loading: false, loaded: true }; } case fromBookmarks.DELETE_BOOKMARK_SUCCESS: { const bookmarkIds = action.payload; const bookmarkEntities = { ...state.bookmarkEntities }; const bookmarkPageEntities = { ...state.bookmarkPageEntities }; const removeBookmarksByPage = {}; bookmarkIds.forEach(bookmarkId => { if (removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber] !== undefined && removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber].length > 0) { removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber].push(bookmarkId); } else { removeBookmarksByPage[bookmarkEntities[bookmarkId].pageNumber] = [bookmarkId]; } delete bookmarkEntities[bookmarkId]; }); Object.entries(removeBookmarksByPage).forEach(([pageNumber, bmrkIds]) => { bookmarkPageEntities[pageNumber] = bookmarkPageEntities[pageNumber].filter(bookmark => !bmrkIds.includes(bookmark.id)); }); return { ...state, bookmarkEntities, bookmarkPageEntities, loading: false, loaded: true }; } case fromBookmarks.UPDATE_BOOKMARK_SUCCESS: { const bookmark = action.payload; const bookmarkEntities = { ...state.bookmarkEntities, [bookmark.id]: { ...bookmark } }; const bookmarkArray = Object.keys(bookmarkEntities).map(key => bookmarkEntities[key]); const bookmarkPageEntities = StoreUtils.groupByKeyEntities(bookmarkArray, 'pageNumber'); const editableBookmark = undefined; return { ...state, bookmarkEntities, editableBookmark, bookmarkPageEntities, loading: false, loaded: true }; } case fromBookmarks.UPDATE_BOOKMARK_SCROLL_TOP: { const scrollTop = action.payload; return { ...state, scrollTop: scrollTop }; } } return state; } export const getBookmarks = (state) => state.bookmarks; export const getBookmarkEnts = (state) => state.bookmarkEntities; export const getBookmarkPageEnt = (state) => state.bookmarkPageEntities; export const getEditBookmark = (state) => state.editableBookmark; export const getScrollTop = (state) => state.scrollTop; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtzLnJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9zdG9yZS9yZWR1Y2Vycy9ib29rbWFya3MucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssYUFBYSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVlwRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBbUI7SUFDbkQsU0FBUyxFQUFFLEVBQUU7SUFDYixnQkFBZ0IsRUFBRSxFQUFFO0lBQ3BCLG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixNQUFNLEVBQUUsS0FBSztJQUNiLE9BQU8sRUFBRSxLQUFLO0lBQ2QsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcscUJBQXFCLEVBQzVELE1BQXNDO0lBRXRDLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXBCLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1FBQzFDLEtBQUssYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFD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LENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDekMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsU0FBUyxFQUFFLFNBQVM7YUFDckIsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7QUFDakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDeEYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcm9tQm9va21hcmtzIGZyb20gJy4uL2FjdGlvbnMvYm9va21hcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBCb29rbWFyayB9IGZyb20gJy4uLy4uL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9ib29rbWFya3MvYm9va21hcmtzLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3RvcmVVdGlscyB9IGZyb20gJy4uL3N0b3JlLXV0aWxzJztcbmltcG9ydCB7IGdlbmVyYXRlQm9va21hcmtFbnRpdGllcyB9IGZyb20gJy4uL2Jvb2ttYXJrcy1zdG9yZS11dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9va21hcmtzU3RhdGUge1xuICBib29rbWFya3M6IEJvb2ttYXJrW107XG4gIGJvb2ttYXJrRW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBCb29rbWFyayB9O1xuICBib29rbWFya1BhZ2VFbnRpdGllczogeyBbaWQ6IHN0cmluZ106IGFueSB9O1xuICBlZGl0YWJsZUJvb2ttYXJrOiBzdHJpbmc7XG4gIGxvYWRlZDogYm9vbGVhbjtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgc2Nyb2xsVG9wPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbEJvb2ttYXJrc1N0YXRlOiBCb29rbWFya3NTdGF0ZSA9IHtcbiAgYm9va21hcmtzOiBbXSxcbiAgYm9va21hcmtFbnRpdGllczoge30sXG4gIGJvb2ttYXJrUGFnZUVudGl0aWVzOiB7fSxcbiAgZWRpdGFibGVCb29rbWFyazogdW5kZWZpbmVkLFxuICBsb2FkZWQ6IGZhbHNlLFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgc2Nyb2xsVG9wOiBudWxsLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJvb2ttYXJrc1JlZHVjZXIoc3RhdGUgPSBpbml0aWFsQm9va21hcmtzU3RhdGUsXG4gIGFjdGlvbjogZnJvbUJvb2ttYXJrcy5Cb29rbWFya3NBY3Rpb25zKTogQm9va21hcmtzU3RhdGUge1xuXG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblxuICAgIGNhc2UgZnJvbUJvb2ttYXJrcy5MT0FEX0JPT0tNQVJLUzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWRpbmc6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQm9va21hcmtzLkxPQURfQk9PS01BUktTX1NVQ0NFU1M6XG4gICAgY2FzZSBmcm9tQm9va21hcmtzLkxPQURfQk9PS01BUktTX0ZBSUw6IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrcyA9IGFjdGlvbi5wYXlsb2FkLnN0YXR1cyA9PT0gMjAwID8gYWN0aW9uLnBheWxvYWQuYm9keSA6IFtdO1xuICAgICAgY29uc3QgYm9va21hcmtFbnRpdGllcyA9IGdlbmVyYXRlQm9va21hcmtFbnRpdGllcyhib29rbWFya3MpO1xuICAgICAgY29uc3QgYm9va21hcmtQYWdlRW50aXRpZXMgPSBTdG9yZVV0aWxzLmdyb3VwQnlLZXlFbnRpdGllcyhib29rbWFya3MsICdwYWdlTnVtYmVyJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBib29rbWFya3MsXG4gICAgICAgIGJvb2ttYXJrRW50aXRpZXMsXG4gICAgICAgIGJvb2ttYXJrUGFnZUVudGl0aWVzLFxuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQm9va21hcmtzLkNSRUFURV9CT09LTUFSS19TVUNDRVNTOiB7XG4gICAgICBjb25zdCBib29rbWFyazogQm9va21hcmsgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IGJvb2ttYXJrRW50aXRpZXMgPSB7XG4gICAgICAgIC4uLnN0YXRlLmJvb2ttYXJrRW50aXRpZXMsXG4gICAgICAgIFtib29rbWFyay5pZF06IGJvb2ttYXJrLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrQXJyYXkgPSBPYmplY3Qua2V5cyhib29rbWFya0VudGl0aWVzKS5tYXAoa2V5ID0+IGJvb2ttYXJrRW50aXRpZXNba2V5XSk7XG4gICAgICBjb25zdCBib29rbWFya1BhZ2VFbnRpdGllcyA9IFN0b3JlVXRpbHMuZ3JvdXBCeUtleUVudGl0aWVzKGJvb2ttYXJrQXJyYXksICdwYWdlTnVtYmVyJyk7XG4gICAgICBjb25zdCBlZGl0YWJsZUJvb2ttYXJrID0gYm9va21hcmsuaWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYm9va21hcmtFbnRpdGllcyxcbiAgICAgICAgZWRpdGFibGVCb29rbWFyayxcbiAgICAgICAgYm9va21hcmtQYWdlRW50aXRpZXMsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQm9va21hcmtzLk1PVkVfQk9PS01BUktfU1VDQ0VTUzoge1xuICAgICAgY29uc3QgbW92ZWRCb29rbWFya3MgPSBnZW5lcmF0ZUJvb2ttYXJrRW50aXRpZXMoYWN0aW9uLnBheWxvYWQpO1xuICAgICAgY29uc3QgYm9va21hcmtFbnRpdGllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuYm9va21hcmtFbnRpdGllcyxcbiAgICAgICAgLi4ubW92ZWRCb29rbWFya3NcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYm9va21hcmtFbnRpdGllcyxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGxvYWRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21Cb29rbWFya3MuREVMRVRFX0JPT0tNQVJLX1NVQ0NFU1M6IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrSWRzOiBzdHJpbmdbXSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgYm9va21hcmtFbnRpdGllcyA9IHsgLi4uc3RhdGUuYm9va21hcmtFbnRpdGllcyB9O1xuICAgICAgY29uc3QgYm9va21hcmtQYWdlRW50aXRpZXMgPSB7IC4uLnN0YXRlLmJvb2ttYXJrUGFnZUVudGl0aWVzIH07XG4gICAgICBjb25zdCByZW1vdmVCb29rbWFya3NCeVBhZ2U6IHsgW3BhZ2VOdW1iZXI6IG51bWJlcl06IHN0cmluZ1tdIH0gPSB7fTtcbiAgICAgIGJvb2ttYXJrSWRzLmZvckVhY2goYm9va21hcmtJZCA9PiB7XG4gICAgICAgIGlmIChyZW1vdmVCb29rbWFya3NCeVBhZ2VbYm9va21hcmtFbnRpdGllc1tib29rbWFya0lkXS5wYWdlTnVtYmVyXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVtb3ZlQm9va21hcmtzQnlQYWdlW2Jvb2ttYXJrRW50aXRpZXNbYm9va21hcmtJZF0ucGFnZU51bWJlcl0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlbW92ZUJvb2ttYXJrc0J5UGFnZVtib29rbWFya0VudGl0aWVzW2Jvb2ttYXJrSWRdLnBhZ2VOdW1iZXJdLnB1c2goYm9va21hcmtJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlQm9va21hcmtzQnlQYWdlW2Jvb2ttYXJrRW50aXRpZXNbYm9va21hcmtJZF0ucGFnZU51bWJlcl0gPSBbYm9va21hcmtJZF07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGJvb2ttYXJrRW50aXRpZXNbYm9va21hcmtJZF07XG4gICAgICB9KTtcblxuICAgICAgT2JqZWN0LmVudHJpZXMocmVtb3ZlQm9va21hcmtzQnlQYWdlKS5mb3JFYWNoKFxuICAgICAgICAoW3BhZ2VOdW1iZXIsIGJtcmtJZHNdKSA9PiB7XG4gICAgICAgICAgYm9va21hcmtQYWdlRW50aXRpZXNbcGFnZU51bWJlcl1cbiAgICAgICAgICAgID0gYm9va21hcmtQYWdlRW50aXRpZXNbcGFnZU51bWJlcl0uZmlsdGVyKGJvb2ttYXJrID0+ICFibXJrSWRzLmluY2x1ZGVzKGJvb2ttYXJrLmlkKSk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBib29rbWFya0VudGl0aWVzLFxuICAgICAgICBib29rbWFya1BhZ2VFbnRpdGllcyxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGxvYWRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21Cb29rbWFya3MuVVBEQVRFX0JPT0tNQVJLX1NVQ0NFU1M6IHtcbiAgICAgIGNvbnN0IGJvb2ttYXJrOiBCb29rbWFyayA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgYm9va21hcmtFbnRpdGllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuYm9va21hcmtFbnRpdGllcyxcbiAgICAgICAgW2Jvb2ttYXJrLmlkXTogeyAuLi5ib29rbWFyayB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYm9va21hcmtBcnJheSA9IE9iamVjdC5rZXlzKGJvb2ttYXJrRW50aXRpZXMpLm1hcChrZXkgPT4gYm9va21hcmtFbnRpdGllc1trZXldKTtcbiAgICAgIGNvbnN0IGJvb2ttYXJrUGFnZUVudGl0aWVzID0gU3RvcmVVdGlscy5ncm91cEJ5S2V5RW50aXRpZXMoYm9va21hcmtBcnJheSwgJ3BhZ2VOdW1iZXInKTtcbiAgICAgIGNvbnN0IGVkaXRhYmxlQm9va21hcmsgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYm9va21hcmtFbnRpdGllcyxcbiAgICAgICAgZWRpdGFibGVCb29rbWFyayxcbiAgICAgICAgYm9va21hcmtQYWdlRW50aXRpZXMsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgZnJvbUJvb2ttYXJrcy5VUERBVEVfQk9PS01BUktfU0NST0xMX1RPUDoge1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wOiBudW1iZXIgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRCb29rbWFya3MgPSAoc3RhdGU6IEJvb2ttYXJrc1N0YXRlKSA9PiBzdGF0ZS5ib29rbWFya3M7XG5leHBvcnQgY29uc3QgZ2V0Qm9va21hcmtFbnRzID0gKHN0YXRlOiBCb29rbWFya3NTdGF0ZSkgPT4gc3RhdGUuYm9va21hcmtFbnRpdGllcztcbmV4cG9ydCBjb25zdCBnZXRCb29rbWFya1BhZ2VFbnQgPSAoc3RhdGU6IEJvb2ttYXJrc1N0YXRlKSA9PiBzdGF0ZS5ib29rbWFya1BhZ2VFbnRpdGllcztcbmV4cG9ydCBjb25zdCBnZXRFZGl0Qm9va21hcmsgPSAoc3RhdGU6IEJvb2ttYXJrc1N0YXRlKSA9PiBzdGF0ZS5lZGl0YWJsZUJvb2ttYXJrO1xuZXhwb3J0IGNvbnN0IGdldFNjcm9sbFRvcCA9IChzdGF0ZTogQm9va21hcmtzU3RhdGUpID0+IHN0YXRlLnNjcm9sbFRvcDsiXX0=