audio-selector.jsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import PropTypes from 'prop-types';
  2. import React from 'react';
  3. import classNames from 'classnames';
  4. import Box from '../box/box.jsx';
  5. import styles from './audio-trimmer.css';
  6. import SelectionHandle from './selection-handle.jsx';
  7. import Playhead from './playhead.jsx';
  8. const AudioSelector = props => (
  9. <div
  10. className={classNames(styles.absolute, styles.selector)}
  11. ref={props.containerRef}
  12. onMouseDown={props.onNewSelectionMouseDown}
  13. onTouchStart={props.onNewSelectionMouseDown}
  14. >
  15. {props.trimStart === null ? null : (
  16. <Box
  17. className={classNames(styles.absolute)}
  18. style={{
  19. left: `${props.trimStart * 100}%`,
  20. width: `${100 * (props.trimEnd - props.trimStart)}%`
  21. }}
  22. >
  23. <Box className={classNames(styles.absolute, styles.selectionBackground)} />
  24. <SelectionHandle
  25. handleStyle={styles.leftHandle}
  26. onMouseDown={props.onTrimStartMouseDown}
  27. />
  28. <SelectionHandle
  29. handleStyle={styles.rightHandle}
  30. onMouseDown={props.onTrimEndMouseDown}
  31. />
  32. </Box>
  33. )}
  34. {props.playhead ? (
  35. <Playhead
  36. playbackPosition={props.playhead}
  37. />
  38. ) : null}
  39. </div>
  40. );
  41. AudioSelector.propTypes = {
  42. containerRef: PropTypes.func,
  43. onNewSelectionMouseDown: PropTypes.func.isRequired,
  44. onTrimEndMouseDown: PropTypes.func.isRequired,
  45. onTrimStartMouseDown: PropTypes.func.isRequired,
  46. playhead: PropTypes.number,
  47. trimEnd: PropTypes.number,
  48. trimStart: PropTypes.number
  49. };
  50. export default AudioSelector;