Files
notesnook/apps/mobile/src/components/notehistory/index.js

137 lines
3.9 KiB
JavaScript
Raw Normal View History

2022-01-22 12:57:05 +05:00
import React, { useCallback, useEffect, useState } from 'react';
import { Text, View } from 'react-native';
import { FlatList } from 'react-native-gesture-handler';
2021-12-14 12:33:39 +05:00
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
2022-02-28 23:25:18 +05:00
import { useThemeStore } from '../../stores/theme';
import { presentSheet } from '../../services/event-manager';
2022-01-22 12:57:05 +05:00
import { db } from '../../utils/database';
2021-12-28 13:13:01 +05:00
import { openLinkInBrowser } from '../../utils/functions';
2022-02-28 13:48:59 +05:00
import { SIZE } from '../../utils/size';
import { timeConverter, timeSince } from '../../utils/time';
import DialogHeader from '../dialog/dialog-header';
import SheetProvider from '../sheet-provider';
import { PressableButton } from '../ui/pressable';
import Seperator from '../ui/seperator';
import Paragraph from '../ui/typography/paragraph';
2021-12-14 12:33:39 +05:00
import NotePreview from './preview';
2022-01-22 12:57:05 +05:00
export default function NoteHistory({ note, ref }) {
2021-12-14 12:33:39 +05:00
const [history, setHistory] = useState([]);
const [loading, setLoading] = useState(true);
2022-02-28 23:25:18 +05:00
const colors = useThemeStore(state => state.colors);
2021-12-14 12:33:39 +05:00
useEffect(() => {
(async () => {
2021-12-22 13:59:58 +05:00
setHistory([...(await db.noteHistory.get(note.id))]);
2021-12-14 12:33:39 +05:00
setLoading(false);
})();
}, []);
async function preview(item) {
let content = await db.noteHistory.content(item.id);
2021-12-14 12:33:39 +05:00
presentSheet({
2021-12-22 13:59:58 +05:00
component: (
<NotePreview
session={{
...item,
session: getDate(item.dateCreated, item.dateModified)
}}
content={content}
/>
),
2022-01-22 12:57:05 +05:00
context: 'note_history'
2021-12-14 12:33:39 +05:00
});
}
2021-12-22 13:59:58 +05:00
const getDate = (start, end) => {
let _start = timeConverter(start);
let _end = timeConverter(end + 60000);
if (_start === _end) return _start;
let final = _end.lastIndexOf(',');
let part = _end.slice(0, final + 1);
if (_start.includes(part)) {
return _start + ' —' + _end.replace(part, '');
}
return _start + ' — ' + _end;
};
2021-12-14 12:33:39 +05:00
const renderItem = useCallback(
2022-01-22 12:57:05 +05:00
({ item, index }) => (
2021-12-14 12:33:39 +05:00
<PressableButton
type="grayBg"
onPress={() => preview(item)}
customStyle={{
2021-12-22 13:59:58 +05:00
justifyContent: 'space-between',
alignItems: 'center',
2021-12-14 12:33:39 +05:00
paddingHorizontal: 12,
height: 45,
2021-12-22 13:59:58 +05:00
marginBottom: 10,
flexDirection: 'row'
2022-01-22 12:57:05 +05:00
}}
>
2021-12-22 13:59:58 +05:00
<Paragraph>{getDate(item.dateCreated, item.dateModified)}</Paragraph>
<Paragraph color={colors.icon} size={SIZE.xs}>
{timeSince(item.dateModified)}
</Paragraph>
2021-12-14 12:33:39 +05:00
</PressableButton>
),
[]
);
return (
<View>
2022-02-28 13:48:59 +05:00
<SheetProvider context="note_history" />
2021-12-14 12:33:39 +05:00
<DialogHeader
title="Note history"
paragraph="Revert back to an older version of this note"
padding={12}
/>
<Seperator />
<FlatList
onMomentumScrollEnd={() => {
ref?.current?.handleChildScrollEnd();
}}
style={{
paddingHorizontal: 12
}}
keyExtractor={item => item.id}
data={history}
ListEmptyComponent={
<View
style={{
width: '100%',
justifyContent: 'center',
alignItems: 'center',
height: 200
2022-01-22 12:57:05 +05:00
}}
>
2021-12-14 12:33:39 +05:00
<Icon name="history" size={60} color={colors.icon} />
2022-01-22 12:57:05 +05:00
<Paragraph color={colors.icon}>No note history found on this device.</Paragraph>
2021-12-14 12:33:39 +05:00
</View>
}
renderItem={renderItem}
/>
2021-12-22 13:59:58 +05:00
<Paragraph
size={SIZE.xs}
2021-12-28 13:13:01 +05:00
color={colors.icon}
2021-12-22 13:59:58 +05:00
style={{
alignSelf: 'center'
2021-12-28 13:13:01 +05:00
}}
2022-01-22 12:57:05 +05:00
>
Note version history is local only.{' '}
<Text
onPress={() => {
openLinkInBrowser('https://docs.notesnook.com/versionhistory', colors);
}}
style={{ color: colors.accent, textDecorationLine: 'underline' }}
>
2021-12-28 13:13:01 +05:00
Learn how this works.
</Text>
2021-12-22 13:59:58 +05:00
</Paragraph>
2021-12-14 12:33:39 +05:00
</View>
);
}