mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-11-01 02:43:35 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import React from "react";
 | |
| import ReactCSSTransitionGroup from "react-addons-css-transition-group";
 | |
| import { DropTarget } from "react-dnd";
 | |
| 
 | |
| import { EventEmitter, Icon } from "../../components/";
 | |
| import { t } from "../../locales/";
 | |
| import "./filezone.scss";
 | |
| 
 | |
| function FileZoneComponent({ connectDropFile, fileIsOver }) {
 | |
|     return connectDropFile(
 | |
|         <div className={"component_filezone "+(fileIsOver ? "hover" : "")}>
 | |
|             { t("DROP HERE TO UPLOAD") }
 | |
|         </div>,
 | |
|     );
 | |
| }
 | |
| 
 | |
| const HOCDropTargetForFSFile = (Cmp) => {
 | |
|     return DropTarget(
 | |
|         "__NATIVE_FILE__", {
 | |
|             drop(props, monitor) {
 | |
|                 props.emit("file.upload", props.path, monitor.getItem());
 | |
|             },
 | |
|         },
 | |
|         (connect, monitor) => ({
 | |
|             connectDropFile: connect.dropTarget(),
 | |
|             fileIsOver: monitor.isOver(),
 | |
|         }),
 | |
|     )(Cmp);
 | |
| };
 | |
| 
 | |
| export const FileZone = EventEmitter(HOCDropTargetForFSFile(FileZoneComponent));
 | |
| 
 | |
| function MobileFileUploadComponent({ emit, path, accessRight }) {
 | |
|     if (!window.CONFIG["upload_button"] && /(Android|iPad|iPhone)/.test(navigator.userAgent) === false) {
 | |
|         return null;
 | |
|     } else if (accessRight.can_create_file === false || accessRight.can_create_directory === false) {
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     const onUpload = (e) => {
 | |
|         emit("file.upload", path, e);
 | |
|     };
 | |
|     return (
 | |
|         <ReactCSSTransitionGroup
 | |
|             transitionName="mobilefileupload" transitionLeave={false} transitionEnter={false}
 | |
|             transitionAppear={true} transitionAppearTimeout={550}>
 | |
|             <div className="component_mobilefileupload no-select">
 | |
|                 <form>
 | |
|                     <input onChange={onUpload} type="file" name="file" id="mobilefileupload" multiple/>
 | |
|                     <label htmlFor="mobilefileupload">
 | |
|                         <Icon name="upload_white"/>
 | |
|                     </label>
 | |
|                 </form>
 | |
|             </div>
 | |
|         </ReactCSSTransitionGroup>
 | |
|     );
 | |
| }
 | |
| 
 | |
| export const MobileFileUpload = EventEmitter(MobileFileUploadComponent);
 | 
