-
-
Notifications
You must be signed in to change notification settings - Fork 530
Expand file tree
/
Copy pathFileContextMenuBackupOption.tsx
More file actions
72 lines (62 loc) · 2.37 KB
/
FileContextMenuBackupOption.tsx
File metadata and controls
72 lines (62 loc) · 2.37 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { FunctionComponent, useCallback, useEffect, useState } from 'react'
import MenuItem from '../Menu/MenuItem'
import { useApplication } from '../ApplicationProvider'
import { FileBackupRecord, FileItem, PreferencePaneId } from '@standardnotes/snjs'
import { dateToStringStyle1 } from '@/Utils/DateUtils'
import { MenuItemIconSize } from '@/Constants/TailwindClassNames'
import MenuSection from '../Menu/MenuSection'
export const FileContextMenuBackupOption: FunctionComponent<{ file: FileItem }> = ({ file }) => {
const application = useApplication()
const [backupInfo, setBackupInfo] = useState<FileBackupRecord | undefined>(undefined)
const [backupAbsolutePath, setBackupAbsolutePath] = useState<string | undefined>(undefined)
useEffect(() => {
void application.fileBackups?.getFileBackupInfo(file).then(setBackupInfo)
}, [application, file])
useEffect(() => {
if (!backupInfo) {
return
}
void application.fileBackups?.getFileBackupAbsolutePath(backupInfo).then(setBackupAbsolutePath)
}, [backupInfo, application])
const openFileBackup = useCallback(() => {
if (backupInfo) {
void application.fileBackups?.openFileBackup(backupInfo)
}
}, [backupInfo, application])
const configureFileBackups = useCallback(() => {
application.openPreferences(PreferencePaneId.Backups)
}, [application])
if (!application.fileBackups) {
return null
}
return (
<MenuSection>
{backupInfo && (
<MenuItem
icon={'check-circle'}
iconClassName={`text-success mt-1 ${MenuItemIconSize}`}
className={'items-start'}
onClick={openFileBackup}
>
<div className="ml-2">
<div className="font-semibold text-success">Backed up on {dateToStringStyle1(backupInfo.backedUpOn)}</div>
<div className="text-xs text-neutral">{backupAbsolutePath}</div>
</div>
</MenuItem>
)}
{!backupInfo && application.fileBackups && (
<MenuItem
icon={'safe-square'}
className={'items-start'}
iconClassName={`text-neutral mt-1 ${MenuItemIconSize}`}
onClick={configureFileBackups}
>
<div className="ml-2">
<div>Configure file backups</div>
<div className="text-xs text-neutral">File not backed up locally</div>
</div>
</MenuItem>
)}
</MenuSection>
)
}