-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathHeaderShortcutActions.jsx
More file actions
106 lines (97 loc) · 3.03 KB
/
HeaderShortcutActions.jsx
File metadata and controls
106 lines (97 loc) · 3.03 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { buildFileFromPathQuery } from '@/ducks/queries'
import React, { useState } from 'react'
import { useClient, useFetchShortcut } from 'cozy-client'
import { move } from 'cozy-client/dist/models/file'
import flag from 'cozy-flags'
import Button from 'cozy-ui/transpiled/react/Buttons'
import Icon from 'cozy-ui/transpiled/react/Icon'
import CloudIcon from 'cozy-ui/transpiled/react/Icons/Cloud'
import { useAlert } from 'cozy-ui/transpiled/react/providers/Alert'
import useBreakpoints from 'cozy-ui/transpiled/react/providers/Breakpoints'
import { useI18n } from 'cozy-ui/transpiled/react/providers/I18n'
const HeaderShortcutActions = ({ app }) => {
const { isMobile } = useBreakpoints()
const { t } = useI18n()
const client = useClient()
const { shortcutInfos } = useFetchShortcut(client, app.id)
const { showAlert } = useAlert()
const [isBusy, setBusy] = useState(false)
const config = flag('store.alternative-source')
const handleAdd = async () => {
try {
setBusy(true)
// Install can be disabled
const shortcutCategory = app.categories[0]
const categoryPath = config.categories[shortcutCategory]
const fileQuery = buildFileFromPathQuery(categoryPath)
const categoryDirectory = await client.fetchQueryAndGetFromState(
fileQuery
)
await move(client, app, categoryDirectory.data[0])
showAlert({
message: t('HeaderShortcutActions.addSuccess'),
severity: 'success'
})
} catch {
showAlert({
message: t('HeaderShortcutActions.error'),
severity: 'error'
})
} finally {
setBusy(false)
}
}
const handleRemove = async () => {
try {
setBusy(true)
// Uninstall can be disabled
const storePath = config.store
const fileQuery = buildFileFromPathQuery(storePath)
const storeDirectory = await client.fetchQueryAndGetFromState(fileQuery)
await move(client, app, storeDirectory.data[0])
showAlert({
message: t('HeaderShortcutActions.removeSuccess'),
severity: 'success'
})
} catch {
showAlert({
message: t('HeaderShortcutActions.error'),
severity: 'error'
})
} finally {
setBusy(false)
}
}
const url = shortcutInfos?.data?.attributes?.url || ''
return (
<>
<Button
href={url}
label={t('HeaderShortcutActions.open')}
className="c-btn"
disabled={isBusy}
/>
{app.installed ? (
<Button
variant="secondary"
fullWidth={isMobile}
className={isMobile ? 'u-mt-1' : null}
onClick={handleRemove}
label={t('HeaderShortcutActions.remove')}
busy={isBusy}
/>
) : (
<Button
variant="secondary"
fullWidth={isMobile}
className={isMobile ? 'u-mt-1' : null}
onClick={handleAdd}
startIcon={<Icon icon={CloudIcon} />}
label={t('HeaderShortcutActions.add')}
busy={isBusy}
/>
)}
</>
)
}
export { HeaderShortcutActions }