Skip to content

Commit 5d2d356

Browse files
Merge pull request #2029 from Gauravjeetsingh/akhand-path-issues
Resolve the scroll issue in Akhand path view
2 parents bd50e11 + 21b6ce6 commit 5d2d356

File tree

6 files changed

+101
-26
lines changed

6 files changed

+101
-26
lines changed

app.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,15 @@ app.on('window-all-closed', () => {
654654
// }
655655
});
656656

657+
ipcMain.on('sync-scroll', (event, data) => {
658+
viewerWindow.webContents.executeJavaScript(`
659+
document.querySelector('#verse-${data}').scrollIntoView({
660+
behavior: 'smooth',
661+
block: 'center'
662+
});
663+
`);
664+
});
665+
657666
ipcMain.on('enable-wc-webview', (event, data) => {
658667
const webViewWC = webContents.fromId(parseInt(data, 10));
659668
remote.enable(webViewWC);

www/main/navigator/shabad/ShabadContent.jsx

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ const ShabadContent = () => {
5050
} = useStoreActions((state) => state.navigator);
5151

5252
// mangalPosition was removed from below settings
53-
const { autoplayToggle, autoplayDelay, baniLength, liveFeed, intelligentSpacebar } = useStoreState(
54-
(state) => state.userSettings,
55-
);
53+
const { autoplayToggle, autoplayDelay, baniLength, liveFeed, intelligentSpacebar } =
54+
useStoreState((state) => state.userSettings);
5655

5756
const [activeShabad, setActiveShabad] = useState([]);
5857
const [activeVerse, setActiveVerse] = useState({});
@@ -102,21 +101,21 @@ const ShabadContent = () => {
102101
const regex = checkPauri.length > 1 ? /]\d*]/ : /]/;
103102
return versesNew
104103
? versesNew.map((verse, index) => {
105-
if (verse) {
106-
const verseObj = {
107-
ID: index,
108-
verseId: verse.ID,
109-
verse: verse.Gurmukhi,
110-
english: verse.English ? verse.English : '',
111-
lineNo: currentLine,
112-
crossPlatformId: verse.crossPlatformID ? verse.crossPlatformID : '',
113-
};
114-
// eslint-disable-next-line no-unused-expressions
115-
regex.test(verse.Gurmukhi) && currentLine++;
116-
return verseObj;
117-
}
118-
return {};
119-
})
104+
if (verse) {
105+
const verseObj = {
106+
ID: index,
107+
verseId: verse.ID,
108+
verse: verse.Gurmukhi,
109+
english: verse.English ? verse.English : '',
110+
lineNo: currentLine,
111+
crossPlatformId: verse.crossPlatformID ? verse.crossPlatformID : '',
112+
};
113+
// eslint-disable-next-line no-unused-expressions
114+
regex.test(verse.Gurmukhi) && currentLine++;
115+
return verseObj;
116+
}
117+
return {};
118+
})
120119
: [];
121120
}
122121
};
@@ -292,7 +291,7 @@ const ShabadContent = () => {
292291
}
293292
}
294293
return nextVerseIndex;
295-
}
294+
};
296295

