2022-01-22 12:57:05 +05:00
|
|
|
import React, { useRef } from 'react';
|
2022-03-26 20:46:21 +05:00
|
|
|
import { Platform, View } from 'react-native';
|
2021-12-14 12:33:39 +05:00
|
|
|
import WebView from 'react-native-webview';
|
2022-03-26 20:46:21 +05:00
|
|
|
import { getNote, sourceUri } from '../../screens/editor/Functions';
|
|
|
|
|
import { editorController } from '../../screens/editor/tiptap/utils';
|
2022-02-28 23:25:18 +05:00
|
|
|
import { eSendEvent, ToastEvent } from '../../services/event-manager';
|
|
|
|
|
import Navigation from '../../services/navigation';
|
2022-03-26 20:46:21 +05:00
|
|
|
import { useEditorStore } from '../../stores/stores';
|
|
|
|
|
import { useThemeStore } from '../../stores/theme';
|
2022-01-22 12:57:05 +05:00
|
|
|
import { db } from '../../utils/database';
|
2022-02-28 13:48:59 +05:00
|
|
|
import { eCloseProgressDialog, eOnLoadNote } from '../../utils/events';
|
2022-01-22 12:57:05 +05:00
|
|
|
import { openLinkInBrowser } from '../../utils/functions';
|
2022-02-28 13:48:59 +05:00
|
|
|
import { normalize } from '../../utils/size';
|
|
|
|
|
import DialogHeader from '../dialog/dialog-header';
|
2022-03-26 20:46:21 +05:00
|
|
|
import { Button } from '../ui/button';
|
2022-02-28 13:48:59 +05:00
|
|
|
import Paragraph from '../ui/typography/paragraph';
|
2021-12-14 12:33:39 +05:00
|
|
|
|
2022-01-22 12:57:05 +05:00
|
|
|
export default function NotePreview({ session, content }) {
|
2022-02-28 23:25:18 +05:00
|
|
|
const colors = useThemeStore(state => state.colors);
|
2021-12-14 12:33:39 +05:00
|
|
|
const webviewRef = useRef();
|
|
|
|
|
|
|
|
|
|
const onLoad = async () => {
|
2022-01-22 12:57:05 +05:00
|
|
|
let preview = await db.content.insertPlaceholders(content, 'placeholder.svg');
|
2021-12-23 12:21:30 +05:00
|
|
|
|
2022-01-22 12:57:05 +05:00
|
|
|
let theme = { ...colors };
|
2021-12-14 12:33:39 +05:00
|
|
|
theme.factor = normalize(1);
|
2022-01-05 19:32:58 +05:00
|
|
|
|
|
|
|
|
webviewRef.current?.injectJavaScript(`
|
|
|
|
|
(function() {
|
|
|
|
|
let v = ${JSON.stringify(theme)}
|
|
|
|
|
if (pageTheme) {
|
|
|
|
|
pageTheme.colors = v;
|
|
|
|
|
}
|
|
|
|
|
setTheme()
|
|
|
|
|
})();
|
|
|
|
|
`);
|
|
|
|
|
|
|
|
|
|
postMessage('htmldiff', preview?.data);
|
2021-12-14 12:33:39 +05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function postMessage(type, value = null) {
|
|
|
|
|
let message = {
|
|
|
|
|
type: type,
|
|
|
|
|
value
|
|
|
|
|
};
|
|
|
|
|
webviewRef.current?.postMessage(JSON.stringify(message));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const _onShouldStartLoadWithRequest = request => {
|
2022-01-05 20:16:52 +05:00
|
|
|
if (request.url.includes('https')) {
|
|
|
|
|
if (Platform.OS === 'ios' && !request.isTopFrame) return;
|
2021-12-14 12:33:39 +05:00
|
|
|
openLinkInBrowser(request.url, colors)
|
|
|
|
|
.catch(e =>
|
|
|
|
|
ToastEvent.show({
|
|
|
|
|
title: 'Failed to open link',
|
|
|
|
|
message: e.message,
|
|
|
|
|
type: 'success',
|
|
|
|
|
context: 'local'
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
.then(r => {
|
|
|
|
|
console.log('closed');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
async function restore() {
|
|
|
|
|
await db.noteHistory.restore(session.id);
|
2021-12-23 12:21:30 +05:00
|
|
|
if (useEditorStore.getState()?.currentEditingNote === session?.noteId) {
|
2022-03-26 20:46:21 +05:00
|
|
|
if (editorController.current?.note) {
|
|
|
|
|
eSendEvent(eOnLoadNote, { ...editorController.current?.note, forced: true });
|
2021-12-23 12:21:30 +05:00
|
|
|
}
|
|
|
|
|
}
|
2021-12-14 12:33:39 +05:00
|
|
|
eSendEvent(eCloseProgressDialog, 'note_history');
|
|
|
|
|
eSendEvent(eCloseProgressDialog);
|
|
|
|
|
Navigation.setRoutesToUpdate([
|
|
|
|
|
Navigation.routeNames.NotesPage,
|
|
|
|
|
Navigation.routeNames.Favorites,
|
|
|
|
|
Navigation.routeNames.Notes
|
|
|
|
|
]);
|
2021-12-23 12:21:30 +05:00
|
|
|
|
2021-12-14 12:33:39 +05:00
|
|
|
ToastEvent.show({
|
|
|
|
|
heading: 'Note restored successfully',
|
|
|
|
|
type: 'success'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<View
|
|
|
|
|
style={{
|
2022-01-05 20:16:52 +05:00
|
|
|
height: session.locked ? null : 600,
|
2021-12-14 12:33:39 +05:00
|
|
|
width: '100%'
|
2022-01-22 12:57:05 +05:00
|
|
|
}}
|
|
|
|
|
>
|
2021-12-22 13:59:58 +05:00
|
|
|
<DialogHeader padding={12} title={session.session} />
|
2021-12-29 13:13:37 +05:00
|
|
|
{!session.locked ? (
|
|
|
|
|
<WebView
|
|
|
|
|
ref={webviewRef}
|
|
|
|
|
onShouldStartLoadWithRequest={_onShouldStartLoadWithRequest}
|
|
|
|
|
onLoad={onLoad}
|
|
|
|
|
style={{
|
|
|
|
|
width: '100%',
|
|
|
|
|
height: '100%',
|
|
|
|
|
backgroundColor: 'transparent'
|
|
|
|
|
}}
|
2022-01-05 19:32:58 +05:00
|
|
|
onError={e => {
|
|
|
|
|
console.log(e);
|
|
|
|
|
}}
|
2022-01-03 11:09:06 +05:00
|
|
|
nestedScrollEnabled
|
2021-12-29 13:13:37 +05:00
|
|
|
domStorageEnabled={true}
|
|
|
|
|
scrollEnabled={true}
|
|
|
|
|
bounces={false}
|
|
|
|
|
allowFileAccess={true}
|
|
|
|
|
scalesPageToFit={true}
|
|
|
|
|
allowingReadAccessToURL={Platform.OS === 'android' ? true : null}
|
|
|
|
|
allowFileAccessFromFileURLs={true}
|
|
|
|
|
allowUniversalAccessFromFileURLs={true}
|
|
|
|
|
originWhitelist={['*']}
|
|
|
|
|
javaScriptEnabled={true}
|
2022-01-05 19:32:58 +05:00
|
|
|
cacheMode="LOAD_DEFAULT"
|
2021-12-29 13:13:37 +05:00
|
|
|
cacheEnabled={true}
|
|
|
|
|
source={{
|
2022-01-05 20:40:36 +05:00
|
|
|
uri: sourceUri + 'plaineditor.html'
|
2021-12-29 13:13:37 +05:00
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
) : (
|
|
|
|
|
<View
|
|
|
|
|
style={{
|
|
|
|
|
width: '100%',
|
|
|
|
|
height: 100,
|
|
|
|
|
justifyContent: 'center',
|
|
|
|
|
alignItems: 'center'
|
2022-01-22 12:57:05 +05:00
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Paragraph color={colors.icon}>Preview not available, content is encrypted.</Paragraph>
|
2021-12-29 13:13:37 +05:00
|
|
|
</View>
|
|
|
|
|
)}
|
2021-12-14 12:33:39 +05:00
|
|
|
|
|
|
|
|
<View
|
|
|
|
|
style={{
|
|
|
|
|
paddingHorizontal: 12
|
2022-01-22 12:57:05 +05:00
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Button onPress={restore} title="Restore this version" type="accent" width="100%" />
|
2021-12-14 12:33:39 +05:00
|
|
|
</View>
|
|
|
|
|
</View>
|
|
|
|
|
);
|
|
|
|
|
}
|