54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { useRef, useCallback } from 'react';
 | 
						|
 | 
						|
import { useSelector, useDispatch } from 'react-redux';
 | 
						|
 | 
						|
import { changeMediaOrder } from 'mastodon/actions/compose';
 | 
						|
 | 
						|
import { Upload } from './upload';
 | 
						|
import { UploadProgress } from './upload_progress';
 | 
						|
 | 
						|
export const UploadForm = () => {
 | 
						|
  const dispatch = useDispatch();
 | 
						|
  const mediaIds = useSelector(state => state.getIn(['compose', 'media_attachments']).map(item => item.get('id')));
 | 
						|
  const active = useSelector(state => state.getIn(['compose', 'is_uploading']));
 | 
						|
  const progress = useSelector(state => state.getIn(['compose', 'progress']));
 | 
						|
  const isProcessing = useSelector(state => state.getIn(['compose', 'is_processing']));
 | 
						|
 | 
						|
  const dragItem = useRef();
 | 
						|
  const dragOverItem = useRef();
 | 
						|
 | 
						|
  const handleDragStart = useCallback(id => {
 | 
						|
    dragItem.current = id;
 | 
						|
  }, [dragItem]);
 | 
						|
 | 
						|
  const handleDragEnter = useCallback(id => {
 | 
						|
    dragOverItem.current = id;
 | 
						|
  }, [dragOverItem]);
 | 
						|
 | 
						|
  const handleDragEnd = useCallback(() => {
 | 
						|
    dispatch(changeMediaOrder(dragItem.current, dragOverItem.current));
 | 
						|
    dragItem.current = null;
 | 
						|
    dragOverItem.current = null;
 | 
						|
  }, [dispatch, dragItem, dragOverItem]);
 | 
						|
 | 
						|
  return (
 | 
						|
    <>
 | 
						|
      <UploadProgress active={active} progress={progress} isProcessing={isProcessing} />
 | 
						|
 | 
						|
      {mediaIds.size > 0 && (
 | 
						|
        <div className='compose-form__uploads'>
 | 
						|
          {mediaIds.map(id => (
 | 
						|
            <Upload
 | 
						|
              key={id}
 | 
						|
              id={id}
 | 
						|
              onDragStart={handleDragStart}
 | 
						|
              onDragEnter={handleDragEnter}
 | 
						|
              onDragEnd={handleDragEnd}
 | 
						|
            />
 | 
						|
          ))}
 | 
						|
        </div>
 | 
						|
      )}
 | 
						|
    </>
 | 
						|
  );
 | 
						|
};
 |