codevise/pageflow

View on GitHub
entry_types/paged/packages/pageflow-paged-react/src/media/components/WaveformPlayerControls/Waveform.jsx

Summary

Maintainability
A
1 hr
Test Coverage
import PlayButton from './PlayButton';

import {combineSelectors} from 'utils';
import {connectInPage} from 'pages';
import {pageAttribute, pageIsPrepared} from 'pages/selectors';
import {mainColor} from 'theme/selectors';

import Measure from 'react-measure';
import Wavesurfer from 'react-wavesurfer';


const waveColor = 'rgba(170, 170, 170, 1)';
const waveColorForInvertedPage = 'rgba(0, 0, 0, 0.5)';

const cursorColor = '#fff';
const cursorColorForInvertedPage = '#888';

function Waveform(props) {
  if (props.pageIsPrepared && props.mediaElementId) {
    return (
      <Measure whitelist={['height']}>
        { ({height}) =>
          <div className="waveform_player_controls-wave">
            <div className="waveform_player_controls-wave_wrapper">
              <Wavesurfer mediaElt={`#${props.mediaElementId}`}
                          options={{
                            normalize: true,
                            removeMediaElementOnDestroy: false,
                            hideScrollbar: true,
                            progressColor: props.waveformColor || props.mainColor,
                            waveColor: props.inverted ? waveColorForInvertedPage : waveColor,
                            cursorColor: props.inverted ? cursorColorForInvertedPage : cursorColor,
                            height
                          }} />
              <PlayButton isPlaying={props.isPlaying}
                          title={props.playButtonTitle}
                          inverted={props.inverted}
                          onClick={props.onPlayButtonClick} />
            </div>
          </div>
        }
      </Measure>
    );
  }
  else {
    return null;
  }
}

export default connectInPage(
  combineSelectors({
    pageIsPrepared: pageIsPrepared(),
    waveformColor: pageAttribute('waveformColor'),
    mainColor
  })
)(Waveform);