From 424fa027fb0ff7424a2eb6b252987e6b9980e823 Mon Sep 17 00:00:00 2001 From: Valmir Date: Thu, 11 Jan 2024 15:01:22 +0100 Subject: [PATCH 01/15] NEAR-11 FEAT: Implemented the new landing page --- .../components/landing/GuestLanding.styles.js | 343 ++++++++++++++++++ .../src/components/navigation/NavigationV2.js | 148 ++++++++ .../navigation/NavigationWrapperV2.js | 35 ++ packages/frontend/src/images/plus-icon.png | Bin 0 -> 521 bytes packages/frontend/src/images/plus-icon.svg | 9 + .../images/wallet-icons/here-wallet-icon.png | Bin 0 -> 15882 bytes .../wallet-icons/meteor-wallet-icon.png | Bin 0 -> 8216 bytes .../images/wallet-icons/near-wallet-icon.png | Bin 0 -> 44363 bytes .../wallet-icons/nightly-wallet-icon.png | Bin 0 -> 9862 bytes .../wallet-icons/sender-wallet-icon.png | Bin 0 -> 8838 bytes .../wallet-icons/welldone-wallet-icon.png | Bin 0 -> 72471 bytes 11 files changed, 535 insertions(+) create mode 100644 packages/frontend/src/components/landing/GuestLanding.styles.js create mode 100644 packages/frontend/src/components/navigation/NavigationV2.js create mode 100644 packages/frontend/src/components/navigation/NavigationWrapperV2.js create mode 100644 packages/frontend/src/images/plus-icon.png create mode 100644 packages/frontend/src/images/plus-icon.svg create mode 100644 packages/frontend/src/images/wallet-icons/here-wallet-icon.png create mode 100644 packages/frontend/src/images/wallet-icons/meteor-wallet-icon.png create mode 100644 packages/frontend/src/images/wallet-icons/near-wallet-icon.png create mode 100644 packages/frontend/src/images/wallet-icons/nightly-wallet-icon.png create mode 100644 packages/frontend/src/images/wallet-icons/sender-wallet-icon.png create mode 100644 packages/frontend/src/images/wallet-icons/welldone-wallet-icon.png diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js new file mode 100644 index 0000000000..e21e636122 --- /dev/null +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -0,0 +1,343 @@ +import styled from "styled-components"; +import PlusIcon from "../../images/plus-icon.png"; +import {Link} from "react-router-dom"; + +export const StyledContainer = styled.div` + + &&& { + margin: 35px auto 100px auto; + max-width: 1224px; + position: relative; + + @media (max-width: 767px) { + margin: 0; + overflow: hidden; + margin-top: -13px; + } + + svg { + opacity: 0.4; + position: absolute; + left: 0; + right: 0; + top: 0; + z-index: -1; + + @media (max-width: 992px) { + top: -120px; + } + + @media (max-width: 470px) { + top: -86px; + width: 900px; + left: unset; + } + } + + .small-centered { + padding-top: 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + h1 { + font-weight: 500; + font-size: 72px; + padding-bottom: 40px; + margin: 0; + letter-spacing: -1.08px; + line-height: 100%; + } + + h3 { + font-size: 20px; + font-weight: 400 !important; + line-height: 130%; + letter-spacing: 0.3px; + padding-bottom: 48px; + + span { + span { + font-weight: 500; + } + } + + @media (max-width: 767px) { + font-size: 16px !important; + } + } + + .buttons { + margin-top: 30px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 1; + + .blue { + font-weight: 500 !important; + margin: 0; + text-transform: none; + + :not(.link) { + min-width: 200px; + max-width: 220px; + height: auto; + text-transform: none; + padding: 12px 6px; + } + } + + .link { + text-decoration: none; + padding: 0; + :hover { + background-color: transparent; + text-decoration: underline; + } + } + + span { + margin: 20px; + } + + @media (min-width: 768px) { + flex-direction: row; + } + } + + .img-wrapper { + min-height: 300px; + + @media (min-width: 768px) { + min-height: 600px; + } + } + + img { + margin-top: 65px; + margin-bottom: 50px; + width: 500px; + height: auto; + + @media (min-width: 768px) { + width: 675px; + margin-bottom: 75px; + } + } + + .email-subscribe { + margin-top: -140px; + margin-bottom: 50px; + padding-top: 80px; + + @media (max-width: 767px) { + margin-bottom: 0; + margin-top: -100px; + } + } + } +`; + +export const Section = styled.div` + width: 100%; + position: relative; + background-color: #F2F1EA; + padding: 100px 0 60px 0; + h2 { + color: #000000; + font-size: 56px; + font-style: normal; + font-weight: 500; + line-height: 130%; + padding-bottom: 42px; + } + h3 { + color: #000000; + padding-bottom: 120px; + font-size: 30px; + font-style: normal; + font-weight: 400; + line-height: 130%; + } +` + +export const MainContainer = styled.div` + background-image: url(${PlusIcon}); + background-size: 100px 95px; + min-height: 680px; + display: flex; + width: 100%; + -webkit-box-align: center; + align-items: center; + background-repeat: repeat; + background-position: center top; +` + +export const MainSection = styled.div` + padding: 1rem; + max-width: 675px; + margin: 0px auto; + background-color: #FFFFFF; + display: flex; + -webkit-box-align: center; + align-items: center; + min-height: 260px; +` + +export const MainSectionInfo = styled.div` + display: flex; + -webkit-box-align: center; + align-items: center; + flex-flow: column; + text-align: center; +` + +export const DefaultContainer = styled.div` + max-width: 1224px; + margin: 0 auto; + position: relative; +` + +export const FlexBox = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 120px; +` + +export const FlexItem = styled.div` + h4 { + margin: 0; + font-size: 24px; + font-style: normal; + font-weight: 600; + line-height: 150%; + padding-bottom: 32px; + } + p { + margin: 0; + font-size: 16px; + font-style: normal; + font-weight: 450; + line-height: 150%; + letter-spacing: 0.32px; + color: #000000; + max-width: 430px; + padding-bottom: 48px; + } +` + +export const InfoSection = styled.div` + display: flex; + align-items: end; + justify-content: space-between; + padding-bottom: 60px; +` + +export const SecondaryTitle = styled.h4` + margin: 0; + font-size: 24px; + font-style: normal; + font-weight: 500; + line-height: 130%; + padding-bottom: 32px; +` + +export const SecondaryText = styled.p` + margin: 0; + font-size: 16px; + font-style: normal; + font-weight: 450; + line-height: 150%; + letter-spacing: 0.32px; +` + +export const FormButtonContainer = styled.div` + min-width: 500px; + text-align: right; +` + +export const CardsSection = styled.div` + position: relative; + margin-bottom: 60px; +` + +export const CardContainer = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-rows: minmax(100px, auto); + gap: 24px; + min-width: 300px; + @media (max-width: 600px) { + grid-template-columns: 1fr; + } +` + +export const SingleCard = styled(Link)` + border: 1px solid #1B1B18; + transition: all .4s; + border-radius: 8px; + padding: 32px; + cursor: pointer; + outline: none; + &:hover { + background-color: #E3E3E0; + text-decoration: none; + } + img { + width: 52px; + padding-bottom: 32px; + } + h3 { + margin: 0; + padding: 0; + font-size: 20px; + font-style: normal; + font-weight: 500; + line-height: 130%; + letter-spacing: 0.3px; + padding-bottom: 24px; + } + p { + margin: 0; + padding: 0; + font-size: 14px; + font-style: normal; + font-weight: 450; + line-height: 150%; + letter-spacing: 0.14px; + color: black; + } +` +export const TransferSection = styled.div` + background-color: #000000; + color: #FFFFFF; + padding: 80px 0; +` + +export const TransferSectionWrapper = styled.div` + display: flex; + justify-content: space-between; + align-items: end; + h4 { + margin: 0; + font-size: 24px; + font-style: normal; + font-weight: 500; + line-height: 130%; + padding-bottom: 32px; + color: #FFFFFF; + } + p { + margin: 0; + font-size: 16px; + font-style: normal; + font-weight: 450; + line-height: 150%; + letter-spacing: 0.32px; + } +` diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js new file mode 100644 index 0000000000..88ae7ab609 --- /dev/null +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -0,0 +1,148 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import styled from 'styled-components'; + +import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; +import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; +import DesktopContainer from './DesktopContainer'; +import MobileContainer from './MobileContainer'; + +const Container = styled.div` + &&& { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + border-bottom: 1px solid #F0F0F1; + background-color: #FFFFFF; + @media (max-width: 991px) { + bottom: ${(props) => props.open ? '0' : 'unset'}; + } + + h6 { + font-size: 13px; + margin-bottom: 5px; + color: #72727A; + font-weight: normal; + } + + .account-selector { + padding: 0; + box-shadow: none; + border-radius: 0; + } + } +`; + +const InnerContainer = styled.div` + &&& { + max-width: 1224px; + margin: 0 auto; + } +`; + +export default ({ + selectAccount, + showNavLinks, + flowLimitationMainMenu, + flowLimitationSubMenu, + refreshBalance, + availableAccounts, + account, + history + }) => { + const [menuOpen, setMenuOpen] = useState(false); + const [walletSelectorModal, setWalletSelectorModal] = useState(); + const [showModal, setShowModal] = useState(); + + useEffect(() => { + if (menuOpen) { + document.addEventListener('keydown', handleKeyDown); + document.addEventListener('click', handleClick); + } else { + document.removeEventListener('keydown', handleKeyDown); + document.removeEventListener('click', handleClick); + } + }, [menuOpen]); + + const handleKeyDown = useCallback((e) => { + if (e.keyCode === 27) { + setMenuOpen(false); + } + }, []); + + const handleClick = useCallback((e) => { + const desktopMenu = document.getElementById('desktop-menu'); + const mobileMenu = document.getElementById('mobile-menu'); + + if (e.target.tagName === 'SPAN') { + return false; + } + + if (e.target.tagName === 'BUTTON' || e.target.tagName === 'A' || (!desktopMenu?.contains(e.target) && !mobileMenu?.contains(e.target))) { + setMenuOpen(false); + } + }, []); + + const toggleMenu = useCallback(() => { + if (menuOpen) { + setMenuOpen(false); + } else { + setMenuOpen(true); + } + }, [menuOpen]); + + const handleSelectAccount = useCallback((accountId) => { + selectAccount(accountId); + setMenuOpen(false); + }, []); + + const handleOnClickCreateNewAccount = () => { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }; + + return ( + + + setWalletSelectorModal(modal)} + setShowModal={(modal) => { + setShowModal(null); + if (modal === 'wallet-selector') { + walletSelectorModal.show(); + } + }} + showModal={showModal} + /> + + + + + ); +}; diff --git a/packages/frontend/src/components/navigation/NavigationWrapperV2.js b/packages/frontend/src/components/navigation/NavigationWrapperV2.js new file mode 100644 index 0000000000..3cc63689cb --- /dev/null +++ b/packages/frontend/src/components/navigation/NavigationWrapperV2.js @@ -0,0 +1,35 @@ +import React, { useCallback } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; + +import { switchAccount, getAccountBalance } from '../../redux/actions/account'; +import { selectAccountSlice } from '../../redux/slices/account'; +import { selectAvailableAccounts } from '../../redux/slices/availableAccounts'; +import { selectFlowLimitationMainMenu, selectFlowLimitationSubMenu } from '../../redux/slices/flowLimitation'; +import Navigation from './Navigation'; +import NavigationV2 from "./NavigationV2"; + +export default ({ history }) => { + const dispatch = useDispatch(); + + const account = useSelector(selectAccountSlice); + const flowLimitationMainMenu = useSelector(selectFlowLimitationMainMenu); + const flowLimitationSubMenu = useSelector(selectFlowLimitationSubMenu); + const availableAccounts = useSelector(selectAvailableAccounts); + + return ( + { + dispatch(switchAccount({ accountId })); + }, [])} + showNavLinks={account.localStorage?.accountFound} + flowLimitationMainMenu={flowLimitationMainMenu} + flowLimitationSubMenu={flowLimitationSubMenu} + refreshBalance={useCallback((accountId) => { + dispatch(getAccountBalance(accountId)); + }, [])} + availableAccounts={availableAccounts} + account={account} + history={history} + /> + ); +}; diff --git a/packages/frontend/src/images/plus-icon.png b/packages/frontend/src/images/plus-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..939f237be50fd40b4b1be83ef8f9705c9f8f06e5 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}oCO|{#S9E$svykh8Km+7D9BhG z)av<(H=9#r-}+spOh#f?dP zeG?{4iZ0;oJ7l_I!4e+zgqIr5o~&_41-lq4Svu18`%C%GQM$T*LdMJOtOwS@>?{}iALdsjd@Y*OaC4JC9wZzooLQa z;m=z;N-dUkZi)WA<=-pGEXmgmcc)6d{-ri!?)3N-H|-qHRchC)_-lAA_*Hz({Z;?& z`L0|YG~F<`_#Rhu@D9IOcD9UsAO8iFL}qh6m&m{UKw?6P;O*PDOD{a#wJ<;Dn!n@p zgs-~R*>(yMwQpsoCa7|R-Iuuiut@S$|IB;k_hs(=<(!+4^z_cveO$uYK))RW`z`q` tzhhUz)0}xM#~b9gaj=&I! + New Project + + + + + + \ No newline at end of file diff --git a/packages/frontend/src/images/wallet-icons/here-wallet-icon.png b/packages/frontend/src/images/wallet-icons/here-wallet-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..28d63c5ef730405264e13508756fe5f5218eb3fb GIT binary patch literal 15882 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
oMcOCc;*GK0z^~bA-zC%%j+{2Qvh^b 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/images/wallet-icons/near-wallet-icon.png b/packages/frontend/src/images/wallet-icons/near-wallet-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d5873c806c4c33d9cb45ce00febc11d29da1ca28 GIT binary patch literal 44363 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ⅅrvtaXm2RsqKg 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 z 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 M07*qoM6N<$f~Q(HDF6Tf literal 0 HcmV?d00001 diff --git a/packages/frontend/src/images/wallet-icons/nightly-wallet-icon.png b/packages/frontend/src/images/wallet-icons/nightly-wallet-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3e873873ec6d24e8fffec7b1fbe456721923e3 GIT binary patch literal 9862 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�Kou00iIRKE+ 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 literal 0 HcmV?d00001 From 89175b26a36f07634362acddf230209e63169a2a Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 06:28:18 +0100 Subject: [PATCH 02/15] NEAR-11 FEAT: Implemented the new landing page --- packages/frontend/src/components/Routing.js | 4 +- .../frontend/src/components/common/Footer.js | 73 ++-- .../src/components/common/FormButton.js | 58 ++- .../src/components/landing/GuestLanding.js | 345 +++++++++--------- .../components/landing/GuestLanding.styles.js | 3 + .../components/navigation/DesktopContainer.js | 2 - .../src/components/navigation/Navigation.js | 1 + .../frontend/src/translations/en.global.json | 31 +- 8 files changed, 290 insertions(+), 227 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index 5f6e44c7f4..53ee9d6ef2 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -369,8 +369,8 @@ class Routing extends Component { > - - + {pathname !== '/' && } + {pathname !== '/' && } { // TODO: Remove TwoFactorDisableBanner when we push MigrationBanner to mainnet diff --git a/packages/frontend/src/components/common/Footer.js b/packages/frontend/src/components/common/Footer.js index 11c865594d..3373fd8c43 100644 --- a/packages/frontend/src/components/common/Footer.js +++ b/packages/frontend/src/components/common/Footer.js @@ -11,9 +11,8 @@ const StyledContainer = styled.div` position: absolute; right: 0; left: 0; - bottom: 0; - padding: 35px; - background-color: #f8f8f8; + padding-top: 35px; + background-color: #FFFFFF; font-size: 12px; color: #999999; display: flex; @@ -86,61 +85,31 @@ const StyledLogo = styled.div` } `; +const InnerContainer = styled.div` + display: flex; + width: 1224px; + margin: 0 auto; + justify-content: space-between; + align-items: center; +`; + const Footer = () => { return ( - - - + ); }; diff --git a/packages/frontend/src/components/common/FormButton.js b/packages/frontend/src/components/common/FormButton.js index 54239150e1..a7af749a5b 100644 --- a/packages/frontend/src/components/common/FormButton.js +++ b/packages/frontend/src/components/common/FormButton.js @@ -193,6 +193,62 @@ const CustomButton = styled.button` opacity: 0.8; } } + &.dark-gray-transparent { + background-color: transparent; + border-color: #000000; + color: #000000; + margin: 0; + padding: 10px 24px; + + :hover { + background-color: #000000; + color: #FFFFFF; + } + + :disabled { + background: #e6e6e6; + border-color: #e6e6e6; + opacity: 1 !important; + color: #A2A2A8; + } + } + &.dark-green-transparent { + background-color: transparent; + border-color: #00EC97; + color: #FFFFFF; + margin: 0; + padding: 10px 24px; + + :hover { + background-color: rgb(0, 236, 151); + color: #000000; + } + + :disabled { + background: #e6e6e6; + border-color: #e6e6e6; + opacity: 1 !important; + color: #A2A2A8; + } + } + &.light-green-transparent { + background-color: #00EC97; + border-color: #00EC97; + color: #000000; + margin: 0; + padding: 10px 24px; + + :hover { + background-color: #45e394; + } + + :disabled { + background: #e6e6e6; + border-color: #e6e6e6; + opacity: 1 !important; + color: #A2A2A8; + } + } &.green { border-color: #5ace84; background: #5ace84; @@ -236,7 +292,7 @@ const CustomButton = styled.button` background-size: 14px 20px; :disabled { - color: e6e6e6; + color: #e6e6e6; border-color: #e6e6e6; background: #fff; opacity: 1 !important; diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index c21253c21f..5402791e0b 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -1,151 +1,34 @@ import React, { useState } from 'react'; import { Translate } from 'react-localize-redux'; -import styled from 'styled-components'; - import { WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../../features'; -import iPhoneMockup from '../../images/iphone-mockup.png'; import FormButton from '../common/FormButton'; -import Container from '../common/styled/Container.css'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import LandingBackground from './LandingBackground'; - -const StyledContainer = styled.div` - - &&& { - margin: 35px 5px 0 5px; - position: relative; - text-align: center; - - @media (max-width: 767px) { - margin: 0; - overflow: hidden; - margin-top: -13px; - } - - svg { - opacity: 0.4; - position: absolute; - left: 0; - right: 0; - top: 0; - z-index: -1; - - @media (max-width: 992px) { - top: -120px; - } - - @media (max-width: 470px) { - top: -86px; - width: 900px; - left: unset; - } - } - - .small-centered { - padding-top: 20px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - - h1 { - font-weight: 600; - } - - h3 { - font-weight: 400 !important; - line-height: 150%; - - span { - span { - font-weight: 500; - } - } - - @media (max-width: 767px) { - font-size: 16px !important; - } - } - - .buttons { - margin-top: 30px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 1; - - .blue { - font-weight: 500 !important; - margin: 0; - text-transform: none; - - :not(.link) { - min-width: 200px; - max-width: 220px; - height: auto; - text-transform: none; - padding: 12px 6px; - } - } - - .link { - text-decoration: none; - padding: 0; - :hover { - background-color: transparent; - text-decoration: underline; - } - } - - span { - margin: 20px; - } - - @media (min-width: 768px) { - flex-direction: row; - } - } - - .img-wrapper { - min-height: 300px; - - @media (min-width: 768px) { - min-height: 600px; - } - } - - img { - margin-top: 65px; - margin-bottom: 50px; - width: 500px; - height: auto; - - @media (min-width: 768px) { - width: 675px; - margin-bottom: 75px; - } - } - - .email-subscribe { - margin-top: -140px; - margin-bottom: 50px; - padding-top: 80px; - - @media (max-width: 767px) { - margin-bottom: 0; - margin-top: -100px; - } - } - } -`; +import HereWalletIcon from '../../images/wallet-icons/here-wallet-icon.png'; +import MeteorWalletIcon from '../../images/wallet-icons/meteor-wallet-icon.png'; +import NearWalletIcon from '../../images/wallet-icons/near-wallet-icon.png'; +import NightlyWalletIcon from '../../images/wallet-icons/nightly-wallet-icon.png'; +import SenderWalletIcon from '../../images/wallet-icons/sender-wallet-icon.png'; +import WellDoneWalletIcon from '../../images/wallet-icons/welldone-wallet-icon.png'; +import { + CardContainer, + CardsSection, + DefaultContainer, FlexBox, FlexItem, FormButtonContainer, InfoSection, + MainContainer, + MainSection, + MainSectionInfo, SecondaryText, SecondaryTitle, + Section, SingleCard, + StyledContainer, TransferSection, TransferSectionWrapper +} from "./GuestLanding.styles"; +import NavigationWrapperV2 from "../navigation/NavigationWrapperV2"; export function GuestLanding({ history }) { const [walletSelectorModal, setWalletSelectorModal] = useState(); const [showModal, setShowModal] = useState(); return ( + <> + setWalletSelectorModal(modal)} @@ -157,36 +40,166 @@ export function GuestLanding({ history }) { }} showModal={showModal} /> - - -

-

-
- { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - trackingId="Click create account button" - data-test-id="landingPageCreateAccount" - > - - - - - {WEP_PHASE_ONE ? : } - -
-
Sign up
-
+ + + +

+

+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='light-green-transparent' + color='light-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageLearMore" + > + + +
+
+
+
+ +

+

+ + +

+

+ +

+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-gray-transparent' + color='dark-gray-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + +
+ +

+

+ +

+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-gray-transparent' + color='dark-gray-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + +
+
+ +
+ + + + +
+ + { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-gray-transparent' + color='dark-gray-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + + +
+ + + + +

MyNearWallet

+

+
+ + +

Meteor Wallet

+

+
+ + +

Sender Wallet

+

+
+ + +

HERE Wallet

+

+
+ + +

Nightly Wallet

+

+
+ + +

WELLDONE Wallet

+

+
+
+
+
+
+ + + +
+

+

+
+ + { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-green-transparent' + color='dark-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + + +
+
+
+ ); } diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index e21e636122..b04ebaec7e 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -186,6 +186,9 @@ export const MainSection = styled.div` -webkit-box-align: center; align-items: center; min-height: 260px; + @media(max-width: 768px) { + flex-wrap: wrap; + } ` export const MainSectionInfo = styled.div` diff --git a/packages/frontend/src/components/navigation/DesktopContainer.js b/packages/frontend/src/components/navigation/DesktopContainer.js index 984dcea9e9..3540178895 100644 --- a/packages/frontend/src/components/navigation/DesktopContainer.js +++ b/packages/frontend/src/components/navigation/DesktopContainer.js @@ -16,9 +16,7 @@ const Container = styled.div` color: white; position: relative; font-size: 14px; - margin-bottom: 20px; padding: 0 15px; - border-bottom: 1px solid #F0F0F1; @media (min-width: 992px) { display: flex; diff --git a/packages/frontend/src/components/navigation/Navigation.js b/packages/frontend/src/components/navigation/Navigation.js index b2f04f687c..ed65bc6252 100644 --- a/packages/frontend/src/components/navigation/Navigation.js +++ b/packages/frontend/src/components/navigation/Navigation.js @@ -13,6 +13,7 @@ const Container = styled.div` left: 0; right: 0; z-index: 1000; + max-width: 1224px; @media (max-width: 991px) { bottom: ${(props) => props.open ? '0' : 'unset'}; } diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index 4bd1c9538d..1adff34667 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -343,7 +343,10 @@ "viewOnExplorer": "View on Explorer", "viewPrivateKey": "View private key", "withdrawing": "Withdrawing", - "disabling2FA": "Disabling 2FA" + "disabling2FA": "Disabling 2FA", + "transferGuide": "Transfer Guide", + "compareWallets": "Compare Wallets", + "transferAccounts": "Transfer Accounts" }, "buyNear": { "bridgeSubTitle": "Transfer your tokens from Ethereum to NEAR using the Rainbow Bridge.", @@ -580,7 +583,7 @@ }, "footer": { "contactSupport": "Join Community", - "copyrights": "MyNearWallet LLC. All Rights Reserved.", + "copyrights": "Near.org", "desc": "NEAR is a scalable computing and storage platform that changes how the web works for the better.", "learnMore": "Learn More", "needHelp": "Questions?", @@ -670,9 +673,29 @@ }, "landing": { "banner": "NEAR Wallet is in Private Beta", - "desc": "Securely store and stake your NEAR tokens and compatible assets with NEAR Wallet.", + "desc": "The NEAR wallet has been discontinued. Explore a range of user-friendly wallets designed to meet your needs.", "or": "or", - "title": "NEAR is here." + "title": "A new era for NEAR wallets", + "decentralize": "Decentralization means strength in numbers.", + "decentralizeSubtitle": "Signifying the substantial growth of the ecosystem, NEAR now supports a diverse list of high-quality wallets.", + "landingSectionTitle": "What happened to NEAR Wallet?", + "landingSectionSubTitle": "Transfer your accounts with ease.", + "landingSectionSubDescription": "To make the transition easier, you can securely migrate your accounts to a new wallet using the Transfer Wizard. Review the transfer-compatible wallet options below or move your accounts manually with your recovery phrase.", + "landingSectionDescription": "As we embrace a more decentralized future, the NEAR Wallet will be discontinued.This change invites you to discover a variety of new and secure wallet options within our ecosystem.Don’t worry, no changes will be made to your account or assets.", + "wallet": { + "title": "Find the right wallet for you.", + "description": "You can transfer your accounts to any of the wallets below or manually import them to the wallet of your choice using your recovery phrase.", + "near": "A browser based wallet that offers the same UI and features of the Near wallet.", + "meteor": "Both a browser and extension wallet, with advanced NFT features.", + "sender": "Security-audited mobile & extension wallet with 1M+ users, supporting NEAR & Aurora.", + "here": "Non-custodial mobile wallet with a friendly user interface and advanced features.", + "nightly": "A mobile and extension wallet, with support for multiple ecosystems.", + "wellDone": "A multi-chain extension wallet that gives you control over all your assets from a single platform." + }, + "transfer": { + "title": "You have 3 accounts ready to transfer.\n", + "description": "To continue using NEAR apps and managing your assets you need to migrate your accounts to a different wallet." + } }, "ledgerSignTxModal": { "ADD_ACCESS_KEY": "You will need to confirm login details on your Ledger.", From 3d2eab10ef4fd05875c8c039f5a1b3af45a0855a Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 06:50:27 +0100 Subject: [PATCH 03/15] NEAR-11 FEAT: eslint fix --- .../frontend/src/components/common/Footer.js | 1 - .../src/components/landing/GuestLanding.js | 84 +++++++++---------- .../components/landing/GuestLanding.styles.js | 39 ++++----- .../src/components/navigation/NavigationV2.js | 22 ++--- .../navigation/NavigationWrapperV2.js | 3 +- 5 files changed, 74 insertions(+), 75 deletions(-) diff --git a/packages/frontend/src/components/common/Footer.js b/packages/frontend/src/components/common/Footer.js index 3373fd8c43..189cb23224 100644 --- a/packages/frontend/src/components/common/Footer.js +++ b/packages/frontend/src/components/common/Footer.js @@ -4,7 +4,6 @@ import styled from 'styled-components'; import { isWhitelabel } from '../../config/whitelabel'; import NearLogo from '../../images/near.svg'; -import { Mixpanel } from '../../mixpanel/index'; import MyNearWalletLogo from '../svg/MyNearWalletLogo'; const StyledContainer = styled.div` diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index 5402791e0b..0e2c253b77 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -1,15 +1,6 @@ import React, { useState } from 'react'; import { Translate } from 'react-localize-redux'; -import { WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../../features'; -import FormButton from '../common/FormButton'; -import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; -import LandingBackground from './LandingBackground'; -import HereWalletIcon from '../../images/wallet-icons/here-wallet-icon.png'; -import MeteorWalletIcon from '../../images/wallet-icons/meteor-wallet-icon.png'; -import NearWalletIcon from '../../images/wallet-icons/near-wallet-icon.png'; -import NightlyWalletIcon from '../../images/wallet-icons/nightly-wallet-icon.png'; -import SenderWalletIcon from '../../images/wallet-icons/sender-wallet-icon.png'; -import WellDoneWalletIcon from '../../images/wallet-icons/welldone-wallet-icon.png'; + import { CardContainer, CardsSection, @@ -19,8 +10,17 @@ import { MainSectionInfo, SecondaryText, SecondaryTitle, Section, SingleCard, StyledContainer, TransferSection, TransferSectionWrapper -} from "./GuestLanding.styles"; -import NavigationWrapperV2 from "../navigation/NavigationWrapperV2"; +} from './GuestLanding.styles'; +import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; +import HereWalletIcon from '../../images/wallet-icons/here-wallet-icon.png'; +import MeteorWalletIcon from '../../images/wallet-icons/meteor-wallet-icon.png'; +import NearWalletIcon from '../../images/wallet-icons/near-wallet-icon.png'; +import NightlyWalletIcon from '../../images/wallet-icons/nightly-wallet-icon.png'; +import SenderWalletIcon from '../../images/wallet-icons/sender-wallet-icon.png'; +import WellDoneWalletIcon from '../../images/wallet-icons/welldone-wallet-icon.png'; +import FormButton from '../common/FormButton'; +import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; +import NavigationWrapperV2 from '../navigation/NavigationWrapperV2'; export function GuestLanding({ history }) { const [walletSelectorModal, setWalletSelectorModal] = useState(); @@ -42,25 +42,25 @@ export function GuestLanding({ history }) { /> - -

-

- { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - className='light-green-transparent' - color='light-green-transparent' - trackingId="Click create account button" - data-test-id="landingPageLearMore" - > - - -
+ +

+

+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='light-green-transparent' + color='light-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageLearMore" + > + + +
@@ -182,17 +182,17 @@ export function GuestLanding({ history }) { { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - className='dark-green-transparent' - color='dark-green-transparent' - trackingId="Click create account button" - data-test-id="landingPageCreateAccount" + onClick={() => { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-green-transparent' + color='dark-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" > diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index b04ebaec7e..05528f837f 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -1,6 +1,7 @@ -import styled from "styled-components"; -import PlusIcon from "../../images/plus-icon.png"; -import {Link} from "react-router-dom"; +import {Link} from 'react-router-dom'; +import styled from 'styled-components'; + +import PlusIcon from '../../images/plus-icon.png'; export const StyledContainer = styled.div` @@ -163,7 +164,7 @@ export const Section = styled.div` font-weight: 400; line-height: 130%; } -` +`; export const MainContainer = styled.div` background-image: url(${PlusIcon}); @@ -175,7 +176,7 @@ export const MainContainer = styled.div` align-items: center; background-repeat: repeat; background-position: center top; -` +`; export const MainSection = styled.div` padding: 1rem; @@ -189,7 +190,7 @@ export const MainSection = styled.div` @media(max-width: 768px) { flex-wrap: wrap; } -` +`; export const MainSectionInfo = styled.div` display: flex; @@ -197,20 +198,20 @@ export const MainSectionInfo = styled.div` align-items: center; flex-flow: column; text-align: center; -` +`; export const DefaultContainer = styled.div` max-width: 1224px; margin: 0 auto; position: relative; -` +`; export const FlexBox = styled.div` display: flex; justify-content: space-between; align-items: center; padding-bottom: 120px; -` +`; export const FlexItem = styled.div` h4 { @@ -232,14 +233,14 @@ export const FlexItem = styled.div` max-width: 430px; padding-bottom: 48px; } -` +`; export const InfoSection = styled.div` display: flex; align-items: end; justify-content: space-between; padding-bottom: 60px; -` +`; export const SecondaryTitle = styled.h4` margin: 0; @@ -248,7 +249,7 @@ export const SecondaryTitle = styled.h4` font-weight: 500; line-height: 130%; padding-bottom: 32px; -` +`; export const SecondaryText = styled.p` margin: 0; @@ -257,17 +258,17 @@ export const SecondaryText = styled.p` font-weight: 450; line-height: 150%; letter-spacing: 0.32px; -` +`; export const FormButtonContainer = styled.div` min-width: 500px; text-align: right; -` +`; export const CardsSection = styled.div` position: relative; margin-bottom: 60px; -` +`; export const CardContainer = styled.div` display: grid; @@ -278,7 +279,7 @@ export const CardContainer = styled.div` @media (max-width: 600px) { grid-template-columns: 1fr; } -` +`; export const SingleCard = styled(Link)` border: 1px solid #1B1B18; @@ -315,12 +316,12 @@ export const SingleCard = styled(Link)` letter-spacing: 0.14px; color: black; } -` +`; export const TransferSection = styled.div` background-color: #000000; color: #FFFFFF; padding: 80px 0; -` +`; export const TransferSectionWrapper = styled.div` display: flex; @@ -343,4 +344,4 @@ export const TransferSectionWrapper = styled.div` line-height: 150%; letter-spacing: 0.32px; } -` +`; diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index 88ae7ab609..d87efd4340 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -1,10 +1,10 @@ import React, { useState, useEffect, useCallback } from 'react'; import styled from 'styled-components'; -import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; -import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import DesktopContainer from './DesktopContainer'; import MobileContainer from './MobileContainer'; +import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; +import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; const Container = styled.div` &&& { @@ -42,15 +42,15 @@ const InnerContainer = styled.div` `; export default ({ - selectAccount, - showNavLinks, - flowLimitationMainMenu, - flowLimitationSubMenu, - refreshBalance, - availableAccounts, - account, - history - }) => { + selectAccount, + showNavLinks, + flowLimitationMainMenu, + flowLimitationSubMenu, + refreshBalance, + availableAccounts, + account, + history +}) => { const [menuOpen, setMenuOpen] = useState(false); const [walletSelectorModal, setWalletSelectorModal] = useState(); const [showModal, setShowModal] = useState(); diff --git a/packages/frontend/src/components/navigation/NavigationWrapperV2.js b/packages/frontend/src/components/navigation/NavigationWrapperV2.js index 3cc63689cb..0c47a26740 100644 --- a/packages/frontend/src/components/navigation/NavigationWrapperV2.js +++ b/packages/frontend/src/components/navigation/NavigationWrapperV2.js @@ -1,12 +1,11 @@ import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import NavigationV2 from './NavigationV2'; import { switchAccount, getAccountBalance } from '../../redux/actions/account'; import { selectAccountSlice } from '../../redux/slices/account'; import { selectAvailableAccounts } from '../../redux/slices/availableAccounts'; import { selectFlowLimitationMainMenu, selectFlowLimitationSubMenu } from '../../redux/slices/flowLimitation'; -import Navigation from './Navigation'; -import NavigationV2 from "./NavigationV2"; export default ({ history }) => { const dispatch = useDispatch(); From 02b63d38ec370ff96e9cd53843d5535768705bd8 Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 07:49:41 +0100 Subject: [PATCH 04/15] NEAR-11 FEAT: near landing page responsive update --- .../frontend/src/components/common/Footer.js | 4 ++ .../src/components/landing/GuestLanding.js | 12 ++--- .../components/landing/GuestLanding.styles.js | 50 ++++++++++++++++++- .../src/components/navigation/NavigationV2.js | 1 + 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/packages/frontend/src/components/common/Footer.js b/packages/frontend/src/components/common/Footer.js index 189cb23224..1109f2e3ae 100644 --- a/packages/frontend/src/components/common/Footer.js +++ b/packages/frontend/src/components/common/Footer.js @@ -76,6 +76,10 @@ const StyledContainer = styled.div` display: block; } } + + @media(max-width: 768px) { + padding: 0 30px; + } `; const StyledLogo = styled.div` diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index 0e2c253b77..f42b3281c9 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -140,32 +140,32 @@ export function GuestLanding({ history }) { - + near-wallet-icon

MyNearWallet

- + meteor-wallet-icon

Meteor Wallet

- + sender-wallet-icon

Sender Wallet

- + here-wallet-icon

HERE Wallet

- + nightly-wallet-icon

Nightly Wallet

- + wellDone-wallet-icon

WELLDONE Wallet

diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index 05528f837f..aed4206d39 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -50,6 +50,19 @@ export const StyledContainer = styled.div` margin: 0; letter-spacing: -1.08px; line-height: 100%; + @media(max-width: 768px) { + font-size: 60px; + } + } + + h2 { + @media(max-width: 768px) { + font-size: 45px; + } + + @media(max-width: 576px) { + font-size: 40px; + } } h3 { @@ -148,6 +161,9 @@ export const Section = styled.div` position: relative; background-color: #F2F1EA; padding: 100px 0 60px 0; + @media(max-width: 768px) { + padding: 50px 30px; + } h2 { color: #000000; font-size: 56px; @@ -159,6 +175,9 @@ export const Section = styled.div` h3 { color: #000000; padding-bottom: 120px; + @media(max-width: 768px) { + padding-bottom: 50px; + } font-size: 30px; font-style: normal; font-weight: 400; @@ -176,12 +195,16 @@ export const MainContainer = styled.div` align-items: center; background-repeat: repeat; background-position: center top; + @media(max-width: 768px) { + min-height: calc(100vh - 20px); + margin-bottom: 20px; + } `; export const MainSection = styled.div` padding: 1rem; max-width: 675px; - margin: 0px auto; + margin: 0 auto; background-color: #FFFFFF; display: flex; -webkit-box-align: center; @@ -211,9 +234,15 @@ export const FlexBox = styled.div` justify-content: space-between; align-items: center; padding-bottom: 120px; + @media(max-width: 768px) { + flex-wrap: wrap; + row-gap: 50px; + padding-bottom: 50px; + } `; export const FlexItem = styled.div` + width: 100%; h4 { margin: 0; font-size: 24px; @@ -232,6 +261,9 @@ export const FlexItem = styled.div` color: #000000; max-width: 430px; padding-bottom: 48px; + @media(max-width: 768px) { + max-width: 100%; + } } `; @@ -239,7 +271,11 @@ export const InfoSection = styled.div` display: flex; align-items: end; justify-content: space-between; - padding-bottom: 60px; + padding-bottom: 60px; + @media(max-width: 768px) { + flex-wrap: wrap; + row-gap: 50px; + } `; export const SecondaryTitle = styled.h4` @@ -263,6 +299,9 @@ export const SecondaryText = styled.p` export const FormButtonContainer = styled.div` min-width: 500px; text-align: right; + @media(max-width: 768px) { + min-width: 100%; + } `; export const CardsSection = styled.div` @@ -321,12 +360,19 @@ export const TransferSection = styled.div` background-color: #000000; color: #FFFFFF; padding: 80px 0; + @media(max-width: 768px) { + padding: 50px 30px; + } `; export const TransferSectionWrapper = styled.div` display: flex; justify-content: space-between; align-items: end; + @media(max-width: 768px) { + flex-wrap: wrap; + row-gap: 50px; + } h4 { margin: 0; font-size: 24px; diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index d87efd4340..fa37e573f5 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -17,6 +17,7 @@ const Container = styled.div` background-color: #FFFFFF; @media (max-width: 991px) { bottom: ${(props) => props.open ? '0' : 'unset'}; + border: none; } h6 { From 6e31b4e9271dec87709d67427ea0baa6b28f7601 Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 08:04:23 +0100 Subject: [PATCH 05/15] NEAR-11 FEAT: eslint fix --- .../src/components/navigation/DesktopContainer.js | 6 +++--- .../src/components/navigation/DesktopMenu.js | 4 ++-- .../src/components/navigation/MobileContainer.js | 12 ++++++------ .../frontend/src/components/navigation/Navigation.js | 4 ++-- .../src/components/navigation/NavigationWrapper.js | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/frontend/src/components/navigation/DesktopContainer.js b/packages/frontend/src/components/navigation/DesktopContainer.js index 3540178895..146438e00a 100644 --- a/packages/frontend/src/components/navigation/DesktopContainer.js +++ b/packages/frontend/src/components/navigation/DesktopContainer.js @@ -1,15 +1,15 @@ import React, { Component } from 'react'; import styled from 'styled-components'; -import { isWhitelabel } from '../../config/whitelabel'; -import languagesIcon from '../../images/icon-languages.svg'; -import LanguageToggle from '../common/LangSwitcher'; import ConnectLedger from './ConnectLedger'; import DeprecatedLogo from './DeprecatedLogo'; import DesktopMenu from './DesktopMenu'; import Logo from './Logo'; import NavLinks from './NavLinks'; import UserAccount from './UserAccount'; +import { isWhitelabel } from '../../config/whitelabel'; +import languagesIcon from '../../images/icon-languages.svg'; +import LanguageToggle from '../common/LangSwitcher'; const Container = styled.div` display: none; diff --git a/packages/frontend/src/components/navigation/DesktopMenu.js b/packages/frontend/src/components/navigation/DesktopMenu.js index 8f37c47487..d491d36cf5 100644 --- a/packages/frontend/src/components/navigation/DesktopMenu.js +++ b/packages/frontend/src/components/navigation/DesktopMenu.js @@ -2,9 +2,9 @@ import React from 'react'; import { Translate } from 'react-localize-redux'; import styled from 'styled-components'; -import AccountSelector from '../accounts/account_selector/AccountSelector'; import AccessAccountBtn from './AccessAccountBtn'; import CreateAccountBtn from './CreateAccountBtn'; +import AccountSelector from '../accounts/account_selector/AccountSelector'; const Menu = styled.div` position: absolute; @@ -14,7 +14,7 @@ const Menu = styled.div` background-color: white; color: #4a4f54; width: 320px; - box-shadow: 0px 45px 56px rgba(0, 0, 0, 0.07), 0px 10.0513px 12.5083px rgba(0, 0, 0, 0.0417275), 0px 2.99255px 3.72406px rgba(0, 0, 0, 0.0282725); + box-shadow: 0 45px 56px rgba(0, 0, 0, 0.07), 0 10.0513px 12.5083px rgba(0, 0, 0, 0.0417275), 0 2.99255px 3.72406px rgba(0, 0, 0, 0.0282725); padding: 16px; .user-links { diff --git a/packages/frontend/src/components/navigation/MobileContainer.js b/packages/frontend/src/components/navigation/MobileContainer.js index 8fd7d5c7e6..5d824d943d 100644 --- a/packages/frontend/src/components/navigation/MobileContainer.js +++ b/packages/frontend/src/components/navigation/MobileContainer.js @@ -2,17 +2,17 @@ import React, { Component } from 'react'; import { Translate } from 'react-localize-redux'; import styled from 'styled-components'; -import { isWhitelabel } from '../../config/whitelabel'; -import languagesIcon from '../../images/icon-languages.svg'; -import AccountSelector from '../accounts/account_selector/AccountSelector'; -import LanguageToggle from '../common/LangSwitcher'; -import UserIcon from '../svg/UserIcon'; import AccessAccountBtn from './AccessAccountBtn'; import CreateAccountBtn from './CreateAccountBtn'; import DeprecatedLogo from './DeprecatedLogo'; import Logo from './Logo'; import NavLinks from './NavLinks'; import UserAccount from './UserAccount'; +import { isWhitelabel } from '../../config/whitelabel'; +import languagesIcon from '../../images/icon-languages.svg'; +import AccountSelector from '../accounts/account_selector/AccountSelector'; +import LanguageToggle from '../common/LangSwitcher'; +import UserIcon from '../svg/UserIcon'; const Container = styled.div` display: none; @@ -137,7 +137,7 @@ const Lang = styled.div` .lang-selector { appearance: none; - background: transparent url(${languagesIcon}) no-repeat 0px center / 24px 24px; + background: transparent url(${languagesIcon}) no-repeat 0 center / 24px 24px; border: 0; color: #72727A; cursor: pointer; diff --git a/packages/frontend/src/components/navigation/Navigation.js b/packages/frontend/src/components/navigation/Navigation.js index ed65bc6252..98674aee0c 100644 --- a/packages/frontend/src/components/navigation/Navigation.js +++ b/packages/frontend/src/components/navigation/Navigation.js @@ -1,10 +1,10 @@ import React, { useState, useEffect, useCallback } from 'react'; import styled from 'styled-components'; -import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; -import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import DesktopContainer from './DesktopContainer'; import MobileContainer from './MobileContainer'; +import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; +import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; const Container = styled.div` &&& { diff --git a/packages/frontend/src/components/navigation/NavigationWrapper.js b/packages/frontend/src/components/navigation/NavigationWrapper.js index b42746388f..23c93fd447 100644 --- a/packages/frontend/src/components/navigation/NavigationWrapper.js +++ b/packages/frontend/src/components/navigation/NavigationWrapper.js @@ -1,11 +1,11 @@ import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import Navigation from './Navigation'; import { switchAccount, getAccountBalance } from '../../redux/actions/account'; import { selectAccountSlice } from '../../redux/slices/account'; import { selectAvailableAccounts } from '../../redux/slices/availableAccounts'; import { selectFlowLimitationMainMenu, selectFlowLimitationSubMenu } from '../../redux/slices/flowLimitation'; -import Navigation from './Navigation'; export default ({ history }) => { const dispatch = useDispatch(); From 42418b20f564a3764a86f50df3fff9f21e85a56b Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 14:02:10 +0100 Subject: [PATCH 06/15] NEAR-11 FEAT: Update non-connected state condition --- packages/frontend/src/components/Routing.js | 122 +++++------ .../src/components/common/FormButton.js | 17 ++ .../src/components/landing/GuestLanding.js | 195 ++++++++++-------- .../components/landing/GuestLanding.styles.js | 9 +- .../components/navigation/DesktopContainer.js | 87 ++------ .../src/components/navigation/NavLinks.js | 53 +---- .../frontend/src/translations/en.global.json | 1 + 7 files changed, 213 insertions(+), 271 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index 53ee9d6ef2..e6d9ee369d 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -2,7 +2,6 @@ import { ConnectedRouter, getRouter } from 'connected-react-router'; import isString from 'lodash.isstring'; import { parseSeedPhrase } from 'near-seed-phrase'; import PropTypes from 'prop-types'; -import { stringify } from 'query-string'; import React, { Component } from 'react'; import ReactDOMServer from 'react-dom/server'; import { withLocalize } from 'react-localize-redux'; @@ -10,52 +9,6 @@ import { connect } from 'react-redux'; import { Redirect, Switch } from 'react-router-dom'; import styled, { ThemeProvider } from 'styled-components'; -import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; -import favicon from '../../src/images/mynearwallet-cropped.svg'; -import TwoFactorVerifyModal from '../components/accounts/two_factor/TwoFactorVerifyModal'; -import { - IS_MAINNET, - PUBLIC_URL, - SHOW_PRERELEASE_WARNING, - DISABLE_CREATE_ACCOUNT, -} from '../config'; -import { isWhitelabel } from '../config/whitelabel'; -import { Mixpanel } from '../mixpanel/index'; -import * as accountActions from '../redux/actions/account'; -import { handleClearAlert } from '../redux/reducers/status'; -import { selectAccountSlice } from '../redux/slices/account'; -import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; -import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; -import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; -import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; -import { LoginWrapper } from '../routes/LoginWrapper'; -import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; -import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; -import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; -import { SignWrapper } from '../routes/SignWrapper'; -import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; -import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; -import { WalletWrapper } from '../routes/WalletWrapper'; -import translations_en from '../translations/en.global.json'; -import translations_it from '../translations/it.global.json'; -import translations_kr from '../translations/kr.global.json'; -import translations_pt from '../translations/pt.global.json'; -import translations_ru from '../translations/ru.global.json'; -import translations_tr from '../translations/tr.global.json'; -import translations_ua from '../translations/ua.global.json'; -import translations_vi from '../translations/vi.global.json'; -import translations_zh_hans from '../translations/zh-hans.global.json'; -import translations_zh_hant from '../translations/zh-hant.global.json'; -import classNames from '../utils/classNames'; -import getBrowserLocale from '../utils/getBrowserLocale'; -import { reportUiActiveMixpanelThrottled } from '../utils/reportUiActiveMixpanelThrottled'; -import ScrollToTop from '../utils/ScrollToTop'; -import { - WALLET_CREATE_NEW_ACCOUNT_FLOW_URLS, - WALLET_LOGIN_URL, - WALLET_SIGN_URL, - WALLET_SEND_MONEY_URL, -} from '../utils/wallet'; import AccessKeysWrapper from './access-keys/v2/AccessKeysWrapper'; import { AutoImportWrapper } from './accounts/auto_import/AutoImportWrapper'; import BatchImportAccounts from './accounts/batch_import_accounts'; @@ -81,7 +34,6 @@ import { EnableTwoFactor } from './accounts/two_factor/EnableTwoFactor'; import { BuyNear } from './buy/BuyNear'; import Footer from './common/Footer'; import GlobalAlert from './common/GlobalAlert'; -import GuestLandingRoute from './common/GuestLandingRoute'; import MigrationBanner from './common/MigrationBanner'; import NetworkBanner from './common/NetworkBanner'; import PrivateRoute from './common/routing/PrivateRoute'; @@ -90,6 +42,7 @@ import Route from './common/routing/Route'; import TwoFactorDisableBanner from './common/TwoFactorDisableBanner'; import { ExploreContainer } from './explore/ExploreContainer'; import GlobalStyle from './GlobalStyle'; +import { GuestLanding } from './landing/GuestLanding'; import { LoginCliLoginSuccess } from './login/LoginCliLoginSuccess'; import NavigationWrapper from './navigation/NavigationWrapper'; import { NFTDetailWrapper } from './nft/NFTDetailWrapper'; @@ -101,9 +54,54 @@ import { SendContainerWrapper } from './send/SendContainerWrapper'; import { StakingContainer } from './staking/StakingContainer'; import Swap from './swap/Swap'; import Terms from './terms/Terms'; -import '../index.css'; import { getMigrationStep } from './wallet-migration/utils'; import WalletMigration, { WALLET_MIGRATION_VIEWS } from './wallet-migration/WalletMigration'; +import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; +import favicon from '../../src/images/mynearwallet-cropped.svg'; +import TwoFactorVerifyModal from '../components/accounts/two_factor/TwoFactorVerifyModal'; +import { + IS_MAINNET, + PUBLIC_URL, + SHOW_PRERELEASE_WARNING, + DISABLE_CREATE_ACCOUNT, +} from '../config'; +import { isWhitelabel } from '../config/whitelabel'; +import { Mixpanel } from '../mixpanel/index'; +import * as accountActions from '../redux/actions/account'; +import { handleClearAlert } from '../redux/reducers/status'; +import { selectAccountSlice } from '../redux/slices/account'; +import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; +import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; +import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; +import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; +import { LoginWrapper } from '../routes/LoginWrapper'; +import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; +import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; +import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; +import { SignWrapper } from '../routes/SignWrapper'; +import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; +import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; +import translations_en from '../translations/en.global.json'; +import translations_it from '../translations/it.global.json'; +import translations_kr from '../translations/kr.global.json'; +import translations_pt from '../translations/pt.global.json'; +import translations_ru from '../translations/ru.global.json'; +import translations_tr from '../translations/tr.global.json'; +import translations_ua from '../translations/ua.global.json'; +import translations_vi from '../translations/vi.global.json'; +import translations_zh_hans from '../translations/zh-hans.global.json'; +import translations_zh_hant from '../translations/zh-hant.global.json'; +import classNames from '../utils/classNames'; +import getBrowserLocale from '../utils/getBrowserLocale'; +import { reportUiActiveMixpanelThrottled } from '../utils/reportUiActiveMixpanelThrottled'; +import ScrollToTop from '../utils/ScrollToTop'; +import { + WALLET_CREATE_NEW_ACCOUNT_FLOW_URLS, + WALLET_LOGIN_URL, + WALLET_SIGN_URL, + WALLET_SEND_MONEY_URL, +} from '../utils/wallet'; +import '../index.css'; const { fetchTokenFiatValues, getTokenWhiteList } = tokenFiatValueActions; const { @@ -322,23 +320,9 @@ class Routing extends Component { render() { const { search, - query: { tab }, - hash, pathname, } = this.props.router.location; const { account } = this.props; - const setTab = (nextTab) => { - if (tab !== nextTab) { - // Ensure any `hash` value remains in the URL when we toggle tab - this.props.history.push({ - search: stringify( - { tab: nextTab }, - { skipNull: true, skipEmptyString: true } - ), - hash, - }); - } - }; const hideFooterOnMobile = [ WALLET_LOGIN_URL, @@ -441,18 +425,10 @@ class Routing extends Component { search: search, }} /> - ( - - )} - accountFound={accountFound} - indexBySearchEngines={!accountFound} + render={(props) => } /> @@ -45,35 +47,7 @@ export function GuestLanding({ history }) {

- { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - className='light-green-transparent' - color='light-green-transparent' - trackingId="Click create account button" - data-test-id="landingPageLearMore" - > - - -
- - - -
- -

-

- - -

-

- -

+ { if (WEP_DISABLE_ACCOUNT_CREATION) { @@ -85,39 +59,96 @@ export function GuestLanding({ history }) { className='dark-gray-transparent' color='dark-gray-transparent' trackingId="Click create account button" - data-test-id="landingPageCreateAccount" + data-test-id="landingPageLearMore" > -
- -

+ {accountFound && ( + { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='light-green-transparent' + color='light-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + + )} + + + + + +
+ +

+

+ + +

- +

- { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - className='dark-gray-transparent' - color='dark-gray-transparent' - trackingId="Click create account button" - data-test-id="landingPageCreateAccount" - > - - +
+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-gray-transparent' + color='dark-gray-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + +
+ { accountFound && ( + +

+

+ +

+ { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-gray-transparent' + color='dark-gray-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + +
+ )}
- - - + {accountFound ? ( + + {accountFound ? : } + + ) : ( + + + + )}
- - - -
-

-

-
- - { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } - }} - className='dark-green-transparent' - color='dark-green-transparent' - trackingId="Click create account button" - data-test-id="landingPageCreateAccount" - > - - - -
-
-
+ {accountFound && ( + + + +
+

+

+
+ + { + if (WEP_DISABLE_ACCOUNT_CREATION) { + setShowModal('more-near-wallets'); + } else { + history.push('/create'); + } + }} + className='dark-green-transparent' + color='dark-green-transparent' + trackingId="Click create account button" + data-test-id="landingPageCreateAccount" + > + + + +
+
+
+ )} ); } diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index aed4206d39..2c8ae99163 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -259,7 +259,7 @@ export const FlexItem = styled.div` line-height: 150%; letter-spacing: 0.32px; color: #000000; - max-width: 430px; + max-width: ${(props) => props.accountFound ? '430px' : '100%'}; padding-bottom: 48px; @media(max-width: 768px) { max-width: 100%; @@ -294,6 +294,7 @@ export const SecondaryText = styled.p` font-weight: 450; line-height: 150%; letter-spacing: 0.32px; + color: #000000; `; export const FormButtonContainer = styled.div` @@ -391,3 +392,9 @@ export const TransferSectionWrapper = styled.div` letter-spacing: 0.32px; } `; + +export const MainSectionButtons = styled.div` + display: flex; + justify-content: space-between; + gap: 24px; +`; diff --git a/packages/frontend/src/components/navigation/DesktopContainer.js b/packages/frontend/src/components/navigation/DesktopContainer.js index 146438e00a..29b2518d84 100644 --- a/packages/frontend/src/components/navigation/DesktopContainer.js +++ b/packages/frontend/src/components/navigation/DesktopContainer.js @@ -1,15 +1,11 @@ import React, { Component } from 'react'; import styled from 'styled-components'; -import ConnectLedger from './ConnectLedger'; import DeprecatedLogo from './DeprecatedLogo'; import DesktopMenu from './DesktopMenu'; import Logo from './Logo'; import NavLinks from './NavLinks'; -import UserAccount from './UserAccount'; import { isWhitelabel } from '../../config/whitelabel'; -import languagesIcon from '../../images/icon-languages.svg'; -import LanguageToggle from '../common/LangSwitcher'; const Container = styled.div` display: none; @@ -20,6 +16,7 @@ const Container = styled.div` @media (min-width: 992px) { display: flex; + justify-content: space-between; } background-color: white; @@ -43,49 +40,6 @@ const Container = styled.div` `; -const Lang = styled.div` - margin-left: auto; - position: relative; - - &:after { - content: ''; - border-color: #72727A; - border-style: solid; - border-width: 2px 2px 0 0; - display: inline-block; - position: absolute; - right: 10px; - top: calc(50% - 10px); - transform: rotate(135deg) translateY(-50%); - height: 9px; - width: 9px; - } - - &:last-child { - margin-right: 15px; - } - - .lang-selector { - appearance: none; - background: transparent url(${languagesIcon}) no-repeat 5px center / 20px 20px; - border: 0; - cursor: pointer; - font-size: 16px; - height: 32px; - outline: none; - padding-right: 54px; - position: relative; - user-select: none; - width: 54px; - z-index: 1; - text-indent: 54px; - - &::-ms-expand { - display: none; - } - } -`; - class DesktopContainer extends Component { render() { const { @@ -96,7 +50,6 @@ class DesktopContainer extends Component { handleSelectAccount, showNavLinks, flowLimitationMainMenu, - flowLimitationSubMenu, refreshBalance, onClickCreateNewAccount } = this.props; @@ -110,34 +63,22 @@ class DesktopContainer extends Component { : } - {showAllNavigationLinks && + {showAllNavigationLinks && account.accountId && } - - - - {showNavLinks && ( - <> -
- - - + )} ); diff --git a/packages/frontend/src/components/navigation/NavLinks.js b/packages/frontend/src/components/navigation/NavLinks.js index 4061863989..9d6d90f9e9 100644 --- a/packages/frontend/src/components/navigation/NavLinks.js +++ b/packages/frontend/src/components/navigation/NavLinks.js @@ -1,21 +1,12 @@ import React from 'react'; import { Translate } from 'react-localize-redux'; -import { NavLink } from 'react-router-dom'; import styled from 'styled-components'; -import { DONATE_TO_UKRAINE } from '../../../../../features'; -import { IS_MAINNET } from '../../config'; -import { isWhitelabel } from '../../config/whitelabel'; -import { Mixpanel } from '../../mixpanel/index'; -import DonateToUkraineIcon from '../svg/DonateToUkraineIcon'; -import ExploreIcon from '../svg/ExploreIcon'; -import HelpIcon from '../svg/HelpIcon'; -import UserIcon from '../svg/UserIcon'; -import VaultIcon from '../svg/VaultIcon'; -import WalletIcon from '../svg/WalletIcon'; +import FormButton from '../common/FormButton'; const Container = styled.div` display: flex; + justify-content: flex-end; width: 100%; a { display: flex; @@ -108,38 +99,14 @@ const Container = styled.div` const NavLinks = () => ( - Mixpanel.track('Click Wallet button on nav')}> - - - - Mixpanel.track('Click Staking button on nav')}> - - - - {isWhitelabel && ( - Mixpanel.track('Click Explore button on nav')}> - - - - )} - Mixpanel.track('Click Account button on nav')}> - - - - Mixpanel.track('Click Help button on nav')}> - - - - {DONATE_TO_UKRAINE && ( - Mixpanel.track('Click Donate button on nav')} - > - - - - )} + + + ); diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index 1adff34667..6afab908b3 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -684,6 +684,7 @@ "landingSectionDescription": "As we embrace a more decentralized future, the NEAR Wallet will be discontinued.This change invites you to discover a variety of new and secure wallet options within our ecosystem.Don’t worry, no changes will be made to your account or assets.", "wallet": { "title": "Find the right wallet for you.", + "secondaryDescription": "Check out our diverse list of community-built wallet options.", "description": "You can transfer your accounts to any of the wallets below or manually import them to the wallet of your choice using your recovery phrase.", "near": "A browser based wallet that offers the same UI and features of the Near wallet.", "meteor": "Both a browser and extension wallet, with advanced NFT features.", From 7e48b8c3cded500b6e768764226c4430b8ec8075 Mon Sep 17 00:00:00 2001 From: Valmir Date: Fri, 12 Jan 2024 17:54:00 +0100 Subject: [PATCH 07/15] NEAR-11 FEAT: Update button tracking events --- packages/frontend/src/components/Routing.js | 4 ++ .../src/components/landing/GuestLanding.js | 64 ++++++++----------- .../components/landing/GuestLanding.styles.js | 3 +- 3 files changed, 31 insertions(+), 40 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index e6d9ee369d..f680e0d1e4 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -54,6 +54,7 @@ import { SendContainerWrapper } from './send/SendContainerWrapper'; import { StakingContainer } from './staking/StakingContainer'; import Swap from './swap/Swap'; import Terms from './terms/Terms'; +import { initAnalytics } from './wallet-migration/metrics'; import { getMigrationStep } from './wallet-migration/utils'; import WalletMigration, { WALLET_MIGRATION_VIEWS } from './wallet-migration/WalletMigration'; import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; @@ -102,6 +103,7 @@ import { WALLET_SEND_MONEY_URL, } from '../utils/wallet'; import '../index.css'; + const { fetchTokenFiatValues, getTokenWhiteList } = tokenFiatValueActions; const { @@ -222,6 +224,8 @@ class Routing extends Component { document.querySelector('link[rel~="icon"]').href = favicon; } + await initAnalytics(); + const { refreshAccount, handleRefreshUrl, diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index 9beb21470c..ca4dd76272 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -11,7 +11,6 @@ import { Section, SingleCard, StyledContainer, TransferSection, TransferSectionWrapper } from './GuestLanding.styles'; -import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; import HereWalletIcon from '../../images/wallet-icons/here-wallet-icon.png'; import MeteorWalletIcon from '../../images/wallet-icons/meteor-wallet-icon.png'; import NearWalletIcon from '../../images/wallet-icons/near-wallet-icon.png'; @@ -21,13 +20,12 @@ import WellDoneWalletIcon from '../../images/wallet-icons/welldone-wallet-icon.p import FormButton from '../common/FormButton'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import NavigationWrapperV2 from '../navigation/NavigationWrapperV2'; +import {recordWalletMigrationEvent} from '../wallet-migration/metrics'; export function GuestLanding({ history, accountFound }) { const [walletSelectorModal, setWalletSelectorModal] = useState(); const [showModal, setShowModal] = useState(); - console.log(accountFound,'account existss'); - return ( <> @@ -50,11 +48,8 @@ export function GuestLanding({ history, accountFound }) { { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Learn More' }}); + window.open('https://medium.com/nearprotocol/near-opens-the-door-to-more-wallets-255eee58eb97', '_blank'); }} className='dark-gray-transparent' color='dark-gray-transparent' @@ -66,11 +61,7 @@ export function GuestLanding({ history, accountFound }) { {accountFound && ( { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Transfer Accounts' }}); }} className='light-green-transparent' color='light-green-transparent' @@ -98,11 +89,8 @@ export function GuestLanding({ history, accountFound }) {
{ - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Learn More' }}); + window.open('https://medium.com/nearprotocol/near-opens-the-door-to-more-wallets-255eee58eb97', '_blank'); }} className='dark-gray-transparent' color='dark-gray-transparent' @@ -121,11 +109,8 @@ export function GuestLanding({ history, accountFound }) {

{ - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Transfer Guide' }}); + history.push('/transfer-wizard'); }} className='dark-gray-transparent' color='dark-gray-transparent' @@ -153,11 +138,8 @@ export function GuestLanding({ history, accountFound }) { { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Compare Wallets' }}); + window.open('https://docs.google.com/spreadsheets/d/1JeF9ZKmg1IHvTlgIv0ymGNMIeps6khcr3ElfIpEJHGs/edit#gid=0', '_blank'); }} className='dark-gray-transparent' color='dark-gray-transparent' @@ -170,27 +152,37 @@ export function GuestLanding({ history, accountFound }) { - + { + recordWalletMigrationEvent('click', { element: { type: 'link', description: 'MyNearWallet Wallet' }}); + }}> near-wallet-icon

MyNearWallet

- + { + recordWalletMigrationEvent('click', { element: { type: 'link', description: 'Meteor Wallet' }}); + }}> meteor-wallet-icon

Meteor Wallet

- + { + recordWalletMigrationEvent('click', { element: { type: 'link', description: 'Sender Wallet' }}); + }}> sender-wallet-icon

Sender Wallet

- + { + recordWalletMigrationEvent('click', { element: { type: 'link', description: 'HERE Wallet' }}); + }}> here-wallet-icon

HERE Wallet

- + { + recordWalletMigrationEvent('click', { element: { type: 'link', description: 'Nightly Wallet' }}); + }}> nightly-wallet-icon

Nightly Wallet

@@ -215,11 +207,7 @@ export function GuestLanding({ history, accountFound }) { { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Transfer Accounts' }}); }} className='dark-green-transparent' color='dark-green-transparent' diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index 2c8ae99163..ee98f41da8 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -1,4 +1,3 @@ -import {Link} from 'react-router-dom'; import styled from 'styled-components'; import PlusIcon from '../../images/plus-icon.png'; @@ -321,7 +320,7 @@ export const CardContainer = styled.div` } `; -export const SingleCard = styled(Link)` +export const SingleCard = styled.a` border: 1px solid #1B1B18; transition: all .4s; border-radius: 8px; From 62ba1b68667e2b534a3884e4b7a09807470ec2b9 Mon Sep 17 00:00:00 2001 From: Valmir Date: Mon, 15 Jan 2024 15:13:51 +0100 Subject: [PATCH 08/15] NEAR-11 FEAT: Update footer and header issues --- packages/frontend/src/components/Routing.js | 2 +- .../components/landing/GuestLanding.styles.js | 4 + .../components/navigation/MobileContainer.js | 138 ++---------------- 3 files changed, 18 insertions(+), 126 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index f680e0d1e4..8694003057 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -123,7 +123,7 @@ const PATH_PREFIX = PUBLIC_URL; const Container = styled.div` min-height: 100vh; - padding-bottom: 230px; + padding-bottom: 100px; padding-top: 75px; @media (max-width: 991px) { .App { diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index ee98f41da8..4031c76d48 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -170,12 +170,16 @@ export const Section = styled.div` font-weight: 500; line-height: 130%; padding-bottom: 42px; + @media(max-width: 576px) { + font-size: 40px; + } } h3 { color: #000000; padding-bottom: 120px; @media(max-width: 768px) { padding-bottom: 50px; + font-size: 20px; } font-size: 30px; font-style: normal; diff --git a/packages/frontend/src/components/navigation/MobileContainer.js b/packages/frontend/src/components/navigation/MobileContainer.js index 5d824d943d..8dea6b3cf6 100644 --- a/packages/frontend/src/components/navigation/MobileContainer.js +++ b/packages/frontend/src/components/navigation/MobileContainer.js @@ -1,18 +1,11 @@ import React, { Component } from 'react'; -import { Translate } from 'react-localize-redux'; +import {Translate} from 'react-localize-redux'; import styled from 'styled-components'; -import AccessAccountBtn from './AccessAccountBtn'; -import CreateAccountBtn from './CreateAccountBtn'; import DeprecatedLogo from './DeprecatedLogo'; import Logo from './Logo'; -import NavLinks from './NavLinks'; -import UserAccount from './UserAccount'; import { isWhitelabel } from '../../config/whitelabel'; -import languagesIcon from '../../images/icon-languages.svg'; -import AccountSelector from '../accounts/account_selector/AccountSelector'; -import LanguageToggle from '../common/LangSwitcher'; -import UserIcon from '../svg/UserIcon'; +import FormButton from '../common/FormButton'; const Container = styled.div` display: none; @@ -25,7 +18,9 @@ const Container = styled.div` padding: 0 14px; border-bottom: 1px solid #F0F0F1; transition: 300ms; - + & button { + max-width: 200px; + } ::-webkit-scrollbar { display: none; } @@ -91,94 +86,14 @@ const Collapsed = styled.div` } `; -const LowerSection = styled.div` - background-color: white; - margin: 0px -20px 0 -20px; - padding: 20px 20px 100% 20px; -`; - -const Lang = styled.div` - border-top: 1px solid #efefef; - padding: 14px; - position: relative; - max-height: 58px; - margin: 0 -14px; - - &.mobile-lang { - background-color: #FAFAFA; - border-bottom: 1px solid #efefef; - } - - &:after { - content: ''; - border-color: #72727A; - border-style: solid; - border-width: 2px 2px 0 0; - display: inline-block; - position: absolute; - right: 24px; - top: calc(50% - 10px); - transform: rotate(135deg) translateY(-50%); - height: 9px; - width: 9px; - } - - &:last-child { - border-top: 0; - margin-top: 0; - margin-left: auto; - padding: 0; - - .lang-selector { - color: #24272a; - width: 54px; - } - } - - .lang-selector { - appearance: none; - background: transparent url(${languagesIcon}) no-repeat 0 center / 24px 24px; - border: 0; - color: #72727A; - cursor: pointer; - height: 32px; - outline: none; - padding-right: 62px; - position: relative; - width: 100%; - z-index: 1; - text-indent: 54px; - } - - &.mobile-lang .lang-selector { - text-indent: 32px; - - &:active, - &:focus, - &:hover { - option { - background-color: #24272a; - border: 0; - color: #f8f8f8; - } - } - } -`; class MobileContainer extends Component { render() { const { - account, - handleSelectAccount, - availableAccounts, menuOpen, - toggleMenu, showNavLinks, flowLimitationMainMenu, - flowLimitationSubMenu, - refreshBalance, - onClickCreateNewAccount } = this.props; return ( @@ -190,43 +105,16 @@ class MobileContainer extends Component { } {showNavLinks && ( - <> - - - - )} - {!showNavLinks && ( - - - + + + )} - {menuOpen && ( - <> - - - - - -
- - - -
- - )} ); } From 4f18ae8d276d3c11d064c805c13008d2bdf4534b Mon Sep 17 00:00:00 2001 From: Valmir Date: Mon, 15 Jan 2024 15:52:47 +0100 Subject: [PATCH 09/15] NEAR-11 FEAT: Fixed the transfer account CTA --- packages/frontend/src/components/Routing.js | 2 +- .../src/components/landing/GuestLanding.js | 31 +++++++++++++------ .../components/navigation/DesktopContainer.js | 5 +-- .../src/components/navigation/NavLinks.js | 3 +- .../src/components/navigation/NavigationV2.js | 4 ++- .../navigation/NavigationWrapperV2.js | 3 +- .../frontend/src/translations/en.global.json | 4 ++- 7 files changed, 35 insertions(+), 17 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index 8694003057..ae140805f5 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -432,7 +432,7 @@ class Routing extends Component { } + render={(props) => this.handleTransferClick()} accountFound={accountFound} />} /> - + setWalletSelectorModal(modal)} @@ -60,9 +64,7 @@ export function GuestLanding({ history, accountFound }) {
{accountFound && ( { - recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Transfer Accounts' }}); - }} + onClick={onTransfer} className='light-green-transparent' color='light-green-transparent' trackingId="Click create account button" @@ -187,7 +189,7 @@ export function GuestLanding({ history, accountFound }) {

Nightly Wallet

- + wellDone-wallet-icon

WELLDONE Wallet

@@ -201,14 +203,23 @@ export function GuestLanding({ history, accountFound }) {
-

+

+ {availableAccounts.length === 1 ? ( + + ) : ( + + )} +

{ - recordWalletMigrationEvent('click', { element: { type: 'button', description: 'Transfer Accounts' }}); - }} + onClick={onTransfer} className='dark-green-transparent' color='dark-green-transparent' trackingId="Click create account button" diff --git a/packages/frontend/src/components/navigation/DesktopContainer.js b/packages/frontend/src/components/navigation/DesktopContainer.js index 29b2518d84..ccec0d3bd3 100644 --- a/packages/frontend/src/components/navigation/DesktopContainer.js +++ b/packages/frontend/src/components/navigation/DesktopContainer.js @@ -51,7 +51,8 @@ class DesktopContainer extends Component { showNavLinks, flowLimitationMainMenu, refreshBalance, - onClickCreateNewAccount + onClickCreateNewAccount, + onTransfer } = this.props; const showAllNavigationLinks = showNavLinks && !flowLimitationMainMenu; @@ -64,7 +65,7 @@ class DesktopContainer extends Component { } {showAllNavigationLinks && account.accountId && - + } {showNavLinks && ( ( +const NavLinks = ({ onTransfer }) => ( diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index fa37e573f5..b1fc3d0119 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -50,7 +50,8 @@ export default ({ refreshBalance, availableAccounts, account, - history + history, + onTransfer }) => { const [menuOpen, setMenuOpen] = useState(false); const [walletSelectorModal, setWalletSelectorModal] = useState(); @@ -121,6 +122,7 @@ export default ({ /> { +export default ({ history, onTransfer }) => { const dispatch = useDispatch(); const account = useSelector(selectAccountSlice); @@ -29,6 +29,7 @@ export default ({ history }) => { availableAccounts={availableAccounts} account={account} history={history} + onTransfer={onTransfer} /> ); }; diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index 6afab908b3..e0d0f4c87d 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -694,9 +694,11 @@ "wellDone": "A multi-chain extension wallet that gives you control over all your assets from a single platform." }, "transfer": { - "title": "You have 3 accounts ready to transfer.\n", + "title_singular": "You have ${accountCount} account ready to transfer.", + "title_plural": "You have ${accountCount} accounts ready to transfer.", "description": "To continue using NEAR apps and managing your assets you need to migrate your accounts to a different wallet." } + }, "ledgerSignTxModal": { "ADD_ACCESS_KEY": "You will need to confirm login details on your Ledger.", From e1fda1b397f741971e020c92ea49a57a1960d1f5 Mon Sep 17 00:00:00 2001 From: Danny Cho Date: Wed, 17 Jan 2024 13:22:45 +1300 Subject: [PATCH 10/15] feat: Update routes, minor UX fixes --- packages/frontend/src/components/Routing.js | 70 +++++++++---------- .../frontend/src/components/common/Footer.js | 1 - .../src/components/common/NetworkBanner.js | 4 +- .../src/components/landing/GuestLanding.js | 24 +++---- .../src/components/navigation/Navigation.js | 5 +- .../src/components/navigation/NavigationV2.js | 5 +- .../components/page-not-found/PageNotFound.js | 3 +- .../frontend/src/translations/en.global.json | 4 +- 8 files changed, 59 insertions(+), 57 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index ae140805f5..833f17880a 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -9,6 +9,33 @@ import { connect } from 'react-redux'; import { Redirect, Switch } from 'react-router-dom'; import styled, { ThemeProvider } from 'styled-components'; +import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; +import favicon from '../../src/images/mynearwallet-cropped.svg'; +import TwoFactorVerifyModal from '../components/accounts/two_factor/TwoFactorVerifyModal'; +import { + IS_MAINNET, + PUBLIC_URL, + SHOW_PRERELEASE_WARNING, + DISABLE_CREATE_ACCOUNT, +} from '../config'; +import { isWhitelabel } from '../config/whitelabel'; +import { Mixpanel } from '../mixpanel/index'; +import * as accountActions from '../redux/actions/account'; +import { handleClearAlert } from '../redux/reducers/status'; +import { selectAccountSlice } from '../redux/slices/account'; +import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; +import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; +import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; +import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; +import { LoginWrapper } from '../routes/LoginWrapper'; +import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; +import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; +import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; +import { SignWrapper } from '../routes/SignWrapper'; +import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; +import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; +import translations_en from '../translations/en.global.json'; +import translations_it from '../translations/it.global.json'; import AccessKeysWrapper from './access-keys/v2/AccessKeysWrapper'; import { AutoImportWrapper } from './accounts/auto_import/AutoImportWrapper'; import BatchImportAccounts from './accounts/batch_import_accounts'; @@ -57,33 +84,6 @@ import Terms from './terms/Terms'; import { initAnalytics } from './wallet-migration/metrics'; import { getMigrationStep } from './wallet-migration/utils'; import WalletMigration, { WALLET_MIGRATION_VIEWS } from './wallet-migration/WalletMigration'; -import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; -import favicon from '../../src/images/mynearwallet-cropped.svg'; -import TwoFactorVerifyModal from '../components/accounts/two_factor/TwoFactorVerifyModal'; -import { - IS_MAINNET, - PUBLIC_URL, - SHOW_PRERELEASE_WARNING, - DISABLE_CREATE_ACCOUNT, -} from '../config'; -import { isWhitelabel } from '../config/whitelabel'; -import { Mixpanel } from '../mixpanel/index'; -import * as accountActions from '../redux/actions/account'; -import { handleClearAlert } from '../redux/reducers/status'; -import { selectAccountSlice } from '../redux/slices/account'; -import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; -import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; -import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; -import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; -import { LoginWrapper } from '../routes/LoginWrapper'; -import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; -import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; -import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; -import { SignWrapper } from '../routes/SignWrapper'; -import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; -import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; -import translations_en from '../translations/en.global.json'; -import translations_it from '../translations/it.global.json'; import translations_kr from '../translations/kr.global.json'; import translations_pt from '../translations/pt.global.json'; import translations_ru from '../translations/ru.global.json'; @@ -360,7 +360,7 @@ class Routing extends Component { {pathname !== '/' && } {pathname !== '/' && } - { + {/* { // TODO: Remove TwoFactorDisableBanner when we push MigrationBanner to mainnet !isWhitelabel && !SHOW_MIGRATION_BANNER && ( @@ -369,7 +369,7 @@ class Routing extends Component { /> ) - } + } */} { WEP_PHASE_ONE && ( @@ -434,7 +434,7 @@ class Routing extends Component { path="/" render={(props) => this.handleTransferClick()} accountFound={accountFound} />} /> - + /> */} )} /> - + /> */} - + /> */} { const setBannerHeight = () => { const banner = document.getElementById('top-banner'); const bannerHeight = banner ? banner.getBoundingClientRect().top + banner.offsetHeight : 0; - const app = document.getElementById('app-container'); + // const app = document.getElementById('app-container'); const navContainer = document.getElementById('nav-container'); navContainer.style.top = bannerHeight ? `${bannerHeight}px` : 0; - app.style.paddingTop = bannerHeight ? `${bannerHeight + 85}px` : '75px'; + // app.style.paddingTop = bannerHeight ? `${bannerHeight + 85}px` : '75px'; }; if (!IS_MAINNET) { diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index 65333c6667..afaf7d5824 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -2,16 +2,6 @@ import React, { useState } from 'react'; import { Translate } from 'react-localize-redux'; import {useSelector} from 'react-redux'; -import { - CardContainer, - CardsSection, - DefaultContainer, FlexBox, FlexItem, FormButtonContainer, InfoSection, - MainContainer, - MainSection, MainSectionButtons, - MainSectionInfo, SecondaryText, SecondaryTitle, - Section, SingleCard, - StyledContainer, TransferSection, TransferSectionWrapper -} from './GuestLanding.styles'; import HereWalletIcon from '../../images/wallet-icons/here-wallet-icon.png'; import MeteorWalletIcon from '../../images/wallet-icons/meteor-wallet-icon.png'; import NearWalletIcon from '../../images/wallet-icons/near-wallet-icon.png'; @@ -23,6 +13,16 @@ import FormButton from '../common/FormButton'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import NavigationWrapperV2 from '../navigation/NavigationWrapperV2'; import {recordWalletMigrationEvent} from '../wallet-migration/metrics'; +import { + CardContainer, + CardsSection, + DefaultContainer, FlexBox, FlexItem, FormButtonContainer, InfoSection, + MainContainer, + MainSection, MainSectionButtons, + MainSectionInfo, SecondaryText, SecondaryTitle, + Section, SingleCard, + StyledContainer, TransferSection, TransferSectionWrapper +} from './GuestLanding.styles'; export function GuestLanding({ history, accountFound, onTransfer }) { const availableAccounts = useSelector(selectAvailableAccounts); @@ -205,12 +205,12 @@ export function GuestLanding({ history, accountFound, onTransfer }) {

{availableAccounts.length === 1 ? ( - ) : ( )} diff --git a/packages/frontend/src/components/navigation/Navigation.js b/packages/frontend/src/components/navigation/Navigation.js index 98674aee0c..70970636fc 100644 --- a/packages/frontend/src/components/navigation/Navigation.js +++ b/packages/frontend/src/components/navigation/Navigation.js @@ -1,10 +1,10 @@ import React, { useState, useEffect, useCallback } from 'react'; import styled from 'styled-components'; -import DesktopContainer from './DesktopContainer'; -import MobileContainer from './MobileContainer'; import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; +import DesktopContainer from './DesktopContainer'; +import MobileContainer from './MobileContainer'; const Container = styled.div` &&& { @@ -14,6 +14,7 @@ const Container = styled.div` right: 0; z-index: 1000; max-width: 1224px; + margin: auto; @media (max-width: 991px) { bottom: ${(props) => props.open ? '0' : 'unset'}; } diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index b1fc3d0119..17939d379e 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -1,10 +1,10 @@ import React, { useState, useEffect, useCallback } from 'react'; import styled from 'styled-components'; -import DesktopContainer from './DesktopContainer'; -import MobileContainer from './MobileContainer'; import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; +import DesktopContainer from './DesktopContainer'; +import MobileContainer from './MobileContainer'; const Container = styled.div` &&& { @@ -15,6 +15,7 @@ const Container = styled.div` z-index: 1000; border-bottom: 1px solid #F0F0F1; background-color: #FFFFFF; + margin: auto; @media (max-width: 991px) { bottom: ${(props) => props.open ? '0' : 'unset'}; border: none; diff --git a/packages/frontend/src/components/page-not-found/PageNotFound.js b/packages/frontend/src/components/page-not-found/PageNotFound.js index 509bd5e7f0..ac11081db4 100644 --- a/packages/frontend/src/components/page-not-found/PageNotFound.js +++ b/packages/frontend/src/components/page-not-found/PageNotFound.js @@ -44,7 +44,8 @@ const StyledContainer = styled(Container)` } `; -export function PageNotFound() { +export function PageNotFound({ history }) { + history.push('/'); return (

diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index e0d0f4c87d..c05e4df9fb 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -694,8 +694,8 @@ "wellDone": "A multi-chain extension wallet that gives you control over all your assets from a single platform." }, "transfer": { - "title_singular": "You have ${accountCount} account ready to transfer.", - "title_plural": "You have ${accountCount} accounts ready to transfer.", + "titleSingular": "You have ${accountCount} account ready to transfer.", + "titlePlural": "You have ${accountCount} accounts ready to transfer.", "description": "To continue using NEAR apps and managing your assets you need to migrate your accounts to a different wallet." } From e883ba1311fdb79275801eb870da489843e35d95 Mon Sep 17 00:00:00 2001 From: Danny Cho Date: Wed, 17 Jan 2024 16:37:01 +1300 Subject: [PATCH 11/15] feat: UX improvements on landing page, implement anaytlics, redirect logic with banner warning --- .../frontend/src/components/common/Footer.js | 2 +- .../src/components/common/MigrationBanner.js | 115 ++++++------------ .../src/components/landing/GuestLanding.js | 6 +- .../components/landing/GuestLanding.styles.js | 1 - .../components/navigation/MobileContainer.js | 5 +- .../navigation/NavigationWrapperV2.js | 2 +- .../components/page-not-found/PageNotFound.js | 9 +- .../frontend/src/translations/en.global.json | 3 +- 8 files changed, 58 insertions(+), 85 deletions(-) diff --git a/packages/frontend/src/components/common/Footer.js b/packages/frontend/src/components/common/Footer.js index e80cdfa16c..39243c776d 100644 --- a/packages/frontend/src/components/common/Footer.js +++ b/packages/frontend/src/components/common/Footer.js @@ -77,7 +77,7 @@ const StyledContainer = styled.div` } @media(max-width: 768px) { - padding: 0 30px; + padding: 30px 30px 10px; } `; diff --git a/packages/frontend/src/components/common/MigrationBanner.js b/packages/frontend/src/components/common/MigrationBanner.js index a0a334e25e..a61455c5ca 100644 --- a/packages/frontend/src/components/common/MigrationBanner.js +++ b/packages/frontend/src/components/common/MigrationBanner.js @@ -1,19 +1,15 @@ -import React, {useCallback, useEffect, useState} from 'react'; +import { parse } from 'query-string'; +import React, { useEffect, useState } from 'react'; import { Translate } from 'react-localize-redux'; -import {useSelector} from 'react-redux'; +import { useHistory } from 'react-router-dom'; import styled from 'styled-components'; -import IconOffload from '../../images/IconOffload'; -import { selectAvailableAccounts, selectAvailableAccountsIsLoading } from '../../redux/slices/availableAccounts'; -import { getNearOrgWalletUrl } from '../../utils/getWalletURL'; -import AlertTriangleIcon from '../svg/AlertTriangleIcon'; import CloseSvg from '../svg/CloseIcon'; -import InfoIcon from '../svg/InfoIcon'; import FormButton from './FormButton'; import Container from './styled/Container.css'; const StyledContainer = styled.div` - background-color: #FFF4D5; + background-color: #FAC7BE; display: flex; align-items: flex-start; @@ -22,6 +18,10 @@ const StyledContainer = styled.div` margin-top: -15px; align-items: center; + @media (max-width: 768px) { + margin-bottom: 20px; + } + .alert-container { padding: 9px; margin-right: 16px; @@ -49,11 +49,13 @@ const StyledContainer = styled.div` const ContentWrapper = styled(Container)` display: flex; - align-items: center; - justify-content: space-between; margin-top: 0; padding: 0; + align-items: center; + justify-content: space-around; + margin-top: 10px; + &>*:first-child{ margin-right: 10px; } @@ -70,9 +72,9 @@ const ContentWrapper = styled(Container)` & .content { display: flex; - align-items: flex-start; + align-items: center; flex-wrap: none; - color: #AD5700; + color: black; > div > span > span > a, > div > span > a { @@ -87,27 +89,23 @@ const ContentWrapper = styled(Container)` `; const CustomButton = styled(FormButton)` - color: #AD5700 !important; - background: #FFE3A2 !important; - border: none !important; + color: black !important; + background: transparent !important; + border: black 1px solid !important; white-space: nowrap; padding: 9.5px 16px; margin: 0 !important; height: 40px !important; + font-weight: 300 !important; @media (max-width: 768px) { margin-top: 16px !important; } -`; - -const IconWrapper = styled.div` - display: inline; - margin-right: 10px; - margin-left: -10px; + margin-left: 24px !important; `; const CloseButton = styled.button` - height: 25px; - width: 25px; + height: 20px; + width: 20px; border: none; margin-left: 30px; cursor: pointer; @@ -120,75 +118,42 @@ const CloseButton = styled.button` `; const MigrationBanner = ({ account, onTransfer }) => { - const migrationBannerCloseTime = localStorage.getItem('migrationBannerCloseTime'); - const [showBanner, setShowBanner] = useState(true); - const EXPIRY_DATE = 604800000; // 7 days in milliseconds + const [showBanner, setShowBanner] = useState(false); + const history = useHistory(); + useEffect(() => { - if (!migrationBannerCloseTime || (Date.now() - migrationBannerCloseTime) > EXPIRY_DATE) { - setShowBanner(true); - localStorage.removeItem('migrationBannerCloseTime'); - } else { - setShowBanner(false); - } + const isRedirect = parse(window.location.search).previousPath; + setShowBanner(isRedirect); }, []); - - const availableAccounts = useSelector(selectAvailableAccounts); - const availableAccountsIsLoading = useSelector(selectAvailableAccountsIsLoading); - - const walletUrl = getNearOrgWalletUrl().replace('https://', ''); - - const onTransferClick = useCallback(() => { - if (availableAccounts.length) { - onTransfer(); - return; - } - - window.open('/transfer-wizard', '_blank'); - }, [availableAccounts]); - - // If banner is closed and still not past expirary date, don't show the banner - if (!showBanner) { - return null; - } - - // If accounts area loading, don't show the banner - if (availableAccountsIsLoading) { + + + + if (!showBanner) { return null; } const hideBanner = () => { setShowBanner(false); - localStorage.setItem('migrationBannerCloseTime', Date.now()); + history.replace('/'); + }; + + const onLearnMoreClick = () => { + window.open('https://near.org/blog/embracing-decentralization-whats-next-for-the-near-wallet', '_blank'); }; return (
-
- -
- +
+ + +
- - - - { - availableAccounts.length - ? - : - } - - { - availableAccounts.length - ? - : - } - - +
diff --git a/packages/frontend/src/components/landing/GuestLanding.js b/packages/frontend/src/components/landing/GuestLanding.js index afaf7d5824..20cef340aa 100644 --- a/packages/frontend/src/components/landing/GuestLanding.js +++ b/packages/frontend/src/components/landing/GuestLanding.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Translate } from 'react-localize-redux'; import {useSelector} from 'react-redux'; @@ -29,6 +29,10 @@ export function GuestLanding({ history, accountFound, onTransfer }) { const [walletSelectorModal, setWalletSelectorModal] = useState(); const [showModal, setShowModal] = useState(); + + useEffect(() => { + recordWalletMigrationEvent('LANDING_PAGE'); + }, []); return ( <> diff --git a/packages/frontend/src/components/landing/GuestLanding.styles.js b/packages/frontend/src/components/landing/GuestLanding.styles.js index 4031c76d48..ac6fd70222 100644 --- a/packages/frontend/src/components/landing/GuestLanding.styles.js +++ b/packages/frontend/src/components/landing/GuestLanding.styles.js @@ -199,7 +199,6 @@ export const MainContainer = styled.div` background-repeat: repeat; background-position: center top; @media(max-width: 768px) { - min-height: calc(100vh - 20px); margin-bottom: 20px; } `; diff --git a/packages/frontend/src/components/navigation/MobileContainer.js b/packages/frontend/src/components/navigation/MobileContainer.js index 8dea6b3cf6..c6f74689fc 100644 --- a/packages/frontend/src/components/navigation/MobileContainer.js +++ b/packages/frontend/src/components/navigation/MobileContainer.js @@ -2,16 +2,15 @@ import React, { Component } from 'react'; import {Translate} from 'react-localize-redux'; import styled from 'styled-components'; -import DeprecatedLogo from './DeprecatedLogo'; -import Logo from './Logo'; import { isWhitelabel } from '../../config/whitelabel'; import FormButton from '../common/FormButton'; +import DeprecatedLogo from './DeprecatedLogo'; +import Logo from './Logo'; const Container = styled.div` display: none; color: white; font-size: 15px; - margin-bottom: 20px; background-color: white; height: 70px; position: relative; diff --git a/packages/frontend/src/components/navigation/NavigationWrapperV2.js b/packages/frontend/src/components/navigation/NavigationWrapperV2.js index e06c378994..b49cc3c55c 100644 --- a/packages/frontend/src/components/navigation/NavigationWrapperV2.js +++ b/packages/frontend/src/components/navigation/NavigationWrapperV2.js @@ -1,11 +1,11 @@ import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import NavigationV2 from './NavigationV2'; import { switchAccount, getAccountBalance } from '../../redux/actions/account'; import { selectAccountSlice } from '../../redux/slices/account'; import { selectAvailableAccounts } from '../../redux/slices/availableAccounts'; import { selectFlowLimitationMainMenu, selectFlowLimitationSubMenu } from '../../redux/slices/flowLimitation'; +import NavigationV2 from './NavigationV2'; export default ({ history, onTransfer }) => { const dispatch = useDispatch(); diff --git a/packages/frontend/src/components/page-not-found/PageNotFound.js b/packages/frontend/src/components/page-not-found/PageNotFound.js index ac11081db4..fe108b9d5e 100644 --- a/packages/frontend/src/components/page-not-found/PageNotFound.js +++ b/packages/frontend/src/components/page-not-found/PageNotFound.js @@ -1,10 +1,11 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { Translate } from 'react-localize-redux'; import styled from 'styled-components'; import textBackgroundImage from '../../images/bg-landing-patterned.svg'; import FormButton from '../common/FormButton'; import Container from '../common/styled/Container.css'; +import { recordWalletMigrationEvent } from '../wallet-migration/metrics'; const StyledContainer = styled(Container)` &&& { @@ -45,7 +46,11 @@ const StyledContainer = styled(Container)` `; export function PageNotFound({ history }) { - history.push('/'); + useEffect(() => { + recordWalletMigrationEvent('REDIRECT'); + const path = window.location.pathname; + history.push('/?previousPath=' + path); + }, []); return (

diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index c05e4df9fb..0fdfe506f8 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -819,7 +819,8 @@ "migration": { "message": "As of January 8th, 2024 the NEAR wallet will be discontinued. No changes will be made to your account or its assets. Use your recovery phrase or the Transfer Wizard to securely migrate to a different wallet. Learn More", "redirectCaption": "Learn More", - "transferCaption": "Transfer My Accounts" + "transferCaption": "Transfer My Accounts", + "redirect": "This function is no longer available. Try using a different wallet." }, "minimumBalance": "This is the minimum NEAR balance your account must maintain to remain active. This balance represents the storage space your account is using on the NEAR blockchain (with a small buffer), and will go up or down as you use more or less space.", "mobileDeviceAccess": { From 523839224edffd12f07a6aef6050ef8253b43619 Mon Sep 17 00:00:00 2001 From: Danny Cho Date: Wed, 17 Jan 2024 17:06:18 +1300 Subject: [PATCH 12/15] chore: lint fixes --- packages/frontend/src/components/Routing.js | 116 +++++++++--------- .../components/navigation/DesktopContainer.js | 2 +- .../src/components/navigation/DesktopMenu.js | 2 +- .../navigation/NavigationWrapper.js | 2 +- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index 833f17880a..ce2591e73e 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -1,6 +1,6 @@ import { ConnectedRouter, getRouter } from 'connected-react-router'; import isString from 'lodash.isstring'; -import { parseSeedPhrase } from 'near-seed-phrase'; +// import { parseSeedPhrase } from 'near-seed-phrase'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import ReactDOMServer from 'react-dom/server'; @@ -9,14 +9,14 @@ import { connect } from 'react-redux'; import { Redirect, Switch } from 'react-router-dom'; import styled, { ThemeProvider } from 'styled-components'; -import { SHOW_MIGRATION_BANNER, WEB3AUTH, WEP_DISABLE_ACCOUNT_CREATION, WEP_PHASE_ONE } from '../../../../features'; +import { WEB3AUTH, WEP_PHASE_ONE } from '../../../../features'; import favicon from '../../src/images/mynearwallet-cropped.svg'; import TwoFactorVerifyModal from '../components/accounts/two_factor/TwoFactorVerifyModal'; import { IS_MAINNET, PUBLIC_URL, SHOW_PRERELEASE_WARNING, - DISABLE_CREATE_ACCOUNT, + // DISABLE_CREATE_ACCOUNT, } from '../config'; import { isWhitelabel } from '../config/whitelabel'; import { Mixpanel } from '../mixpanel/index'; @@ -25,65 +25,17 @@ import { handleClearAlert } from '../redux/reducers/status'; import { selectAccountSlice } from '../redux/slices/account'; import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; -import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; -import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; -import { LoginWrapper } from '../routes/LoginWrapper'; -import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; -import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; -import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; -import { SignWrapper } from '../routes/SignWrapper'; +// import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; +// import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; +// import { LoginWrapper } from '../routes/LoginWrapper'; +// import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; +// import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; +// import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; +// import { SignWrapper } from '../routes/SignWrapper'; import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; import translations_en from '../translations/en.global.json'; import translations_it from '../translations/it.global.json'; -import AccessKeysWrapper from './access-keys/v2/AccessKeysWrapper'; -import { AutoImportWrapper } from './accounts/auto_import/AutoImportWrapper'; -import BatchImportAccounts from './accounts/batch_import_accounts'; -import BatchLedgerExport from './accounts/batch_ledger_export'; -import { ExistingAccountWrapper } from './accounts/create/existing_account/ExistingAccountWrapper'; -import { InitialDepositWrapper } from './accounts/create/initial_deposit/InitialDepositWrapper'; -import { CreateAccountLanding } from './accounts/create/landing/CreateAccountLanding'; -import { VerifyAccountWrapper } from './accounts/create/verify_account/VerifyAccountWrapper'; -import { CreateAccountWithRouter } from './accounts/CreateAccount'; -import LedgerConfirmActionModal from './accounts/ledger/LedgerConfirmActionModal'; -import LedgerConnectModal from './accounts/ledger/LedgerConnectModal/LedgerConnectModalWrapper'; -import { SetupLedgerWithRouter } from './accounts/ledger/SetupLedger'; -import { SetupLedgerSuccessWithRouter } from './accounts/ledger/SetupLedgerSuccess'; -import { SignInLedgerWrapper } from './accounts/ledger/SignInLedgerWrapper'; -import { LinkdropLandingWithRouter } from './accounts/LinkdropLanding'; -import { RecoverAccountSeedPhraseWithRouter } from './accounts/RecoverAccountSeedPhrase'; -import { RecoverAccountWrapper } from './accounts/RecoverAccountWrapper'; -import { SetupRecoveryMethodWithRouter } from './accounts/recovery_setup/SetupRecoveryMethod'; -import { SetupImplicitWithRouter } from './accounts/SetupImplicit'; -import { SetupSeedPhraseWithRouter } from './accounts/SetupSeedPhrase'; -import { DisableTwoFactor } from './accounts/two_factor/DisableTwoFactor'; -import { EnableTwoFactor } from './accounts/two_factor/EnableTwoFactor'; -import { BuyNear } from './buy/BuyNear'; -import Footer from './common/Footer'; -import GlobalAlert from './common/GlobalAlert'; -import MigrationBanner from './common/MigrationBanner'; -import NetworkBanner from './common/NetworkBanner'; -import PrivateRoute from './common/routing/PrivateRoute'; -import PublicRoute from './common/routing/PublicRoute'; -import Route from './common/routing/Route'; -import TwoFactorDisableBanner from './common/TwoFactorDisableBanner'; -import { ExploreContainer } from './explore/ExploreContainer'; -import GlobalStyle from './GlobalStyle'; -import { GuestLanding } from './landing/GuestLanding'; -import { LoginCliLoginSuccess } from './login/LoginCliLoginSuccess'; -import NavigationWrapper from './navigation/NavigationWrapper'; -import { NFTDetailWrapper } from './nft/NFTDetailWrapper'; -import { PageNotFound } from './page-not-found/PageNotFound'; -import Privacy from './privacy/Privacy'; -import { Profile } from './profile/Profile'; -import { ReceiveContainerWrapper } from './receive-money/ReceiveContainerWrapper'; -import { SendContainerWrapper } from './send/SendContainerWrapper'; -import { StakingContainer } from './staking/StakingContainer'; -import Swap from './swap/Swap'; -import Terms from './terms/Terms'; -import { initAnalytics } from './wallet-migration/metrics'; -import { getMigrationStep } from './wallet-migration/utils'; -import WalletMigration, { WALLET_MIGRATION_VIEWS } from './wallet-migration/WalletMigration'; import translations_kr from '../translations/kr.global.json'; import translations_pt from '../translations/pt.global.json'; import translations_ru from '../translations/ru.global.json'; @@ -94,6 +46,15 @@ import translations_zh_hans from '../translations/zh-hans.global.json'; import translations_zh_hant from '../translations/zh-hant.global.json'; import classNames from '../utils/classNames'; import getBrowserLocale from '../utils/getBrowserLocale'; +// import AccessKeysWrapper from './access-keys/v2/AccessKeysWrapper'; +// import { AutoImportWrapper } from './accounts/auto_import/AutoImportWrapper'; +// import BatchImportAccounts from './accounts/batch_import_accounts'; +// import BatchLedgerExport from './accounts/batch_ledger_export'; +// import { ExistingAccountWrapper } from './accounts/create/existing_account/ExistingAccountWrapper'; +// import { InitialDepositWrapper } from './accounts/create/initial_deposit/InitialDepositWrapper'; +// import { CreateAccountLanding } from './accounts/create/landing/CreateAccountLanding'; +// import { VerifyAccountWrapper } from './accounts/create/verify_account/VerifyAccountWrapper'; +// import { CreateAccountWithRouter } from './accounts/CreateAccount'; import { reportUiActiveMixpanelThrottled } from '../utils/reportUiActiveMixpanelThrottled'; import ScrollToTop from '../utils/ScrollToTop'; import { @@ -102,6 +63,45 @@ import { WALLET_SIGN_URL, WALLET_SEND_MONEY_URL, } from '../utils/wallet'; +import LedgerConfirmActionModal from './accounts/ledger/LedgerConfirmActionModal'; +import LedgerConnectModal from './accounts/ledger/LedgerConnectModal/LedgerConnectModalWrapper'; +// import { SetupLedgerWithRouter } from './accounts/ledger/SetupLedger'; +// import { SetupLedgerSuccessWithRouter } from './accounts/ledger/SetupLedgerSuccess'; +// import { SignInLedgerWrapper } from './accounts/ledger/SignInLedgerWrapper'; +// import { LinkdropLandingWithRouter } from './accounts/LinkdropLanding'; +// import { RecoverAccountSeedPhraseWithRouter } from './accounts/RecoverAccountSeedPhrase'; +// import { RecoverAccountWrapper } from './accounts/RecoverAccountWrapper'; +// import { SetupRecoveryMethodWithRouter } from './accounts/recovery_setup/SetupRecoveryMethod'; +// import { SetupImplicitWithRouter } from './accounts/SetupImplicit'; +// import { SetupSeedPhraseWithRouter } from './accounts/SetupSeedPhrase'; +import { DisableTwoFactor } from './accounts/two_factor/DisableTwoFactor'; +// import { EnableTwoFactor } from './accounts/two_factor/EnableTwoFactor'; +// import { BuyNear } from './buy/BuyNear'; +import Footer from './common/Footer'; +import GlobalAlert from './common/GlobalAlert'; +import MigrationBanner from './common/MigrationBanner'; +import NetworkBanner from './common/NetworkBanner'; +import PrivateRoute from './common/routing/PrivateRoute'; +// import PublicRoute from './common/routing/PublicRoute'; +import Route from './common/routing/Route'; +// import TwoFactorDisableBanner from './common/TwoFactorDisableBanner'; +// import { ExploreContainer } from './explore/ExploreContainer'; +import GlobalStyle from './GlobalStyle'; +import { GuestLanding } from './landing/GuestLanding'; +// import { LoginCliLoginSuccess } from './login/LoginCliLoginSuccess'; +import NavigationWrapper from './navigation/NavigationWrapper'; +// import { NFTDetailWrapper } from './nft/NFTDetailWrapper'; +import { PageNotFound } from './page-not-found/PageNotFound'; +import Privacy from './privacy/Privacy'; +// import { Profile } from './profile/Profile'; +// import { ReceiveContainerWrapper } from './receive-money/ReceiveContainerWrapper'; +// import { SendContainerWrapper } from './send/SendContainerWrapper'; +// import { StakingContainer } from './staking/StakingContainer'; +// import Swap from './swap/Swap'; +import Terms from './terms/Terms'; +import { initAnalytics } from './wallet-migration/metrics'; +import { getMigrationStep } from './wallet-migration/utils'; +import WalletMigration, { WALLET_MIGRATION_VIEWS } from './wallet-migration/WalletMigration'; import '../index.css'; const { fetchTokenFiatValues, getTokenWhiteList } = tokenFiatValueActions; diff --git a/packages/frontend/src/components/navigation/DesktopContainer.js b/packages/frontend/src/components/navigation/DesktopContainer.js index ccec0d3bd3..841b45ac25 100644 --- a/packages/frontend/src/components/navigation/DesktopContainer.js +++ b/packages/frontend/src/components/navigation/DesktopContainer.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; import styled from 'styled-components'; +import { isWhitelabel } from '../../config/whitelabel'; import DeprecatedLogo from './DeprecatedLogo'; import DesktopMenu from './DesktopMenu'; import Logo from './Logo'; import NavLinks from './NavLinks'; -import { isWhitelabel } from '../../config/whitelabel'; const Container = styled.div` display: none; diff --git a/packages/frontend/src/components/navigation/DesktopMenu.js b/packages/frontend/src/components/navigation/DesktopMenu.js index d491d36cf5..b66bdec348 100644 --- a/packages/frontend/src/components/navigation/DesktopMenu.js +++ b/packages/frontend/src/components/navigation/DesktopMenu.js @@ -2,9 +2,9 @@ import React from 'react'; import { Translate } from 'react-localize-redux'; import styled from 'styled-components'; +import AccountSelector from '../accounts/account_selector/AccountSelector'; import AccessAccountBtn from './AccessAccountBtn'; import CreateAccountBtn from './CreateAccountBtn'; -import AccountSelector from '../accounts/account_selector/AccountSelector'; const Menu = styled.div` position: absolute; diff --git a/packages/frontend/src/components/navigation/NavigationWrapper.js b/packages/frontend/src/components/navigation/NavigationWrapper.js index 23c93fd447..b42746388f 100644 --- a/packages/frontend/src/components/navigation/NavigationWrapper.js +++ b/packages/frontend/src/components/navigation/NavigationWrapper.js @@ -1,11 +1,11 @@ import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import Navigation from './Navigation'; import { switchAccount, getAccountBalance } from '../../redux/actions/account'; import { selectAccountSlice } from '../../redux/slices/account'; import { selectAvailableAccounts } from '../../redux/slices/availableAccounts'; import { selectFlowLimitationMainMenu, selectFlowLimitationSubMenu } from '../../redux/slices/flowLimitation'; +import Navigation from './Navigation'; export default ({ history }) => { const dispatch = useDispatch(); From 21cb2f553a792f03972c2ded56204a4fcfee8e5f Mon Sep 17 00:00:00 2001 From: Danny Cho Date: Thu, 18 Jan 2024 14:41:09 +1300 Subject: [PATCH 13/15] chore: delete unavailable routes --- packages/frontend/src/components/Routing.js | 311 -------------------- 1 file changed, 311 deletions(-) diff --git a/packages/frontend/src/components/Routing.js b/packages/frontend/src/components/Routing.js index ce2591e73e..b47246a407 100644 --- a/packages/frontend/src/components/Routing.js +++ b/packages/frontend/src/components/Routing.js @@ -1,6 +1,5 @@ import { ConnectedRouter, getRouter } from 'connected-react-router'; import isString from 'lodash.isstring'; -// import { parseSeedPhrase } from 'near-seed-phrase'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import ReactDOMServer from 'react-dom/server'; @@ -25,13 +24,6 @@ import { handleClearAlert } from '../redux/reducers/status'; import { selectAccountSlice } from '../redux/slices/account'; import { actions as flowLimitationActions } from '../redux/slices/flowLimitation'; import { actions as tokenFiatValueActions } from '../redux/slices/tokenFiatValues'; -// import { CreateImplicitAccountWrapper } from '../routes/CreateImplicitAccountWrapper'; -// import { ImportAccountWithLinkWrapper } from '../routes/ImportAccountWithLinkWrapper'; -// import { LoginWrapper } from '../routes/LoginWrapper'; -// import { SetupLedgerNewAccountWrapper } from '../routes/SetupLedgerNewAccountWrapper'; -// import { SetupPassphraseNewAccountWrapper } from '../routes/SetupPassphraseNewAccountWrapper'; -// import { SetupRecoveryImplicitAccountWrapper } from '../routes/SetupRecoveryImplicitAccountWrapper'; -// import { SignWrapper } from '../routes/SignWrapper'; import { TransferWizardWrapper } from '../routes/TransferWizardWrapper'; import { VerifyOwnerWrapper } from '../routes/VerifyOwnerWrapper'; import translations_en from '../translations/en.global.json'; @@ -46,15 +38,6 @@ import translations_zh_hans from '../translations/zh-hans.global.json'; import translations_zh_hant from '../translations/zh-hant.global.json'; import classNames from '../utils/classNames'; import getBrowserLocale from '../utils/getBrowserLocale'; -// import AccessKeysWrapper from './access-keys/v2/AccessKeysWrapper'; -// import { AutoImportWrapper } from './accounts/auto_import/AutoImportWrapper'; -// import BatchImportAccounts from './accounts/batch_import_accounts'; -// import BatchLedgerExport from './accounts/batch_ledger_export'; -// import { ExistingAccountWrapper } from './accounts/create/existing_account/ExistingAccountWrapper'; -// import { InitialDepositWrapper } from './accounts/create/initial_deposit/InitialDepositWrapper'; -// import { CreateAccountLanding } from './accounts/create/landing/CreateAccountLanding'; -// import { VerifyAccountWrapper } from './accounts/create/verify_account/VerifyAccountWrapper'; -// import { CreateAccountWithRouter } from './accounts/CreateAccount'; import { reportUiActiveMixpanelThrottled } from '../utils/reportUiActiveMixpanelThrottled'; import ScrollToTop from '../utils/ScrollToTop'; import { @@ -65,39 +48,18 @@ import { } from '../utils/wallet'; import LedgerConfirmActionModal from './accounts/ledger/LedgerConfirmActionModal'; import LedgerConnectModal from './accounts/ledger/LedgerConnectModal/LedgerConnectModalWrapper'; -// import { SetupLedgerWithRouter } from './accounts/ledger/SetupLedger'; -// import { SetupLedgerSuccessWithRouter } from './accounts/ledger/SetupLedgerSuccess'; -// import { SignInLedgerWrapper } from './accounts/ledger/SignInLedgerWrapper'; -// import { LinkdropLandingWithRouter } from './accounts/LinkdropLanding'; -// import { RecoverAccountSeedPhraseWithRouter } from './accounts/RecoverAccountSeedPhrase'; -// import { RecoverAccountWrapper } from './accounts/RecoverAccountWrapper'; -// import { SetupRecoveryMethodWithRouter } from './accounts/recovery_setup/SetupRecoveryMethod'; -// import { SetupImplicitWithRouter } from './accounts/SetupImplicit'; -// import { SetupSeedPhraseWithRouter } from './accounts/SetupSeedPhrase'; import { DisableTwoFactor } from './accounts/two_factor/DisableTwoFactor'; -// import { EnableTwoFactor } from './accounts/two_factor/EnableTwoFactor'; -// import { BuyNear } from './buy/BuyNear'; import Footer from './common/Footer'; import GlobalAlert from './common/GlobalAlert'; import MigrationBanner from './common/MigrationBanner'; import NetworkBanner from './common/NetworkBanner'; import PrivateRoute from './common/routing/PrivateRoute'; -// import PublicRoute from './common/routing/PublicRoute'; import Route from './common/routing/Route'; -// import TwoFactorDisableBanner from './common/TwoFactorDisableBanner'; -// import { ExploreContainer } from './explore/ExploreContainer'; import GlobalStyle from './GlobalStyle'; import { GuestLanding } from './landing/GuestLanding'; -// import { LoginCliLoginSuccess } from './login/LoginCliLoginSuccess'; import NavigationWrapper from './navigation/NavigationWrapper'; -// import { NFTDetailWrapper } from './nft/NFTDetailWrapper'; import { PageNotFound } from './page-not-found/PageNotFound'; import Privacy from './privacy/Privacy'; -// import { Profile } from './profile/Profile'; -// import { ReceiveContainerWrapper } from './receive-money/ReceiveContainerWrapper'; -// import { SendContainerWrapper } from './send/SendContainerWrapper'; -// import { StakingContainer } from './staking/StakingContainer'; -// import Swap from './swap/Swap'; import Terms from './terms/Terms'; import { initAnalytics } from './wallet-migration/metrics'; import { getMigrationStep } from './wallet-migration/utils'; @@ -360,16 +322,6 @@ class Routing extends Component { {pathname !== '/' && } {pathname !== '/' && } - {/* { - // TODO: Remove TwoFactorDisableBanner when we push MigrationBanner to mainnet - !isWhitelabel && !SHOW_MIGRATION_BANNER && ( - - - - ) - } */} { WEP_PHASE_ONE && ( @@ -434,69 +386,6 @@ class Routing extends Component { path="/" render={(props) => this.handleTransferClick()} accountFound={accountFound} />} /> - {/* - - { - if (WEP_DISABLE_ACCOUNT_CREATION) { - return this.props.history.push('/'); - } else { - if (accountFound || !DISABLE_CREATE_ACCOUNT) { - return ; - } else { - return ; - } - } - }} - // Logged in users always create a named account - /> - - - - - - - */} )} /> - {/* - - - - - - - */} - {/* - - - { - const importString = decodeURIComponent( - location.hash.substring(1) - ); - const hasAccountId = - importString.includes('/'); - const seedPhrase = hasAccountId - ? importString.split('/')[1] - : importString; - const { secretKey } = - parseSeedPhrase(seedPhrase); - return ( - - ); - }} - /> - { - const importString = decodeURIComponent( - location.hash.substring(1) - ); - const hasAccountId = - importString.includes('/'); - return ( - - ); - }} - /> - - ( this.props.history.replace('/')} />)} - /> - - - - ( - - )} - /> - ( - - )} - /> - - - - - - - - - ( - - )} - /> - {isWhitelabel && ( - - )} - */} Date: Fri, 19 Jan 2024 12:10:29 +1300 Subject: [PATCH 14/15] fix: update translation with spacing, minor UI update --- packages/frontend/src/components/navigation/NavigationV2.js | 6 +----- packages/frontend/src/translations/en.global.json | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index 17939d379e..f27132f6ce 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -101,11 +101,7 @@ export default ({ }, []); const handleOnClickCreateNewAccount = () => { - if (WEP_DISABLE_ACCOUNT_CREATION) { - setShowModal('more-near-wallets'); - } else { - history.push('/create'); - } + setShowModal('more-near-wallets'); }; return ( diff --git a/packages/frontend/src/translations/en.global.json b/packages/frontend/src/translations/en.global.json index 0fdfe506f8..80df6a7265 100644 --- a/packages/frontend/src/translations/en.global.json +++ b/packages/frontend/src/translations/en.global.json @@ -681,7 +681,7 @@ "landingSectionTitle": "What happened to NEAR Wallet?", "landingSectionSubTitle": "Transfer your accounts with ease.", "landingSectionSubDescription": "To make the transition easier, you can securely migrate your accounts to a new wallet using the Transfer Wizard. Review the transfer-compatible wallet options below or move your accounts manually with your recovery phrase.", - "landingSectionDescription": "As we embrace a more decentralized future, the NEAR Wallet will be discontinued.This change invites you to discover a variety of new and secure wallet options within our ecosystem.Don’t worry, no changes will be made to your account or assets.", + "landingSectionDescription": "As we embrace a more decentralized future, the NEAR Wallet will be discontinued. This change invites you to discover a variety of new and secure wallet options within our ecosystem. Don’t worry, no changes will be made to your account or assets.", "wallet": { "title": "Find the right wallet for you.", "secondaryDescription": "Check out our diverse list of community-built wallet options.", From ae2aabc01e86e9a85a103886d6431f0138eb757e Mon Sep 17 00:00:00 2001 From: Danny Cho Date: Fri, 19 Jan 2024 12:11:55 +1300 Subject: [PATCH 15/15] chore: lint fixes --- packages/frontend/src/components/navigation/NavigationV2.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/frontend/src/components/navigation/NavigationV2.js b/packages/frontend/src/components/navigation/NavigationV2.js index f27132f6ce..b04d15b766 100644 --- a/packages/frontend/src/components/navigation/NavigationV2.js +++ b/packages/frontend/src/components/navigation/NavigationV2.js @@ -1,7 +1,6 @@ import React, { useState, useEffect, useCallback } from 'react'; import styled from 'styled-components'; -import { WEP_DISABLE_ACCOUNT_CREATION } from '../../../../../features'; import { WalletSelectorGetAWallet } from '../common/wallet_selector/WalletSelectorGetAWallet'; import DesktopContainer from './DesktopContainer'; import MobileContainer from './MobileContainer';