-
Notifications
You must be signed in to change notification settings - Fork 63
/
Toolbar.jsx
109 lines (98 loc) · 2.92 KB
/
Toolbar.jsx
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
107
108
109
/* global cozy */
import React, { useState, useCallback } from 'react'
import { compose } from 'redux'
import { connect } from 'react-redux'
import { useClient } from 'cozy-client'
import { translate } from 'cozy-ui/transpiled/react/I18n'
import withBreakpoints from 'cozy-ui/transpiled/react/helpers/withBreakpoints'
import Button from 'cozy-ui/transpiled/react/Button'
import ActionMenu, { ActionMenuItem } from 'cozy-ui/transpiled/react/ActionMenu'
import Icon from 'cozy-ui/transpiled/react/Icon'
import BarContextProvider from 'cozy-ui/transpiled/react/BarContextProvider'
import { showModal } from 'react-cozy-helpers'
import { MoreButton } from 'components/Button'
import EmptyTrashConfirm from './components/EmptyTrashConfirm'
import { emptyTrash } from './actions'
import { isSelectionBarVisible } from 'drive/web/modules/selection/duck'
import styles from 'drive/styles/toolbar.styl'
import SelectableItem from '../drive/Toolbar/selectable/SelectableItem'
const Toolbar = ({
t,
disabled,
selectionModeActive,
emptyTrash,
breakpoints: { isMobile }
}) => {
const client = useClient()
const { BarRight } = cozy.bar
const [menuIsVisible, setMenuVisible] = useState(false)
const anchorRef = React.createRef()
const openMenu = useCallback(() => setMenuVisible(true))
const closeMenu = useCallback(() => setMenuVisible(false))
const MoreMenu = (
<div>
<div ref={anchorRef}>
<MoreButton onClick={openMenu} />
</div>
{menuIsVisible && (
<ActionMenu
placement="bottom-end"
anchorElRef={anchorRef}
onClose={closeMenu}
autoclose
>
<ActionMenuItem
onClick={() => emptyTrash()}
left={<Icon icon="trash" color="var(--pomegranate)" />}
>
<span className="u-pomegranate">{t('toolbar.empty_trash')}</span>
</ActionMenuItem>
<hr />
<SelectableItem />
</ActionMenu>
)}
</div>
)
return (
<div
data-test-id="empty-trash"
className={styles['fil-toolbar-trash']}
role="toolbar"
>
<Button
theme="danger-outline"
className="u-hide--mob"
onClick={() => emptyTrash()}
disabled={disabled || selectionModeActive}
icon="trash"
label={t('toolbar.empty_trash')}
/>
{isMobile ? (
<BarRight>
<BarContextProvider client={client} t={t} store={client.store}>
{MoreMenu}
</BarContextProvider>
</BarRight>
) : (
MoreMenu
)}
</div>
)
}
const mapStateToProps = state => ({
selectionModeActive: isSelectionBarVisible(state)
})
const mapDispatchToProps = dispatch => ({
emptyTrash: () =>
dispatch(
showModal(<EmptyTrashConfirm onConfirm={() => dispatch(emptyTrash())} />)
)
})
export default compose(
translate(),
withBreakpoints(),
connect(
mapStateToProps,
mapDispatchToProps
)
)(Toolbar)