/* This file is part of the Notesnook project (https://notesnook.com/) Copyright (C) 2022 Streetwriters (Private) Limited This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ import React, { Fragment, useState } from "react"; import { Platform, StyleSheet, View, ActivityIndicator } 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 { db } from "../../../common/database"; import { presentSheet, ToastEvent } from "../../../services/event-manager"; import Exporter from "../../../services/exporter"; import PremiumService from "../../../services/premium"; import { useThemeStore } from "../../../stores/use-theme-store"; import { useUserStore } from "../../../stores/use-user-store"; import { getElevation } from "../../../utils"; import { ph, pv, SIZE } from "../../../utils/size"; import { sleep } from "../../../utils/time"; import DialogHeader from "../../dialog/dialog-header"; import { ProTag } from "../../premium/pro-tag"; import { Button } from "../../ui/button"; import { IconButton } from "../../ui/icon-button"; import { PressableButton } from "../../ui/pressable"; import Seperator from "../../ui/seperator"; import Heading from "../../ui/typography/heading"; import Paragraph from "../../ui/typography/paragraph"; import { eSendEvent } from "../../../services/event-manager"; import { eCloseProgressDialog } from "../../../utils/events"; const ExportNotesSheet = ({ notes, update }) => { const colors = useThemeStore((state) => state.colors); const [exporting, setExporting] = useState(false); const [complete, setComplete] = useState(false); const [result, setResult] = useState({}); const [status, setStatus] = useState(null); const premium = useUserStore((state) => state.premium); const save = async (type) => { if (exporting) return; if (!PremiumService.get() && type !== "txt") return; setExporting(true); update({ disableClosing: true }); setComplete(false); let result; if (notes.length > 1) { result = await Exporter.bulkExport(notes, type, setStatus); } else { result = await Exporter.exportNote(notes[0], type); await sleep(1000); } if (!result) { update({ disableClosing: false }); return setExporting(false); } setResult(result); update({ disableClosing: false }); setComplete(true); setExporting(false); }; const actions = [ { title: "PDF", func: async () => { await save("pdf"); }, icon: "file-pdf-box", desc: "View in any pdf reader app", id: notesnook.ids.dialogs.export.pdf, pro: premium }, { title: "Markdown", func: async () => { await save("md"); }, icon: "language-markdown", desc: "View in any text or markdown editor", id: notesnook.ids.dialogs.export.md, pro: premium }, { title: "Plain Text", func: async () => { await save("txt"); }, icon: "card-text", desc: "View in any text editor", id: notesnook.ids.dialogs.export.text, pro: true }, { title: "HTML", func: async () => { await save("html"); }, icon: "language-html5", desc: "View in any web browser & html reader", id: notesnook.ids.dialogs.export.html, pro: premium } ]; return ( {!complete && !exporting ? ( <> 1 ? `Export ${notes.length} Notes` : "Export Note" } paragraph={`All exports are saved in ${ Platform.OS === "android" ? "the selected" : "Notesnook/exported" } folder in phone storage`} /> ) : null} {!exporting && !complete ? ( actions.map((item) => ( {!item.pro ? : null} {item.title} {item.desc} )) ) : ( {!complete ? ( <> {notes.length === 1 ? "Exporting note... Please wait" : `Exporting notes${ status ? ` (${status})` : `` }... Please wait`} ) : ( <> {notes.length > 1 ? `${notes.length} Notes exported` : "Note exported"} Your {notes.length > 1 ? "notes are" : "note is"} exported successfully as {result.fileName}