From 9f3c030a33edcf57eb832c500253044d107f6e25 Mon Sep 17 00:00:00 2001 From: piotrruss Date: Thu, 19 Aug 2021 21:31:21 +0200 Subject: export multiple as zip --- apps/Notes/components/Export.js | 83 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 apps/Notes/components/Export.js (limited to 'apps/Notes/components/Export.js') diff --git a/apps/Notes/components/Export.js b/apps/Notes/components/Export.js new file mode 100644 index 0000000..f281d1a --- /dev/null +++ b/apps/Notes/components/Export.js @@ -0,0 +1,83 @@ +import styles from '../Notes.module.scss' +import React, {useState} from 'react' +import useNotes from '../hooks/useNotes' +import fetchJson from 'lib/fetchJson' +import JSZip from 'jszip' +import saveFile from 'helpers/saveFile' +import filename from '../helpers/fileName' +// import {state, color, handleImport, handleChange} from '../helpers/import' + +const Export = ({setAction}) => { + const {notes} = useNotes() + const [ids, setIds] = useState(notes.map(n => n.noteId)) + // const [files, setFiles] = useState() + // const [done, setDone] = useState([]) + + const handleSelect = id => { + ids.includes(id) + ? setIds(ids.filter(i => i !== id)) + : setIds([...ids, id]) + } + + const handleSelectAll = e => { + if (e.target.checked) { + setIds(notes.map(n => n.noteId)) + } else { + setIds([]) + } + } + + const handleExport = e => { + e.preventDefault() + const zip = new JSZip() + + Promise.all(ids.map(async id => { + const title = notes.find(n => n.noteId === id).title + const {content} = await fetchJson(`/api/note/${id}`) + zip.folder('notes').file(filename(title), content, {binary: true}) + })).then(() => { + zip.generateAsync({type:"blob"}) + .then(c => saveFile(c, 'notes.zip', 'application/zip')) + }) + } + + if (!notes) return null + + return ( +
+
+
{setAction('')}}>Back
+
+
+

Click to export your notes:

+ +

Notes to export:

+
+ + +
+ {notes.map(note => ( +
+ handleSelect(note.noteId)} + /> +
+
+ ))} +
+
+ ) +} + +export default Export -- cgit v1.2.3