Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
4cf4675
feat: Updated pin extension ui
smgv Sep 18, 2025
932876c
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 22, 2025
672a124
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 23, 2025
ead3793
fix: rehydration flow
smgv Sep 23, 2025
7291cf8
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 23, 2025
c5d5d87
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 24, 2025
9db8d58
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 24, 2025
fc2a978
fix: e2e test case update
smgv Sep 24, 2025
3409996
fix: e2e test cases updated
smgv Sep 24, 2025
e2eb303
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 24, 2025
64c6572
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 25, 2025
b9cb758
fix: updated the pin
smgv Sep 25, 2025
47ebc1b
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 25, 2025
43f433d
fix: e2e test case update
smgv Sep 25, 2025
9b6666f
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 26, 2025
d3d6fef
fix: Browser back from unlock flow
smgv Sep 26, 2025
591cbc1
fix: merge conflct changes
smgv Sep 26, 2025
40855cb
fix: routing update
smgv Sep 26, 2025
b0ed094
fix: test cases update
smgv Sep 26, 2025
d1d0f6f
fix: test case update
smgv Sep 26, 2025
9489453
fix: test case update
smgv Sep 26, 2025
f26a55c
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 29, 2025
d2da300
fix: routing update for existing social login user
smgv Sep 29, 2025
47370cf
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 29, 2025
bdc2531
fix: pin alert style update hide below 1279px width
smgv Sep 29, 2025
f8cf441
fix: removed logs
smgv Sep 29, 2025
cd4897a
fix: e2e test case updated
smgv Sep 29, 2025
61cc93f
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 29, 2025
a84ab0f
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 30, 2025
0a76919
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 30, 2025
cfc753b
fix: comment review removed socialimport route check
smgv Sep 30, 2025
7ed6d32
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 30, 2025
c6a5df2
fix: integgration test
smgv Sep 30, 2025
6a388a9
Merge branch 'main' into feat/update-pin-extension-ui
smgv Sep 30, 2025
b6b1d09
Merge branch 'main' into feat/update-pin-extension-ui
smgv Oct 1, 2025
0604efa
fix: comment review changes
smgv Oct 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/_locales/en/messages.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion app/_locales/en_GB/messages.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,9 @@ class OnboardingCompletePage {
);
}

