import React, { Fragment, useEffect, useRef, useState } from "react"; import { Platform, StyleSheet, View } from "react-native"; import FileViewer from "react-native-file-viewer"; import Share from "react-native-share"; import Icon from "react-native-vector-icons/MaterialCommunityIcons"; import { notesnook } from "../../../../e2e/test.ids"; import { useThemeStore } from "../../../stores/use-theme-store"; import { ToastEvent } from "../../../services/event-manager"; import Exporter from "../../../services/exporter"; import { getElevation } from "../../../utils"; import { ph, pv, SIZE } from "../../../utils/size"; import { sleep } from "../../../utils/time"; import SheetWrapper from "../../ui/sheet"; import { Button } from "../../ui/button"; import DialogHeader from "../../dialog/dialog-header"; import { PressableButton } from "../../ui/pressable"; import Seperator from "../../ui/seperator"; import Heading from "../../ui/typography/heading"; import Paragraph from "../../ui/typography/paragraph"; import { eSubscribeEvent, eUnSubscribeEvent } from "../../../services/event-manager"; import { eOpenExportDialog, eCloseExportDialog } from "../../../utils/events"; const ExportNotesSheet = () => { const colors = useThemeStore((state) => state.colors); const [visible, setVisible] = useState(false); const actionSheetRef = useRef(); const [notes, setNotes] = useState([]); const [exporting, setExporting] = useState(false); const [complete, setComplete] = useState(false); const [doneText, setDoneText] = useState(null); const [result, setResult] = useState({}); useEffect(() => { eSubscribeEvent(eOpenExportDialog, open); eSubscribeEvent(eCloseExportDialog, close); return () => { eUnSubscribeEvent(eOpenExportDialog, open); eUnSubscribeEvent(eCloseExportDialog, close); }; }, []); const open = (data) => { setVisible(true); setNotes(data); }; const close = (data) => { setComplete(false); setExporting(false); setVisible(false); setNotes([]); }; const save = async (func, name) => { if (exporting) return; setExporting(true); setComplete(false); let res; for (var i = 0; i < notes.length; i++) { let note = notes[i]; res = await func(note); if (!res) { setExporting(false); return; } } setDoneText( `Note exported successfully! You can find the exported note in ${ Platform.OS === "ios" ? "Files Manager/Notesnook" : `Storage/Notesnook/exported/${name}` }.` ); setResult(res); setExporting(false); setComplete(true); }; useEffect(() => { if (visible) { actionSheetRef.current.show(); } }, [visible]); const actions = [ { title: "PDF", func: async () => { await save(Exporter.saveToPDF, "PDF"); }, icon: "file-pdf-box", desc: "Can be opened in a pdf reader like Adobe or Foxit Reader", id: notesnook.ids.dialogs.export.pdf }, { title: "Markdown", func: async () => { await save(Exporter.saveToMarkdown, "Markdown"); }, icon: "language-markdown", desc: "Can be opened in any text or markdown editor", id: notesnook.ids.dialogs.export.md }, { title: "Plain Text", func: async () => { await save(Exporter.saveToText, "Text"); }, icon: "card-text", desc: "Can be opened in any text editor", id: notesnook.ids.dialogs.export.text }, { title: "HTML", func: async () => { await save(Exporter.saveToHTML, "Html"); }, icon: "language-html5", desc: "Can be opened in any web browser", id: notesnook.ids.dialogs.export.html } ]; return !visible ? null : ( {actions.map((item) => ( {item.title} {item.desc} ))} {complete && ( <>