1515// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
1717import React , { Fragment , useState } from "react" ;
18- import { Theme } from "@mui/material/styles" ;
1918import { CSSObject } from "styled-components" ;
20- import { Menu , MenuItem } from "@mui/material" ;
21- import createStyles from "@mui/styles/createStyles" ;
22- import withStyles from "@mui/styles/withStyles" ;
23- import ListItemText from "@mui/material/ListItemText" ;
24- import ListItemIcon from "@mui/material/ListItemIcon" ;
25- import { Button , UploadFolderIcon , UploadIcon } from "mds" ;
19+ import { Button , DropdownSelector , UploadFolderIcon , UploadIcon } from "mds" ;
2620import {
2721 IAM_SCOPES ,
2822 permissionTooltipHelper ,
@@ -39,30 +33,20 @@ interface IUploadFilesButton {
3933 forceDisable ?: boolean ;
4034 uploadFileFunction : ( closeFunction : ( ) => void ) => void ;
4135 uploadFolderFunction : ( closeFunction : ( ) => void ) => void ;
42- classes : any ;
4336 overrideStyles ?: CSSObject ;
4437}
4538
46- const styles = ( theme : Theme ) =>
47- createStyles ( {
48- listUploadIcons : {
49- height : 20 ,
50- "& .min-icon" : {
51- width : 18 ,
52- fill : "rgba(0,0,0,0.87)" ,
53- } ,
54- } ,
55- } ) ;
56-
5739const UploadFilesButton = ( {
5840 uploadPath,
5941 bucketName,
6042 forceDisable = false ,
6143 uploadFileFunction,
6244 uploadFolderFunction,
63- classes,
6445 overrideStyles = { } ,
6546} : IUploadFilesButton ) => {
47+ const [ anchorEl , setAnchorEl ] = useState < null | HTMLElement > ( null ) ;
48+ const [ uploadOptionsOpen , uploadOptionsSetOpen ] = useState < boolean > ( false ) ;
49+
6650 const anonymousMode = useSelector (
6751 ( state : AppState ) => state . system . anonymousMode ,
6852 ) ;
@@ -82,9 +66,9 @@ const UploadFilesButton = ({
8266 putObjectPermScopes ,
8367 ) ;
8468
85- const [ anchorEl , setAnchorEl ] = useState < null | HTMLElement > ( null ) ;
8669 const openUploadMenu = Boolean ( anchorEl ) ;
8770 const handleClick = ( event : React . MouseEvent < HTMLElement > ) => {
71+ uploadOptionsSetOpen ( ! uploadOptionsOpen ) ;
8872 setAnchorEl ( event . currentTarget ) ;
8973 } ;
9074 const handleCloseUpload = ( ) => {
@@ -104,6 +88,15 @@ const UploadFilesButton = ({
10488 true ,
10589 ) ;
10690
91+ const uploadFolderAction = ( action : string ) => {
92+ if ( action === "folder" ) {
93+ uploadFolderFunction ( handleCloseUpload ) ;
94+ return ;
95+ }
96+
97+ uploadFileFunction ( handleCloseUpload ) ;
98+ } ;
99+
107100 const uploadEnabled : boolean = uploadObjectAllowed || uploadFolderAllowed ;
108101
109102 return (
@@ -131,48 +124,34 @@ const UploadFilesButton = ({
131124 sx = { overrideStyles }
132125 />
133126 </ TooltipWrapper >
134- < Menu
135- id = { `upload-main-menu` }
136- aria-labelledby = { `upload-main` }
137- anchorEl = { anchorEl }
138- open = { openUploadMenu }
139- onClose = { ( ) => {
140- handleCloseUpload ( ) ;
141- } }
142- anchorOrigin = { {
143- vertical : "bottom" ,
144- horizontal : "center" ,
127+ < DropdownSelector
128+ id = { "upload-main-menu" }
129+ options = { [
130+ {
131+ label : "Upload File" ,
132+ icon : < UploadIcon /> ,
133+ value : "file" ,
134+ disabled : ! uploadObjectAllowed || forceDisable ,
135+ } ,
136+ {
137+ label : "Upload Folder" ,
138+ icon : < UploadFolderIcon /> ,
139+ value : "folder" ,
140+ disabled : ! uploadFolderAllowed || forceDisable ,
141+ } ,
142+ ] }
143+ selectedOption = { "" }
144+ onSelect = { ( nValue ) => uploadFolderAction ( nValue ) }
145+ hideTriggerAction = { ( ) => {
146+ uploadOptionsSetOpen ( false ) ;
145147 } }
146- transformOrigin = { {
147- vertical : "top" ,
148- horizontal : "center" ,
149- } }
150- >
151- < MenuItem
152- onClick = { ( ) => {
153- uploadFileFunction ( handleCloseUpload ) ;
154- } }
155- disabled = { ! uploadObjectAllowed || forceDisable }
156- >
157- < ListItemIcon className = { classes . listUploadIcons } >
158- < UploadIcon />
159- </ ListItemIcon >
160- < ListItemText > Upload File</ ListItemText >
161- </ MenuItem >
162- < MenuItem
163- onClick = { ( ) => {
164- uploadFolderFunction ( handleCloseUpload ) ;
165- } }
166- disabled = { ! uploadFolderAllowed || forceDisable }
167- >
168- < ListItemIcon className = { classes . listUploadIcons } >
169- < UploadFolderIcon />
170- </ ListItemIcon >
171- < ListItemText > Upload Folder</ ListItemText >
172- </ MenuItem >
173- </ Menu >
148+ open = { uploadOptionsOpen }
149+ anchorEl = { anchorEl }
150+ anchorOrigin = { "end" }
151+ useAnchorWidth = { false }
152+ />
174153 </ Fragment >
175154 ) ;
176155} ;
177156
178- export default withStyles ( styles ) ( UploadFilesButton ) ;
157+ export default UploadFilesButton ;
0 commit comments