"use strict"; exports.id = 4461; exports.ids = [4461]; exports.modules = { /***/ 24213: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ "b2": () => (/* binding */ toggleVerseBookmark), /* harmony export */ "it": () => (/* binding */ selectBookmarks) /* harmony export */ }); /* unused harmony exports bookmarksSlice, selectOrderedBookmarkedVerses */ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184); /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__); const initialState = { bookmarkedVerses: {} }; const bookmarksSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({ name: "bookmarks", initialState, reducers: { toggleVerseBookmark: (state, action)=>{ const verseKey = action.payload; // if the verseKey exists, we should remove it. if (state.bookmarkedVerses[verseKey]) { const newBookmarkedVerses = { ...state.bookmarkedVerses }; delete newBookmarkedVerses[verseKey]; return { ...state, bookmarkedVerses: newBookmarkedVerses }; } return { ...state, // inserting the new pair at beginning of the object will make it sorted by the date verses were bookmarked // +new Date() gets the timestamp that we bookmarked the verse at. bookmarkedVerses: { [verseKey]: +new Date(), ...state.bookmarkedVerses } }; } } }); const { toggleVerseBookmark } = bookmarksSlice.actions; const selectBookmarks = (state)=>state.bookmarks.bookmarkedVerses; const selectOrderedBookmarkedVerses = (state)=>// sort the bookmarked verses by the order they appear in the Mushaf. Object.fromEntries(Object.entries(state.bookmarks.bookmarkedVerses).sort()); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (bookmarksSlice.reducer); /***/ }), /***/ 16143: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "E9": () => (/* binding */ selectedLastReadPage), /* harmony export */ "GF": () => (/* binding */ selectRecentReadingSessions), /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ "eQ": () => (/* binding */ selectLastReadVerseKey), /* harmony export */ "ge": () => (/* binding */ setLastReadVerse), /* harmony export */ "jM": () => (/* binding */ selectIsVerseKeySelected) /* harmony export */ }); /* unused harmony export readingTrackerSlice */ /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184); /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61243); /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44519); /* eslint-disable react-func/max-lines-per-function */ const initialState = { lastReadVerse: { verseKey: null, chapterId: null, page: null, hizb: null }, recentReadingSessions: {} }; const NEW_SESSION_BOUNDARY = 20; const MAXIMUM_NUMBER_OF_SESSIONS = 10; const readingTrackerSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({ name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__/* ["default"].READING_TRACKER */ .Z.READING_TRACKER, initialState, reducers: { setLastReadVerse: (state, action)=>{ const { lastReadVerse , chaptersData } = action.payload; let newRecentReadingSessions = { ...state.recentReadingSessions }; // if the verse key already exists, and he re-visited it again, we need to mark it as the latest session. if (newRecentReadingSessions[lastReadVerse.verseKey]) { // delete the old entry delete newRecentReadingSessions[lastReadVerse.verseKey]; // insert the same entry again but at the beginning newRecentReadingSessions = { [lastReadVerse.verseKey]: +new Date(), ...newRecentReadingSessions }; return generateNewState(state, lastReadVerse, newRecentReadingSessions); } const sessionsVerseKeys = Object.keys(newRecentReadingSessions); const numberOfSessions = sessionsVerseKeys.length; const [lastReadingSessionVerseKey] = sessionsVerseKeys; // if there are some last read sessions already and the new verse key is not far enough to be considered a new session if (numberOfSessions && (0,_utils_verse__WEBPACK_IMPORTED_MODULE_2__/* .getDistanceBetweenVerses */ .Bo)(chaptersData, lastReadingSessionVerseKey, lastReadVerse.verseKey) <= NEW_SESSION_BOUNDARY) { delete newRecentReadingSessions[lastReadingSessionVerseKey]; newRecentReadingSessions = { [lastReadVerse.verseKey]: +new Date(), ...newRecentReadingSessions }; return generateNewState(state, lastReadVerse, newRecentReadingSessions); } const earliestSession = sessionsVerseKeys[numberOfSessions - 1]; // insert a new entry at the beginning newRecentReadingSessions = { [lastReadVerse.verseKey]: +new Date(), ...newRecentReadingSessions }; // if the number of sessions already exceeded the maximum, delete the latest session if (numberOfSessions + 1 > MAXIMUM_NUMBER_OF_SESSIONS) { delete newRecentReadingSessions[earliestSession]; } return generateNewState(state, lastReadVerse, newRecentReadingSessions); } } }); /** * Generate the new state. * * @param {ReadingTracker} state * @param {LastReadVerse} lastReadVerse * @param {Record} newRecentReadingSessions * @returns {ReadingTracker} */ const generateNewState = (state, lastReadVerse, newRecentReadingSessions)=>{ return { ...state, lastReadVerse, recentReadingSessions: newRecentReadingSessions }; }; const { setLastReadVerse } = readingTrackerSlice.actions; const selectLastReadVerseKey = (state)=>state.readingTracker.lastReadVerse; const selectRecentReadingSessions = (state)=>state.readingTracker.recentReadingSessions; const selectedLastReadPage = (state)=>state.readingTracker.lastReadVerse.page; const selectIsVerseKeySelected = (verseKey)=>(state)=>{ const lastReadVerseKey = selectLastReadVerseKey(state); return verseKey === lastReadVerseKey.verseKey; }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (readingTrackerSlice.reducer); /***/ }) }; ; //# sourceMappingURL=4461.js.map