react-native-simple-epub-reader 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/components/Reader.js +23 -4
- package/lib/module/components/Reader.js.map +1 -1
- package/lib/module/context/ReaderContext.js +29 -26
- package/lib/module/context/ReaderContext.js.map +1 -1
- package/lib/typescript/src/components/Reader.d.ts.map +1 -1
- package/lib/typescript/src/context/ReaderContext.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Reader.tsx +25 -4
- package/src/context/ReaderContext.tsx +29 -27
|
@@ -29,6 +29,7 @@ const Reader = ({
|
|
|
29
29
|
onWebViewMessage
|
|
30
30
|
}) => {
|
|
31
31
|
const [templateUri, setTemplateUri] = useState('');
|
|
32
|
+
const [isReaderReady, setIsReaderReady] = useState(false);
|
|
32
33
|
const {
|
|
33
34
|
registerBook,
|
|
34
35
|
goNext,
|
|
@@ -51,7 +52,13 @@ const Reader = ({
|
|
|
51
52
|
} = useInjectWebViewVariables();
|
|
52
53
|
const bookRef = useRef(null);
|
|
53
54
|
const onMessage = event => {
|
|
54
|
-
|
|
55
|
+
let parsedEvent;
|
|
56
|
+
try {
|
|
57
|
+
parsedEvent = JSON.parse(event.nativeEvent.data);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.warn('Failed to parse WebView message:', error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
55
62
|
console.log(parsedEvent.type);
|
|
56
63
|
if (!INTERNAL_EVENTS.includes(parsedEvent?.type) && onWebViewMessage) {
|
|
57
64
|
return onWebViewMessage(parsedEvent);
|
|
@@ -89,10 +96,16 @@ const Reader = ({
|
|
|
89
96
|
setProgress(props.progress);
|
|
90
97
|
return onLocationsReady(props.epubKey, parsedEvent.locations);
|
|
91
98
|
case 'onReady':
|
|
99
|
+
setIsReaderReady(true);
|
|
100
|
+
setIsLoading(false);
|
|
92
101
|
if (initialLocation) {
|
|
93
102
|
goToLocation(initialLocation);
|
|
94
103
|
}
|
|
95
104
|
break;
|
|
105
|
+
case 'onDisplayError':
|
|
106
|
+
setIsLoading(false);
|
|
107
|
+
console.error('Reader display error:', parsedEvent.reason);
|
|
108
|
+
break;
|
|
96
109
|
case 'onBeginning':
|
|
97
110
|
setAtStart(true);
|
|
98
111
|
return onBeginning();
|
|
@@ -107,14 +120,17 @@ const Reader = ({
|
|
|
107
120
|
onTap?.();
|
|
108
121
|
};
|
|
109
122
|
const handleOnSwipeLeft = () => {
|
|
123
|
+
if (!isReaderReady) return;
|
|
110
124
|
onSwipeLeft?.();
|
|
111
125
|
goNext();
|
|
112
126
|
};
|
|
113
127
|
const handleOnSwipeRight = () => {
|
|
128
|
+
if (!isReaderReady) return;
|
|
114
129
|
onSwipeRight?.();
|
|
115
130
|
goPrevious();
|
|
116
131
|
};
|
|
117
132
|
const handleOnPinch = e => {
|
|
133
|
+
if (!isReaderReady) return;
|
|
118
134
|
const fontSizeValue = parseInt(fontSize.replace('pt', ''), 10);
|
|
119
135
|
const scaleValue = e.scale > 1 ? e.scale * 0.5 : e.scale;
|
|
120
136
|
const newFontSize = fontSizeValue * scaleValue;
|
|
@@ -135,6 +151,8 @@ const Reader = ({
|
|
|
135
151
|
const prepareReader = async () => {
|
|
136
152
|
try {
|
|
137
153
|
setIsLoading(true);
|
|
154
|
+
setIsReaderReady(false);
|
|
155
|
+
setTemplateUri('');
|
|
138
156
|
const [, jszip, epubjs] = await loadScripts();
|
|
139
157
|
if (!jszip || !epubjs) throw new Error('Failed to load scripts');
|
|
140
158
|
const localEpubUri = await downloadEpub(src, epubFileName);
|
|
@@ -152,8 +170,9 @@ const Reader = ({
|
|
|
152
170
|
}
|
|
153
171
|
} catch (error) {
|
|
154
172
|
console.error('Reader Error:', error);
|
|
155
|
-
|
|
156
|
-
|
|
173
|
+
if (isMounted) {
|
|
174
|
+
setIsLoading(false);
|
|
175
|
+
}
|
|
157
176
|
}
|
|
158
177
|
};
|
|
159
178
|
prepareReader();
|
|
@@ -161,7 +180,7 @@ const Reader = ({
|
|
|
161
180
|
isMounted = false;
|
|
162
181
|
};
|
|
163
182
|
}, [src, htmlTemplateName, epubFileName, injectWebViewVariables, setIsLoading]);
|
|
164
|
-
if (isLoading) {
|
|
183
|
+
if (isLoading || !templateUri) {
|
|
165
184
|
return LoaderComponent ? /*#__PURE__*/_jsx(LoaderComponent, {}) : /*#__PURE__*/_jsxs(View, {
|
|
166
185
|
style: styles.loaderContainer,
|
|
167
186
|
children: [/*#__PURE__*/_jsx(ActivityIndicator, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["View","Text","ActivityIndicator","StyleSheet","SourceType","useCallback","useContext","useEffect","useMemo","useRef","useState","loadScripts","saveTemplateToFile","downloadEpub","Paths","useInjectWebViewVariables","WebView","GestureHandler","defaultTheme","initialTheme","ReaderContext","INTERNAL_EVENTS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Reader","src","onTap","onSwipeLeft","onSwipeRight","initialLocation","onLocationsReady","onLocationChange","onFinish","onBeginning","onPinch","LoaderComponent","onWebViewMessage","templateUri","setTemplateUri","registerBook","goNext","goPrevious","setMeta","setLocations","setTotalLocations","setCurrentLocation","setProgress","goToLocation","setAtEnd","setAtStart","fontSize","changeFontSize","setIsLoading","isLoading","injectWebViewVariables","bookRef","onMessage","event","parsedEvent","JSON","parse","nativeEvent","data","console","log","type","includes","totalLocations","currentLocation","progress","currentSection","atStart","atEnd","metadata","props","locations","epubKey","
|
|
1
|
+
{"version":3,"names":["View","Text","ActivityIndicator","StyleSheet","SourceType","useCallback","useContext","useEffect","useMemo","useRef","useState","loadScripts","saveTemplateToFile","downloadEpub","Paths","useInjectWebViewVariables","WebView","GestureHandler","defaultTheme","initialTheme","ReaderContext","INTERNAL_EVENTS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Reader","src","onTap","onSwipeLeft","onSwipeRight","initialLocation","onLocationsReady","onLocationChange","onFinish","onBeginning","onPinch","LoaderComponent","onWebViewMessage","templateUri","setTemplateUri","isReaderReady","setIsReaderReady","registerBook","goNext","goPrevious","setMeta","setLocations","setTotalLocations","setCurrentLocation","setProgress","goToLocation","setAtEnd","setAtStart","fontSize","changeFontSize","setIsLoading","isLoading","injectWebViewVariables","bookRef","onMessage","event","parsedEvent","JSON","parse","nativeEvent","data","error","console","warn","log","type","includes","totalLocations","currentLocation","progress","currentSection","atStart","atEnd","metadata","props","locations","epubKey","reason","handleOnTap","handleOnSwipeLeft","handleOnSwipeRight","handleOnPinch","e","fontSizeValue","parseInt","replace","scaleValue","scale","newFontSize","clampedFontSize","Math","min","max","htmlTemplateName","split","pop","epubFileName","handleBookRef","instance","current","isMounted","prepareReader","jszip","epubjs","Error","localEpubUri","generatedTemplate","EPUB","allowScriptedContent","book","theme","uri","style","styles","loaderContainer","children","size","pointerEvents","ref","source","showsVerticalScrollIndicator","javaScriptEnabled","originWhitelist","scrollEnabled","mixedContentMode","allowingReadAccessToURL","document","allowUniversalAccessFromFileURLs","allowFileAccessFromFileURLs","allowFileAccess","javaScriptCanOpenWindowsAutomatically","container","create","flex","justifyContent","alignItems"],"sourceRoot":"../../../src","sources":["components/Reader.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,UAAU,QAAQ,cAAc;AACxE,SAASC,UAAU,QAA0B,mBAAU;AACvD,SACEC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,WAAW,QAAQ,2BAAwB;AACpD,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,yBAAyB,QAAQ,uCAAoC;AAC9E,OAAOC,OAAO,MAAM,sBAAsB;AAC1C,OAAOC,cAAc,MAAM,2BAAkB;AAC7C,SAASC,YAAY,IAAIC,YAAY,QAAQ,uBAAoB;AACjE,SAASC,aAAa,QAAQ,6BAA0B;AAKxD,OAAOC,eAAe,MAAM,gCAA6B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAE1D,MAAMC,MAAM,GAAGA,CAAC;EACdC,GAAG;EACHC,KAAK;EACLC,WAAW;EACXC,YAAY;EACZC,eAAe;EACfC,gBAAgB,GAAGA,CAAA,KAAM,CAAC,CAAC;EAC3BC,gBAAgB,GAAGA,CAAA,KAAM,CAAC,CAAC;EAC3BC,QAAQ,GAAGA,CAAA,KAAM,CAAC,CAAC;EACnBC,WAAW,GAAGA,CAAA,KAAM,CAAC,CAAC;EACtBC,OAAO,GAAGA,CAAA,KAAM,CAAC,CAAC;EAClBC,eAAe;EACfC;AACW,CAAC,KAAK;EACjB,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGhC,QAAQ,CAAS,EAAE,CAAC;EAC1D,MAAM,CAACiC,aAAa,EAAEC,gBAAgB,CAAC,GAAGlC,QAAQ,CAAC,KAAK,CAAC;EAEzD,MAAM;IACJmC,YAAY;IACZC,MAAM;IACNC,UAAU;IACVC,OAAO;IACPC,YAAY;IACZC,iBAAiB;IACjBC,kBAAkB;IAClBC,WAAW;IACXC,YAAY;IACZC,QAAQ;IACRC,UAAU;IACVC,QAAQ;IACRC,cAAc;IACdC,YAAY;IACZC;EACF,CAAC,GAAGrD,UAAU,CAACc,aAAa,CAAC;EAE7B,MAAM;IAAEwC;EAAuB,CAAC,GAAG7C,yBAAyB,CAAC,CAAC;EAC9D,MAAM8C,OAAO,GAAGpD,MAAM,CAAiB,IAAI,CAAC;EAE5C,MAAMqD,SAAS,GAAIC,KAAU,IAAK;IAChC,IAAIC,WAAW;IACf,IAAI;MACFA,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAACI,WAAW,CAACC,IAAI,CAAC;IAClD,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdC,OAAO,CAACC,IAAI,CAAC,kCAAkC,EAAEF,KAAK,CAAC;MACvD;IACF;IAEAC,OAAO,CAACE,GAAG,CAACR,WAAW,CAACS,IAAI,CAAC;IAE7B,IAAI,CAACpD,eAAe,CAACqD,QAAQ,CAACV,WAAW,EAAES,IAAI,CAAC,IAAIjC,gBAAgB,EAAE;MACpE,OAAOA,gBAAgB,CAACwB,WAAW,CAAC;IACtC;IAEA,QAAQA,WAAW,CAACS,IAAI;MACtB,KAAK,kBAAkB;QACrB,MAAM;UAAEE,cAAc;UAAEC,eAAe;UAAEC,QAAQ;UAAEC;QAAe,CAAC,GACjEd,WAAW;QAEb,IAAIY,eAAe,CAACG,OAAO,EAAExB,UAAU,CAAC,IAAI,CAAC,CAAC,KACzC,IAAIqB,eAAe,CAACI,KAAK,EAAE1B,QAAQ,CAAC,IAAI,CAAC,CAAC,KAC1C;UACHC,UAAU,CAAC,KAAK,CAAC;UACjBD,QAAQ,CAAC,KAAK,CAAC;QACjB;QAEAnB,gBAAgB,GAAG;UACjBwC,cAAc;UACdC,eAAe;UACfC,QAAQ;UACRC;QACF,CAAC,CAAC;QACF;MACF,KAAK,MAAM;QACT,MAAM;UAAEG;QAAS,CAAC,GAAGjB,WAAW;QAChChB,OAAO,CAACiC,QAAQ,CAAC;QACjB;MACF,KAAK,kBAAkB;QACrB,MAAMC,KAAK,GAAGlB,WAAW;QACzBf,YAAY,CAACe,WAAW,CAACmB,SAAS,CAAC;QACnCjC,iBAAiB,CAACgC,KAAK,CAACP,cAAc,CAAC;QACvCxB,kBAAkB,CAAC+B,KAAK,CAACN,eAAe,CAAC;QACzCxB,WAAW,CAAC8B,KAAK,CAACL,QAAQ,CAAC;QAE3B,OAAO3C,gBAAgB,CAACgD,KAAK,CAACE,OAAO,EAAEpB,WAAW,CAACmB,SAAS,CAAC;MAC/D,KAAK,SAAS;QACZvC,gBAAgB,CAAC,IAAI,CAAC;QACtBc,YAAY,CAAC,KAAK,CAAC;QACnB,IAAIzB,eAAe,EAAE;UACnBoB,YAAY,CAACpB,eAAe,CAAC;QAC/B;QACA;MACF,KAAK,gBAAgB;QACnByB,YAAY,CAAC,KAAK,CAAC;QACnBY,OAAO,CAACD,KAAK,CAAC,uBAAuB,EAAEL,WAAW,CAACqB,MAAM,CAAC;QAC1D;MAEF,KAAK,aAAa;QAChB9B,UAAU,CAAC,IAAI,CAAC;QAEhB,OAAOlB,WAAW,CAAC,CAAC;MAEtB,KAAK,UAAU;QACbiB,QAAQ,CAAC,IAAI,CAAC;QAEd,OAAOlB,QAAQ,CAAC,CAAC;MAEnB;QACEkC,OAAO,CAACC,IAAI,CAAC,uBAAuB,EAAEP,WAAW,CAACS,IAAI,CAAC;IAC3D;EACF,CAAC;EAED,MAAMa,WAAW,GAAGA,CAAA,KAAM;IACxBxD,KAAK,GAAG,CAAC;EACX,CAAC;EAED,MAAMyD,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,IAAI,CAAC5C,aAAa,EAAE;IACpBZ,WAAW,GAAG,CAAC;IACfe,MAAM,CAAC,CAAC;EACV,CAAC;EAED,MAAM0C,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAI,CAAC7C,aAAa,EAAE;IACpBX,YAAY,GAAG,CAAC;IAChBe,UAAU,CAAC,CAAC;EACd,CAAC;EAED,MAAM0C,aAAa,GACjBC,CAAsD,IACnD;IACH,IAAI,CAAC/C,aAAa,EAAE;IAEpB,MAAMgD,aAAa,GAAGC,QAAQ,CAACpC,QAAQ,CAACqC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IAE9D,MAAMC,UAAU,GAAGJ,CAAC,CAACK,KAAK,GAAG,CAAC,GAAGL,CAAC,CAACK,KAAK,GAAG,GAAG,GAAGL,CAAC,CAACK,KAAK;IAExD,MAAMC,WAAW,GAAGL,aAAa,GAAGG,UAAU;IAE9C,MAAMG,eAAe,GAAGC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACJ,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9DvC,cAAc,CAAC,GAAGwC,eAAe,IAAI,CAAC;IACtC3D,OAAO,GAAGoD,CAAC,CAAC;EACd,CAAC;EAED,MAAMW,gBAAgB,GAAG7F,OAAO,CAC9B,MAAMqB,GAAG,CAACyE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC,EAAEV,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,YAAY,EACrE,CAAChE,GAAG,CACN,CAAC;EAED,MAAM2E,YAAY,GAAGhG,OAAO,CAC1B,MAAMqB,GAAG,CAACyE,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC,IAAI,WAAW,EACzC,CAAC1E,GAAG,CACN,CAAC;EAED,MAAM4E,aAAa,GAAGpG,WAAW,CAC9BqG,QAAwB,IAAK;IAC5B7C,OAAO,CAAC8C,OAAO,GAAGD,QAAQ;IAC1B,IAAIA,QAAQ,EAAE;MACZ7D,YAAY,CAAC6D,QAAQ,CAAC;IACxB;EACF,CAAC,EACD,CAAC7D,YAAY,CACf,CAAC;EAEDtC,SAAS,CAAC,MAAM;IACd,IAAIqG,SAAS,GAAG,IAAI;IAEpB,MAAMC,aAAa,GAAG,MAAAA,CAAA,KAAY;MAChC,IAAI;QACFnD,YAAY,CAAC,IAAI,CAAC;QAClBd,gBAAgB,CAAC,KAAK,CAAC;QACvBF,cAAc,CAAC,EAAE,CAAC;QAElB,MAAM,GAAGoE,KAAK,EAAEC,MAAM,CAAC,GAAG,MAAMpG,WAAW,CAAC,CAAC;QAE7C,IAAI,CAACmG,KAAK,IAAI,CAACC,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;QAEhE,MAAMC,YAAY,GAAG,MAAMpG,YAAY,CAACgB,GAAG,EAAE2E,YAAY,CAAC;QAE1D,MAAMU,iBAAiB,GAAGtD,sBAAsB,CAAC;UAC/CkD,KAAK;UACLC,MAAM;UACNtC,IAAI,EAAErE,UAAU,CAAC+G,IAAI;UACrBC,oBAAoB,EAAE,IAAI;UAC1BC,IAAI,EAAEJ,YAAY;UAClBK,KAAK,EAAEnG;QACT,CAAC,CAAC;QAEF,MAAMoG,GAAG,GAAG3G,kBAAkB,CAACsG,iBAAiB,EAAEb,gBAAgB,CAAC;QAEnE,IAAIO,SAAS,EAAE;UACblE,cAAc,CAAC6E,GAAG,CAAC;QACrB;MACF,CAAC,CAAC,OAAOlD,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,eAAe,EAAEA,KAAK,CAAC;QACrC,IAAIuC,SAAS,EAAE;UACblD,YAAY,CAAC,KAAK,CAAC;QACrB;MACF;IACF,CAAC;IAEDmD,aAAa,CAAC,CAAC;IACf,OAAO,MAAM;MACXD,SAAS,GAAG,KAAK;IACnB,CAAC;EACH,CAAC,EAAE,CACD/E,GAAG,EACHwE,gBAAgB,EAChBG,YAAY,EACZ5C,sBAAsB,EACtBF,YAAY,CACb,CAAC;EAEF,IAAIC,SAAS,IAAI,CAAClB,WAAW,EAAE;IAC7B,OAAOF,eAAe,gBACpBhB,IAAA,CAACgB,eAAe,IAAE,CAAC,gBAEnBd,KAAA,CAACzB,IAAI;MAACwH,KAAK,EAAEC,MAAM,CAACC,eAAgB;MAAAC,QAAA,gBAClCpG,IAAA,CAACrB,iBAAiB;QAAC0H,IAAI,EAAC;MAAO,CAAE,CAAC,eAClCrG,IAAA,CAACtB,IAAI;QAAA0H,QAAA,EAAC;MAAuB,CAAM,CAAC;IAAA,CAChC,CACP;EACH;EAEA,oBACEpG,IAAA,CAAAI,SAAA;IAAAgG,QAAA,eACEpG,IAAA,CAACN,cAAc;MACbc,WAAW,EAAEwD,iBAAkB;MAC/BvD,YAAY,EAAEwD,kBAAmB;MACjC1D,KAAK,EAAEwD,WAAY;MACnBhD,OAAO,EAAEmD,aAAc;MAAAkC,QAAA,eAEvBpG,IAAA,CAACP,OAAO;QACN6G,aAAa,EAAC,MAAM;QACpBC,GAAG,EAAErB,aAAc;QACnBsB,MAAM,EAAE;UAAER,GAAG,EAAE9E;QAAY,CAAE;QAC7BuF,4BAA4B,EAAE,KAAM;QACpCC,iBAAiB;QACjBC,eAAe,EAAE,CAAC,GAAG,CAAE;QACvBC,aAAa,EAAE,KAAM;QACrBC,gBAAgB,EAAC,eAAe;QAChCC,uBAAuB,EAAEvH,KAAK,CAACwH,QAAQ,CAACf,GAAI;QAC5CgB,gCAAgC;QAChCC,2BAA2B;QAC3BC,eAAe;QACfC,qCAAqC;QACrC5E,SAAS,EAAEA,SAAU;QACrB0D,KAAK,EAAEC,MAAM,CAACkB;MAAU,CACzB;IAAC,CACY;EAAC,CACjB,CAAC;AAEP,CAAC;AAED,MAAMlB,MAAM,GAAGtH,UAAU,CAACyI,MAAM,CAAC;EAC/BD,SAAS,EAAE;IACTE,IAAI,EAAE;EACR,CAAC;EACDnB,eAAe,EAAE;IACfmB,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd;AACF,CAAC,CAAC;AAEF,eAAenH,MAAM","ignoreList":[]}
|
|
@@ -112,8 +112,11 @@ function ReaderProvider({
|
|
|
112
112
|
const getMeta = useCallback(() => state.meta, [state.meta]);
|
|
113
113
|
const changeFontFamily = useCallback(fontFamily => {
|
|
114
114
|
book.current?.injectJavaScript(`
|
|
115
|
-
rendition
|
|
116
|
-
|
|
115
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
116
|
+
rendition.themes.font('${fontFamily}');
|
|
117
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
118
|
+
}
|
|
119
|
+
true;
|
|
117
120
|
`);
|
|
118
121
|
dispatch({
|
|
119
122
|
type: Actions.CHANGE_FONT_FAMILY,
|
|
@@ -123,24 +126,14 @@ function ReaderProvider({
|
|
|
123
126
|
const injectJavascript = useCallback(script => {
|
|
124
127
|
book.current?.injectJavaScript(script);
|
|
125
128
|
}, []);
|
|
126
|
-
const changeFlow = useCallback(flow => {
|
|
127
|
-
webViewInjectFunctions.injectJavaScript(book, `rendition.flow(${JSON.stringify(flow)}); true`);
|
|
128
|
-
dispatch({
|
|
129
|
-
type: Actions.SET_FLOW,
|
|
130
|
-
payload: flow
|
|
131
|
-
});
|
|
132
|
-
}, []);
|
|
133
|
-
const setFlow = useCallback(flow => {
|
|
134
|
-
dispatch({
|
|
135
|
-
type: Actions.SET_FLOW,
|
|
136
|
-
payload: flow
|
|
137
|
-
});
|
|
138
|
-
}, []);
|
|
139
129
|
const changeTheme = useCallback(theme => {
|
|
140
130
|
book.current?.injectJavaScript(`
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
131
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
132
|
+
rendition.themes.register({ theme: ${JSON.stringify(theme)} });
|
|
133
|
+
rendition.themes.select('theme');
|
|
134
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
135
|
+
}
|
|
136
|
+
true;
|
|
144
137
|
`);
|
|
145
138
|
dispatch({
|
|
146
139
|
type: Actions.CHANGE_THEME,
|
|
@@ -149,21 +142,33 @@ function ReaderProvider({
|
|
|
149
142
|
}, []);
|
|
150
143
|
const goNext = useCallback(() => {
|
|
151
144
|
webViewInjectFunctions.injectJavaScript(book, `
|
|
152
|
-
rendition
|
|
145
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
146
|
+
rendition.next();
|
|
147
|
+
}
|
|
153
148
|
`);
|
|
154
149
|
}, []);
|
|
155
150
|
const goPrevious = useCallback(() => {
|
|
156
151
|
webViewInjectFunctions.injectJavaScript(book, `
|
|
157
|
-
rendition
|
|
152
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
153
|
+
rendition.prev();
|
|
154
|
+
}
|
|
158
155
|
`);
|
|
159
156
|
}, []);
|
|
160
157
|
const goToLocation = useCallback(targetCfi => {
|
|
161
|
-
book.current?.injectJavaScript(`
|
|
158
|
+
book.current?.injectJavaScript(`
|
|
159
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
160
|
+
rendition.display('${targetCfi}');
|
|
161
|
+
}
|
|
162
|
+
true;
|
|
163
|
+
`);
|
|
162
164
|
}, []);
|
|
163
165
|
const changeFontSize = useCallback(size => {
|
|
164
166
|
book.current?.injectJavaScript(`
|
|
165
|
-
rendition
|
|
166
|
-
|
|
167
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
168
|
+
rendition.themes.fontSize('${size}');
|
|
169
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
170
|
+
}
|
|
171
|
+
true;
|
|
167
172
|
`);
|
|
168
173
|
dispatch({
|
|
169
174
|
type: Actions.CHANGE_FONT_SIZE,
|
|
@@ -188,8 +193,6 @@ function ReaderProvider({
|
|
|
188
193
|
setLocations,
|
|
189
194
|
changeFontFamily,
|
|
190
195
|
injectJavascript,
|
|
191
|
-
changeFlow,
|
|
192
|
-
setFlow,
|
|
193
196
|
changeFontSize,
|
|
194
197
|
theme: state.theme,
|
|
195
198
|
flow: state.flow,
|
|
@@ -203,7 +206,7 @@ function ReaderProvider({
|
|
|
203
206
|
locations: state.locations,
|
|
204
207
|
isLoading: loading,
|
|
205
208
|
setIsLoading: setLoading
|
|
206
|
-
}), [registerBook, goNext, goPrevious, goToLocation, setAtStart, setAtEnd, setTotalLocations, setCurrentLocation, changeTheme, getLocations, getCurrentLocation, getMeta, setMeta, setProgress, setLocations, changeFontFamily, injectJavascript,
|
|
209
|
+
}), [registerBook, goNext, goPrevious, goToLocation, setAtStart, setAtEnd, setTotalLocations, setCurrentLocation, changeTheme, getLocations, getCurrentLocation, getMeta, setMeta, setProgress, setLocations, changeFontFamily, injectJavascript, changeFontSize, state.theme, state.flow, state.fontSize, state.atStart, state.atEnd, state.totalLocations, state.currentLocation, state.meta, state.progress, state.locations, loading, setLoading]);
|
|
207
210
|
return /*#__PURE__*/_jsx(ReaderContext.Provider, {
|
|
208
211
|
value: contextValue,
|
|
209
212
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useCallback","useMemo","useReducer","useRef","useState","defaultTheme","webViewInjectFunctions","useReaderState","Actions","jsx","_jsx","ReaderContext","registerBook","setAtStart","setAtEnd","setTotalLocations","setCurrentLocation","setMeta","setProgress","setLocations","goToLocation","goPrevious","goNext","getLocations","getCurrentLocation","getMeta","cover","author","title","description","language","publisher","rights","atStart","atEnd","totalLocations","currentLocation","meta","progress","locations","theme","injectJavascript","changeFontSize","changeTheme","fontSize","isLoading","setIsLoading","ReaderProvider","children","bookReducer","initialState","state","dispatch","loading","setLoading","book","bookRef","current","type","SET_AT_START","payload","SET_AT_END","SET_TOTAL_LOCATIONS","location","SET_CURRENT_LOCATION","SET_META","SET_PROGRESS","SET_LOCATIONS","changeFontFamily","fontFamily","injectJavaScript","CHANGE_FONT_FAMILY","script","
|
|
1
|
+
{"version":3,"names":["createContext","useCallback","useMemo","useReducer","useRef","useState","defaultTheme","webViewInjectFunctions","useReaderState","Actions","jsx","_jsx","ReaderContext","registerBook","setAtStart","setAtEnd","setTotalLocations","setCurrentLocation","setMeta","setProgress","setLocations","goToLocation","goPrevious","goNext","getLocations","getCurrentLocation","getMeta","cover","author","title","description","language","publisher","rights","atStart","atEnd","totalLocations","currentLocation","meta","progress","locations","theme","injectJavascript","changeFontSize","changeTheme","fontSize","isLoading","setIsLoading","ReaderProvider","children","bookReducer","initialState","state","dispatch","loading","setLoading","book","bookRef","current","type","SET_AT_START","payload","SET_AT_END","SET_TOTAL_LOCATIONS","location","SET_CURRENT_LOCATION","SET_META","SET_PROGRESS","SET_LOCATIONS","changeFontFamily","fontFamily","injectJavaScript","CHANGE_FONT_FAMILY","script","JSON","stringify","CHANGE_THEME","targetCfi","size","CHANGE_FONT_SIZE","contextValue","flow","Provider","value"],"sourceRoot":"../../../src","sources":["context/ReaderContext.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reader.d.ts","sourceRoot":"","sources":["../../../../src/components/Reader.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAwBxD,QAAA,MAAM,MAAM,GAAI,oKAab,WAAW,
|
|
1
|
+
{"version":3,"file":"Reader.d.ts","sourceRoot":"","sources":["../../../../src/components/Reader.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAwBxD,QAAA,MAAM,MAAM,GAAI,oKAab,WAAW,4CA8Ob,CAAC;AAaF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReaderContext.d.ts","sourceRoot":"","sources":["../../../../src/context/ReaderContext.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAQlD,QAAA,MAAM,aAAa,6CAiDjB,CAAC;AAEH,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"ReaderContext.d.ts","sourceRoot":"","sources":["../../../../src/context/ReaderContext.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAQlD,QAAA,MAAM,aAAa,6CAiDjB,CAAC;AAEH,iBAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAqMlE;AAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -38,6 +38,7 @@ const Reader = ({
|
|
|
38
38
|
onWebViewMessage,
|
|
39
39
|
}: ReaderProps) => {
|
|
40
40
|
const [templateUri, setTemplateUri] = useState<string>('');
|
|
41
|
+
const [isReaderReady, setIsReaderReady] = useState(false);
|
|
41
42
|
|
|
42
43
|
const {
|
|
43
44
|
registerBook,
|
|
@@ -61,7 +62,14 @@ const Reader = ({
|
|
|
61
62
|
const bookRef = useRef<WebView | null>(null);
|
|
62
63
|
|
|
63
64
|
const onMessage = (event: any) => {
|
|
64
|
-
|
|
65
|
+
let parsedEvent;
|
|
66
|
+
try {
|
|
67
|
+
parsedEvent = JSON.parse(event.nativeEvent.data);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.warn('Failed to parse WebView message:', error);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
65
73
|
console.log(parsedEvent.type);
|
|
66
74
|
|
|
67
75
|
if (!INTERNAL_EVENTS.includes(parsedEvent?.type) && onWebViewMessage) {
|
|
@@ -100,10 +108,16 @@ const Reader = ({
|
|
|
100
108
|
|
|
101
109
|
return onLocationsReady(props.epubKey, parsedEvent.locations);
|
|
102
110
|
case 'onReady':
|
|
111
|
+
setIsReaderReady(true);
|
|
112
|
+
setIsLoading(false);
|
|
103
113
|
if (initialLocation) {
|
|
104
114
|
goToLocation(initialLocation);
|
|
105
115
|
}
|
|
106
116
|
break;
|
|
117
|
+
case 'onDisplayError':
|
|
118
|
+
setIsLoading(false);
|
|
119
|
+
console.error('Reader display error:', parsedEvent.reason);
|
|
120
|
+
break;
|
|
107
121
|
|
|
108
122
|
case 'onBeginning':
|
|
109
123
|
setAtStart(true);
|
|
@@ -125,11 +139,13 @@ const Reader = ({
|
|
|
125
139
|
};
|
|
126
140
|
|
|
127
141
|
const handleOnSwipeLeft = () => {
|
|
142
|
+
if (!isReaderReady) return;
|
|
128
143
|
onSwipeLeft?.();
|
|
129
144
|
goNext();
|
|
130
145
|
};
|
|
131
146
|
|
|
132
147
|
const handleOnSwipeRight = () => {
|
|
148
|
+
if (!isReaderReady) return;
|
|
133
149
|
onSwipeRight?.();
|
|
134
150
|
goPrevious();
|
|
135
151
|
};
|
|
@@ -137,6 +153,8 @@ const Reader = ({
|
|
|
137
153
|
const handleOnPinch = (
|
|
138
154
|
e: GestureUpdateEvent<PinchGestureHandlerEventPayload>
|
|
139
155
|
) => {
|
|
156
|
+
if (!isReaderReady) return;
|
|
157
|
+
|
|
140
158
|
const fontSizeValue = parseInt(fontSize.replace('pt', ''), 10);
|
|
141
159
|
|
|
142
160
|
const scaleValue = e.scale > 1 ? e.scale * 0.5 : e.scale;
|
|
@@ -174,6 +192,8 @@ const Reader = ({
|
|
|
174
192
|
const prepareReader = async () => {
|
|
175
193
|
try {
|
|
176
194
|
setIsLoading(true);
|
|
195
|
+
setIsReaderReady(false);
|
|
196
|
+
setTemplateUri('');
|
|
177
197
|
|
|
178
198
|
const [, jszip, epubjs] = await loadScripts();
|
|
179
199
|
|
|
@@ -197,8 +217,9 @@ const Reader = ({
|
|
|
197
217
|
}
|
|
198
218
|
} catch (error) {
|
|
199
219
|
console.error('Reader Error:', error);
|
|
200
|
-
|
|
201
|
-
|
|
220
|
+
if (isMounted) {
|
|
221
|
+
setIsLoading(false);
|
|
222
|
+
}
|
|
202
223
|
}
|
|
203
224
|
};
|
|
204
225
|
|
|
@@ -214,7 +235,7 @@ const Reader = ({
|
|
|
214
235
|
setIsLoading,
|
|
215
236
|
]);
|
|
216
237
|
|
|
217
|
-
if (isLoading) {
|
|
238
|
+
if (isLoading || !templateUri) {
|
|
218
239
|
return LoaderComponent ? (
|
|
219
240
|
<LoaderComponent />
|
|
220
241
|
) : (
|
|
@@ -10,7 +10,7 @@ import type { ReaderContextProps } from './types';
|
|
|
10
10
|
import { defaultTheme } from '../constants/theme';
|
|
11
11
|
import type WebView from 'react-native-webview';
|
|
12
12
|
import * as webViewInjectFunctions from '../helpers/webViewInjectFunctions';
|
|
13
|
-
import type { ePubCfi,
|
|
13
|
+
import type { ePubCfi, Location, Theme } from '../types';
|
|
14
14
|
import { useReaderState } from '../hooks/useReaderState';
|
|
15
15
|
import { Actions } from '../types/state.types';
|
|
16
16
|
|
|
@@ -123,8 +123,11 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
123
123
|
const getMeta = useCallback(() => state.meta, [state.meta]);
|
|
124
124
|
const changeFontFamily = useCallback((fontFamily: string) => {
|
|
125
125
|
book.current?.injectJavaScript(`
|
|
126
|
-
rendition
|
|
127
|
-
|
|
126
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
127
|
+
rendition.themes.font('${fontFamily}');
|
|
128
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
129
|
+
}
|
|
130
|
+
true;
|
|
128
131
|
`);
|
|
129
132
|
dispatch({ type: Actions.CHANGE_FONT_FAMILY, payload: fontFamily });
|
|
130
133
|
}, []);
|
|
@@ -133,23 +136,14 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
133
136
|
book.current?.injectJavaScript(script);
|
|
134
137
|
}, []);
|
|
135
138
|
|
|
136
|
-
const changeFlow = useCallback((flow: Flow) => {
|
|
137
|
-
webViewInjectFunctions.injectJavaScript(
|
|
138
|
-
book,
|
|
139
|
-
`rendition.flow(${JSON.stringify(flow)}); true`
|
|
140
|
-
);
|
|
141
|
-
dispatch({ type: Actions.SET_FLOW, payload: flow });
|
|
142
|
-
}, []);
|
|
143
|
-
|
|
144
|
-
const setFlow = useCallback((flow: Flow) => {
|
|
145
|
-
dispatch({ type: Actions.SET_FLOW, payload: flow });
|
|
146
|
-
}, []);
|
|
147
|
-
|
|
148
139
|
const changeTheme = useCallback((theme: Theme) => {
|
|
149
140
|
book.current?.injectJavaScript(`
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
141
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
142
|
+
rendition.themes.register({ theme: ${JSON.stringify(theme)} });
|
|
143
|
+
rendition.themes.select('theme');
|
|
144
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
145
|
+
}
|
|
146
|
+
true;
|
|
153
147
|
`);
|
|
154
148
|
dispatch({ type: Actions.CHANGE_THEME, payload: theme });
|
|
155
149
|
}, []);
|
|
@@ -158,7 +152,9 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
158
152
|
webViewInjectFunctions.injectJavaScript(
|
|
159
153
|
book,
|
|
160
154
|
`
|
|
161
|
-
rendition
|
|
155
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
156
|
+
rendition.next();
|
|
157
|
+
}
|
|
162
158
|
`
|
|
163
159
|
);
|
|
164
160
|
}, []);
|
|
@@ -167,19 +163,29 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
167
163
|
webViewInjectFunctions.injectJavaScript(
|
|
168
164
|
book,
|
|
169
165
|
`
|
|
170
|
-
rendition
|
|
166
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
167
|
+
rendition.prev();
|
|
168
|
+
}
|
|
171
169
|
`
|
|
172
170
|
);
|
|
173
171
|
}, []);
|
|
174
172
|
|
|
175
173
|
const goToLocation = useCallback((targetCfi: ePubCfi) => {
|
|
176
|
-
book.current?.injectJavaScript(`
|
|
174
|
+
book.current?.injectJavaScript(`
|
|
175
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
176
|
+
rendition.display('${targetCfi}');
|
|
177
|
+
}
|
|
178
|
+
true;
|
|
179
|
+
`);
|
|
177
180
|
}, []);
|
|
178
181
|
|
|
179
182
|
const changeFontSize = useCallback((size: string) => {
|
|
180
183
|
book.current?.injectJavaScript(`
|
|
181
|
-
rendition
|
|
182
|
-
|
|
184
|
+
if (typeof rendition !== 'undefined' && rendition) {
|
|
185
|
+
rendition.themes.fontSize('${size}');
|
|
186
|
+
rendition.views().forEach(view => view.pane ? view.pane.render() : null);
|
|
187
|
+
}
|
|
188
|
+
true;
|
|
183
189
|
`);
|
|
184
190
|
dispatch({ type: Actions.CHANGE_FONT_SIZE, payload: size });
|
|
185
191
|
}, []);
|
|
@@ -203,8 +209,6 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
203
209
|
setLocations,
|
|
204
210
|
changeFontFamily,
|
|
205
211
|
injectJavascript,
|
|
206
|
-
changeFlow,
|
|
207
|
-
setFlow,
|
|
208
212
|
changeFontSize,
|
|
209
213
|
theme: state.theme,
|
|
210
214
|
flow: state.flow,
|
|
@@ -237,8 +241,6 @@ function ReaderProvider({ children }: { children: React.ReactNode }) {
|
|
|
237
241
|
setLocations,
|
|
238
242
|
changeFontFamily,
|
|
239
243
|
injectJavascript,
|
|
240
|
-
changeFlow,
|
|
241
|
-
setFlow,
|
|
242
244
|
changeFontSize,
|
|
243
245
|
state.theme,
|
|
244
246
|
state.flow,
|