Skip to content
This repository was archived by the owner on Jan 27, 2025. It is now read-only.

Commit 62ecc52

Browse files
authored
Merge pull request #72 from masticore252/master
Add a renderer for actions
2 parents 2f13df2 + 4ec5288 commit 62ecc52

File tree

3 files changed

+268
-132
lines changed

3 files changed

+268
-132
lines changed

src/actions/default.js

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
4+
const Actions = (props) => {
5+
const {
6+
selectedItem,
7+
isFolder,
8+
icons,
9+
nameFilter,
10+
11+
canCreateFolder,
12+
onCreateFolder,
13+
14+
canRenameFile,
15+
onRenameFile,
16+
17+
canRenameFolder,
18+
onRenameFolder,
19+
20+
canDeleteFile,
21+
onDeleteFile,
22+
23+
canDeleteFolder,
24+
onDeleteFolder,
25+
26+
canDownloadFile,
27+
onDownloadFile,
28+
29+
} = props
30+
31+
let actions = []
32+
33+
if (selectedItem) {
34+
// Something is selected. Build custom actions depending on what it is.
35+
if (selectedItem.action) {
36+
// Selected item has an active action against it. Disable all other actions.
37+
let actionText
38+
switch (selectedItem.action) {
39+
case 'delete':
40+
actionText = 'Deleting ...'
41+
break
42+
43+
case 'rename':
44+
actionText = 'Renaming ...'
45+
break
46+
47+
default:
48+
actionText = 'Moving ...'
49+
break
50+
}
51+
52+
actions = (
53+
// TODO: Enable plugging in custom spinner.
54+
<div className="item-actions">
55+
{icons.Loading} {actionText}
56+
</div>
57+
)
58+
} else {
59+
if (isFolder && canCreateFolder && !nameFilter) {
60+
actions.push(
61+
<li key="action-add-folder">
62+
<a
63+
onClick={onCreateFolder}
64+
href="#"
65+
role="button"
66+
>
67+
{icons.Folder}
68+
&nbsp;Add Subfolder
69+
</a>
70+
</li>
71+
)
72+
}
73+
74+
if (selectedItem.keyDerived && !isFolder && canRenameFile) {
75+
actions.push(
76+
<li key="action-rename">
77+
<a
78+
onClick={onRenameFile}
79+
href="#"
80+
role="button"
81+
>
82+
{icons.Rename}
83+
&nbsp;Rename
84+
</a>
85+
</li>
86+
)
87+
} else if (selectedItem.keyDerived && isFolder && canRenameFolder) {
88+
actions.push(
89+
<li key="action-rename">
90+
<a
91+
onClick={onRenameFolder}
92+
href="#"
93+
role="button"
94+
>
95+
{icons.Rename}
96+
&nbsp;Rename
97+
</a>
98+
</li>
99+
)
100+
}
101+
102+
if (selectedItem.keyDerived && !isFolder && canDeleteFile) {
103+
actions.push(
104+
<li key="action-delete">
105+
<a
106+
onClick={onDeleteFile}
107+
href="#"
108+
role="button"
109+
>
110+
{icons.Delete}
111+
&nbsp;Delete
112+
</a>
113+
</li>
114+
)
115+
} else if (selectedItem.keyDerived && isFolder && canDeleteFolder) {
116+
actions.push(
117+
<li key="action-delete">
118+
<a
119+
onClick={onDeleteFolder}
120+
href="#"
121+
role="button"
122+
>
123+
{icons.Delete}
124+
&nbsp;Delete
125+
</a>
126+
</li>
127+
)
128+
}
129+
130+
if (!isFolder && canDownloadFile) {
131+
actions.push(
132+
<li key="action-download">
133+
<a
134+
onClick={onDownloadFile}
135+
href="#"
136+
role="button"
137+
>
138+
{icons.Download}
139+
&nbsp;Download
140+
</a>
141+
</li>
142+
)
143+
}
144+
145+
if (actions.length) {
146+
actions = (<ul className="item-actions">{actions}</ul>)
147+
} else {
148+
actions = (<div className="item-actions">&nbsp;</div>)
149+
}
150+
}
151+
} else {
152+
// Nothing selected: We're in the 'root' folder. Only allowed action is adding a folder.
153+
if (canCreateFolder && !nameFilter) {
154+
actions.push(
155+
<li key="action-add-folder">
156+
<a
157+
onClick={onCreateFolder}
158+
href="#"
159+
role="button"
160+
>
161+
{icons.Folder}
162+
&nbsp;Add Folder
163+
</a>
164+
</li>
165+
)
166+
}
167+
168+
if (actions.length) {
169+
actions = (<ul className="item-actions">{actions}</ul>)
170+
} else {
171+
actions = (<div className="item-actions">&nbsp;</div>)
172+
}
173+
}
174+
175+
return actions
176+
}
177+
178+
Actions.propTypes = {
179+
selectedItem: PropTypes.object,
180+
isFolder: PropTypes.bool,
181+
icons: PropTypes.object,
182+
nameFilter: PropTypes.string,
183+
184+
canCreateFolder: PropTypes.bool,
185+
onCreateFolder: PropTypes.func,
186+
187+
canRenameFile: PropTypes.bool,
188+
onRenameFile: PropTypes.func,
189+
190+
canRenameFolder: PropTypes.bool,
191+
onRenameFolder: PropTypes.func,
192+
193+
canDeleteFile: PropTypes.bool,
194+
onDeleteFile: PropTypes.func,
195+
196+
canDeleteFolder: PropTypes.bool,
197+
onDeleteFolder: PropTypes.func,
198+
199+
canDownloadFile: PropTypes.bool,
200+
onDownloadFile: PropTypes.func,
201+
}
202+
203+
Actions.defaultProps = {
204+
selectedItem: null,
205+
isFolder: false,
206+
icons: {},
207+
nameFilter: '',
208+
209+
canCreateFolder: false,
210+
onCreateFolder: null,
211+
212+
canRenameFile: false,
213+
onRenameFile: null,
214+
215+
canRenameFolder: false,
216+
onRenameFolder: null,
217+
218+
canDeleteFile: false,
219+
onDeleteFile: null,
220+
221+
canDeleteFolder: false,
222+
onDeleteFolder: null,
223+
224+
canDownloadFile: false,
225+
onDownloadFile: null,
226+
}
227+
228+
export default Actions

src/actions/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import DefaultAction from './default'
2+
3+
export {
4+
DefaultAction,
5+
}

0 commit comments

Comments
 (0)