Youtube music and video downloader

Options.jsx 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, {Component, PropTypes} from 'react';
  2. import Video from './Video';
  3. import classnames from 'classnames';
  4. export default class Options extends Component {
  5. getProgress(type) {
  6. return !this.props.converted ? 0 :
  7. this.props.converted[type === 'MP3' ? 'audio_progress' : 'video_progress'];
  8. }
  9. isDisabled(type) {
  10. return !this.props.converted ||
  11. !this.props.converted[type === 'MP3' ? 'audio' : 'video'];
  12. }
  13. getClasses() {
  14. return classnames({
  15. option: true,
  16. unreachable: this.props.converted.error
  17. });
  18. }
  19. getErrorMessage() {
  20. return this.props.converted.error || null;
  21. }
  22. render() {
  23. return (
  24. <div>
  25. { _.map(this.props.handlers, (h) => (
  26. <button key={h.type} className={this.getClasses()}
  27. onClick={() => h.handler(this.props.video)}
  28. disabled={this.isDisabled(h.type)} title={this.getErrorMessage()}>
  29. <div className="option-progress" style={{width: this.getProgress(h.type) + '%'}}></div>
  30. <i className="fa fa-download"/> {h.type}
  31. </button>
  32. )) }
  33. </div>
  34. );
  35. }
  36. }
  37. Options.propTypes = {
  38. handlers: PropTypes.arrayOf(PropTypes.shape({
  39. type: PropTypes.string,
  40. handler: PropTypes.func
  41. })),
  42. video: PropTypes.instanceOf(Video),
  43. converted: PropTypes.object
  44. };