@ -13,7 +13,7 @@ interface Props extends DialogProps {
onConfirm ? : ( resourceList : Resource [ ] ) = > void ;
}
type SelectedMode = "local-file" | "external-link" ;
type SelectedMode = "local-file" | "external-link" | "download-link" ;
interface State {
selectedMode : SelectedMode ;
@ -32,6 +32,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
filename : "" ,
externalLink : "" ,
type : "" ,
downloadToLocal : false ,
} ) ;
const [ fileList , setFileList ] = useState < File [ ] > ( [ ] ) ;
const fileInputRef = useRef < HTMLInputElement > ( null ) ;
@ -70,7 +71,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
destroy ( ) ;
} ;
const handleSelectedModeChanged = ( mode : "local-file" | "external-link" ) = > {
const handleSelectedModeChanged = ( mode : "local-file" | "external-link" | "download-link" ) = > {
setState ( ( state ) = > {
return {
. . . state ,
@ -129,6 +130,10 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
if ( resourceCreate . filename === "" || resourceCreate . externalLink === "" || resourceCreate . type === "" ) {
return false ;
}
} else if ( state . selectedMode === "download-link" ) {
if ( resourceCreate . externalLink === "" ) {
return false ;
}
}
return true ;
} ;
@ -161,6 +166,9 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
createdResourceList . push ( resource ) ;
}
} else {
if ( state . selectedMode === "download-link" ) {
resourceCreate . downloadToLocal = true ;
}
const resource = await resourceStore . createResource ( resourceCreate ) ;
createdResourceList . push ( resource ) ;
}
@ -195,6 +203,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
>
< Option value = "local-file" > { t ( "resource.create-dialog.local-file.option" ) } < / Option >
< Option value = "external-link" > { t ( "resource.create-dialog.external-link.option" ) } < / Option >
< Option value = "download-link" > { t ( "resource.create-dialog.download-link.option" ) } < / Option >
< / Select >
{ state . selectedMode === "local-file" && (
@ -279,6 +288,21 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
< / >
) }
{ state . selectedMode === "download-link" && (
< >
< Typography className = "!mb-1" level = "body2" >
{ t ( "resource.create-dialog.external-link.link" ) }
< / Typography >
< Input
className = "mb-2"
placeholder = { t ( "resource.create-dialog.external-link.link-placeholder" ) }
value = { resourceCreate . externalLink }
onChange = { handleExternalLinkChanged }
fullWidth
/ >
< / >
) }
< div className = "mt-2 w-full flex flex-row justify-end items-center space-x-1" >
< Button variant = "plain" color = "neutral" onClick = { handleCloseDialog } >
{ t ( "common.cancel" ) }