1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import fetchJson from 'lib/fetchJson'
import {faCheck, faTimes} from '@fortawesome/free-solid-svg-icons'
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'
export const state = s => s && <span><FontAwesomeIcon icon={s === 1 ? faCheck : faTimes} /></span>
export const color = s => s && {color: s === 1 ? 'green' : 'brown'}
const readFileAsText = (file) => new Promise((resolve,reject) => {
let fr = new FileReader()
fr.onload = () => resolve(fr.result)
fr.onerror = () => reject(fr)
fr.readAsText(file)
})
export const handleImport = async (e, files, mutateNotes, setDone) => {
e.preventDefault();
Array.from(files).forEach(async (file, i) => {
const title = file.name.replace(/\.[^/.]+$/, "")
const content = await readFileAsText(file);
try {
const notes = await fetchJson('/api/notes', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({title, content}),
})
if (i === files.length - 1) await mutateNotes(notes)
setDone((prev) => ({...prev, [i]: 1}))
} catch (e) {
setDone((prev) => ({...prev, [i]: 0}))
}
})
}
export const handleChange = (e, setFiles, setDone) => {
setFiles(e.currentTarget.files)
setDone([])
}
|