storage middleware wip, add optimization comment
This commit is contained in:
parent
4c1197a3b5
commit
3373b83a27
|
@ -3,7 +3,7 @@ import { createAction } from 'redux-actions'
|
||||||
import { type Token } from '~/logic/tokens/store/model/token'
|
import { type Token } from '~/logic/tokens/store/model/token'
|
||||||
import { setActiveTokens, getActiveTokens, setToken } from '~/logic/tokens/utils/tokensStorage'
|
import { setActiveTokens, getActiveTokens, setToken } from '~/logic/tokens/utils/tokensStorage'
|
||||||
import type { Dispatch as ReduxDispatch } from 'redux'
|
import type { Dispatch as ReduxDispatch } from 'redux'
|
||||||
import { type GlobalState } from '~/store/index'
|
import { type GlobalState } from '~/store/'
|
||||||
|
|
||||||
export const ADD_TOKEN = 'ADD_TOKEN'
|
export const ADD_TOKEN = 'ADD_TOKEN'
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ import Spacer from '~/components/Spacer'
|
||||||
import Row from '~/components/layout/Row'
|
import Row from '~/components/layout/Row'
|
||||||
import { ETH_ADDRESS } from '~/logic/tokens/utils/tokenHelpers'
|
import { ETH_ADDRESS } from '~/logic/tokens/utils/tokenHelpers'
|
||||||
import { type Token } from '~/logic/tokens/store/model/token'
|
import { type Token } from '~/logic/tokens/store/model/token'
|
||||||
import { type SafeToken } from '~/routes/safe/store/models/safeToken'
|
import { type TokenBalance } from '~/routes/safe/store/models/tokenBalance'
|
||||||
import actions, { type Actions } from './actions'
|
import actions, { type Actions } from './actions'
|
||||||
import TokenPlaceholder from './assets/token_placeholder.png'
|
import TokenPlaceholder from './assets/token_placeholder.png'
|
||||||
import { styles } from './style'
|
import { styles } from './style'
|
||||||
|
@ -48,6 +48,11 @@ const filterBy = (filter: string, tokens: List<Token>): List<Token> => tokens.fi
|
||||||
|| token.name.toLowerCase().includes(filter.toLowerCase()),
|
|| token.name.toLowerCase().includes(filter.toLowerCase()),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// OPTIMIZATION IDEA (Thanks Andre)
|
||||||
|
// Calculate active tokens on component mount, store it in component state
|
||||||
|
// After user closes modal, dispatch an action so we dont have 100500 actions
|
||||||
|
// And selectors dont recalculate
|
||||||
|
|
||||||
class Tokens extends React.Component<Props, State> {
|
class Tokens extends React.Component<Props, State> {
|
||||||
state = {
|
state = {
|
||||||
filter: '',
|
filter: '',
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
// @flow
|
||||||
|
import { ADD_SAFE } from '~/routes/safe/store/actions/addSafe'
|
||||||
|
import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe'
|
||||||
|
import { saveToStorage } from '~/utils/storage'
|
||||||
|
import { SAFES_KEY } from '~/logic/safe/utils'
|
||||||
|
import type { GetState } from 'redux'
|
||||||
|
import { type GlobalState } from '~/store/'
|
||||||
|
|
||||||
|
const watchedActions = [ADD_SAFE, UPDATE_SAFE]
|
||||||
|
|
||||||
|
const safeStorageMware = store => next => async (action) => {
|
||||||
|
const handledAction = next(action)
|
||||||
|
if (watchedActions.includes(action.type)) {
|
||||||
|
const { getState }: { getState: GetState } = store
|
||||||
|
const state: GlobalState = store.getState()
|
||||||
|
console.log(state)
|
||||||
|
}
|
||||||
|
return handledAction
|
||||||
|
}
|
||||||
|
|
||||||
|
export default safeStorageMware
|
|
@ -7,6 +7,7 @@ import {
|
||||||
import thunk from 'redux-thunk'
|
import thunk from 'redux-thunk'
|
||||||
import provider, { PROVIDER_REDUCER_ID, type State as ProviderState } from '~/logic/wallets/store/reducer/provider'
|
import provider, { PROVIDER_REDUCER_ID, type State as ProviderState } from '~/logic/wallets/store/reducer/provider'
|
||||||
import safe, { SAFE_REDUCER_ID, type State as SafeState } from '~/routes/safe/store/reducer/safe'
|
import safe, { SAFE_REDUCER_ID, type State as SafeState } from '~/routes/safe/store/reducer/safe'
|
||||||
|
import safeStorage from '~/routes/safe/store/middleware/safeStorage'
|
||||||
import tokens, { TOKEN_REDUCER_ID, type State as TokensState } from '~/logic/tokens/store/reducer/tokens'
|
import tokens, { TOKEN_REDUCER_ID, type State as TokensState } from '~/logic/tokens/store/reducer/tokens'
|
||||||
import transactions, {
|
import transactions, {
|
||||||
type State as TransactionsState,
|
type State as TransactionsState,
|
||||||
|
@ -17,7 +18,7 @@ export const history = createBrowserHistory()
|
||||||
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
|
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
|
||||||
const finalCreateStore = composeEnhancers(applyMiddleware(thunk, routerMiddleware(history)))
|
const finalCreateStore = composeEnhancers(applyMiddleware(thunk, routerMiddleware(history), safeStorage))
|
||||||
|
|
||||||
export type GlobalState = {
|
export type GlobalState = {
|
||||||
providers: ProviderState,
|
providers: ProviderState,
|
||||||
|
|
Loading…
Reference in New Issue