Update ActionType enum and move from using _.assign in reducer

This commit is contained in:
Fabio Berger
2017-12-17 20:06:49 -05:00
parent 449fd9f024
commit 90d274ffc4
3 changed files with 222 additions and 180 deletions

View File

@@ -22,42 +22,42 @@ export class Dispatcher {
// Portal
public resetState() {
this.dispatch({
type: ActionTypes.RESET_STATE,
type: ActionTypes.ResetState,
});
}
public updateNodeVersion(nodeVersion: string) {
this.dispatch({
data: nodeVersion,
type: ActionTypes.UPDATE_NODE_VERSION,
type: ActionTypes.UpdateNodeVersion,
});
}
public updateScreenWidth(screenWidth: ScreenWidths) {
this.dispatch({
data: screenWidth,
type: ActionTypes.UPDATE_SCREEN_WIDTH,
type: ActionTypes.UpdateScreenWidth,
});
}
public swapAssetTokenSymbols() {
this.dispatch({
type: ActionTypes.SWAP_ASSET_TOKENS,
type: ActionTypes.SwapAssetTokens,
});
}
public updateOrderSalt(salt: BigNumber) {
this.dispatch({
data: salt,
type: ActionTypes.UPDATE_ORDER_SALT,
type: ActionTypes.UpdateOrderSalt,
});
}
public updateUserSuppliedOrderCache(order: Order) {
this.dispatch({
data: order,
type: ActionTypes.UPDATE_USER_SUPPLIED_ORDER_CACHE,
type: ActionTypes.UpdateUserSuppliedOrderCache,
});
}
public updateShouldBlockchainErrDialogBeOpen(shouldBeOpen: boolean) {
this.dispatch({
data: shouldBeOpen,
type: ActionTypes.UPDATE_SHOULD_BLOCKCHAIN_ERR_DIALOG_BE_OPEN,
type: ActionTypes.UpdateShouldBlockchainErrDialogBeOpen,
});
}
public updateChosenAssetToken(side: Side, token: AssetToken) {
@@ -66,7 +66,7 @@ export class Dispatcher {
side,
token,
},
type: ActionTypes.UPDATE_CHOSEN_ASSET_TOKEN,
type: ActionTypes.UpdateChosenAssetToken,
});
}
public updateChosenAssetTokenAddress(side: Side, address: string) {
@@ -75,72 +75,72 @@ export class Dispatcher {
address,
side,
},
type: ActionTypes.UPDATE_CHOSEN_ASSET_TOKEN_ADDRESS,
type: ActionTypes.UpdateChosenAssetTokenAddress,
});
}
public updateOrderTakerAddress(address: string) {
this.dispatch({
data: address,
type: ActionTypes.UPDATE_ORDER_TAKER_ADDRESS,
type: ActionTypes.UpdateOrderTakerAddress,
});
}
public updateUserAddress(address: string) {
this.dispatch({
data: address,
type: ActionTypes.UPDATE_USER_ADDRESS,
type: ActionTypes.UpdateUserAddress,
});
}
public updateOrderExpiry(unixTimestampSec: BigNumber) {
this.dispatch({
data: unixTimestampSec,
type: ActionTypes.UPDATE_ORDER_EXPIRY,
type: ActionTypes.UpdateOrderExpiry,
});
}
public encounteredBlockchainError(err: BlockchainErrs) {
this.dispatch({
data: err,
type: ActionTypes.BLOCKCHAIN_ERR_ENCOUNTERED,
type: ActionTypes.BlockchainErrEncountered,
});
}
public updateBlockchainIsLoaded(isLoaded: boolean) {
this.dispatch({
data: isLoaded,
type: ActionTypes.UPDATE_BLOCKCHAIN_IS_LOADED,
type: ActionTypes.UpdateBlockchainIsLoaded,
});
}
public addTokenToTokenByAddress(token: Token) {
this.dispatch({
data: token,
type: ActionTypes.ADD_TOKEN_TO_TOKEN_BY_ADDRESS,
type: ActionTypes.AddTokenToTokenByAddress,
});
}
public removeTokenToTokenByAddress(token: Token) {
this.dispatch({
data: token,
type: ActionTypes.REMOVE_TOKEN_TO_TOKEN_BY_ADDRESS,
type: ActionTypes.RemoveTokenFromTokenByAddress,
});
}
public clearTokenByAddress() {
this.dispatch({
type: ActionTypes.CLEAR_TOKEN_BY_ADDRESS,
type: ActionTypes.ClearTokenByAddress,
});
}
public updateTokenByAddress(tokens: Token[]) {
this.dispatch({
data: tokens,
type: ActionTypes.UPDATE_TOKEN_BY_ADDRESS,
type: ActionTypes.UpdateTokenByAddress,
});
}
public updateTokenStateByAddress(tokenStateByAddress: TokenStateByAddress) {
this.dispatch({
data: tokenStateByAddress,
type: ActionTypes.UPDATE_TOKEN_STATE_BY_ADDRESS,
type: ActionTypes.UpdateTokenStateByAddress,
});
}
public removeFromTokenStateByAddress(tokenAddress: string) {
this.dispatch({
data: tokenAddress,
type: ActionTypes.REMOVE_FROM_TOKEN_STATE_BY_ADDRESS,
type: ActionTypes.RemoveFromTokenStateByAddress,
});
}
public replaceTokenAllowanceByAddress(address: string, allowance: BigNumber) {
@@ -149,7 +149,7 @@ export class Dispatcher {
address,
allowance,
},
type: ActionTypes.REPLACE_TOKEN_ALLOWANCE_BY_ADDRESS,
type: ActionTypes.ReplaceTokenAllowanceByAddress,
});
}
public replaceTokenBalanceByAddress(address: string, balance: BigNumber) {
@@ -158,7 +158,7 @@ export class Dispatcher {
address,
balance,
},
type: ActionTypes.REPLACE_TOKEN_BALANCE_BY_ADDRESS,
type: ActionTypes.ReplaceTokenBalanceByAddress,
});
}
public updateTokenBalanceByAddress(address: string, balanceDelta: BigNumber) {
@@ -167,31 +167,31 @@ export class Dispatcher {
address,
balanceDelta,
},
type: ActionTypes.UPDATE_TOKEN_BALANCE_BY_ADDRESS,
type: ActionTypes.UpdateTokenBalanceByAddress,
});
}
public updateSignatureData(signatureData: SignatureData) {
this.dispatch({
data: signatureData,
type: ActionTypes.UPDATE_ORDER_SIGNATURE_DATA,
type: ActionTypes.UpdateOrderSignatureData,
});
}
public updateUserEtherBalance(balance: BigNumber) {
this.dispatch({
data: balance,
type: ActionTypes.UPDATE_USER_ETHER_BALANCE,
type: ActionTypes.UpdateUserEtherBalance,
});
}
public updateNetworkId(networkId: number) {
this.dispatch({
data: networkId,
type: ActionTypes.UPDATE_NETWORK_ID,
type: ActionTypes.UpdateNetworkId,
});
}
public updateOrderFillAmount(amount: BigNumber) {
this.dispatch({
data: amount,
type: ActionTypes.UPDATE_ORDER_FILL_AMOUNT,
type: ActionTypes.UpdateOrderFillAmount,
});
}
@@ -199,13 +199,13 @@ export class Dispatcher {
public updateCurrentDocsVersion(version: string) {
this.dispatch({
data: version,
type: ActionTypes.UPDATE_LIBRARY_VERSION,
type: ActionTypes.UpdateLibraryVersion,
});
}
public updateAvailableDocVersions(versions: string[]) {
this.dispatch({
data: versions,
type: ActionTypes.UPDATE_AVAILABLE_LIBRARY_VERSIONS,
type: ActionTypes.UpdateAvailableLibraryVersions,
});
}
@@ -213,23 +213,23 @@ export class Dispatcher {
public showFlashMessage(msg: string|React.ReactNode) {
this.dispatch({
data: msg,
type: ActionTypes.SHOW_FLASH_MESSAGE,
type: ActionTypes.ShowFlashMessage,
});
}
public hideFlashMessage() {
this.dispatch({
type: ActionTypes.HIDE_FLASH_MESSAGE,
type: ActionTypes.HideFlashMessage,
});
}
public updateProviderType(providerType: ProviderType) {
this.dispatch({
type: ActionTypes.UPDATE_PROVIDER_TYPE,
type: ActionTypes.UpdateProviderType,
data: providerType,
});
}
public updateInjectedProviderName(injectedProviderName: string) {
this.dispatch({
type: ActionTypes.UPDATE_INJECTED_PROVIDER_NAME,
type: ActionTypes.UpdateInjectedProviderName,
data: injectedProviderName,
});
}

View File

@@ -94,250 +94,293 @@ const INITIAL_STATE: State = {
export function reducer(state: State = INITIAL_STATE, action: Action) {
switch (action.type) {
// Portal
case ActionTypes.RESET_STATE:
case ActionTypes.ResetState:
return INITIAL_STATE;
case ActionTypes.UPDATE_ORDER_SALT: {
return _.assign({}, state, {
case ActionTypes.UpdateOrderSalt: {
return {
...state,
orderSalt: action.data,
});
};
}
case ActionTypes.UPDATE_NODE_VERSION: {
return _.assign({}, state, {
case ActionTypes.UpdateNodeVersion: {
return {
...state,
nodeVersion: action.data,
});
};
}
case ActionTypes.UPDATE_ORDER_FILL_AMOUNT: {
return _.assign({}, state, {
case ActionTypes.UpdateOrderFillAmount: {
return {
...state,
orderFillAmount: action.data,
});
};
}
case ActionTypes.UPDATE_SHOULD_BLOCKCHAIN_ERR_DIALOG_BE_OPEN: {
return _.assign({}, state, {
case ActionTypes.UpdateShouldBlockchainErrDialogBeOpen: {
return {
...state,
shouldBlockchainErrDialogBeOpen: action.data,
});
};
}
case ActionTypes.UPDATE_USER_ETHER_BALANCE: {
return _.assign({}, state, {
case ActionTypes.UpdateUserEtherBalance: {
return {
...state,
userEtherBalance: action.data,
});
};
}
case ActionTypes.UPDATE_USER_SUPPLIED_ORDER_CACHE: {
return _.assign({}, state, {
case ActionTypes.UpdateUserSuppliedOrderCache: {
return {
...state,
userSuppliedOrderCache: action.data,
});
};
}
case ActionTypes.CLEAR_TOKEN_BY_ADDRESS: {
return _.assign({}, state, {
case ActionTypes.ClearTokenByAddress: {
return {
...state,
tokenByAddress: {},
});
};
}
case ActionTypes.ADD_TOKEN_TO_TOKEN_BY_ADDRESS: {
case ActionTypes.AddTokenToTokenByAddress: {
const newTokenByAddress = state.tokenByAddress;
newTokenByAddress[action.data.address] = action.data;
return _.assign({}, state, {
return {
...state,
tokenByAddress: newTokenByAddress,
});
};
}
case ActionTypes.REMOVE_TOKEN_TO_TOKEN_BY_ADDRESS: {
case ActionTypes.RemoveTokenFromTokenByAddress: {
const newTokenByAddress = state.tokenByAddress;
delete newTokenByAddress[action.data.address];
return _.assign({}, state, {
return {
...state,
tokenByAddress: newTokenByAddress,
});
};
}
case ActionTypes.UPDATE_TOKEN_BY_ADDRESS: {
case ActionTypes.UpdateTokenByAddress: {
const tokenByAddress = state.tokenByAddress;
const tokens = action.data;
_.each(tokens, token => {
const updatedToken = _.assign({}, tokenByAddress[token.address], token);
const updatedToken = {
...tokenByAddress[token.address],
...token,
};
tokenByAddress[token.address] = updatedToken;
});
return _.assign({}, state, {
return {
...state,
tokenByAddress,
});
};
}
case ActionTypes.UPDATE_TOKEN_STATE_BY_ADDRESS: {
case ActionTypes.UpdateTokenStateByAddress: {
const tokenStateByAddress = state.tokenStateByAddress;
const updatedTokenStateByAddress = action.data;
_.each(updatedTokenStateByAddress, (tokenState: TokenState, address: string) => {
const updatedTokenState = _.assign({}, tokenStateByAddress[address], tokenState);
const updatedTokenState = {
...tokenStateByAddress[address],
...tokenState,
};
tokenStateByAddress[address] = updatedTokenState;
});
return _.assign({}, state, {
return {
...state,
tokenStateByAddress,
});
};
}
case ActionTypes.REMOVE_FROM_TOKEN_STATE_BY_ADDRESS: {
case ActionTypes.RemoveFromTokenStateByAddress: {
const tokenStateByAddress = state.tokenStateByAddress;
const tokenAddress = action.data;
delete tokenStateByAddress[tokenAddress];
return _.assign({}, state, {
return {
...state,
tokenStateByAddress,
});
};
}
case ActionTypes.REPLACE_TOKEN_ALLOWANCE_BY_ADDRESS: {
case ActionTypes.ReplaceTokenAllowanceByAddress: {
const tokenStateByAddress = state.tokenStateByAddress;
const allowance = action.data.allowance;
const tokenAddress = action.data.address;
tokenStateByAddress[tokenAddress] = _.assign({}, tokenStateByAddress[tokenAddress], {
tokenStateByAddress[tokenAddress] = {
...tokenStateByAddress[tokenAddress],
allowance,
});
return _.assign({}, state, {
};
return {
...state,
tokenStateByAddress,
});
};
}
case ActionTypes.REPLACE_TOKEN_BALANCE_BY_ADDRESS: {
case ActionTypes.ReplaceTokenBalanceByAddress: {
const tokenStateByAddress = state.tokenStateByAddress;
const balance = action.data.balance;
const tokenAddress = action.data.address;
tokenStateByAddress[tokenAddress] = _.assign({}, tokenStateByAddress[tokenAddress], {
tokenStateByAddress[tokenAddress] = {
...tokenStateByAddress[tokenAddress],
balance,
});
return _.assign({}, state, {
};
return {
...state,
tokenStateByAddress,
});
};
}
case ActionTypes.UPDATE_TOKEN_BALANCE_BY_ADDRESS: {
case ActionTypes.UpdateTokenBalanceByAddress: {
const tokenStateByAddress = state.tokenStateByAddress;
const balanceDelta = action.data.balanceDelta;
const tokenAddress = action.data.address;
const currBalance = tokenStateByAddress[tokenAddress].balance;
tokenStateByAddress[tokenAddress] = _.assign({}, tokenStateByAddress[tokenAddress], {
tokenStateByAddress[tokenAddress] = {
...tokenStateByAddress[tokenAddress],
balance: currBalance.plus(balanceDelta),
});
return _.assign({}, state, {
};
return {
...state,
tokenStateByAddress,
});
};
}
case ActionTypes.UPDATE_ORDER_SIGNATURE_DATA: {
return _.assign({}, state, {
case ActionTypes.UpdateOrderSignatureData: {
return {
...state,
orderSignatureData: action.data,
});
};
}
case ActionTypes.UPDATE_SCREEN_WIDTH: {
return _.assign({}, state, {
case ActionTypes.UpdateScreenWidth: {
return {
...state,
screenWidth: action.data,
});
};
}
case ActionTypes.UPDATE_BLOCKCHAIN_IS_LOADED: {
return _.assign({}, state, {
case ActionTypes.UpdateBlockchainIsLoaded: {
return {
...state,
blockchainIsLoaded: action.data,
});
};
}
case ActionTypes.BLOCKCHAIN_ERR_ENCOUNTERED: {
return _.assign({}, state, {
case ActionTypes.BlockchainErrEncountered: {
return {
...state,
blockchainErr: action.data,
});
};
}
case ActionTypes.UPDATE_NETWORK_ID: {
return _.assign({}, state, {
case ActionTypes.UpdateNetworkId: {
return {
...state,
networkId: action.data,
});
};
}
case ActionTypes.UPDATE_CHOSEN_ASSET_TOKEN: {
const newSideToAssetToken = _.assign({}, state.sideToAssetToken, {
case ActionTypes.UpdateChosenAssetToken: {
const newSideToAssetToken = {
...state.sideToAssetToken,
[action.data.side]: action.data.token,
});
return _.assign({}, state, {
};
return {
...state,
sideToAssetToken: newSideToAssetToken,
});
};
}
case ActionTypes.UPDATE_CHOSEN_ASSET_TOKEN_ADDRESS: {
case ActionTypes.UpdateChosenAssetTokenAddress: {
const newAssetToken = state.sideToAssetToken[action.data.side];
newAssetToken.address = action.data.address;
const newSideToAssetToken = _.assign({}, state.sideToAssetToken, {
const newSideToAssetToken = {
...state.sideToAssetToken,
[action.data.side]: newAssetToken,
});
return _.assign({}, state, {
};
return {
...state,
sideToAssetToken: newSideToAssetToken,
});
};
}
case ActionTypes.SWAP_ASSET_TOKENS: {
const newSideToAssetToken = _.assign({}, state.sideToAssetToken, {
case ActionTypes.SwapAssetTokens: {
const newSideToAssetToken = {
[Side.Deposit]: state.sideToAssetToken[Side.Receive],
[Side.Receive]: state.sideToAssetToken[Side.Deposit],
});
return _.assign({}, state, {
};
return {
...state,
sideToAssetToken: newSideToAssetToken,
});
};
}
case ActionTypes.UPDATE_ORDER_EXPIRY: {
return _.assign({}, state, {
case ActionTypes.UpdateOrderExpiry: {
return {
...state,
orderExpiryTimestamp: action.data,
});
};
}
case ActionTypes.UPDATE_ORDER_TAKER_ADDRESS: {
return _.assign({}, state, {
case ActionTypes.UpdateOrderTakerAddress: {
return {
...state,
orderTakerAddress: action.data,
});
};
}
case ActionTypes.UPDATE_USER_ADDRESS: {
return _.assign({}, state, {
case ActionTypes.UpdateUserAddress: {
return {
...state,
userAddress: action.data,
});
};
}
// Docs
case ActionTypes.UPDATE_LIBRARY_VERSION: {
return _.assign({}, state, {
case ActionTypes.UpdateLibraryVersion: {
return {
...state,
docsVersion: action.data,
});
};
}
case ActionTypes.UPDATE_AVAILABLE_LIBRARY_VERSIONS: {
return _.assign({}, state, {
case ActionTypes.UpdateAvailableLibraryVersions: {
return {
...state,
availableDocVersions: action.data,
});
};
}
// Shared
case ActionTypes.SHOW_FLASH_MESSAGE: {
return _.assign({}, state, {
case ActionTypes.ShowFlashMessage: {
return {
...state,
flashMessage: action.data,
});
};
}
case ActionTypes.HIDE_FLASH_MESSAGE: {
return _.assign({}, state, {
case ActionTypes.HideFlashMessage: {
return {
...state,
flashMessage: undefined,
});
};
}
case ActionTypes.UPDATE_PROVIDER_TYPE: {
return _.assign({}, state, {
case ActionTypes.UpdateProviderType: {
return {
...state,
providerType: action.data,
});
};
}
case ActionTypes.UPDATE_INJECTED_PROVIDER_NAME: {
return _.assign({}, state, {
case ActionTypes.UpdateInjectedProviderName: {
return {
...state,
injectedProviderName: action.data,
});
};
}
default:

View File

@@ -117,47 +117,46 @@ export enum BalanceErrs {
allowanceSettingFailed,
}
export const ActionTypes = strEnum([
export enum ActionTypes {
// Portal
'UPDATE_SCREEN_WIDTH',
'UPDATE_NODE_VERSION',
'RESET_STATE',
'ADD_TOKEN_TO_TOKEN_BY_ADDRESS',
'BLOCKCHAIN_ERR_ENCOUNTERED',
'CLEAR_TOKEN_BY_ADDRESS',
'UPDATE_BLOCKCHAIN_IS_LOADED',
'UPDATE_NETWORK_ID',
'UPDATE_CHOSEN_ASSET_TOKEN',
'UPDATE_CHOSEN_ASSET_TOKEN_ADDRESS',
'UPDATE_ORDER_TAKER_ADDRESS',
'UPDATE_ORDER_SALT',
'UPDATE_ORDER_SIGNATURE_DATA',
'UPDATE_TOKEN_BY_ADDRESS',
'REMOVE_TOKEN_TO_TOKEN_BY_ADDRESS',
'UPDATE_TOKEN_STATE_BY_ADDRESS',
'REMOVE_FROM_TOKEN_STATE_BY_ADDRESS',
'REPLACE_TOKEN_ALLOWANCE_BY_ADDRESS',
'REPLACE_TOKEN_BALANCE_BY_ADDRESS',
'UPDATE_TOKEN_BALANCE_BY_ADDRESS',
'UPDATE_ORDER_EXPIRY',
'SWAP_ASSET_TOKENS',
'UPDATE_USER_ADDRESS',
'UPDATE_USER_ETHER_BALANCE',
'UPDATE_USER_SUPPLIED_ORDER_CACHE',
'UPDATE_ORDER_FILL_AMOUNT',
'UPDATE_SHOULD_BLOCKCHAIN_ERR_DIALOG_BE_OPEN',
UpdateScreenWidth = 'UPDATE_SCREEN_WIDTH',
UpdateNodeVersion = 'UPDATE_NODE_VERSION',
ResetState = 'RESET_STATE',
AddTokenToTokenByAddress = 'ADD_TOKEN_TO_TOKEN_BY_ADDRESS',
BlockchainErrEncountered = 'BLOCKCHAIN_ERR_ENCOUNTERED',
ClearTokenByAddress = 'CLEAR_TOKEN_BY_ADDRESS',
UpdateBlockchainIsLoaded = 'UPDATE_BLOCKCHAIN_IS_LOADED',
UpdateNetworkId = 'UPDATE_NETWORK_ID',
UpdateChosenAssetToken = 'UPDATE_CHOSEN_ASSET_TOKEN',
UpdateChosenAssetTokenAddress = 'UPDATE_CHOSEN_ASSET_TOKEN_ADDRESS',
UpdateOrderTakerAddress = 'UPDATE_ORDER_TAKER_ADDRESS',
UpdateOrderSalt = 'UPDATE_ORDER_SALT',
UpdateOrderSignatureData = 'UPDATE_ORDER_SIGNATURE_DATA',
UpdateTokenByAddress = 'UPDATE_TOKEN_BY_ADDRESS',
RemoveTokenFromTokenByAddress = 'REMOVE_TOKEN_FROM_TOKEN_BY_ADDRESS',
UpdateTokenStateByAddress = 'UPDATE_TOKEN_STATE_BY_ADDRESS',
RemoveFromTokenStateByAddress = 'REMOVE_FROM_TOKEN_STATE_BY_ADDRESS',
ReplaceTokenAllowanceByAddress = 'REPLACE_TOKEN_ALLOWANCE_BY_ADDRESS',
ReplaceTokenBalanceByAddress = 'REPLACE_TOKEN_BALANCE_BY_ADDRESS',
UpdateTokenBalanceByAddress = 'UPDATE_TOKEN_BALANCE_BY_ADDRESS',
UpdateOrderExpiry = 'UPDATE_ORDER_EXPIRY',
SwapAssetTokens = 'SWAP_ASSET_TOKENS',
UpdateUserAddress = 'UPDATE_USER_ADDRESS',
UpdateUserEtherBalance = 'UPDATE_USER_ETHER_BALANCE',
UpdateUserSuppliedOrderCache = 'UPDATE_USER_SUPPLIED_ORDER_CACHE',
UpdateOrderFillAmount = 'UPDATE_ORDER_FILL_AMOUNT',
UpdateShouldBlockchainErrDialogBeOpen = 'UPDATE_SHOULD_BLOCKCHAIN_ERR_DIALOG_BE_OPEN',
// Docs
'UPDATE_LIBRARY_VERSION',
'UPDATE_AVAILABLE_LIBRARY_VERSIONS',
UpdateLibraryVersion = 'UPDATE_LIBRARY_VERSION',
UpdateAvailableLibraryVersions = 'UPDATE_AVAILABLE_LIBRARY_VERSIONS',
// Shared
'SHOW_FLASH_MESSAGE',
'HIDE_FLASH_MESSAGE',
'UPDATE_PROVIDER_TYPE',
'UPDATE_INJECTED_PROVIDER_NAME',
]);
export type ActionTypes = keyof typeof ActionTypes;
ShowFlashMessage = 'SHOW_FLASH_MESSAGE',
HideFlashMessage = 'HIDE_FLASH_MESSAGE',
UpdateProviderType = 'UPDATE_PROVIDER_TYPE',
UpdateInjectedProviderName = 'UPDATE_INJECTED_PROVIDER_NAME',
}
export interface Action {
type: ActionTypes;