async completeOnboarding(isSocialImportFlow: boolean = false): Promise<void> {
async completeOnboarding(): Promise<void> {
console.log('Complete onboarding');
if (!isSocialImportFlow) {
await this.clickCreateWalletDoneButton();
}

await this.displayDownloadAppPageAndContinue();

await this.driver.waitForSelector(this.installCompleteMessage);
await this.driver.waitForSelector(this.pinExtensionMessage);

await this.driver.clickElementAndWaitToDisappear(
this.pinExtensionDoneButton,
);
await this.clickCreateWalletDoneButton();
}

async completeBackup(): Promise<void> {
Expand Down
5 changes: 0 additions & 5 deletions test/e2e/tests/account/unlock-wallet.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import LoginPage from '../../page-objects/pages/login-page';
import { loginWithBalanceValidation } from '../../page-objects/flows/login.flow';
import { MOCK_GOOGLE_ACCOUNT, WALLET_PASSWORD } from '../../constants';
import { OAuthMockttpService } from '../../helpers/seedless-onboarding/mocks';
import OnboardingCompletePage from '../../page-objects/pages/onboarding/onboarding-complete-page';
import { importWalletWithSocialLoginOnboardingFlow } from '../../page-objects/flows/onboarding.flow';
import SettingsPage from '../../page-objects/pages/settings/settings-page';
import PrivacySettings from '../../page-objects/pages/settings/privacy-settings';
Expand Down Expand Up @@ -62,10 +61,6 @@ describe('Unlock wallet - ', function () {
driver,
});

const onboardingCompletePage = new OnboardingCompletePage(driver);
const isSocialImportFlow = true;
await onboardingCompletePage.completeOnboarding(isSocialImportFlow);

const homePage = new HomePage(driver);
await homePage.checkPageIsLoaded();

Expand Down
1 change: 1 addition & 0 deletions test/e2e/tests/metrics/wallet-created.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ describe('Wallet Created Events', function () {
await createNewWalletWithSocialLoginOnboardingFlow(onboardingOptions);

const onboardingCompletePage = new OnboardingCompletePage(driver);
await onboardingCompletePage.displayDownloadAppPageAndContinue();
await onboardingCompletePage.checkPageIsLoaded();
await onboardingCompletePage.checkWalletReadyMessageIsDisplayed();
await onboardingCompletePage.completeOnboarding();
Expand Down
5 changes: 1 addition & 4 deletions test/e2e/tests/onboarding/seedless-onboarding.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ describe('Metamask onboarding (with social login)', function () {
});

const onboardingCompletePage = new OnboardingCompletePage(driver);
await onboardingCompletePage.displayDownloadAppPageAndContinue();
await onboardingCompletePage.checkPageIsLoaded();
await onboardingCompletePage.checkWalletReadyMessageIsDisplayed();
await onboardingCompletePage.completeOnboarding();
Expand Down Expand Up @@ -64,10 +65,6 @@ describe('Metamask onboarding (with social login)', function () {
driver,
});

const onboardingCompletePage = new OnboardingCompletePage(driver);
const isSocialImportFlow = true;
await onboardingCompletePage.completeOnboarding(isSocialImportFlow);

const homePage = new HomePage(driver);
await homePage.checkPageIsLoaded();
const displayedWalletAddress = await homePage.getAccountAddress();
Expand Down
5 changes: 0 additions & 5 deletions test/e2e/tests/settings/change-password.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import {
} from '../../page-objects/flows/onboarding.flow';
import { OAuthMockttpService } from '../../helpers/seedless-onboarding/mocks';
import { Driver } from '../../webdriver/driver';
import OnboardingCompletePage from '../../page-objects/pages/onboarding/onboarding-complete-page';
import { MOCK_GOOGLE_ACCOUNT, WALLET_PASSWORD } from '../../constants';

async function doPasswordChangeAndLockWallet(
Expand Down Expand Up @@ -107,10 +106,6 @@ describe('Change wallet password', function () {
password: OLD_PASSWORD,
});

const onboardingCompletePage = new OnboardingCompletePage(driver);
const isSocialImportFlow = true;
await onboardingCompletePage.completeOnboarding(isSocialImportFlow);

const homePage = new HomePage(driver);
await homePage.checkPageIsLoaded();

Expand Down
10 changes: 0 additions & 10 deletions test/integration/onboarding/import-wallet.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {
import {
clickElementById,
createMockImplementation,
waitForElementById,
waitForElementByText,
} from '../helpers';

Expand Down Expand Up @@ -65,15 +64,6 @@ describe('Import Wallet Events', () => {
await waitForElementByText('Your wallet is ready!');
await clickElementById('onboarding-complete-done');

await waitForElementByText('Scan QR code and download the app');
await clickElementById('download-app-continue');

await waitForElementById('pin-extension-next');
await clickElementById('pin-extension-next');

await waitForElementById('pin-extension-done');
await clickElementById('pin-extension-done');

// Verify both completeOnboarding and ExtensionPinned event are called
let completeOnboardingCall;
let extensionPinnedEvent;
Expand Down
10 changes: 0 additions & 10 deletions test/integration/onboarding/wallet-created.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {
import {
clickElementById,
createMockImplementation,
waitForElementById,
waitForElementByText,
} from '../helpers';

Expand Down Expand Up @@ -73,15 +72,6 @@ describe('Wallet Created Events', () => {
await waitForElementByText('Your wallet is ready!');
await clickElementById('onboarding-complete-done');

await waitForElementByText('Scan QR code and download the app');
await clickElementById('download-app-continue');

await waitForElementById('pin-extension-next');
await clickElementById('pin-extension-next');

await waitForElementById('pin-extension-done');
await clickElementById('pin-extension-done');

// Verify both completeOnboarding and ExtensionPinned event are called
let completeOnboardingCall;
let extensionPinnedEvent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from '../../../helpers/constants/design-system';
import {
ONBOARDING_COMPLETION_ROUTE,
ONBOARDING_DOWNLOAD_APP_ROUTE,
ONBOARDING_IMPORT_WITH_SRP_ROUTE,
ONBOARDING_METAMETRICS,
ONBOARDING_REVIEW_SRP_ROUTE,
Expand Down Expand Up @@ -254,7 +255,7 @@ export default function CreatePassword({
dispatch(setMarketingConsent(true));
dispatch(setDataCollectionForMarketing(true));
}
navigate(ONBOARDING_COMPLETION_ROUTE, { replace: true });
navigate(ONBOARDING_DOWNLOAD_APP_ROUTE, { replace: true });
} else {
navigate(ONBOARDING_REVIEW_SRP_ROUTE, { replace: true });
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useCallback, useMemo } from 'react';
import React, { useCallback, useMemo, useContext } from 'react';
import { useNavigate, useLocation } from 'react-router-dom-v5-compat';
import { useSelector } from 'react-redux';
import { useDispatch, useSelector } from 'react-redux';
import { capitalize } from 'lodash';
import {
Button,
Expand Down Expand Up @@ -33,19 +33,38 @@ import {
ONBOARDING_PRIVACY_SETTINGS_ROUTE,
DEFAULT_ROUTE,
SECURITY_ROUTE,
ONBOARDING_DOWNLOAD_APP_ROUTE,
} from '../../../helpers/constants/routes';
import { getSocialLoginType } from '../../../selectors';
import {
getSocialLoginType,
getExternalServicesOnboardingToggleState,
getFirstTimeFlowType,
} from '../../../selectors';
import { MetaMetricsContext } from '../../../contexts/metametrics';
import {
MetaMetricsEventCategory,
MetaMetricsEventName,
} from '../../../../shared/constants/metametrics';
import { FirstTimeFlowType } from '../../../../shared/constants/onboarding';
import { getIsPrimarySeedPhraseBackedUp } from '../../../ducks/metamask/metamask';

import {
toggleExternalServices,
setCompletedOnboarding,
} from '../../../store/actions';
import { LottieAnimation } from '../../../components/component-library/lottie-animation';

export default function CreationSuccessful() {
const navigate = useNavigate();
const dispatch = useDispatch();
const t = useI18nContext();
const { search } = useLocation();
const isWalletReady = useSelector(getIsPrimarySeedPhraseBackedUp);
const userSocialLoginType = useSelector(getSocialLoginType);
const externalServicesOnboardingToggleState = useSelector(
getExternalServicesOnboardingToggleState,
);
const trackEvent = useContext(MetaMetricsContext);
const firstTimeFlowType = useSelector(getFirstTimeFlowType);

const learnMoreLink =
'https://support.metamask.io/stay-safe/safety-in-web3/basic-safety-and-security-tips-for-metamask/';

Expand Down Expand Up @@ -124,13 +143,40 @@ export default function CreationSuccessful() {
);
}, [isWalletReady, isFromReminder]);

const onDone = useCallback(() => {
const onDone = useCallback(async () => {
if (isWalletReady) {
trackEvent({
category: MetaMetricsEventCategory.Onboarding,
event: MetaMetricsEventName.ExtensionPinned,
properties: {
// eslint-disable-next-line @typescript-eslint/naming-convention
wallet_setup_type:
firstTimeFlowType === FirstTimeFlowType.import ? 'import' : 'new',
// eslint-disable-next-line @typescript-eslint/naming-convention
new_wallet: firstTimeFlowType === FirstTimeFlowType.create,
},
});
}

if (isFromReminder) {
navigate(isFromSettingsSecurity ? SECURITY_ROUTE : DEFAULT_ROUTE);
return;
}
navigate(ONBOARDING_DOWNLOAD_APP_ROUTE);
}, [navigate, isFromReminder, isFromSettingsSecurity]);
await dispatch(
toggleExternalServices(externalServicesOnboardingToggleState),
);
await dispatch(setCompletedOnboarding());
navigate(DEFAULT_ROUTE);
}, [
isWalletReady,
isFromReminder,
dispatch,
externalServicesOnboardingToggleState,
navigate,
trackEvent,
firstTimeFlowType,
isFromSettingsSecurity,
]);

return (
<Box
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { fireEvent, waitFor } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/lib/render-helpers-navigate';
import { FirstTimeFlowType } from '../../../../shared/constants/onboarding';
import {
ONBOARDING_DOWNLOAD_APP_ROUTE,
DEFAULT_ROUTE,
ONBOARDING_PRIVACY_SETTINGS_ROUTE,
} from '../../../helpers/constants/routes';
import CreationSuccessful from './creation-successful';
Expand Down Expand Up @@ -46,6 +46,9 @@ describe('Wallet Ready Page', () => {
firstTimeFlowType: FirstTimeFlowType.create,
seedPhraseBackedUp: true,
},
appState: {
externalServicesOnboardingToggleState: true,
},
};

it('should render the wallet ready content if the seed phrase is backed up', () => {
Expand Down Expand Up @@ -98,9 +101,7 @@ describe('Wallet Ready Page', () => {
const doneButton = getByTestId('onboarding-complete-done');
fireEvent.click(doneButton);
await waitFor(() => {
expect(mockUseNavigate).toHaveBeenCalledWith(
ONBOARDING_DOWNLOAD_APP_ROUTE,
);
expect(mockUseNavigate).toHaveBeenCalledWith(DEFAULT_ROUTE);
});
});
});
7 changes: 5 additions & 2 deletions ui/pages/onboarding-flow/download-app/download-app.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { renderWithProvider } from '../../../../test/lib/render-helpers-navigate';
import {
ONBOARDING_PIN_EXTENSION_ROUTE,
ONBOARDING_COMPLETION_ROUTE,
ONBOARDING_WELCOME_ROUTE,
} from '../../../helpers/constants/routes';
import { FirstTimeFlowType } from '../../../../shared/constants/onboarding';
Expand Down Expand Up @@ -110,7 +110,10 @@ describe('Download App Onboarding View', () => {

expect(mockUseNavigate).toHaveBeenCalledTimes(1);
expect(mockUseNavigate).toHaveBeenCalledWith(
ONBOARDING_PIN_EXTENSION_ROUTE,
ONBOARDING_COMPLETION_ROUTE,
{
replace: true,
},
);
});
});
Expand Down
9 changes: 6 additions & 3 deletions ui/pages/onboarding-flow/download-app/download-app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ import {
BlockSize,
FlexDirection,
AlignItems,
TextColor,
} from '../../../helpers/constants/design-system';
import {
ONBOARDING_PIN_EXTENSION_ROUTE,
ONBOARDING_COMPLETION_ROUTE,
ONBOARDING_WELCOME_ROUTE,
} from '../../../helpers/constants/routes';
import {
Expand All @@ -31,7 +32,7 @@ export default function OnboardingDownloadApp() {
const currentKeyring = useSelector(getCurrentKeyring);

const handleClick = async () => {
navigate(ONBOARDING_PIN_EXTENSION_ROUTE);
navigate(ONBOARDING_COMPLETION_ROUTE, { replace: true });
};

useEffect(() => {
Expand Down Expand Up @@ -66,7 +67,9 @@ export default function OnboardingDownloadApp() {
alt="Download the app"
/>
</Box>
<Text variant={TextVariant.bodyMd}>{t('downloadAppDescription')}</Text>
<Text variant={TextVariant.bodyMd} color={TextColor.textAlternative}>
{t('downloadAppDescription')}
</Text>
</Box>
<Box>
<Button
Expand Down
Loading
Loading