|
|
|
import { compose } from 'redux';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { withRouter } from 'react-router-dom';
|
|
|
|
import {
|
|
|
|
activeTabHasPermissions,
|
|
|
|
getCurrentEthBalance,
|
|
|
|
getFirstPermissionRequest,
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(flask)
|
|
|
|
getFirstSnapUpdateRequest,
|
|
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
getIsMainnet,
|
|
|
|
getOriginOfCurrentTab,
|
|
|
|
getTotalUnapprovedCount,
|
|
|
|
getUnapprovedTemplatedConfirmations,
|
|
|
|
getWeb3ShimUsageStateForOrigin,
|
|
|
|
unconfirmedTransactionsCountSelector,
|
|
|
|
getInfuraBlocked,
|
|
|
|
getShowWhatsNewPopup,
|
|
|
|
getSortedAnnouncementsToShow,
|
|
|
|
getShowRecoveryPhraseReminder,
|
|
|
|
getNewNetworkAdded,
|
|
|
|
hasUnsignedQRHardwareTransaction,
|
|
|
|
hasUnsignedQRHardwareMessage,
|
|
|
|
getNewCollectibleAddedMessage,
|
|
|
|
getNewTokensImported,
|
|
|
|
} from '../../selectors';
|
|
|
|
|
|
|
|
import {
|
|
|
|
closeNotificationPopup,
|
|
|
|
restoreFromThreeBox,
|
|
|
|
turnThreeBoxSyncingOn,
|
|
|
|
getThreeBoxLastUpdated,
|
|
|
|
setShowRestorePromptToFalse,
|
|
|
|
setConnectedStatusPopoverHasBeenShown,
|
|
|
|
setDefaultHomeActiveTabName,
|
|
|
|
setWeb3ShimUsageAlertDismissed,
|
|
|
|
setAlertEnabledness,
|
|
|
|
setRecoveryPhraseReminderHasBeenShown,
|
|
|
|
setRecoveryPhraseReminderLastShown,
|
|
|
|
setNewNetworkAdded,
|
|
|
|
setNewCollectibleAddedMessage,
|
|
|
|
setNewTokensImported,
|
|
|
|
setRpcTarget,
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(flask)
|
|
|
|
removeSnapError,
|
|
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
} from '../../store/actions';
|
|
|
|
import {
|
|
|
|
setThreeBoxLastUpdated,
|
|
|
|
hideWhatsNewPopup,
|
|
|
|
setNewCustomNetworkAdded,
|
|
|
|
} from '../../ducks/app/app';
|
|
|
|
import { getWeb3ShimUsageAlertEnabledness } from '../../ducks/metamask/metamask';
|
|
|
|
import { getSwapsFeatureIsLive } from '../../ducks/swaps/swaps';
|
|
|
|
import { getEnvironmentType } from '../../../app/scripts/lib/util';
|
|
|
|
import {
|
|
|
|
ENVIRONMENT_TYPE_NOTIFICATION,
|
|
|
|
ENVIRONMENT_TYPE_POPUP,
|
|
|
|
} from '../../../shared/constants/app';
|
|
|
|
import {
|
|
|
|
ALERT_TYPES,
|
|
|
|
WEB3_SHIM_USAGE_ALERT_STATES,
|
|
|
|
} from '../../../shared/constants/alerts';
|
|
|
|
import Home from './home.component';
|
|
|
|
|
|
|
|
const mapStateToProps = (state) => {
|
|
|
|
const { metamask, appState } = state;
|
|
|
|
const {
|
|
|
|
suggestedAssets,
|
|
|
|
seedPhraseBackedUp,
|
|
|
|
tokens,
|
|
|
|
threeBoxSynced,
|
|
|
|
showRestorePrompt,
|
|
|
|
selectedAddress,
|
|
|
|
connectedStatusPopoverHasBeenShown,
|
|
|
|
defaultHomeActiveTabName,
|
|
|
|
swapsState,
|
|
|
|
dismissSeedBackUpReminder,
|
|
|
|
firstTimeFlowType,
|
|
|
|
completedOnboarding,
|
|
|
|
} = metamask;
|
|
|
|
const accountBalance = getCurrentEthBalance(state);
|
|
|
|
const { forgottenPassword, threeBoxLastUpdated } = appState;
|
|
|
|
const totalUnapprovedCount = getTotalUnapprovedCount(state);
|
|
|
|
const swapsEnabled = getSwapsFeatureIsLive(state);
|
|
|
|
const pendingConfirmations = getUnapprovedTemplatedConfirmations(state);
|
|
|
|
|
|
|
|
const envType = getEnvironmentType();
|
|
|
|
const isPopup = envType === ENVIRONMENT_TYPE_POPUP;
|
|
|
|
const isNotification = envType === ENVIRONMENT_TYPE_NOTIFICATION;
|
|
|
|
|
|
|
|
let firstPermissionsRequest, firstPermissionsRequestId;
|
|
|
|
firstPermissionsRequest = getFirstPermissionRequest(state);
|
|
|
|
firstPermissionsRequestId = firstPermissionsRequest?.metadata.id || null;
|
|
|
|
|
|
|
|
// getFirstPermissionRequest should be updated with snap update logic once we hit main extension release
|
|
|
|
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(flask)
|
|
|
|
if (!firstPermissionsRequest) {
|
|
|
|
firstPermissionsRequest = getFirstSnapUpdateRequest(state);
|
|
|
|
firstPermissionsRequestId = firstPermissionsRequest?.metadata.id || null;
|
|
|
|
}
|
|
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
|
|
|
|
const originOfCurrentTab = getOriginOfCurrentTab(state);
|
|
|
|
const shouldShowWeb3ShimUsageNotification =
|
|
|
|
isPopup &&
|
|
|
|
getWeb3ShimUsageAlertEnabledness(state) &&
|
|
|
|
activeTabHasPermissions(state) &&
|
|
|
|
getWeb3ShimUsageStateForOrigin(state, originOfCurrentTab) ===
|
|
|
|
WEB3_SHIM_USAGE_ALERT_STATES.RECORDED;
|
|
|
|
|
|
|
|
const isSigningQRHardwareTransaction =
|
|
|
|
hasUnsignedQRHardwareTransaction(state) ||
|
|
|
|
hasUnsignedQRHardwareMessage(state);
|
|
|
|
|
|
|
|
return {
|
|
|
|
forgottenPassword,
|
|
|
|
suggestedAssets,
|
|
|
|
swapsEnabled,
|
|
|
|
unconfirmedTransactionsCount: unconfirmedTransactionsCountSelector(state),
|
|
|
|
shouldShowSeedPhraseReminder:
|
|
|
|
seedPhraseBackedUp === false &&
|
|
|
|
(parseInt(accountBalance, 16) > 0 || tokens.length > 0) &&
|
|
|
|
dismissSeedBackUpReminder === false,
|
|
|
|
isPopup,
|
|
|
|
isNotification,
|
|
|
|
threeBoxSynced,
|
|
|
|
showRestorePrompt,
|
|
|
|
selectedAddress,
|
|
|
|
threeBoxLastUpdated,
|
|
|
|
firstPermissionsRequestId,
|
|
|
|
totalUnapprovedCount,
|
|
|
|
connectedStatusPopoverHasBeenShown,
|
|
|
|
defaultHomeActiveTabName,
|
|
|
|
firstTimeFlowType,
|
|
|
|
completedOnboarding,
|
|
|
|
haveSwapsQuotes: Boolean(Object.values(swapsState.quotes || {}).length),
|
|
|
|
swapsFetchParams: swapsState.fetchParams,
|
|
|
|
showAwaitingSwapScreen: swapsState.routeState === 'awaiting',
|
|
|
|
isMainnet: getIsMainnet(state),
|
|
|
|
originOfCurrentTab,
|
|
|
|
shouldShowWeb3ShimUsageNotification,
|
|
|
|
pendingConfirmations,
|
|
|
|
infuraBlocked: getInfuraBlocked(state),
|
|
|
|
announcementsToShow: getSortedAnnouncementsToShow(state).length > 0,
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(flask)
|
|
|
|
errorsToShow: metamask.snapErrors,
|
|
|
|
shouldShowErrors: Object.entries(metamask.snapErrors || []).length > 0,
|
|
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
showWhatsNewPopup: getShowWhatsNewPopup(state),
|
|
|
|
showRecoveryPhraseReminder: getShowRecoveryPhraseReminder(state),
|
|
|
|
seedPhraseBackedUp,
|
|
|
|
newNetworkAdded: getNewNetworkAdded(state),
|
|
|
|
isSigningQRHardwareTransaction,
|
|
|
|
newCollectibleAddedMessage: getNewCollectibleAddedMessage(state),
|
|
|
|
newTokensImported: getNewTokensImported(state),
|
|
|
|
newCustomNetworkAdded: appState.newCustomNetworkAdded,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const mapDispatchToProps = (dispatch) => ({
|
|
|
|
closeNotificationPopup: () => closeNotificationPopup(),
|
|
|
|
turnThreeBoxSyncingOn: () => dispatch(turnThreeBoxSyncingOn()),
|
|
|
|
setupThreeBox: () => {
|
|
|
|
dispatch(getThreeBoxLastUpdated()).then((lastUpdated) => {
|
|
|
|
if (lastUpdated) {
|
|
|
|
dispatch(setThreeBoxLastUpdated(lastUpdated));
|
|
|
|
} else {
|
|
|
|
dispatch(setShowRestorePromptToFalse());
|
|
|
|
dispatch(turnThreeBoxSyncingOn());
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
///: BEGIN:ONLY_INCLUDE_IN(flask)
|
|
|
|
removeSnapError: async (id) => await removeSnapError(id),
|
|
|
|
///: END:ONLY_INCLUDE_IN
|
|
|
|
restoreFromThreeBox: (address) => dispatch(restoreFromThreeBox(address)),
|
|
|
|
setShowRestorePromptToFalse: () => dispatch(setShowRestorePromptToFalse()),
|
|
|
|
setConnectedStatusPopoverHasBeenShown: () =>
|
|
|
|
dispatch(setConnectedStatusPopoverHasBeenShown()),
|
|
|
|
onTabClick: (name) => dispatch(setDefaultHomeActiveTabName(name)),
|
|
|
|
setWeb3ShimUsageAlertDismissed: (origin) =>
|
|
|
|
setWeb3ShimUsageAlertDismissed(origin),
|
|
|
|
disableWeb3ShimUsageAlert: () =>
|
|
|
|
setAlertEnabledness(ALERT_TYPES.web3ShimUsage, false),
|
|
|
|
hideWhatsNewPopup: () => dispatch(hideWhatsNewPopup()),
|
|
|
|
setRecoveryPhraseReminderHasBeenShown: () =>
|
|
|
|
dispatch(setRecoveryPhraseReminderHasBeenShown()),
|
|
|
|
setRecoveryPhraseReminderLastShown: (lastShown) =>
|
|
|
|
dispatch(setRecoveryPhraseReminderLastShown(lastShown)),
|
|
|
|
setNewNetworkAdded: (newNetwork) => {
|
|
|
|
dispatch(setNewNetworkAdded(newNetwork));
|
|
|
|
},
|
|
|
|
setNewCollectibleAddedMessage: (message) => {
|
|
|
|
dispatch(setNewCollectibleAddedMessage(message));
|
|
|
|
},
|
|
|
|
setNewTokensImported: (newTokens) => {
|
|
|
|
dispatch(setNewTokensImported(newTokens));
|
|
|
|
},
|
|
|
|
clearNewCustomNetworkAdded: () => {
|
|
|
|
dispatch(setNewCustomNetworkAdded({}));
|
|
|
|
},
|
|
|
|
setRpcTarget: (rpcUrl, chainId, ticker, nickname) => {
|
|
|
|
dispatch(setRpcTarget(rpcUrl, chainId, ticker, nickname));
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
export default compose(
|
|
|
|
withRouter,
|
|
|
|
connect(mapStateToProps, mapDispatchToProps),
|
|
|
|
)(Home);
|