WikiEducationFoundation/WikiEduDashboard

View on GitHub
app/assets/javascripts/components/timeline/orderable_block.jsx

Summary

Maintainability
C
7 hrs
Test Coverage
A
100%
import React, { useState } from 'react';
import { useBlockDrag } from '../../hooks/useBlockDrag';

const OrderableBlock = ({
  title,
  kind,
  disableUp,
  disableDown,
  canDrag,
  onDrag,
  onMoveUp,
  onMoveDown,
  block,
  animating
}) => {
  const [isHoverArrowDown, setIsHoverArrowDown] = useState(false);
  const [isHoverArrowUp, setIsHoverArrowUp] = useState(false);
  const { ref, isDragging, handlerId } = useBlockDrag({
    block,
    canDrag,
    isAnimating: animating,
    onBlockDragOver: onDrag
  });
  const opacity = isDragging ? 0.5 : 1;

  return (
    <div className="block block--orderable" style={{ opacity }} ref={ref} data-handler-id={handlerId}>
      <h4 className="block-title">{title}</h4>
      <p>{kind}</p>
      <button onClick={onMoveDown} onMouseEnter={() => setIsHoverArrowDown(true)} onMouseLeave={() => setIsHoverArrowDown(false)} className="button border" aria-label={I18n.t('timeline.move_block_down')} disabled={disableDown}>
        <i className={`icon ${isHoverArrowDown ? 'icon-arrow-down_white' : 'icon-arrow-down'}`} />
      </button>
      <button onClick={onMoveUp} onMouseEnter={() => setIsHoverArrowUp(true)} onMouseLeave={() => setIsHoverArrowUp(false)} className="button border" aria-label={I18n.t('timeline.move_block_up')} disabled={disableUp}>
        <i className={`icon ${isHoverArrowUp ? 'icon-arrow-up_white' : 'icon-arrow-up'}`} />
      </button>
    </div>
  );
};
export default OrderableBlock;