1 |
- {"version":3,"file":"static/chunks/99158.9c6621cfe99f695a.js","mappings":"qMA8BA,UAnBqB,WACnB,IAAoBA,GAAAA,EAAAA,EAAAA,GAAe,UAA3BC,EAAYD,EAAZC,EAAGC,EAASF,EAATE,KACLC,GAASC,EAAAA,EAAAA,IAAUF,GACnBG,GAAmBC,EAAAA,EAAAA,IAAYC,EAAAA,IAC/BC,GAAcC,EAAAA,EAAAA,UAClB,W,OAAMC,EAAAA,EAAAA,IAAmBC,OAAON,EAAiBO,SACjD,CAACP,EAAiBO,OAGpB,OACE,SAACC,EAAAA,EAAmB,CAClBC,MAAOX,EACPY,QAASC,EAAAA,GACTC,kBAAmBhB,EAAE,sBACrBiB,WAAY,SAACC,G,MAAQ,GAAeA,OAAZlB,EAAE,OAAO,KAAa,OAAVkB,EAAIC,QACxCC,aAAcb,M,yJCmEpB,IAjF4B,Y,IAC1BM,EAAK,EAALA,MACAG,EAAiB,EAAjBA,kBACAC,EAAU,EAAVA,WACAH,EAAO,EAAPA,QAAO,IACPO,MAAAA,OAAK,IAAG,GAAI,EACZD,EAAY,EAAZA,aAEsCE,GAAAA,EAAAA,EAAAA,UAAS,IAAxCC,EAA+BD,EAAY,GAA9BE,EAAkBF,EAAY,GAC5CG,GAASC,EAAAA,EAAAA,aAETC,EAAgBd,EAAMe,QAC1B,SAACC,G,OACCA,EAAKC,MAAMC,WAAWC,WAAWT,IACjCM,EAAKV,MAAMY,WAAWC,WAAWT,OAGrCU,EAAAA,EAAAA,YAAU,WACHN,EAAcO,QAQjBC,EAAAA,EAAAA,IACEZ,EACAF,EACIe,EAAAA,EAAAA,0BACAA,EAAAA,EAAAA,6BAXNC,EAAAA,EAAAA,IAAsB,CACpBC,MAAOf,EACPgB,OAAQlB,EACJe,EAAAA,EAAAA,0BACAA,EAAAA,EAAAA,+BAUP,CAACb,EAAaI,EAAeN,IAEhC,IAAkCmB,GAA6D,QAA7DA,EAAAA,EAAAA,IAAmCC,EAAAA,IAA0B,GAAxFC,EAA2BF,EAA6D,GAAhFG,EAAmBH,EAA6D,IAC/FP,EAAAA,EAAAA,YAAU,WACRS,MACC,CAACtB,EAAcsB,IAYlB,OACE,UAACE,MAAG,CAACC,UAAWC,IAAAA,2B,WACd,SAACC,OAAI,CAACC,SAXgB,SAACC,GACzBA,EAAEC,iBACF,IAAMC,EAAoBxB,EAAc,GACxC,GAAIA,EAAe,CACjB,IAAMyB,EAAOtC,EAAQqC,EAAkBrB,OACvCL,EAAO4B,KAAKD,K,UAOV,SAACE,QAAK,CACJT,UAAWC,IAAAA,YACXhB,MAAOP,EACPgC,SAAU,SAACN,G,OAAMzB,EAAeyB,EAAEO,OAAO1B,QACzC2B,YAAazC,OAGjB,SAAC4B,MAAG,CAACC,UAAWC,IAAAA,c,UACd,SAACF,MAAG,CAACC,UAAWC,IAAAA,K,SACbnB,EAAc+B,KAAI,SAAC7B,G,OAClB,SAAC8B,EAAAA,EAAI,CAACP,KAAMtC,EAAQe,EAAKC,OAAyB8B,gBAAgB,E,UAChE,SAAChB,MAAG,CACFiB,IAAKhC,EAAKC,QAAUV,EAAeuB,EAAkB,KACrDE,UAAWiB,IACThB,IAAAA,SACAjB,EAAKC,QAAUV,GAAgB0B,IAAAA,c,SAGhC7B,EAAWY,MARsBA,EAAKC","sources":["webpack://_N_E/./src/components/QuranReader/SidebarNavigation/JuzSelection.tsx","webpack://_N_E/./src/components/QuranReader/SidebarNavigation/ScrollableSelection.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport { useSelector } from 'react-redux';\n\nimport ScrollableSelection from './ScrollableSelection';\n\nimport { selectLastReadVerseKey } from '@/redux/slices/QuranReader/readingTracker';\nimport { getJuzIds, getJuzNumberByHizb } from '@/utils/juz';\nimport { getJuzNavigationUrl } from '@/utils/navigation';\n\nconst JuzSelection = () => {\n const { t, lang } = useTranslation('common');\n const juzIds = getJuzIds(lang);\n const lastReadVerseKey = useSelector(selectLastReadVerseKey);\n const selectedJuz = useMemo(\n () => getJuzNumberByHizb(Number(lastReadVerseKey.hizb)),\n [lastReadVerseKey.hizb],\n );\n\n return (\n <ScrollableSelection\n items={juzIds}\n getHref={getJuzNavigationUrl}\n searchPlaceholder={t('sidebar.search-juz')}\n renderItem={(juz) => `${t('juz')} ${juz.label}`}\n selectedItem={selectedJuz}\n />\n );\n};\nexport default JuzSelection;\n","import { useEffect, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\n\nimport styles from './SidebarNavigation.module.scss';\n\nimport Link from '@/dls/Link/Link';\nimport { SCROLL_TO_NEAREST_ELEMENT, useScrollToElement } from '@/hooks/useScrollToElement';\nimport SearchQuerySource from '@/types/SearchQuerySource';\nimport { logEmptySearchResults, logTextSearchQuery } from '@/utils/eventLogger';\n\nconst ScrollableSelection = ({\n items,\n searchPlaceholder,\n renderItem,\n getHref,\n isJuz = true,\n selectedItem,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const router = useRouter();\n\n const filteredItems = items.filter(\n (item) =>\n item.value.toString().startsWith(searchQuery) ||\n item.label.toString().startsWith(searchQuery),\n );\n\n useEffect(() => {\n if (!filteredItems.length) {\n logEmptySearchResults({\n query: searchQuery,\n source: isJuz\n ? SearchQuerySource.SidebarNavigationJuzsList\n : SearchQuerySource.SidebarNavigationPagesList,\n });\n } else {\n logTextSearchQuery(\n searchQuery,\n isJuz\n ? SearchQuerySource.SidebarNavigationJuzsList\n : SearchQuerySource.SidebarNavigationPagesList,\n );\n }\n }, [searchQuery, filteredItems, isJuz]);\n\n const [scroll, selectedItemRef] = useScrollToElement<HTMLDivElement>(SCROLL_TO_NEAREST_ELEMENT);\n useEffect(() => {\n scroll();\n }, [selectedItem, scroll]);\n\n // handle when user press `Enter` in input box\n const handleInputSubmit = (e) => {\n e.preventDefault();\n const firstFilteredItem = filteredItems[0];\n if (filteredItems) {\n const href = getHref(firstFilteredItem.value);\n router.push(href);\n }\n };\n\n return (\n <div className={styles.scrollableSectionContainer}>\n <form onSubmit={handleInputSubmit}>\n <input\n className={styles.searchInput}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={searchPlaceholder}\n />\n </form>\n <div className={styles.listContainer}>\n <div className={styles.list}>\n {filteredItems.map((item) => (\n <Link href={getHref(item.value)} key={item.value} shouldPrefetch={false}>\n <div\n ref={item.value === selectedItem ? selectedItemRef : null}\n className={classNames(\n styles.listItem,\n item.value === selectedItem && styles.selectedItem,\n )}\n >\n {renderItem(item)}\n </div>\n </Link>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ScrollableSelection;\n"],"names":["useTranslation","t","lang","juzIds","getJuzIds","lastReadVerseKey","useSelector","selectLastReadVerseKey","selectedJuz","useMemo","getJuzNumberByHizb","Number","hizb","ScrollableSelection","items","getHref","getJuzNavigationUrl","searchPlaceholder","renderItem","juz","label","selectedItem","isJuz","useState","searchQuery","setSearchQuery","router","useRouter","filteredItems","filter","item","value","toString","startsWith","useEffect","length","logTextSearchQuery","SearchQuerySource","logEmptySearchResults","query","source","useScrollToElement","SCROLL_TO_NEAREST_ELEMENT","scroll","selectedItemRef","div","className","styles","form","onSubmit","e","preventDefault","firstFilteredItem","href","push","input","onChange","target","placeholder","map","Link","shouldPrefetch","ref","classNames"],"sourceRoot":""}
|