From 060aafef656a1782d6b815bb52749815e5557cf0 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Sat, 9 Jul 2016 14:19:50 -0700 Subject: [PATCH 01/21] Introduce Redux --- js/ContextMenu.jsx | 24 ++++++++---------------- js/main.js | 15 +++++++++++++-- js/reducers.js | 39 +++++++++++++++++++++++++++++++++++++++ package.json | 4 +++- 4 files changed, 63 insertions(+), 19 deletions(-) create mode 100644 js/reducers.js diff --git a/js/ContextMenu.jsx b/js/ContextMenu.jsx index 5589e055..74e9cac8 100644 --- a/js/ContextMenu.jsx +++ b/js/ContextMenu.jsx @@ -1,15 +1,11 @@ import React from 'react'; -import MyFile from './my-file'; +import {connect} from 'react-redux'; import '../css/context-menu.css'; class ContextMenu extends React.Component { constructor(props) { super(props); - this.state = { - selected: false - }; - this.openFileDialog = this.openFileDialog.bind(this); this.close = this.close.bind(this); this.toggleMenu = this.toggleMenu.bind(this); @@ -27,34 +23,30 @@ class ContextMenu extends React.Component { } openFileDialog() { - this.props.winamp.openFileDialog(); + this.props.dispatch({type: 'OPEN_FILE_DIALOG'}); } close() { - // Close all of Winamp - this.props.winamp.close(); + this.props.dispatch({type: 'CLOSE_WINAMP'}); } closeMenu() { - this.setState({selected: false}); + this.props.dispatch({type: 'CLOSE_CONTEXT_MENU'}); } toggleMenu(event) { - this.setState({selected: !this.state.selected}); + this.props.dispatch({type: 'TOGGLE_CONTEXT_MENU'}); event.stopPropagation(); } setSkin(e) { const filename = e.target.dataset.filename; const url = 'https://cdn.rawgit.com/captbaritone/winamp-skins/master/v2/' + filename; - const skinFile = new MyFile(); - skinFile.setUrl(url); - this.props.winamp.setSkin(skinFile); + this.props.dispatch({type: 'SET_SKIN_FROM_URL', url: url}); } - render() { - var classes = this.state.selected ? 'selected' : ''; + var classes = this.props.selected ? 'selected' : ''; return