297296
if (isSundarGutkaBani || isCeremonyBani) {
298297
openNextVerse();
@@ -305,7 +304,11 @@ const ShabadContent = () => {
305304
let nextVerseIndex = homeVerse;
306305

307306
if (intelligentSpacebar) {
308-
nextVerseIndex = handleIntelligentSpacebar(nextVerseIndex, mappedShabadArray, currentVerseIndex);
307+
nextVerseIndex = handleIntelligentSpacebar(
308+
nextVerseIndex,
309+
mappedShabadArray,
310+
currentVerseIndex,
311+
);
309312
}
310313

311314
const nextVerseId = mappedShabadArray[nextVerseIndex].verseId;

www/main/navigator/shabad/ShabadText.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ export const ShabadText = ({
5757
lineNumber,
5858
} = useStoreState((state) => state.navigator);
5959

60-
const { baniLength, liveFeed, autoplayDelay, autoplayToggle, intelligentSpacebar } = useStoreState(
61-
(state) => state.userSettings,
62-
);
60+
const { baniLength, liveFeed, autoplayDelay, autoplayToggle, intelligentSpacebar } =
61+
useStoreState((state) => state.userSettings);
6362

6463
const {
6564
setActiveVerseId,

www/main/viewer/ShabadDeck/ShabadDeck.jsx

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import React, { useState, useEffect } from 'react';
1+
import React, { useState, useEffect, useRef } from 'react';
22
import { useStoreState } from 'easy-peasy';
3+
import { ipcRenderer } from 'electron';
4+
35
import Slide from '../Slide/Slide';
46
import QuickTools from '../Slide/QuickTools';
57
import {
@@ -40,8 +42,27 @@ function ShabadDeck() {
4042
themeBg,
4143
currentWorkspace,
4244
} = useStoreState((state) => state.userSettings);
45+
4346
const [activeVerse, setActiveVerse] = useState([]);
4447
const [nextVerse, setNextVerse] = useState({});
48+
const verseRefKeys = useRef([]);
49+
50+
const observerOptions = {
51+
root: null,
52+
rootMargin: '0px',
53+
threshold: 0.8,
54+
};
55+
56+
const updateVerse = (entries) => {
57+
entries.forEach((entry) => {
58+
if (entry.isIntersecting) {
59+
const visibleVerse = entry.target.dataset.verseid;
60+
ipcRenderer.send('sync-scroll', visibleVerse);
61+
}
62+
});
63+
};
64+
65+
const observer = new IntersectionObserver(updateVerse, observerOptions);
4566

4667
const baniLengthCols = {
4768
short: 'existsSGPC',
@@ -50,6 +71,18 @@ function ShabadDeck() {
5071
extralong: 'existsBuddhaDal',
5172
};
5273

74+
const verseRefs = useRef({});
75+
76+
const updateVerseRef = (verseId, ref) => {
77+
if (ref) {
78+
verseRefs.current[verseId] = ref;
79+
if (!verseRefKeys.current.includes(verseId)) {
80+
verseRefKeys.current = [...verseRefKeys.current, verseId];
81+
}
82+
observer.observe(ref);
83+
}
84+
};
85+
5386
const getCurrentThemeInstance = () => themes.find((theme) => theme.key === currentTheme);
5487

5588
const bakeThemeStyles = (themeInstance, themeObj) => {
@@ -174,6 +207,19 @@ function ShabadDeck() {
174207
}
175208
}, [activeShabadId, activeVerseId, sundarGutkaBaniId, ceremonyId, akhandpatt, displayNextLine]);
176209

210+
useEffect(() => {
211+
if (activeVerseId && akhandpatt) {
212+
const verseDOM = verseRefs.current[activeVerseId];
213+
214+
if (verseDOM) {
215+
verseDOM.scrollIntoView({
216+
behavior: 'smooth',
217+
block: 'center',
218+
});
219+
}
220+
}
221+
}, [activeVerseId, akhandpatt, verseRefKeys.current]);
222+
177223
useEffect(() => {
178224
if (isMiscSlide) {
179225
if (activeVerse.length !== 0) {
@@ -207,6 +253,7 @@ function ShabadDeck() {
207253
nextLineObj={nextVerse}
208254
isMiscSlide={isMiscSlide}
209255
bgColor={applyOverlay()}
256+
updateVerseRef={updateVerseRef}
210257
/>
211258
))
212259
) : (

www/main/viewer/Slide/Slide.jsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import SlideAnnouncement from './SlideAnnouncement';
1111

1212
global.platform = require('../../desktop_scripts');
1313

14-
const Slide = ({ verseObj, nextLineObj, isMiscSlide, bgColor }) => {
14+
const Slide = ({ verseObj, nextLineObj, isMiscSlide, bgColor, updateVerseRef }) => {
1515
const {
1616
larivaar,
1717
larivaarAssist,
@@ -129,8 +129,18 @@ const Slide = ({ verseObj, nextLineObj, isMiscSlide, bgColor }) => {
129129
verseObj,
130130
]);
131131

132+
if (!verseObj) return null;
133+
132134
return (
133-
<div className="verse-slide-wrapper" style={{ background: bgColor }}>
135+
<div
136+
className="verse-slide-wrapper"
137+
id={`verse-${verseObj.ID}`}
138+
style={{ background: bgColor }}
139+
ref={(el) => {
140+
updateVerseRef(verseObj.ID, el);
141+
}}
142+
data-verseid={verseObj.ID}
143+
>
134144
<CSSTransition in={showVerse} timeout={300} classNames="fade" unmountOnExit>
135145
<div className={`verse-slide ${leftAlign ? ' slide-left-align' : ''}`}>
136146
{isMiscSlide && <SlideAnnouncement getFontSize={getFontSize} isMiscSlide={isMiscSlide} />}
@@ -188,6 +198,7 @@ Slide.propTypes = {
188198
nextLineObj: PropTypes.object,
189199
isMiscSlide: PropTypes.bool,
190200
bgColor: PropTypes.string,
201+
updateVerseRef: PropTypes.func,
191202
};
192203

193204
export default Slide;

www/src/scss/viewer/verse-slide/_verse-slide.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
height: auto !important;
44
padding: 10px !important;
55
}
6+
7+
.verse-slide-wrapper {
8+
align-items: center;
9+
display: flex;
10+
justify-content: center;
11+
}
612
}
713

814
.single-display-mode {

0 commit comments

Comments
 (0)