@hmcts/media-viewer
Version:
125 lines • 17.3 kB
JavaScript
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=