mirror of
				https://github.com/aclindsa/moneygo.git
				synced 2025-11-03 18:13:27 -05:00 
			
		
		
		
	Initial plumbing for moving to Redux
This commit is contained in:
		
							
								
								
									
										2
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								README
									
									
									
									
									
								
							@@ -10,4 +10,4 @@ Install browserify globally:
 | 
				
			|||||||
$ sudo npm install -g browserify
 | 
					$ sudo npm install -g browserify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Next, install browserify, babel, react, react-bootstrap, react-widgets, globalize, and big.js in our directory using npm:
 | 
					Next, install browserify, babel, react, react-bootstrap, react-widgets, globalize, and big.js in our directory using npm:
 | 
				
			||||||
$ npm install browserify react react-dom react-addons-update react-bootstrap react-widgets babelify babel-preset-react globalize cldr-data big.js
 | 
					$ npm install browserify react react-dom react-addons-update react-bootstrap react-widgets redux react-redux redux-thunk babelify babel-preset-react globalize cldr-data big.js keymirror
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										181
									
								
								js/actions/AccountActions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								js/actions/AccountActions.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,181 @@
 | 
				
			|||||||
 | 
					var AccountConstants = require('../constants/AccountConstants');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var ErrorActions = require('ErrorActions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var models = require('../models.js');
 | 
				
			||||||
 | 
					var Account = models.Account;
 | 
				
			||||||
 | 
					var Error = models.Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function fetchAccounts() {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.FETCH_ACCOUNTS
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function accountsFetched(accounts) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.ACCOUNTS_FETCHED,
 | 
				
			||||||
 | 
							accounts: accounts
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function createAccount() {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.CREATE_ACCOUNT
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function accountCreated(account) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.ACCOUNT_CREATED,
 | 
				
			||||||
 | 
							account: account
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function updateAccount() {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.UPDATE_ACCOUNT
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function accountUpdated(account) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.ACCOUNT_UPDATED,
 | 
				
			||||||
 | 
							account: account
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function removeAccount() {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.REMOVE_ACCOUNT
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function accountRemoved(accountId) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.ACCOUNT_REMOVED,
 | 
				
			||||||
 | 
							accountId: accountId
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function accountSelected(accountId) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: AccountConstants.ACCOUNT_SELECTED,
 | 
				
			||||||
 | 
							accountId: accountId
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function fetchAll() {
 | 
				
			||||||
 | 
						return function (dispatch) {
 | 
				
			||||||
 | 
							dispatch(fetchAccounts());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$.ajax({
 | 
				
			||||||
 | 
								type: "GET",
 | 
				
			||||||
 | 
								dataType: "json",
 | 
				
			||||||
 | 
								url: "account/",
 | 
				
			||||||
 | 
								success: function(data, status, jqXHR) {
 | 
				
			||||||
 | 
									var e = new Error();
 | 
				
			||||||
 | 
									var accounts = [];
 | 
				
			||||||
 | 
									e.fromJSON(data);
 | 
				
			||||||
 | 
									if (e.isError()) {
 | 
				
			||||||
 | 
										ErrorActions.serverError(e);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										dispatch(accountsFetched(data.accounts.map(function(json) {
 | 
				
			||||||
 | 
											var a = new Account();
 | 
				
			||||||
 | 
											a.fromJSON(json);
 | 
				
			||||||
 | 
											return a;
 | 
				
			||||||
 | 
										})));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								error: function(jqXHR, status, error) {
 | 
				
			||||||
 | 
									ErrorActions.ajaxError(e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function create(account) {
 | 
				
			||||||
 | 
						return function (dispatch) {
 | 
				
			||||||
 | 
							dispatch(createAccount());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$.ajax({
 | 
				
			||||||
 | 
								type: "POST",
 | 
				
			||||||
 | 
								dataType: "json",
 | 
				
			||||||
 | 
								url: "account/",
 | 
				
			||||||
 | 
								data: {account: account.toJSON()},
 | 
				
			||||||
 | 
								success: function(data, status, jqXHR) {
 | 
				
			||||||
 | 
									var e = new Error();
 | 
				
			||||||
 | 
									e.fromJSON(data);
 | 
				
			||||||
 | 
									if (e.isError()) {
 | 
				
			||||||
 | 
										ErrorActions.serverError(e);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										var a = new Account();
 | 
				
			||||||
 | 
										a.fromJSON(data);
 | 
				
			||||||
 | 
										dispatch(accountCreated(a));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								error: function(jqXHR, status, error) {
 | 
				
			||||||
 | 
									ErrorActions.ajaxError(e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update(account) {
 | 
				
			||||||
 | 
						return function (dispatch) {
 | 
				
			||||||
 | 
							dispatch(updateAccount());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$.ajax({
 | 
				
			||||||
 | 
								type: "PUT",
 | 
				
			||||||
 | 
								dataType: "json",
 | 
				
			||||||
 | 
								url: "account/"+account.AccountId+"/",
 | 
				
			||||||
 | 
								data: {account: account.toJSON()},
 | 
				
			||||||
 | 
								success: function(data, status, jqXHR) {
 | 
				
			||||||
 | 
									var e = new Error();
 | 
				
			||||||
 | 
									e.fromJSON(data);
 | 
				
			||||||
 | 
									if (e.isError()) {
 | 
				
			||||||
 | 
										ErrorActions.serverError(e);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										var a = new Account();
 | 
				
			||||||
 | 
										a.fromJSON(data);
 | 
				
			||||||
 | 
										dispatch(accountUpdated(a));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								error: function(jqXHR, status, error) {
 | 
				
			||||||
 | 
									ErrorActions.ajaxError(e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function remove(account) {
 | 
				
			||||||
 | 
						return function(dispatch) {
 | 
				
			||||||
 | 
							dispatch(removeAccount());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$.ajax({
 | 
				
			||||||
 | 
								type: "DELETE",
 | 
				
			||||||
 | 
								dataType: "json",
 | 
				
			||||||
 | 
								url: "account/"+account.AccountId+"/",
 | 
				
			||||||
 | 
								success: function(data, status, jqXHR) {
 | 
				
			||||||
 | 
									var e = new Error();
 | 
				
			||||||
 | 
									e.fromJSON(data);
 | 
				
			||||||
 | 
									if (e.isError()) {
 | 
				
			||||||
 | 
										ErrorActions.serverError(e);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										dispatch(accountRemoved(account.AccountId));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								error: function(jqXHR, status, error) {
 | 
				
			||||||
 | 
									ErrorActions.ajaxError(e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						fetchAll: fetchAll,
 | 
				
			||||||
 | 
						create: create,
 | 
				
			||||||
 | 
						update: update,
 | 
				
			||||||
 | 
						remove: remove,
 | 
				
			||||||
 | 
						select: accountSelected
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										27
									
								
								js/actions/ErrorActions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								js/actions/ErrorActions.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					var ErrorConstants = require('../constants/ErrorConstants');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var models = require('../models.js');
 | 
				
			||||||
 | 
					var Error = models.Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function serverError(error) {
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: ErrorConstants.ERROR_SERVER,
 | 
				
			||||||
 | 
							error: error
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ajaxError(error) {
 | 
				
			||||||
 | 
						var e = new Error();
 | 
				
			||||||
 | 
						e.ErrorId = 5;
 | 
				
			||||||
 | 
						e.ErrorString = "Request Failed: " + status + error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							type: ErrorConstants.ERROR_AJAX,
 | 
				
			||||||
 | 
							error: e
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						serverError: serverError,
 | 
				
			||||||
 | 
						ajaxError: ajaxError
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										13
									
								
								js/constants/AccountConstants.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								js/constants/AccountConstants.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					var keyMirror = require('keymirror');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = keyMirror({
 | 
				
			||||||
 | 
						FETCH_ACCOUNTS: null,
 | 
				
			||||||
 | 
						ACCOUNTS_FETCHED: null,
 | 
				
			||||||
 | 
						CREATE_ACCOUNT: null,
 | 
				
			||||||
 | 
						ACCOUNT_CREATED: null,
 | 
				
			||||||
 | 
						UPDATE_ACCOUNT: null,
 | 
				
			||||||
 | 
						ACCOUNT_UPDATED: null,
 | 
				
			||||||
 | 
						REMOVE_ACCOUNT: null,
 | 
				
			||||||
 | 
						ACCOUNT_REMOVED: null,
 | 
				
			||||||
 | 
						ACCOUNT_SELECTED: null
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										8
									
								
								js/constants/ErrorConstants.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								js/constants/ErrorConstants.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					var keyMirror = require('keymirror');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = keyMirror({
 | 
				
			||||||
 | 
						ERROR_AJAX: null,
 | 
				
			||||||
 | 
						ERROR_SERVER: null,
 | 
				
			||||||
 | 
						ERROR_CLIENT: null,
 | 
				
			||||||
 | 
						ERROR_USER: null,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										19
									
								
								js/main.js
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								js/main.js
									
									
									
									
									
								
							@@ -1,10 +1,15 @@
 | 
				
			|||||||
var React = require('react');
 | 
					var React = require('react');
 | 
				
			||||||
var ReactDOM = require('react-dom');
 | 
					var ReactDOM = require('react-dom');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var Provider = require('react-redux').Provider;
 | 
				
			||||||
 | 
					var Redux = require('redux');
 | 
				
			||||||
 | 
					var ReduxThunk = require('redux-thunk').default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var Globalize = require('globalize');
 | 
					var Globalize = require('globalize');
 | 
				
			||||||
var globalizeLocalizer = require('react-widgets/lib/localizers/globalize');
 | 
					var globalizeLocalizer = require('react-widgets/lib/localizers/globalize');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var MoneyGoApp = require('./MoneyGoApp.js');
 | 
					var MoneyGoApp = require('./MoneyGoApp.js');
 | 
				
			||||||
 | 
					var MoneyGoReducer = require('./reducers/MoneyGoReducer');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Setup globalization for react-widgets
 | 
					// Setup globalization for react-widgets
 | 
				
			||||||
//Globalize.load(require("cldr-data").entireSupplemental());
 | 
					//Globalize.load(require("cldr-data").entireSupplemental());
 | 
				
			||||||
@@ -19,5 +24,17 @@ Globalize.locale('en');
 | 
				
			|||||||
globalizeLocalizer(Globalize);
 | 
					globalizeLocalizer(Globalize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(document).ready(function() {
 | 
					$(document).ready(function() {
 | 
				
			||||||
	ReactDOM.render(<MoneyGoApp />, document.getElementById("content"));
 | 
						var store = Redux.createStore(
 | 
				
			||||||
 | 
							MoneyGoReducer,
 | 
				
			||||||
 | 
							Redux.applyMiddleware(
 | 
				
			||||||
 | 
								ReduxThunk
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ReactDOM.render(
 | 
				
			||||||
 | 
							<Provider store={store}>
 | 
				
			||||||
 | 
								<MoneyGoApp />
 | 
				
			||||||
 | 
							</Provider>,
 | 
				
			||||||
 | 
							document.getElementById("content")
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								js/reducers/AccountReducer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								js/reducers/AccountReducer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					var assign = require('object-assign');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var AccountConstants = require('../constants/AccountConstants');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = function(state = {}, action) {
 | 
				
			||||||
 | 
						switch (action.type) {
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNTS_FETCHED:
 | 
				
			||||||
 | 
								var accounts = {};
 | 
				
			||||||
 | 
								for (var i = 0; i < action.accounts.length; i++) {
 | 
				
			||||||
 | 
									var account = action.accounts[i];
 | 
				
			||||||
 | 
									accounts[account.AccountId] = account;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return accounts;
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNT_CREATED:
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNT_UPDATED:
 | 
				
			||||||
 | 
								var account = action.account;
 | 
				
			||||||
 | 
								return assign({}, state, {
 | 
				
			||||||
 | 
									[account.AccountId]: account
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNT_REMOVED:
 | 
				
			||||||
 | 
								var newstate = assign({}, state);
 | 
				
			||||||
 | 
								delete newstate[action.accountId];
 | 
				
			||||||
 | 
								return newstate;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								return state;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										9
									
								
								js/reducers/MoneyGoReducer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								js/reducers/MoneyGoReducer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					var Redux = require('redux');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var AccountReducer = require('./AccountReducer');
 | 
				
			||||||
 | 
					var SelectedAccountReducer = require('./SelectedAccountReducer');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = Redux.combineReducers({
 | 
				
			||||||
 | 
						accounts: AccountReducer,
 | 
				
			||||||
 | 
						selectedAccount: SelectedAccountReducer
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										20
									
								
								js/reducers/SelectedAccountReducer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								js/reducers/SelectedAccountReducer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					var AccountConstants = require('../constants/AccountConstants');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = function(state = -1, action) {
 | 
				
			||||||
 | 
						switch (action.type) {
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNTS_FETCHED:
 | 
				
			||||||
 | 
								for (var i = 0; i < action.accounts.length; i++) {
 | 
				
			||||||
 | 
									if (action.accounts[i].AccountId == state)
 | 
				
			||||||
 | 
										return state;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return -1;
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNT_REMOVED:
 | 
				
			||||||
 | 
								if (action.accountId == state)
 | 
				
			||||||
 | 
									return -1;
 | 
				
			||||||
 | 
								return state;
 | 
				
			||||||
 | 
							case AccountConstants.ACCOUNT_SELECTED:
 | 
				
			||||||
 | 
								return action.accountId;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								return state;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user