Skip to content

Commit 5d2ffe2

Browse files
authored
Merge pull request #2154 from quran/QF-352
QF-352: Update translation view initial data with the api data
2 parents 7a22db1 + 1168d4d commit 5d2ffe2

File tree

2 files changed

+60
-4
lines changed

2 files changed

+60
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { useContext, useMemo } from 'react';
2+
3+
import { useSelector } from 'react-redux';
4+
5+
import useFetchPagesLookup from '@/components/QuranReader/hooks/useFetchPagesLookup';
6+
import DataContext from '@/contexts/DataContext';
7+
import { selectIsUsingDefaultFont } from '@/redux/slices/QuranReader/styles';
8+
import { generateVerseKeysBetweenTwoVerseKeys } from '@/utils/verseKeys';
9+
10+
/**
11+
* This hooks calculates the total number of verses based on the verses range
12+
* and the current Mushaf settings
13+
*
14+
* @param {number|string} resourceId
15+
* @param {QuranReaderDataType} quranReaderDataType
16+
* @param {VersesResponse} initialData
17+
* @param {QuranReaderStyles} quranReaderStyles
18+
*
19+
* @returns {number} versesCount
20+
*/
21+
22+
const useGetVersesCount = ({
23+
resourceId,
24+
quranReaderDataType,
25+
initialData,
26+
quranReaderStyles,
27+
}): number => {
28+
const isUsingDefaultFont = useSelector(selectIsUsingDefaultFont);
29+
const { lookupRange } = useFetchPagesLookup(
30+
resourceId,
31+
quranReaderDataType,
32+
initialData,
33+
quranReaderStyles,
34+
isUsingDefaultFont,
35+
);
36+
37+
const chaptersData = useContext(DataContext);
38+
39+
const versesCount = useMemo(() => {
40+
return generateVerseKeysBetweenTwoVerseKeys(chaptersData, lookupRange.from, lookupRange.to)
41+
.length;
42+
}, [chaptersData, lookupRange.from, lookupRange.to]);
43+
44+
return versesCount;
45+
};
46+
47+
export default useGetVersesCount;

src/components/QuranReader/TranslationView/index.tsx

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/* eslint-disable max-lines */
22
/* eslint-disable react/no-multi-comp */
3-
import React, { useMemo, useRef, useState } from 'react';
3+
import { useMemo, useRef, useState } from 'react';
44

55
import dynamic from 'next/dynamic';
66
import { Virtuoso, VirtuosoHandle } from 'react-virtuoso';
77

88
import onCopyQuranWords from '../onCopyQuranWords';
99
import QueryParamMessage from '../QueryParamMessage';
1010

11+
import useGetVersesCount from './hooks/useGetVersesCount';
1112
import useScrollToVirtualizedVerse from './hooks/useScrollToVirtualizedVerse';
1213
import styles from './TranslationView.module.scss';
1314
import TranslationViewVerse from './TranslationViewVerse';
@@ -63,6 +64,14 @@ const TranslationView = ({
6364
}: { value: string; isQueryParamDifferent: boolean } = useGetQueryParamOrReduxValue(
6465
QueryParam.WBW_LOCALE,
6566
);
67+
68+
const versesCount = useGetVersesCount({
69+
resourceId,
70+
quranReaderDataType,
71+
initialData,
72+
quranReaderStyles,
73+
});
74+
6675
const virtuosoRef = useRef<VirtuosoHandle>(null);
6776
useScrollToVirtualizedVerse(
6877
quranReaderDataType,
@@ -75,7 +84,7 @@ const TranslationView = ({
7584
useQcfFont(quranReaderStyles.quranFont, verses);
7685

7786
const itemContentRenderer = (verseIdx: number) => {
78-
if (verseIdx === initialData.metaData.numberOfVerses) {
87+
if (verseIdx === versesCount) {
7988
return (
8089
<EndOfScrollingControls
8190
quranReaderDataType={quranReaderDataType}
@@ -88,7 +97,7 @@ const TranslationView = ({
8897
return (
8998
<TranslationViewVerse
9099
verseIdx={verseIdx}
91-
totalVerses={initialData.metaData.numberOfVerses}
100+
totalVerses={versesCount}
92101
quranReaderDataType={quranReaderDataType}
93102
quranReaderStyles={quranReaderStyles}
94103
setApiPageToVersesMap={setApiPageToVersesMap}
@@ -123,7 +132,7 @@ const TranslationView = ({
123132
<Virtuoso
124133
ref={virtuosoRef}
125134
useWindowScroll
126-
totalCount={initialData.metaData.numberOfVerses + 1}
135+
totalCount={versesCount + 1}
127136
increaseViewportBy={INCREASE_VIEWPORT_BY_PIXELS}
128137
initialItemCount={1} // needed for SSR.
129138
itemContent={itemContentRenderer}

0 commit comments

Comments
 (0)