6094.js 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903
  1. exports.id = 6094;
  2. exports.ids = [6094];
  3. exports.modules = {
  4. /***/ 49880:
  5. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6. "use strict";
  7. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  9. /* harmony export */ });
  10. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  11. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  12. var _path;
  13. function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
  14. var SvgChevronLeft = function SvgChevronLeft(props) {
  15. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
  16. width: 15,
  17. height: 15,
  18. viewBox: "0 0 15 15",
  19. fill: "none",
  20. xmlns: "http://www.w3.org/2000/svg"
  21. }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
  22. d: "M8.842 3.135a.5.5 0 0 1 .023.707L5.435 7.5l3.43 3.658a.5.5 0 0 1-.73.684l-3.75-4a.5.5 0 0 1 0-.684l3.75-4a.5.5 0 0 1 .707-.023Z",
  23. fill: "currentColor",
  24. fillRule: "evenodd",
  25. clipRule: "evenodd"
  26. })));
  27. };
  28. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgChevronLeft);
  29. /***/ }),
  30. /***/ 3932:
  31. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  32. "use strict";
  33. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  34. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  35. /* harmony export */ });
  36. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  37. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  38. var _path;
  39. function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
  40. var SvgChevronRight = function SvgChevronRight(props) {
  41. return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
  42. width: 15,
  43. height: 15,
  44. viewBox: "0 0 15 15",
  45. fill: "none",
  46. xmlns: "http://www.w3.org/2000/svg"
  47. }, props), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
  48. d: "M6.158 3.135a.5.5 0 0 1 .707.023l3.75 4a.5.5 0 0 1 0 .684l-3.75 4a.5.5 0 1 1-.73-.684L9.566 7.5l-3.43-3.658a.5.5 0 0 1 .023-.707Z",
  49. fill: "currentColor",
  50. fillRule: "evenodd",
  51. clipRule: "evenodd"
  52. })));
  53. };
  54. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgChevronRight);
  55. /***/ }),
  56. /***/ 43530:
  57. /***/ ((module) => {
  58. // Exports
  59. module.exports = {
  60. "tooltipContainer": "OnboardingStep_tooltipContainer__cLWvX",
  61. "title": "OnboardingStep_title__QbSkZ",
  62. "description": "OnboardingStep_description__bkeeG",
  63. "icon": "OnboardingStep_icon__FEDh3",
  64. "actionContainer": "OnboardingStep_actionContainer__ovpeY"
  65. };
  66. /***/ }),
  67. /***/ 26628:
  68. /***/ ((module) => {
  69. // Exports
  70. module.exports = {
  71. "base": "Separator_base__2kP0d",
  72. "semiBold": "Separator_semiBold__9Eu4c",
  73. "bold": "Separator_bold__412WT"
  74. };
  75. /***/ }),
  76. /***/ 96318:
  77. /***/ ((module) => {
  78. // Exports
  79. module.exports = {
  80. "baseSize": "Skeleton_baseSize__RsOkc",
  81. "skeleton": "Skeleton_skeleton__u2Uso",
  82. "active": "Skeleton_active__5df2K",
  83. "loading": "Skeleton_loading__iZh50",
  84. "rounded": "Skeleton_rounded__ftYYr",
  85. "content": "Skeleton_content__knKtV"
  86. };
  87. /***/ }),
  88. /***/ 35902:
  89. /***/ ((module) => {
  90. // Exports
  91. module.exports = {
  92. "internalContainer": "SpinnerContainer_internalContainer__kt2ni",
  93. "spinner": "SpinnerContainer_spinner__kzDgO"
  94. };
  95. /***/ }),
  96. /***/ 74008:
  97. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  98. "use strict";
  99. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  100. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  101. /* harmony export */ });
  102. /**
  103. * List of events that can be dispatched to control the onboarding checklist
  104. * manually and give control to the component that is being on-boarded.
  105. * Events are triggered from @see useHandleOnboardingEvents.ts
  106. */ var OnboardingEvent;
  107. (function(OnboardingEvent) {
  108. OnboardingEvent["STEP_AFTER_CHOOSING_RECITER_FROM_LIST"] = "stepAfterChoosingReciterFromList";
  109. OnboardingEvent["STEP_AFTER_PLAY_AUDIO_CLICK"] = "stepAfterPlayAudioClick";
  110. OnboardingEvent["STEP_AFTER_AUDIO_PLAYER_TRIGGER"] = "stepAfterAudioPlayerTrigger";
  111. OnboardingEvent["STEP_AFTER_RECITER_LIST_ITEM_CLICK"] = "stepAfterReciterListItemClick";
  112. OnboardingEvent["STEP_BEFORE_RECITER_LIST_ITEM_CLICK"] = "stepBeforeReciterListItemClick";
  113. OnboardingEvent["STEP_BEFORE_CHOOSING_RECITER_FROM_LIST"] = "stepBeforeChoosingReciterFromList";
  114. })(OnboardingEvent || (OnboardingEvent = {}));
  115. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OnboardingEvent);
  116. /***/ }),
  117. /***/ 70627:
  118. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  119. "use strict";
  120. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  121. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  122. /* harmony export */ });
  123. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6022);
  124. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_0__);
  125. /* harmony import */ var _OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74008);
  126. /* harmony import */ var _redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44177);
  127. /* harmony import */ var _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20661);
  128. /* eslint-disable react-func/max-lines-per-function */
  129. /**
  130. * This hook is an abstraction of the custom logic required for different parts of the onboarding. Example: Opening the settings drawer when the user clicks on "Next" in the settings onboarding.
  131. *
  132. * @param {UseHandleOnboardingEventsParams} params
  133. * @returns {UseHandleOnboardingEventsReturn}
  134. */ const useHandleOnboardingEvents = ({ group , index , isLastStep })=>{
  135. const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useDispatch)();
  136. const beforePrev = ()=>{
  137. if (group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_3__/* ["default"].SETTINGS */ .Z.SETTINGS) {
  138. if (index === 1) {
  139. // when the user clicks "back" in
  140. // the second step of the settings onboarding, close the drawer
  141. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setIsSettingsDrawerOpen */ .ZY)(false));
  142. // add a delay to the animation so that the drawer has time to close
  143. // tip: this comes from Drawer.module.scss (--transition-regular)
  144. return {
  145. delay: 400
  146. };
  147. }
  148. if (isLastStep) {
  149. // when the user clicks "back" in
  150. // the last step of the settings onboarding, close the translations view
  151. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setSettingsView */ .Mi)(_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .SettingsView.Body */ .US.Body));
  152. setTimeout(()=>{
  153. const el = document.getElementById("settings-drawer-container");
  154. // scroll to the bottom of the settings view
  155. if (el) el.scrollTop = el.scrollHeight;
  156. }, 0);
  157. return {
  158. delay: 1
  159. };
  160. }
  161. }
  162. if (group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_3__/* ["default"].READING_EXPERIENCE */ .Z.READING_EXPERIENCE) {
  163. if (index === 4) {
  164. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_BEFORE_CHOOSING_RECITER_FROM_LIST */ .Z.STEP_BEFORE_CHOOSING_RECITER_FROM_LIST));
  165. return {
  166. automaticallyProceed: false
  167. };
  168. }
  169. if (index === 3) {
  170. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_BEFORE_RECITER_LIST_ITEM_CLICK */ .Z.STEP_BEFORE_RECITER_LIST_ITEM_CLICK));
  171. return {
  172. automaticallyProceed: false
  173. };
  174. }
  175. }
  176. return {};
  177. };
  178. const beforeNext = ()=>{
  179. if (group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_3__/* ["default"].SETTINGS */ .Z.SETTINGS) {
  180. if (isLastStep) {
  181. // when the user clicks "finish" in
  182. // the last step of the settings onboarding, close the drawer
  183. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setIsSettingsDrawerOpen */ .ZY)(false));
  184. // reset the drawer to the body view in-case the user re-opens the settings tour again after having finished it.
  185. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setSettingsView */ .Mi)(_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .SettingsView.Body */ .US.Body));
  186. return {};
  187. }
  188. if (index === 0) {
  189. // if the user clicks "next" in the first step of the settings onboarding,
  190. // open the drawer
  191. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setIsSettingsDrawerOpen */ .ZY)(true));
  192. // we'll let the drawer handle the proceeding when it's done opening
  193. return {
  194. automaticallyProceed: false
  195. };
  196. }
  197. if (index === 8) {
  198. // if the user clicks "next" in translations step,
  199. // switch to translations view
  200. setTimeout(()=>{
  201. dispatch((0,_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .setSettingsView */ .Mi)(_redux_slices_navbar__WEBPACK_IMPORTED_MODULE_2__/* .SettingsView.Translation */ .US.Translation));
  202. }, 10);
  203. // we'll let the translations view handle the proceeding when it's done opening
  204. return {
  205. automaticallyProceed: true
  206. };
  207. }
  208. }
  209. if (group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_3__/* ["default"].READING_EXPERIENCE */ .Z.READING_EXPERIENCE) {
  210. // if the user clicks next when the step is play audio of an Ayah
  211. if (index === 1) {
  212. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_AFTER_PLAY_AUDIO_CLICK */ .Z.STEP_AFTER_PLAY_AUDIO_CLICK));
  213. return {
  214. automaticallyProceed: false
  215. };
  216. }
  217. // if the user clicks next when the step is clicking on the dot icon to open the audio player settings menu
  218. if (index === 2) {
  219. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_AFTER_AUDIO_PLAYER_TRIGGER */ .Z.STEP_AFTER_AUDIO_PLAYER_TRIGGER));
  220. return {
  221. automaticallyProceed: false
  222. };
  223. }
  224. // if the user clicks next when the step is clicking the reciters menu item in the audio player settings menu
  225. if (index === 3) {
  226. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_AFTER_RECITER_LIST_ITEM_CLICK */ .Z.STEP_AFTER_RECITER_LIST_ITEM_CLICK));
  227. return {
  228. automaticallyProceed: false
  229. };
  230. }
  231. // if the user clicks next when the step is choosing a reciter from the reciters list
  232. if (index === 4) {
  233. window.dispatchEvent(new Event(_OnboardingEvent__WEBPACK_IMPORTED_MODULE_1__/* ["default"].STEP_AFTER_CHOOSING_RECITER_FROM_LIST */ .Z.STEP_AFTER_CHOOSING_RECITER_FROM_LIST));
  234. return {
  235. automaticallyProceed: false
  236. };
  237. }
  238. }
  239. return {};
  240. };
  241. const beforeSkip = ()=>{
  242. return {};
  243. };
  244. return {
  245. beforePrev,
  246. beforeNext,
  247. beforeSkip
  248. };
  249. };
  250. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useHandleOnboardingEvents);
  251. /***/ }),
  252. /***/ 51879:
  253. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  254. "use strict";
  255. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  256. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  257. /* harmony export */ "P": () => (/* binding */ useOnboarding),
  258. /* harmony export */ "k": () => (/* binding */ OnboardingProvider)
  259. /* harmony export */ });
  260. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  261. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  262. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  263. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  264. /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96954);
  265. /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dynamic__WEBPACK_IMPORTED_MODULE_2__);
  266. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(60866);
  267. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3__);
  268. /* harmony import */ var react_joyride__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(35517);
  269. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6022);
  270. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_5__);
  271. /* harmony import */ var _OnboardingStep__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60575);
  272. /* harmony import */ var _steps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39604);
  273. /* harmony import */ var _hooks_useScrollToTop__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(73742);
  274. /* harmony import */ var _redux_slices_onboarding__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(22732);
  275. /* harmony import */ var _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(20661);
  276. /* harmony import */ var _utils_auth_login__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(22197);
  277. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([react_joyride__WEBPACK_IMPORTED_MODULE_4__, _OnboardingStep__WEBPACK_IMPORTED_MODULE_6__, _steps__WEBPACK_IMPORTED_MODULE_7__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_10__]);
  278. ([react_joyride__WEBPACK_IMPORTED_MODULE_4__, _OnboardingStep__WEBPACK_IMPORTED_MODULE_6__, _steps__WEBPACK_IMPORTED_MODULE_7__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  279. /* eslint-disable max-lines */
  280. // eslint-disable-next-line import/no-cycle
  281. const Joyride = next_dynamic__WEBPACK_IMPORTED_MODULE_2___default()(null, {
  282. loadableGenerated: {
  283. modules: [
  284. "../components/Onboarding/OnboardingProvider.tsx -> " + "react-joyride"
  285. ]
  286. },
  287. ssr: false
  288. });
  289. const OnboardingContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1___default().createContext(null);
  290. const useOnboarding = ()=>react__WEBPACK_IMPORTED_MODULE_1___default().useContext(OnboardingContext);
  291. const OnboardingProvider = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1___default().memo(({ children })=>{
  292. const [isOnboarding, setIsOnboarding] = react__WEBPACK_IMPORTED_MODULE_1___default().useState(false);
  293. const activeStep = (0,react_redux__WEBPACK_IMPORTED_MODULE_5__.useSelector)(_redux_slices_onboarding__WEBPACK_IMPORTED_MODULE_8__/* .selectOnboardingActiveStep */ .xg);
  294. const { 0: joyride , 1: setJoyride } = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)();
  295. const { t } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_3___default()("common");
  296. const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_5__.useDispatch)();
  297. const scrollToTop = (0,_hooks_useScrollToTop__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z)();
  298. const allSteps = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{
  299. return (0,_steps__WEBPACK_IMPORTED_MODULE_7__/* .checklistIndexToOnboardingSteps */ .G)(t, _OnboardingStep__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z);
  300. }, [
  301. t
  302. ]);
  303. const startTour = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((group = _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__/* ["default"].HOMEPAGE */ .Z.HOMEPAGE, startIndex = 0)=>{
  304. const statePayload = (0,_redux_slices_onboarding__WEBPACK_IMPORTED_MODULE_8__/* .setActiveStepIndex */ .tE)({
  305. group,
  306. index: startIndex,
  307. // Mark all previous steps as completed
  308. ...startIndex !== 0 && {
  309. // eslint-disable-next-line @typescript-eslint/naming-convention
  310. indicesToMarkAsCompleted: new Array(startIndex).fill(null).map((_, i)=>i)
  311. }
  312. });
  313. if (group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__/* ["default"].SETTINGS */ .Z.SETTINGS || group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__/* ["default"].READING_EXPERIENCE */ .Z.READING_EXPERIENCE) {
  314. scrollToTop();
  315. setTimeout(()=>{
  316. setIsOnboarding(true);
  317. dispatch(statePayload);
  318. }, 400);
  319. } else {
  320. setIsOnboarding(true);
  321. dispatch(statePayload);
  322. }
  323. }, [
  324. dispatch,
  325. scrollToTop
  326. ]);
  327. const stopTour = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  328. setIsOnboarding(false);
  329. }, []);
  330. const setStep = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((group, step)=>{
  331. let totalSteps = allSteps[group].length;
  332. if ((0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_10__/* .isLoggedIn */ .jl)() && group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__/* ["default"].PERSONALIZED_FEATURES */ .Z.PERSONALIZED_FEATURES) {
  333. // don't count the first step (login button)
  334. totalSteps -= 1;
  335. }
  336. dispatch((0,_redux_slices_onboarding__WEBPACK_IMPORTED_MODULE_8__/* .setActiveStepIndex */ .tE)({
  337. group,
  338. index: step,
  339. totalSteps
  340. }));
  341. }, [
  342. dispatch,
  343. allSteps
  344. ]);
  345. const nextStep = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  346. setStep(activeStep.group, activeStep.index + 1);
  347. }, [
  348. activeStep,
  349. setStep
  350. ]);
  351. const prevStep = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{
  352. if (activeStep.index === 0) return;
  353. setStep(activeStep.group, activeStep.index - 1);
  354. }, [
  355. activeStep,
  356. setStep
  357. ]);
  358. const steps = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{
  359. const result = allSteps[activeStep.group].map((s)=>s.step);
  360. if (activeStep.group === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_9__/* ["default"].PERSONALIZED_FEATURES */ .Z.PERSONALIZED_FEATURES) {
  361. if ((0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_10__/* .isLoggedIn */ .jl)()) {
  362. // show all but the first step (login button)
  363. return result.slice(1);
  364. }
  365. // only show the first step (login button)
  366. return [
  367. result[0]
  368. ];
  369. }
  370. return result;
  371. }, [
  372. allSteps,
  373. activeStep.group
  374. ]);
  375. const hasSteps = steps.length > 0;
  376. const shouldRun = isOnboarding && hasSteps;
  377. const joyrideCallback = (data)=>{
  378. const { action , status , type } = data;
  379. if (type === react_joyride__WEBPACK_IMPORTED_MODULE_4__.EVENTS.STEP_AFTER || type === react_joyride__WEBPACK_IMPORTED_MODULE_4__.EVENTS.TARGET_NOT_FOUND) {
  380. if (action === react_joyride__WEBPACK_IMPORTED_MODULE_4__.ACTIONS.PREV) {
  381. prevStep();
  382. } else if (action === react_joyride__WEBPACK_IMPORTED_MODULE_4__.ACTIONS.NEXT) {
  383. if (activeStep.index < steps.length - 1) {
  384. nextStep();
  385. } else {
  386. stopTour();
  387. setStep(activeStep.group, 0);
  388. }
  389. }
  390. } else if (status === react_joyride__WEBPACK_IMPORTED_MODULE_4__.STATUS.FINISHED || status === react_joyride__WEBPACK_IMPORTED_MODULE_4__.STATUS.SKIPPED) {
  391. stopTour();
  392. joyride.reset(true);
  393. }
  394. };
  395. const value = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>({
  396. startTour,
  397. stopTour: ()=>joyride.close(),
  398. nextStep: ()=>joyride.next(),
  399. prevStep: ()=>joyride.prev(),
  400. activeStepGroup: activeStep.group,
  401. activeStepIndex: activeStep.index,
  402. isActive: isOnboarding,
  403. allSteps,
  404. allGroups: Object.keys(allSteps)
  405. }), [
  406. startTour,
  407. activeStep,
  408. isOnboarding,
  409. joyride,
  410. allSteps
  411. ]);
  412. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(OnboardingContext.Provider, {
  413. value: value,
  414. children: [
  415. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(Joyride, {
  416. callback: joyrideCallback,
  417. run: shouldRun,
  418. stepIndex: activeStep.index,
  419. steps: steps,
  420. continuous: true,
  421. scrollOffset: 130,
  422. getHelpers: setJoyride,
  423. disableOverlayClose: true,
  424. disableCloseOnEsc: true,
  425. scrollToFirstStep: true,
  426. disableOverlay: false,
  427. floaterProps: {
  428. offset: 0,
  429. styles: {
  430. floaterWithAnimation: {
  431. transition: "opacity .5s ease-out"
  432. },
  433. floater: {
  434. zIndex: "var(--z-index-onboarding-step)"
  435. }
  436. }
  437. },
  438. styles: {
  439. spotlight: {
  440. borderRadius: 0,
  441. zIndex: "var(--z-index-onboarding-spotlight)"
  442. },
  443. overlay: {
  444. zIndex: "var(--z-index-onboarding-overlay)"
  445. }
  446. }
  447. }, activeStep.group),
  448. children
  449. ]
  450. });
  451. });
  452. __webpack_async_result__();
  453. } catch(e) { __webpack_async_result__(e); } });
  454. /***/ }),
  455. /***/ 60575:
  456. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  457. "use strict";
  458. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  459. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  460. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  461. /* harmony export */ });
  462. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  463. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  464. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  465. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  466. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(60866);
  467. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2__);
  468. /* harmony import */ var _OnboardingChecklist_hooks_useHandleOnboardingEvents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70627);
  469. /* harmony import */ var _OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(43530);
  470. /* harmony import */ var _OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11__);
  471. /* harmony import */ var _components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(51879);
  472. /* harmony import */ var _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50497);
  473. /* harmony import */ var _icons_chevron_left_svg__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49880);
  474. /* harmony import */ var _icons_chevron_right_svg__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3932);
  475. /* harmony import */ var _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(20661);
  476. /* harmony import */ var _utils_auth_login__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(22197);
  477. /* harmony import */ var _utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(55943);
  478. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_4__, _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_9__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__]);
  479. ([_components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_4__, _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_9__, _utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  480. /* eslint-disable max-lines */
  481. // eslint-disable-next-line import/no-cycle
  482. const OnboardingStep = ({ tooltipProps , primaryProps , skipProps , backProps , isLastStep , index , step: { showSkipButton =true , showNextButton =true , showPrevButton =true } })=>{
  483. const { t } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_2___default()("onboarding");
  484. const isFirstStep = index === 0;
  485. const { activeStepGroup , allSteps } = (0,_components_Onboarding_OnboardingProvider__WEBPACK_IMPORTED_MODULE_4__/* .useOnboarding */ .P)();
  486. const { beforePrev , beforeNext , beforeSkip } = (0,_OnboardingChecklist_hooks_useHandleOnboardingEvents__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({
  487. group: activeStepGroup,
  488. index,
  489. isLastStep
  490. });
  491. const stepData = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{
  492. // show all but the first step (login button)
  493. if (activeStepGroup === _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_8__/* ["default"].PERSONALIZED_FEATURES */ .Z.PERSONALIZED_FEATURES && (0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_9__/* .isLoggedIn */ .jl)()) {
  494. return allSteps[activeStepGroup].slice(1)[index];
  495. }
  496. return allSteps[activeStepGroup][index];
  497. }, [
  498. activeStepGroup,
  499. allSteps,
  500. index
  501. ]);
  502. const handleSkipClick = (e)=>{
  503. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__/* .logButtonClick */ .MY)("onboarding_step_skip", {
  504. group: activeStepGroup,
  505. step: index
  506. });
  507. const result = beforeSkip();
  508. if (result.automaticallyProceed !== false) {
  509. if (result.delay) {
  510. setTimeout(()=>{
  511. skipProps.onClick(e);
  512. }, result.delay);
  513. } else {
  514. skipProps.onClick(e);
  515. }
  516. }
  517. };
  518. const handlePrevClick = (e)=>{
  519. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__/* .logButtonClick */ .MY)("onboarding_step_previous", {
  520. group: activeStepGroup,
  521. step: index
  522. });
  523. const result = beforePrev();
  524. if (result.automaticallyProceed !== false) {
  525. if (result?.delay) {
  526. setTimeout(()=>{
  527. backProps.onClick(e);
  528. }, result.delay);
  529. } else {
  530. backProps.onClick(e);
  531. }
  532. }
  533. };
  534. const handleNextClick = (e)=>{
  535. if (isLastStep) {
  536. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__/* .logButtonClick */ .MY)("onboarding_step_finish", {
  537. group: activeStepGroup
  538. });
  539. } else {
  540. (0,_utils_eventLogger__WEBPACK_IMPORTED_MODULE_10__/* .logButtonClick */ .MY)("onboarding_step_next", {
  541. group: activeStepGroup,
  542. step: index
  543. });
  544. }
  545. const result = beforeNext();
  546. if (result.automaticallyProceed !== false) {
  547. if (result?.delay) {
  548. setTimeout(()=>{
  549. primaryProps.onClick(e);
  550. }, result.delay);
  551. } else {
  552. primaryProps.onClick(e);
  553. }
  554. }
  555. };
  556. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  557. ref: tooltipProps.ref,
  558. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().tooltipContainer),
  559. children: [
  560. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("h4", {
  561. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().title),
  562. children: stepData.title
  563. }),
  564. /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("p", {
  565. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().description),
  566. children: stepData.description
  567. }),
  568. (showSkipButton || showNextButton || showPrevButton) && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  569. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().actionContainer),
  570. children: [
  571. isFirstStep && showSkipButton && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP, {
  572. ...skipProps,
  573. onClick: handleSkipClick,
  574. variant: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonVariant.Ghost */ .Wu.Ghost,
  575. type: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonType.Inverse */ .L$.Inverse,
  576. size: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonSize.Small */ .qE.Small,
  577. children: t("skip")
  578. }),
  579. !isFirstStep && showPrevButton && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP, {
  580. variant: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonVariant.Outlined */ .Wu.Outlined,
  581. type: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonType.Inverse */ .L$.Inverse,
  582. size: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonSize.Small */ .qE.Small,
  583. onClick: handlePrevClick,
  584. prefix: /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_icons_chevron_left_svg__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z, {
  585. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().icon)
  586. }),
  587. children: t("previous")
  588. }),
  589. showNextButton && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP, {
  590. ...primaryProps,
  591. variant: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonVariant.Outlined */ .Wu.Outlined,
  592. type: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonType.Inverse */ .L$.Inverse,
  593. size: _dls_Button_Button__WEBPACK_IMPORTED_MODULE_5__/* .ButtonSize.Small */ .qE.Small,
  594. onClick: handleNextClick,
  595. suffix: isLastStep ? null : /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_icons_chevron_right_svg__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z, {
  596. className: (_OnboardingStep_module_scss__WEBPACK_IMPORTED_MODULE_11___default().icon)
  597. }),
  598. children: isLastStep ? t("finish") : t("common:next")
  599. })
  600. ]
  601. })
  602. ]
  603. });
  604. };
  605. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OnboardingStep);
  606. __webpack_async_result__();
  607. } catch(e) { __webpack_async_result__(e); } });
  608. /***/ }),
  609. /***/ 39604:
  610. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  611. "use strict";
  612. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  613. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  614. /* harmony export */ "G": () => (/* binding */ checklistIndexToOnboardingSteps)
  615. /* harmony export */ });
  616. /* unused harmony export onboardingChecklist */
  617. /* harmony import */ var _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20661);
  618. /* harmony import */ var _utils_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(57933);
  619. /* harmony import */ var _utils_responsive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6902);
  620. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_navigation__WEBPACK_IMPORTED_MODULE_1__]);
  621. _utils_navigation__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
  622. /* eslint-disable max-lines */ // import OnboardingStep from './OnboardingStep';
  623. /**
  624. * Get the placement for the tooltip based on the device
  625. *
  626. * @param {Placement} desktopPlacement
  627. * @param {boolean} isDeviceMobile
  628. * @returns {Placement}
  629. */ const getResponsivePlacement = (desktopPlacement, isDeviceMobile)=>{
  630. return isDeviceMobile ? "top-start" : desktopPlacement;
  631. };
  632. // eslint-disable-next-line react-func/max-lines-per-function
  633. const checklistIndexToOnboardingSteps = (t, component)=>{
  634. const commonStepOptions = {
  635. placement: "auto",
  636. disableBeacon: true,
  637. hideBackButton: true,
  638. disableOverlayClose: true,
  639. tooltipComponent: component,
  640. floaterProps: {
  641. hideArrow: false
  642. },
  643. spotlightPadding: 5
  644. };
  645. const getDetails = (key)=>({
  646. title: t(`onboarding:steps.${key}.title`),
  647. description: t(`onboarding:steps.${key}.description`)
  648. });
  649. const isDeviceMobile = (0,_utils_responsive__WEBPACK_IMPORTED_MODULE_2__/* .isMobile */ .t)();
  650. const shouldDisableOverlay = isDeviceMobile;
  651. return {
  652. [_types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_0__/* ["default"].HOMEPAGE */ .Z.HOMEPAGE]: [
  653. {
  654. ...getDetails("quran-radio"),
  655. step: {
  656. ...commonStepOptions,
  657. target: "#radio-button",
  658. showSkipButton: true,
  659. placement: "bottom"
  660. }
  661. },
  662. {
  663. ...getDetails("search-bar"),
  664. step: {
  665. ...commonStepOptions,
  666. target: "#command-bar"
  667. }
  668. },
  669. {
  670. ...getDetails("voice-search"),
  671. step: {
  672. ...commonStepOptions,
  673. target: "#voice-search-trigger",
  674. placement: "bottom"
  675. }
  676. },
  677. {
  678. ...getDetails("juz"),
  679. step: {
  680. ...commonStepOptions,
  681. target: "#juz-tab"
  682. }
  683. },
  684. ],
  685. [_types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_0__/* ["default"].SETTINGS */ .Z.SETTINGS]: [
  686. {
  687. ...getDetails("settings"),
  688. step: {
  689. ...commonStepOptions,
  690. target: "#settings-button",
  691. showSkipButton: true,
  692. spotlightClicks: true,
  693. placement: "bottom"
  694. }
  695. },
  696. {
  697. ...getDetails("theme"),
  698. step: {
  699. ...commonStepOptions,
  700. target: "#theme-section",
  701. spotlightClicks: true,
  702. placement: "left-start"
  703. }
  704. },
  705. {
  706. ...getDetails("font-style"),
  707. step: {
  708. ...commonStepOptions,
  709. target: "#quran-font-section",
  710. spotlightClicks: true,
  711. placement: getResponsivePlacement("left-start", isDeviceMobile),
  712. disableScrolling: false,
  713. disableOverlay: shouldDisableOverlay
  714. }
  715. },
  716. {
  717. ...getDetails("font-size"),
  718. step: {
  719. ...commonStepOptions,
  720. target: "#font-size-section",
  721. spotlightClicks: true,
  722. placement: "left-start"
  723. }
  724. },
  725. {
  726. ...getDetails("wbw-translation"),
  727. step: {
  728. ...commonStepOptions,
  729. target: "#wbw-translation-section",
  730. spotlightClicks: true,
  731. placement: "left-start"
  732. }
  733. },
  734. {
  735. ...getDetails("wbw-transliteration"),
  736. step: {
  737. ...commonStepOptions,
  738. target: "#wbw-transliteration-section",
  739. spotlightClicks: true,
  740. placement: "left-start"
  741. }
  742. },
  743. {
  744. ...getDetails("wbw-audio"),
  745. step: {
  746. ...commonStepOptions,
  747. target: "#wbw-recitation-section",
  748. spotlightClicks: true,
  749. placement: "left-start"
  750. }
  751. },
  752. {
  753. ...getDetails("inline-wbw"),
  754. step: {
  755. ...commonStepOptions,
  756. target: "#wbw-display-section",
  757. spotlightClicks: true,
  758. placement: "left-start"
  759. }
  760. },
  761. {
  762. ...getDetails("translations"),
  763. step: {
  764. ...commonStepOptions,
  765. target: "#translation-section",
  766. placement: "left-start",
  767. spotlightClicks: true,
  768. disableScrolling: false
  769. }
  770. },
  771. {
  772. ...getDetails("translations"),
  773. step: {
  774. ...commonStepOptions,
  775. target: "#settings-drawer-body",
  776. placement: getResponsivePlacement("left-start", isDeviceMobile),
  777. spotlightClicks: true,
  778. disableOverlay: shouldDisableOverlay
  779. }
  780. },
  781. ],
  782. [_types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_0__/* ["default"].READING_EXPERIENCE */ .Z.READING_EXPERIENCE]: [
  783. {
  784. ...getDetails("surah-info"),
  785. step: {
  786. ...commonStepOptions,
  787. target: "#surah-info-button",
  788. placement: "bottom",
  789. showSkipButton: true
  790. }
  791. },
  792. {
  793. ...getDetails("listen"),
  794. step: {
  795. ...commonStepOptions,
  796. target: "#play-verse-button",
  797. spotlightClicks: true,
  798. showNextButton: true
  799. }
  800. },
  801. {
  802. ...getDetails("select-reciter"),
  803. step: {
  804. ...commonStepOptions,
  805. target: "#audio-player-overflow-menu-trigger",
  806. spotlightClicks: true,
  807. disableScrolling: true
  808. }
  809. },
  810. {
  811. ...getDetails("select-reciter"),
  812. step: {
  813. ...commonStepOptions,
  814. target: "#audio-player-overflow-menu-reciter",
  815. placement: "left",
  816. spotlightClicks: true,
  817. disableScrolling: true
  818. }
  819. },
  820. {
  821. ...getDetails("select-reciter"),
  822. step: {
  823. ...commonStepOptions,
  824. target: "#audio-player-reciter-list",
  825. spotlightClicks: true,
  826. placement: getResponsivePlacement("right", isDeviceMobile),
  827. disableScrolling: false,
  828. disableOverlay: shouldDisableOverlay
  829. }
  830. },
  831. {
  832. ...getDetails("ayah-tafsir"),
  833. step: {
  834. ...commonStepOptions,
  835. target: ".tafsir-verse-button"
  836. }
  837. },
  838. {
  839. ...getDetails("ayah-reflection"),
  840. step: {
  841. ...commonStepOptions,
  842. target: ".reflection-verse-button"
  843. }
  844. },
  845. {
  846. ...getDetails("3-dot-menu"),
  847. step: {
  848. ...commonStepOptions,
  849. target: ".overflow-verse-actions-menu-trigger"
  850. }
  851. },
  852. {
  853. ...getDetails("reading-view"),
  854. step: {
  855. ...commonStepOptions,
  856. target: "#reading-preference-switcher",
  857. spotlightClicks: true
  858. }
  859. },
  860. ],
  861. [_types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_0__/* ["default"].PERSONALIZED_FEATURES */ .Z.PERSONALIZED_FEATURES]: [
  862. {
  863. ...getDetails("login"),
  864. step: {
  865. ...commonStepOptions,
  866. target: "#login-button",
  867. placement: "bottom"
  868. }
  869. },
  870. {
  871. ...getDetails("streak"),
  872. step: {
  873. ...commonStepOptions,
  874. target: "#qgj-widget"
  875. }
  876. },
  877. {
  878. ...getDetails("reading-sessions"),
  879. step: {
  880. ...commonStepOptions,
  881. target: "#reading-sessions"
  882. }
  883. },
  884. ]
  885. };
  886. };
  887. const onboardingChecklist = (t)=>[
  888. {
  889. group: OnboardingGroup.HOMEPAGE,
  890. title: t("onboarding:checklist.1"),
  891. href: "/"
  892. },
  893. {
  894. group: OnboardingGroup.SETTINGS,
  895. title: t("onboarding:checklist.2"),
  896. href: "/"
  897. },
  898. {
  899. group: OnboardingGroup.READING_EXPERIENCE,
  900. title: t("onboarding:checklist.3"),
  901. href: getSurahNavigationUrl(1)
  902. },
  903. {
  904. group: OnboardingGroup.PERSONALIZED_FEATURES,
  905. title: t("onboarding:checklist.4"),
  906. href: "/"
  907. },
  908. ];
  909. __webpack_async_result__();
  910. } catch(e) { __webpack_async_result__(e); } });
  911. /***/ }),
  912. /***/ 94400:
  913. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  914. "use strict";
  915. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  916. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  917. /* harmony export */ "B": () => (/* binding */ SeparatorWeight),
  918. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  919. /* harmony export */ });
  920. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  921. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  922. /* harmony import */ var _radix_ui_react_separator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72994);
  923. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59003);
  924. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);
  925. /* harmony import */ var _Separator_module_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26628);
  926. /* harmony import */ var _Separator_module_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Separator_module_scss__WEBPACK_IMPORTED_MODULE_3__);
  927. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_radix_ui_react_separator__WEBPACK_IMPORTED_MODULE_1__]);
  928. _radix_ui_react_separator__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
  929. var SeparatorWeight;
  930. (function(SeparatorWeight) {
  931. SeparatorWeight["Bold"] = "bold";
  932. SeparatorWeight["SemiBold"] = "semiBold";
  933. })(SeparatorWeight || (SeparatorWeight = {}));
  934. const Separator = ({ isVertical =false , className , weight =SeparatorWeight.SemiBold })=>/*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_radix_ui_react_separator__WEBPACK_IMPORTED_MODULE_1__.Separator, {
  935. orientation: isVertical ? "vertical" : "horizontal",
  936. className: classnames__WEBPACK_IMPORTED_MODULE_2___default()((_Separator_module_scss__WEBPACK_IMPORTED_MODULE_3___default().base), (_Separator_module_scss__WEBPACK_IMPORTED_MODULE_3___default())[weight], {
  937. [className]: className
  938. })
  939. });
  940. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Separator);
  941. __webpack_async_result__();
  942. } catch(e) { __webpack_async_result__(e); } });
  943. /***/ }),
  944. /***/ 77048:
  945. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  946. "use strict";
  947. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  948. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  949. /* harmony export */ });
  950. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  951. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  952. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59003);
  953. /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
  954. /* harmony import */ var _Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96318);
  955. /* harmony import */ var _Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2__);
  956. const Skeleton = ({ children , isRounded , isSquared , isActive =true , className })=>{
  957. return /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
  958. className: classnames__WEBPACK_IMPORTED_MODULE_1___default()((_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().skeleton), {
  959. [(_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().baseSize)]: !children && !className,
  960. [(_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().active)]: isActive,
  961. [(_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().rounded)]: isRounded,
  962. [(_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().squared)]: isSquared,
  963. [className]: className
  964. }),
  965. children: children && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx("span", {
  966. className: (_Skeleton_module_scss__WEBPACK_IMPORTED_MODULE_2___default().content),
  967. children: children
  968. })
  969. });
  970. };
  971. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Skeleton);
  972. /***/ }),
  973. /***/ 18470:
  974. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  975. "use strict";
  976. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  977. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  978. /* harmony export */ });
  979. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20997);
  980. /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
  981. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16689);
  982. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
  983. /* harmony import */ var _SpinnerContainer_module_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(35902);
  984. /* harmony import */ var _SpinnerContainer_module_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_SpinnerContainer_module_scss__WEBPACK_IMPORTED_MODULE_3__);
  985. /* harmony import */ var _dls_Spinner_Spinner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7190);
  986. const SpinnerContainer = ({ children , isLoading })=>{
  987. return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
  988. className: (_SpinnerContainer_module_scss__WEBPACK_IMPORTED_MODULE_3___default().internalContainer),
  989. children: [
  990. children,
  991. isLoading && /*#__PURE__*/ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_dls_Spinner_Spinner__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, {
  992. className: (_SpinnerContainer_module_scss__WEBPACK_IMPORTED_MODULE_3___default().spinner)
  993. })
  994. ]
  995. });
  996. };
  997. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SpinnerContainer);
  998. /***/ }),
  999. /***/ 19583:
  1000. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  1001. "use strict";
  1002. __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
  1003. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1004. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  1005. /* harmony export */ });
  1006. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  1007. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  1008. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(60866);
  1009. /* harmony import */ var next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_1__);
  1010. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6022);
  1011. /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
  1012. /* harmony import */ var _dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79717);
  1013. /* harmony import */ var _redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(62093);
  1014. /* harmony import */ var _utils_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4917);
  1015. /* harmony import */ var _utils_auth_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(37883);
  1016. /* harmony import */ var _utils_auth_login__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(22197);
  1017. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(13591);
  1018. var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_7__]);
  1019. ([_dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__, _utils_auth_login__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
  1020. /* eslint-disable max-lines */ /* eslint-disable react-func/max-lines-per-function */
  1021. /**
  1022. * A hook that will be used to:
  1023. * 1. If the user is logged in, we persist settings
  1024. * to the DB then dispatch the redux action that
  1025. * would apply the changes locally (and might also persist
  1026. * it locally in the localStorage depending on the slice)
  1027. * 2. If not, just dispatch the action.
  1028. *
  1029. * @returns {PersistPreferences}
  1030. */ const usePersistPreferenceGroup = ()=>{
  1031. const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
  1032. const toast = (0,_dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__/* .useToast */ .pm)();
  1033. const { t } = next_translate_useTranslation__WEBPACK_IMPORTED_MODULE_1___default()("common");
  1034. const { 0: isLoading , 1: setIsLoading } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
  1035. const quranFont = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__/* .selectQuranFont */ .Ho, react_redux__WEBPACK_IMPORTED_MODULE_2__.shallowEqual);
  1036. const mushafLines = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(_redux_slices_QuranReader_styles__WEBPACK_IMPORTED_MODULE_4__/* .selectQuranMushafLines */ .z$, react_redux__WEBPACK_IMPORTED_MODULE_2__.shallowEqual);
  1037. // this function is used to get the updated mushafId and pass it to addOrUpdateUserPreference
  1038. // if the preferenceGroup is not QURAN_READER_STYLES, it will return undefined
  1039. const getUpdatedMushafId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((preferenceGroup, key, value)=>{
  1040. if (preferenceGroup !== types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_8__/* ["default"].QURAN_READER_STYLES */ .Z.QURAN_READER_STYLES) return undefined;
  1041. const font = key === "quranFont" ? value : quranFont;
  1042. const lines = key === "mushafLines" ? value : mushafLines;
  1043. return (0,_utils_api__WEBPACK_IMPORTED_MODULE_5__/* .getMushafId */ .$P)(font, lines).mushaf;
  1044. }, [
  1045. quranFont,
  1046. mushafLines
  1047. ]);
  1048. const actions = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({
  1049. onSettingsChangeWithoutDispatch: (key, value, preferenceGroup, callback)=>{
  1050. if ((0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_7__/* .isLoggedIn */ .jl)()) {
  1051. setIsLoading(true);
  1052. (0,_utils_auth_api__WEBPACK_IMPORTED_MODULE_6__/* .addOrUpdateUserPreference */ .b9)(key, value, preferenceGroup, getUpdatedMushafId(preferenceGroup, key, value)).then(()=>{
  1053. callback();
  1054. }).finally(()=>{
  1055. setIsLoading(false);
  1056. });
  1057. } else {
  1058. callback();
  1059. }
  1060. },
  1061. onXstateSettingsChange: (key, value, action, undoAction, preferenceGroup, successCallback)=>{
  1062. if ((0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_7__/* .isLoggedIn */ .jl)()) {
  1063. action();
  1064. setIsLoading(true);
  1065. (0,_utils_auth_api__WEBPACK_IMPORTED_MODULE_6__/* .addOrUpdateUserPreference */ .b9)(key, value, preferenceGroup, getUpdatedMushafId(preferenceGroup, key, value)).then(()=>{
  1066. if (successCallback) {
  1067. successCallback();
  1068. }
  1069. }).catch(()=>{
  1070. toast(t("error.pref-persist-fail"), {
  1071. status: _dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__/* .ToastStatus.Warning */ .YZ.Warning,
  1072. actions: [
  1073. {
  1074. text: t("undo"),
  1075. primary: true,
  1076. onClick: ()=>{
  1077. undoAction();
  1078. }
  1079. },
  1080. {
  1081. text: t("continue"),
  1082. primary: false,
  1083. onClick: ()=>{
  1084. if (successCallback) {
  1085. successCallback();
  1086. }
  1087. }
  1088. },
  1089. ]
  1090. });
  1091. }).finally(()=>{
  1092. setIsLoading(false);
  1093. });
  1094. } else {
  1095. action();
  1096. }
  1097. },
  1098. onSettingsChange: (key, value, action, undoAction, preferenceGroup, successCallback)=>{
  1099. if ((0,_utils_auth_login__WEBPACK_IMPORTED_MODULE_7__/* .isLoggedIn */ .jl)()) {
  1100. // 1. dispatch the action first
  1101. dispatch(action);
  1102. setIsLoading(true);
  1103. (0,_utils_auth_api__WEBPACK_IMPORTED_MODULE_6__/* .addOrUpdateUserPreference */ .b9)(key, value, preferenceGroup, getUpdatedMushafId(preferenceGroup, key, value)).then(()=>{
  1104. if (successCallback) {
  1105. successCallback();
  1106. }
  1107. }).catch(()=>{
  1108. toast(t("error.pref-persist-fail"), {
  1109. status: _dls_Toast_Toast__WEBPACK_IMPORTED_MODULE_3__/* .ToastStatus.Warning */ .YZ.Warning,
  1110. actions: [
  1111. {
  1112. text: t("undo"),
  1113. primary: true,
  1114. onClick: ()=>{
  1115. dispatch(undoAction);
  1116. }
  1117. },
  1118. {
  1119. text: t("continue"),
  1120. primary: false,
  1121. onClick: ()=>{
  1122. if (successCallback) {
  1123. successCallback();
  1124. }
  1125. }
  1126. },
  1127. ]
  1128. });
  1129. }).finally(()=>{
  1130. setIsLoading(false);
  1131. });
  1132. } else {
  1133. dispatch(action);
  1134. }
  1135. }
  1136. }), [
  1137. dispatch,
  1138. t,
  1139. toast,
  1140. getUpdatedMushafId
  1141. ]);
  1142. return {
  1143. actions,
  1144. isLoading
  1145. };
  1146. };
  1147. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (usePersistPreferenceGroup);
  1148. __webpack_async_result__();
  1149. } catch(e) { __webpack_async_result__(e); } });
  1150. /***/ }),
  1151. /***/ 44063:
  1152. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1153. "use strict";
  1154. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1155. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  1156. /* harmony export */ });
  1157. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16689);
  1158. /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
  1159. /**
  1160. * This is needed to avoid having the following warning:
  1161. * Warning: useLayoutEffect does nothing on the server, because its effect cannot be encoded into the server renderer's output format.
  1162. * The solution is inspired by this thread
  1163. * {@link https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85}
  1164. */ // eslint-disable-next-line @typescript-eslint/no-empty-function
  1165. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ( false ? 0 : ()=>{});
  1166. /***/ }),
  1167. /***/ 73742:
  1168. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1169. "use strict";
  1170. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1171. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  1172. /* harmony export */ });
  1173. const useScrollToTop = ()=>{
  1174. // a function that will be invoked by the component using this hook to scroll to the top of the window.
  1175. const scrollToTop = ()=>{
  1176. if (false) {}
  1177. };
  1178. return scrollToTop;
  1179. };
  1180. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useScrollToTop);
  1181. /***/ }),
  1182. /***/ 53800:
  1183. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1184. "use strict";
  1185. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1186. /* harmony export */ "Mj": () => (/* binding */ selectEnableAutoScrolling),
  1187. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1188. /* harmony export */ "ow": () => (/* binding */ selectShowTooltipWhenPlayingAudio)
  1189. /* harmony export */ });
  1190. /* unused harmony exports selectAudioPlayerState, selectIsDownloadingAudio, audioPlayerStateSlice, setEnableAutoScrolling, setIsDownloadingAudio, setShowTooltipWhenPlayingAudio */
  1191. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1192. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1193. /* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14161);
  1194. /* harmony import */ var redux_persist__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(redux_persist__WEBPACK_IMPORTED_MODULE_1__);
  1195. /* harmony import */ var _redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(78733);
  1196. /* harmony import */ var _redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(91767);
  1197. /* harmony import */ var _redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17241);
  1198. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(61243);
  1199. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(13591);
  1200. const selectAudioPlayerState = (state)=>state.audioPlayerState;
  1201. const selectEnableAutoScrolling = (state)=>state.audioPlayerState.enableAutoScrolling;
  1202. const selectIsDownloadingAudio = (state)=>state.audioPlayerState.isDownloadingAudio;
  1203. const selectShowTooltipWhenPlayingAudio = (state)=>state.audioPlayerState.showTooltipWhenPlayingAudio;
  1204. const audioPlayerStateSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1205. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__/* ["default"].AUDIO_PLAYER_STATE */ .Z.AUDIO_PLAYER_STATE,
  1206. initialState: (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__/* .getAudioPlayerStateInitialState */ .aq)(),
  1207. reducers: {
  1208. setEnableAutoScrolling: (state, action)=>({
  1209. ...state,
  1210. enableAutoScrolling: action.payload
  1211. }),
  1212. setIsDownloadingAudio: (state, action)=>({
  1213. ...state,
  1214. isDownloadingAudio: action.payload
  1215. }),
  1216. setShowTooltipWhenPlayingAudio: (state, action)=>({
  1217. ...state,
  1218. showTooltipWhenPlayingAudio: action.payload
  1219. })
  1220. },
  1221. // reset reciter to the default based on the locale
  1222. // WHEN `reset` action is dispatched
  1223. extraReducers: (builder)=>{
  1224. builder.addCase(_redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, (state, action)=>({
  1225. ...state,
  1226. ...(0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_4__/* .getAudioPlayerStateInitialState */ .aq)(action.payload.locale)
  1227. }));
  1228. builder.addCase(_redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z, (state, action)=>{
  1229. const { payload: { userPreferences } , } = action;
  1230. const remotePreferences = userPreferences[types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_6__/* ["default"].AUDIO */ .Z.AUDIO];
  1231. if (remotePreferences) {
  1232. return {
  1233. ...state,
  1234. ...remotePreferences
  1235. };
  1236. }
  1237. return state;
  1238. });
  1239. // listen to redux-persist's REHYDRATE event
  1240. builder.addCase(redux_persist__WEBPACK_IMPORTED_MODULE_1__.REHYDRATE, (state, action)=>{
  1241. // @ts-ignore
  1242. const { key , payload } = action;
  1243. /**
  1244. * There is an issue with redux-persists (https://github.com/rt2zz/redux-persist/issues/290)
  1245. * that converts Infinite to null which affects when the user chooses to
  1246. * repeat a verse(s) infinitely and leads to repeatRange being persisted
  1247. * as null which is an invalid value so we need to convert it back to Infinity.
  1248. */ if (key === _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_5__/* ["default"].AUDIO_PLAYER_STATE */ .Z.AUDIO_PLAYER_STATE && payload?.repeatSettings?.repeatRange === null) {
  1249. return {
  1250. ...state,
  1251. ...payload
  1252. };
  1253. }
  1254. return {
  1255. ...state,
  1256. ...payload
  1257. };
  1258. });
  1259. }
  1260. });
  1261. const { setEnableAutoScrolling , setIsDownloadingAudio , setShowTooltipWhenPlayingAudio } = audioPlayerStateSlice.actions;
  1262. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (audioPlayerStateSlice.reducer);
  1263. /***/ }),
  1264. /***/ 90264:
  1265. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1266. "use strict";
  1267. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1268. /* harmony export */ "EA": () => (/* binding */ selectReadingPreference),
  1269. /* harmony export */ "GW": () => (/* binding */ setReadingPreference),
  1270. /* harmony export */ "N9": () => (/* binding */ selectWordClickFunctionality),
  1271. /* harmony export */ "SL": () => (/* binding */ selectIsUsingDefaultWordByWordLocale),
  1272. /* harmony export */ "SV": () => (/* binding */ selectTooltipContentType),
  1273. /* harmony export */ "Ud": () => (/* binding */ setSelectedWordByWordLocale),
  1274. /* harmony export */ "Xg": () => (/* binding */ selectReadingPreferences),
  1275. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1276. /* harmony export */ "eB": () => (/* binding */ selectInlineDisplayWordByWordPreferences),
  1277. /* harmony export */ "lt": () => (/* binding */ selectWordByWordLocale)
  1278. /* harmony export */ });
  1279. /* unused harmony exports readingPreferencesSlice, setWordClickFunctionality, setWordByWordContentType, setWordByWordDisplay, selectIsTooltipContentEnabled */
  1280. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1281. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1282. /* harmony import */ var _redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78733);
  1283. /* harmony import */ var _redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91767);
  1284. /* harmony import */ var _redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17241);
  1285. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61243);
  1286. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13591);
  1287. /* harmony import */ var types_QuranReader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(50467);
  1288. const readingPreferencesSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1289. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__/* ["default"].READING_PREFERENCES */ .Z.READING_PREFERENCES,
  1290. initialState: (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getReadingPreferencesInitialState */ .wH)(),
  1291. reducers: {
  1292. setReadingPreference: (state, action)=>({
  1293. ...state,
  1294. readingPreference: action.payload
  1295. }),
  1296. setSelectedWordByWordLocale: (state, action)=>({
  1297. ...state,
  1298. selectedWordByWordLocale: action.payload.value,
  1299. isUsingDefaultWordByWordLocale: action.payload.value === (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getReadingPreferencesInitialState */ .wH)(action.payload.locale).selectedWordByWordLocale
  1300. }),
  1301. setWordClickFunctionality: (state, action)=>({
  1302. ...state,
  1303. wordClickFunctionality: action.payload
  1304. }),
  1305. setWordByWordContentType: (state, action)=>({
  1306. ...state,
  1307. wordByWordContentType: action.payload
  1308. }),
  1309. setWordByWordDisplay: (state, action)=>({
  1310. ...state,
  1311. wordByWordDisplay: action.payload
  1312. })
  1313. },
  1314. // reset the state to initial state
  1315. // when `reset` action is dispatched
  1316. extraReducers: (builder)=>{
  1317. builder.addCase(_redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (state, action)=>{
  1318. return (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getReadingPreferencesInitialState */ .wH)(action.payload.locale);
  1319. });
  1320. builder.addCase(_redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, (state, action)=>{
  1321. const { payload: { userPreferences , locale } , } = action;
  1322. const remotePreferences = userPreferences[types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__/* ["default"].READING */ .Z.READING];
  1323. if (remotePreferences) {
  1324. const { selectedWordByWordLocale: defaultWordByWordLocale } = (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getReadingPreferencesInitialState */ .wH)(locale);
  1325. return {
  1326. ...state,
  1327. ...remotePreferences,
  1328. isUsingDefaultWordByWordLocale: remotePreferences.selectedWordByWordLocale === defaultWordByWordLocale
  1329. };
  1330. }
  1331. return state;
  1332. });
  1333. }
  1334. });
  1335. const { setReadingPreference , setSelectedWordByWordLocale , setWordClickFunctionality , setWordByWordContentType , setWordByWordDisplay , } = readingPreferencesSlice.actions;
  1336. /**
  1337. * Check whether we should display inline wbw translation/transliteration.
  1338. *
  1339. * @param {RootState} state
  1340. * @returns {{showWordByWordTranslation: boolean, showWordByWordTransliteration: boolean}}
  1341. */ const selectInlineDisplayWordByWordPreferences = (state)=>{
  1342. const { readingPreferences } = state;
  1343. const { wordByWordDisplay , wordByWordContentType } = readingPreferences;
  1344. const shouldDisplayInline = wordByWordDisplay.includes(types_QuranReader__WEBPACK_IMPORTED_MODULE_6__/* .WordByWordDisplay.INLINE */ .PT.INLINE);
  1345. return {
  1346. showWordByWordTranslation: shouldDisplayInline && wordByWordContentType.includes(types_QuranReader__WEBPACK_IMPORTED_MODULE_6__/* .WordByWordType.Translation */ .Oj.Translation),
  1347. showWordByWordTransliteration: shouldDisplayInline && wordByWordContentType.includes(types_QuranReader__WEBPACK_IMPORTED_MODULE_6__/* .WordByWordType.Transliteration */ .Oj.Transliteration)
  1348. };
  1349. };
  1350. /**
  1351. * Check whether the tooltip content is enabled or not.
  1352. * To be considered enabled, the following conditions need to be met:
  1353. *
  1354. * 1. display options need to include tooltip.
  1355. * 2. word by word content need to contain either translation or transliteration.
  1356. *
  1357. * @param {RootState} state
  1358. * @returns {boolean}
  1359. */ const selectIsTooltipContentEnabled = (state)=>{
  1360. const { readingPreferences } = state;
  1361. const { wordByWordContentType , wordByWordDisplay } = readingPreferences;
  1362. const shouldDisplayTooltip = wordByWordDisplay.includes(WordByWordDisplay.TOOLTIP);
  1363. if (!shouldDisplayTooltip) {
  1364. return false;
  1365. }
  1366. return wordByWordContentType.includes(WordByWordType.Translation) || wordByWordContentType.includes(WordByWordType.Transliteration);
  1367. };
  1368. const selectReadingPreferences = (state)=>state.readingPreferences;
  1369. /**
  1370. * Select which tooltip content to show. We should not show any tooltips when:
  1371. *
  1372. * 1. Display options does not include tooltip.
  1373. * 2. Display options does include tooltip but no translation/transliterations were selected.
  1374. *
  1375. * @param {RootState} state
  1376. * @returns {WordByWordType[]}
  1377. */ const selectTooltipContentType = (state)=>{
  1378. const { readingPreferences } = state;
  1379. const { wordByWordDisplay , wordByWordContentType } = readingPreferences;
  1380. if (!wordByWordDisplay || !wordByWordDisplay.includes(types_QuranReader__WEBPACK_IMPORTED_MODULE_6__/* .WordByWordDisplay.TOOLTIP */ .PT.TOOLTIP) || !wordByWordContentType || !wordByWordContentType.length) {
  1381. return [];
  1382. }
  1383. return wordByWordContentType;
  1384. };
  1385. const selectReadingPreference = (state)=>state.readingPreferences.readingPreference;
  1386. const selectWordClickFunctionality = (state)=>state.readingPreferences.wordClickFunctionality;
  1387. const selectWordByWordLocale = (state)=>state.readingPreferences.selectedWordByWordLocale;
  1388. const selectIsUsingDefaultWordByWordLocale = (state)=>state.readingPreferences.isUsingDefaultWordByWordLocale;
  1389. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (readingPreferencesSlice.reducer);
  1390. /***/ }),
  1391. /***/ 31922:
  1392. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1393. "use strict";
  1394. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1395. /* harmony export */ "AV": () => (/* binding */ selectReadingViewSelectedVerseKey),
  1396. /* harmony export */ "E9": () => (/* binding */ setReadingViewSelectedVerseKey),
  1397. /* harmony export */ "Ob": () => (/* binding */ setReadingViewHoveredVerseKey),
  1398. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1399. /* harmony export */ "_H": () => (/* binding */ selectReadingViewHoveredVerseKey)
  1400. /* harmony export */ });
  1401. /* unused harmony export initialState */
  1402. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1403. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1404. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61243);
  1405. const initialState = {
  1406. hoveredVerseKey: null,
  1407. selectedVerseKey: null
  1408. };
  1409. /**
  1410. * This slice keep track of the current hovered and selected verses in the reading mode.
  1411. *
  1412. */ const readingViewVerse = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1413. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__/* ["default"].READING_VIEW_HOVERED_VERSE */ .Z.READING_VIEW_HOVERED_VERSE,
  1414. initialState,
  1415. reducers: {
  1416. setReadingViewHoveredVerseKey: (state, { payload })=>{
  1417. return {
  1418. ...state,
  1419. hoveredVerseKey: payload
  1420. };
  1421. },
  1422. setReadingViewSelectedVerseKey: (state, { payload })=>{
  1423. return {
  1424. ...state,
  1425. selectedVerseKey: payload
  1426. };
  1427. }
  1428. }
  1429. });
  1430. const selectReadingViewHoveredVerseKey = (state)=>state.readingViewVerse.hoveredVerseKey;
  1431. const selectReadingViewSelectedVerseKey = (state)=>state.readingViewVerse.selectedVerseKey;
  1432. const { setReadingViewHoveredVerseKey , setReadingViewSelectedVerseKey } = readingViewVerse.actions;
  1433. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (readingViewVerse.reducer);
  1434. /***/ }),
  1435. /***/ 11983:
  1436. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1437. "use strict";
  1438. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1439. /* harmony export */ "OW": () => (/* binding */ selectTafsirs),
  1440. /* harmony export */ "XG": () => (/* binding */ selectSelectedTafsirs),
  1441. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1442. /* harmony export */ "ZY": () => (/* binding */ setSelectedTafsirs)
  1443. /* harmony export */ });
  1444. /* unused harmony exports tafsirsSlice, selectIsUsingDefaultTafsirs */
  1445. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1446. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1447. /* harmony import */ var _redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78733);
  1448. /* harmony import */ var _redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91767);
  1449. /* harmony import */ var _redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17241);
  1450. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61243);
  1451. /* harmony import */ var _utils_array__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5639);
  1452. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13591);
  1453. const tafsirsSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1454. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__/* ["default"].TAFSIRS */ .Z.TAFSIRS,
  1455. initialState: (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTafsirsInitialState */ .Fy)(),
  1456. reducers: {
  1457. setSelectedTafsirs: (state, action)=>({
  1458. ...state,
  1459. // we need to before we compare because there is a corner case when the user changes the default tafsirs then re-selects them which results in the same array as the default one but reversed e.g. instead of [20, 131] it becomes [131, 20].
  1460. isUsingDefaultTafsirs: (0,_utils_array__WEBPACK_IMPORTED_MODULE_6__/* .areArraysEqual */ .Hj)((0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTafsirsInitialState */ .Fy)(action.payload.locale).selectedTafsirs, action.payload.tafsirs),
  1461. selectedTafsirs: action.payload.tafsirs
  1462. })
  1463. },
  1464. // reset the tafsirs to initial state
  1465. // when reset action is dispatched
  1466. extraReducers: (builder)=>{
  1467. builder.addCase(_redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (state, action)=>{
  1468. return (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTafsirsInitialState */ .Fy)(action.payload.locale);
  1469. });
  1470. builder.addCase(_redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, (state, action)=>{
  1471. const { payload: { userPreferences , locale } , } = action;
  1472. const remotePreferences = userPreferences[types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__/* ["default"].TAFSIRS */ .Z.TAFSIRS];
  1473. if (remotePreferences) {
  1474. const { selectedTafsirs: defaultTafsirs } = (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTafsirsInitialState */ .Fy)(locale);
  1475. const { selectedTafsirs: remoteTafsirs } = remotePreferences;
  1476. return {
  1477. ...state,
  1478. ...remotePreferences,
  1479. isUsingDefaultTafsirs: (0,_utils_array__WEBPACK_IMPORTED_MODULE_6__/* .areArraysEqual */ .Hj)(defaultTafsirs, remoteTafsirs)
  1480. };
  1481. }
  1482. return state;
  1483. });
  1484. }
  1485. });
  1486. const { setSelectedTafsirs } = tafsirsSlice.actions;
  1487. const selectTafsirs = (state)=>state.tafsirs;
  1488. const selectSelectedTafsirs = (state)=>state.tafsirs.selectedTafsirs;
  1489. const selectIsUsingDefaultTafsirs = (state)=>state.tafsirs.isUsingDefaultTafsirs;
  1490. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tafsirsSlice.reducer);
  1491. /***/ }),
  1492. /***/ 88548:
  1493. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1494. "use strict";
  1495. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1496. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1497. /* harmony export */ "qw": () => (/* binding */ selectSelectedTranslations),
  1498. /* harmony export */ "uz": () => (/* binding */ setSelectedTranslations),
  1499. /* harmony export */ "z2": () => (/* binding */ selectIsUsingDefaultTranslations)
  1500. /* harmony export */ });
  1501. /* unused harmony exports translationsSlice, selectTranslations */
  1502. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1503. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1504. /* harmony import */ var _redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78733);
  1505. /* harmony import */ var _redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91767);
  1506. /* harmony import */ var _redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17241);
  1507. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61243);
  1508. /* harmony import */ var _utils_array__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5639);
  1509. /* harmony import */ var types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13591);
  1510. const translationsSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1511. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_4__/* ["default"].TRANSLATIONS */ .Z.TRANSLATIONS,
  1512. initialState: (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTranslationsInitialState */ .h0)(),
  1513. reducers: {
  1514. setSelectedTranslations: (state, action)=>({
  1515. ...state,
  1516. // we need to before we compare because there is a corner case when the user changes the default translations then re-selects them which results in the same array as the default one but reversed e.g. instead of [20, 131] it becomes [131, 20].
  1517. isUsingDefaultTranslations: (0,_utils_array__WEBPACK_IMPORTED_MODULE_6__/* .areArraysEqual */ .Hj)((0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTranslationsInitialState */ .h0)(action.payload.locale).selectedTranslations, action.payload.translations),
  1518. selectedTranslations: action.payload.translations
  1519. })
  1520. },
  1521. // reset the translation state to initial state
  1522. // when `reset` action is dispatched
  1523. extraReducers: (builder)=>{
  1524. builder.addCase(_redux_actions_reset_settings__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, (state, action)=>{
  1525. return (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTranslationsInitialState */ .h0)(action.payload.locale);
  1526. });
  1527. builder.addCase(_redux_actions_sync_user_preferences__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z, (state, action)=>{
  1528. const { payload: { userPreferences , locale } , } = action;
  1529. const remotePreferences = userPreferences[types_auth_PreferenceGroup__WEBPACK_IMPORTED_MODULE_5__/* ["default"].TRANSLATIONS */ .Z.TRANSLATIONS];
  1530. if (remotePreferences) {
  1531. const { selectedTranslations: defaultTranslations } = (0,_redux_defaultSettings_util__WEBPACK_IMPORTED_MODULE_3__/* .getTranslationsInitialState */ .h0)(locale);
  1532. const { selectedTranslations: remoteTranslations } = remotePreferences;
  1533. return {
  1534. ...state,
  1535. ...remotePreferences,
  1536. isUsingDefaultTranslations: (0,_utils_array__WEBPACK_IMPORTED_MODULE_6__/* .areArraysEqual */ .Hj)(defaultTranslations, remoteTranslations)
  1537. };
  1538. }
  1539. return state;
  1540. });
  1541. }
  1542. });
  1543. const { setSelectedTranslations } = translationsSlice.actions;
  1544. const selectTranslations = (state)=>state.translations;
  1545. const selectSelectedTranslations = (state)=>state.translations.selectedTranslations;
  1546. const selectIsUsingDefaultTranslations = (state)=>state.translations.isUsingDefaultTranslations;
  1547. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (translationsSlice.reducer);
  1548. /***/ }),
  1549. /***/ 44177:
  1550. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1551. "use strict";
  1552. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1553. /* harmony export */ "Mi": () => (/* binding */ setSettingsView),
  1554. /* harmony export */ "R$": () => (/* binding */ setIsSearchDrawerOpen),
  1555. /* harmony export */ "Rd": () => (/* binding */ setIsNavigationDrawerOpen),
  1556. /* harmony export */ "US": () => (/* binding */ SettingsView),
  1557. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1558. /* harmony export */ "ZY": () => (/* binding */ setIsSettingsDrawerOpen),
  1559. /* harmony export */ "u": () => (/* binding */ setIsVisible),
  1560. /* harmony export */ "wK": () => (/* binding */ selectNavbar)
  1561. /* harmony export */ });
  1562. /* unused harmony export navbarSlice */
  1563. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1564. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1565. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61243);
  1566. var SettingsView;
  1567. (function(SettingsView) {
  1568. SettingsView["Body"] = "body";
  1569. SettingsView["Translation"] = "translation";
  1570. SettingsView["Reciter"] = "reciter";
  1571. SettingsView["Tafsir"] = "tafsir";
  1572. SettingsView["RepeatSettings"] = "repeatSettings";
  1573. })(SettingsView || (SettingsView = {}));
  1574. const initialState = {
  1575. isVisible: true,
  1576. isNavigationDrawerOpen: false,
  1577. isSearchDrawerOpen: false,
  1578. isSettingsDrawerOpen: false,
  1579. settingsView: SettingsView.Body
  1580. };
  1581. const navbarSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1582. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__/* ["default"].NAVBAR */ .Z.NAVBAR,
  1583. initialState,
  1584. reducers: {
  1585. setIsVisible: (state, action)=>({
  1586. ...state,
  1587. isVisible: action.payload
  1588. }),
  1589. setIsNavigationDrawerOpen: (state, action)=>({
  1590. ...state,
  1591. isNavigationDrawerOpen: action.payload
  1592. }),
  1593. setIsSearchDrawerOpen: (state, action)=>({
  1594. ...state,
  1595. isSearchDrawerOpen: action.payload
  1596. }),
  1597. setIsSettingsDrawerOpen: (state, action)=>({
  1598. ...state,
  1599. isSettingsDrawerOpen: action.payload
  1600. }),
  1601. setSettingsView: (state, action)=>({
  1602. ...state,
  1603. settingsView: action.payload
  1604. })
  1605. }
  1606. });
  1607. const { setIsVisible , setIsNavigationDrawerOpen , setIsSearchDrawerOpen , setIsSettingsDrawerOpen , setSettingsView , } = navbarSlice.actions;
  1608. const selectNavbar = (state)=>state.navbar;
  1609. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (navbarSlice.reducer);
  1610. /***/ }),
  1611. /***/ 22732:
  1612. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1613. "use strict";
  1614. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1615. /* harmony export */ "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
  1616. /* harmony export */ "tE": () => (/* binding */ setActiveStepIndex),
  1617. /* harmony export */ "xg": () => (/* binding */ selectOnboardingActiveStep)
  1618. /* harmony export */ });
  1619. /* unused harmony exports onboardingSlice, dismissChecklist, setIsChecklistVisible, selectOnboarding */
  1620. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75184);
  1621. /* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__);
  1622. /* harmony import */ var _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61243);
  1623. /* harmony import */ var _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20661);
  1624. const initialState = {
  1625. isChecklistVisible: true,
  1626. checklistDismissals: 0,
  1627. lastChecklistDismissal: null,
  1628. activeStep: {
  1629. group: _types_OnboardingGroup__WEBPACK_IMPORTED_MODULE_2__/* ["default"].HOMEPAGE */ .Z.HOMEPAGE,
  1630. index: 0
  1631. },
  1632. completedGroups: {}
  1633. };
  1634. const onboardingSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSlice)({
  1635. name: _redux_types_SliceName__WEBPACK_IMPORTED_MODULE_1__/* ["default"].ONBOARDING */ .Z.ONBOARDING,
  1636. initialState,
  1637. reducers: {
  1638. // checklist state
  1639. dismissChecklist: (state)=>({
  1640. ...state,
  1641. isChecklistVisible: false,
  1642. checklistDismissals: state.checklistDismissals + 1,
  1643. lastChecklistDismissal: new Date().getTime()
  1644. }),
  1645. setIsChecklistVisible: (state, action)=>({
  1646. ...state,
  1647. isChecklistVisible: action.payload
  1648. }),
  1649. setActiveStepIndex: (state, action)=>{
  1650. const { group: groupKey , index , indicesToMarkAsCompleted , totalSteps } = action.payload;
  1651. const group = state.completedGroups[groupKey];
  1652. const newCompletedSteps = group?.completedSteps ? [
  1653. ...group.completedSteps
  1654. ] : [];
  1655. if (!newCompletedSteps.includes(index)) {
  1656. newCompletedSteps.push(index);
  1657. }
  1658. if (indicesToMarkAsCompleted) {
  1659. indicesToMarkAsCompleted.forEach((stepIdx)=>{
  1660. if (!newCompletedSteps.includes(stepIdx)) {
  1661. newCompletedSteps.push(stepIdx);
  1662. }
  1663. });
  1664. }
  1665. const newGroupData = {
  1666. completedSteps: newCompletedSteps,
  1667. isCompleted: totalSteps ? newCompletedSteps.length === totalSteps : group?.isCompleted
  1668. };
  1669. return {
  1670. ...state,
  1671. activeStep: action.payload,
  1672. completedGroups: {
  1673. ...state.completedGroups,
  1674. [groupKey]: newGroupData
  1675. }
  1676. };
  1677. }
  1678. }
  1679. });
  1680. const { dismissChecklist , setIsChecklistVisible , setActiveStepIndex } = onboardingSlice.actions;
  1681. const selectOnboarding = (state)=>state.onboarding;
  1682. const selectOnboardingActiveStep = (state)=>state.onboarding.activeStep;
  1683. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (onboardingSlice.reducer);
  1684. /***/ }),
  1685. /***/ 6902:
  1686. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1687. "use strict";
  1688. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1689. /* harmony export */ "t": () => (/* binding */ isMobile)
  1690. /* harmony export */ });
  1691. const TABLET_WIDTH = 768;
  1692. // eslint-disable-next-line import/prefer-default-export
  1693. const isMobile = ()=>{
  1694. if (typeof document === "undefined") return false;
  1695. return document.documentElement.clientWidth < TABLET_WIDTH;
  1696. };
  1697. /***/ }),
  1698. /***/ 20661:
  1699. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1700. "use strict";
  1701. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  1702. /* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
  1703. /* harmony export */ });
  1704. var OnboardingGroup;
  1705. (function(OnboardingGroup) {
  1706. OnboardingGroup["HOMEPAGE"] = "HOMEPAGE";
  1707. OnboardingGroup["SETTINGS"] = "SETTINGS";
  1708. OnboardingGroup["READING_EXPERIENCE"] = "READING_EXPERIENCE";
  1709. OnboardingGroup["PERSONALIZED_FEATURES"] = "PERSONALIZED_FEATURES";
  1710. })(OnboardingGroup || (OnboardingGroup = {}));
  1711. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OnboardingGroup);
  1712. /***/ })
  1713. };
  1714. ;
  1715. //# sourceMappingURL=6094.js.map