4461.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. "use strict";
  2. exports.id = 4461;
  3. exports.ids = [4461];
  4. exports.modules = {
  5. /***/ 24213:
  6. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  9. /* harmony export */ "b2": () => (/* binding */ toggleVerseBookmark),
  10. /* harmony export */ "it": () => (/* binding */ selectBookmarks)
  11. /* harmony export */ });
  12. /* unused harmony exports bookmarksSlice, selectOrderedBookmarkedVerses */
  13. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  14. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  15. const initialState = {
  16. bookmarkedVerses: {}
  17. };
  18. const bookmarksSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  19. name: "bookmarks",
  20. initialState,
  21. reducers: {
  22. toggleVerseBookmark: (state, action)=>{
  23. const verseKey = action.payload;
  24. // if the verseKey exists, we should remove it.
  25. if (state.bookmarkedVerses[verseKey]) {
  26. const newBookmarkedVerses = {
  27. ...state.bookmarkedVerses
  28. };
  29. delete newBookmarkedVerses[verseKey];
  30. return {
  31. ...state,
  32. bookmarkedVerses: newBookmarkedVerses
  33. };
  34. }
  35. return {
  36. ...state,
  37. // inserting the new pair at beginning of the object will make it sorted by the date verses were bookmarked
  38. // +new Date() gets the timestamp that we bookmarked the verse at.
  39. bookmarkedVerses: {
  40. [verseKey]: +new Date(),
  41. ...state.bookmarkedVerses
  42. }
  43. };
  44. }
  45. }
  46. });
  47. const { toggleVerseBookmark } = bookmarksSlice.actions;
  48. const selectBookmarks = (state)=>state.bookmarks.bookmarkedVerses;
  49. const selectOrderedBookmarkedVerses = (state)=>// sort the bookmarked verses by the order they appear in the Mushaf.
  50. Object.fromEntries(Object.entries(state.bookmarks.bookmarkedVerses).sort());
  51. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (bookmarksSlice.reducer);
  52. /***/ }),
  53. /***/ 16143:
  54. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  55. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  56. /* harmony export */ "E9": () => (/* binding */ selectedLastReadPage),
  57. /* harmony export */ "GF": () => (/* binding */ selectRecentReadingSessions),
  58. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  59. /* harmony export */ "eQ": () => (/* binding */ selectLastReadVerseKey),
  60. /* harmony export */ "ge": () => (/* binding */ setLastReadVerse),
  61. /* harmony export */ "jM": () => (/* binding */ selectIsVerseKeySelected)
  62. /* harmony export */ });
  63. /* unused harmony export readingTrackerSlice */
  64. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  65. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  66. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61243);
  67. /* harmony import */ var _utils_verse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44519);
  68. /* eslint-disable react-func/max-lines-per-function */
  69. const initialState = {
  70. lastReadVerse: {
  71. verseKey: null,
  72. chapterId: null,
  73. page: null,
  74. hizb: null
  75. },
  76. recentReadingSessions: {}
  77. };
  78. const NEW_SESSION_BOUNDARY = 20;
  79. const MAXIMUM_NUMBER_OF_SESSIONS = 10;
  80. const readingTrackerSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  81. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__/* ["default"].READING_TRACKER */ .Z.READING_TRACKER,
  82. initialState,
  83. reducers: {
  84. setLastReadVerse: (state, action)=>{
  85. const { lastReadVerse , chaptersData } = action.payload;
  86. let newRecentReadingSessions = {
  87. ...state.recentReadingSessions
  88. };
  89. // if the verse key already exists, and he re-visited it again, we need to mark it as the latest session.
  90. if (newRecentReadingSessions[lastReadVerse.verseKey]) {
  91. // delete the old entry
  92. delete newRecentReadingSessions[lastReadVerse.verseKey];
  93. // insert the same entry again but at the beginning
  94. newRecentReadingSessions = {
  95. [lastReadVerse.verseKey]: +new Date(),
  96. ...newRecentReadingSessions
  97. };
  98. return generateNewState(state, lastReadVerse, newRecentReadingSessions);
  99. }
  100. const sessionsVerseKeys = Object.keys(newRecentReadingSessions);
  101. const numberOfSessions = sessionsVerseKeys.length;
  102. const [lastReadingSessionVerseKey] = sessionsVerseKeys;
  103. // if there are some last read sessions already and the new verse key is not far enough to be considered a new session
  104. if (numberOfSessions && (0,_utils_verse__WEBPACK_IMPORTED_MODULE_2__/* .getDistanceBetweenVerses */ .Bo)(chaptersData, lastReadingSessionVerseKey, lastReadVerse.verseKey) <= NEW_SESSION_BOUNDARY) {
  105. delete newRecentReadingSessions[lastReadingSessionVerseKey];
  106. newRecentReadingSessions = {
  107. [lastReadVerse.verseKey]: +new Date(),
  108. ...newRecentReadingSessions
  109. };
  110. return generateNewState(state, lastReadVerse, newRecentReadingSessions);
  111. }
  112. const earliestSession = sessionsVerseKeys[numberOfSessions - 1];
  113. // insert a new entry at the beginning
  114. newRecentReadingSessions = {
  115. [lastReadVerse.verseKey]: +new Date(),
  116. ...newRecentReadingSessions
  117. };
  118. // if the number of sessions already exceeded the maximum, delete the latest session
  119. if (numberOfSessions + 1 > MAXIMUM_NUMBER_OF_SESSIONS) {
  120. delete newRecentReadingSessions[earliestSession];
  121. }
  122. return generateNewState(state, lastReadVerse, newRecentReadingSessions);
  123. }
  124. }
  125. });
  126. /**
  127. * Generate the new state.
  128. *
  129. * @param {ReadingTracker} state
  130. * @param {LastReadVerse} lastReadVerse
  131. * @param {Record<string, boolean>} newRecentReadingSessions
  132. * @returns {ReadingTracker}
  133. */ const generateNewState = (state, lastReadVerse, newRecentReadingSessions)=>{
  134. return {
  135. ...state,
  136. lastReadVerse,
  137. recentReadingSessions: newRecentReadingSessions
  138. };
  139. };
  140. const { setLastReadVerse } = readingTrackerSlice.actions;
  141. const selectLastReadVerseKey = (state)=>state.readingTracker.lastReadVerse;
  142. const selectRecentReadingSessions = (state)=>state.readingTracker.recentReadingSessions;
  143. const selectedLastReadPage = (state)=>state.readingTracker.lastReadVerse.page;
  144. const selectIsVerseKeySelected = (verseKey)=>(state)=>{
  145. const lastReadVerseKey = selectLastReadVerseKey(state);
  146. return verseKey === lastReadVerseKey.verseKey;
  147. };
  148. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (readingTrackerSlice.reducer);
  149. /***/ })
  150. };
  151. ;
  152. //# sourceMappingURL=4461.js.map