From 8da91b9e688a897e0031f97a0662c4ceeb78705c Mon Sep 17 00:00:00 2001 From: Bartosz Dryl Date: Fri, 30 Jun 2023 09:36:11 +0200 Subject: [PATCH] Wallet settings, change password and download mnemonic (#4326) * wip * settings view ground work * uncomment route * add borderColor prop to banner * fix issues with modal paddings * create password form component, sign up modal refactoring * add export seed dialog and change password dialog * handle copy button * show different settings for wallet users * refactor password dialogs * cr fixes * Update packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/MembershipWallet.tsx Co-authored-by: attemka * auth helpers further refactor * reset form on cancel * cr fixes * cr fixes 2 * add additional step to ChangePassword * action bar adjustments, add unsaved changes dialog * fix viewer layout * action bar changes * action bar adjustments * cr fixes * fix fee issue * change password fix? --------- Co-authored-by: attemka --- .../components/ActionBar/ActionBar.styles.ts | 29 +-- .../src/components/ActionBar/ActionBar.tsx | 32 +-- .../src/components/Banner/Banner.styles.ts | 4 +- .../atlas/src/components/Banner/Banner.tsx | 4 +- .../components/PageTabs/PageTabs.styles.ts | 11 +- .../src/components/PageTabs/PageTabs.tsx | 21 +- .../src/components/Tooltip/Tooltip.styles.ts | 4 +- .../ForgotPasswordModal.tsx | 3 +- .../PasswordCriterias.styles.ts | 1 - .../PasswordCriterias/PasswordCriterias.tsx | 8 +- .../_auth/SignUpModal/SignUpModal.tsx | 1 + .../SignUpSteps/SignUpEmailStep.tsx | 4 +- .../SignUpPasswordStep/SignUpPasswordStep.tsx | 24 +- .../SignUpSteps/SignUpSteps.styles.ts | 4 +- .../components/_inputs/Input/Input.styles.ts | 5 +- .../src/components/_inputs/Input/Input.tsx | 22 +- .../src/components/_inputs/inputs.utils.ts | 26 ++- .../_overlays/Dialog/Dialog.styles.ts | 2 - .../components/_overlays/Dialog/Dialog.tsx | 1 - .../_templates/EntitySettingTemplate.tsx | 28 +-- packages/atlas/src/hooks/useCreateMember.ts | 3 +- .../src/hooks/useHidePasswordInInput.tsx | 20 ++ .../atlas/src/providers/auth/auth.helpers.ts | 69 +++++- .../src/providers/auth/auth.provider.tsx | 17 +- .../atlas/src/providers/auth/auth.types.ts | 2 + .../atlas/src/utils/formValidationOptions.ts | 20 ++ .../StudioChannelGeneralTab.tsx | 24 +- .../ChangePasswordDialog.tsx | 209 ++++++++++++++++++ .../ExportSeedDialog.tsx | 140 ++++++++++++ .../MembershipPublicProfile.tsx | 72 +++--- .../MembershipSettingsView.styles.ts | 23 +- .../MembershipSettingsView.tsx | 84 ++++++- .../MembershipWallet.styles.ts | 64 ++++++ .../MembershipWallet/MembershipWallet.tsx | 192 ++++++++++++++++ .../MembershipWallet/index.ts | 1 + .../atlas/src/views/viewer/ViewerLayout.tsx | 12 +- 36 files changed, 1005 insertions(+), 181 deletions(-) create mode 100644 packages/atlas/src/hooks/useHidePasswordInInput.tsx create mode 100644 packages/atlas/src/views/viewer/MembershipSettingsView/ChangePasswordDialog.tsx create mode 100644 packages/atlas/src/views/viewer/MembershipSettingsView/ExportSeedDialog.tsx create mode 100644 packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/MembershipWallet.styles.ts create mode 100644 packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/MembershipWallet.tsx create mode 100644 packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/index.ts diff --git a/packages/atlas/src/components/ActionBar/ActionBar.styles.ts b/packages/atlas/src/components/ActionBar/ActionBar.styles.ts index 2bb2c60a1c..bd8bac61cf 100644 --- a/packages/atlas/src/components/ActionBar/ActionBar.styles.ts +++ b/packages/atlas/src/components/ActionBar/ActionBar.styles.ts @@ -47,20 +47,6 @@ export const StyledInformation = styled(Information)` margin-left: ${sizes(1)}; ` -export const ActionButtonPrimary = styled(Button)<{ secondaryButtonExists: boolean }>` - grid-area: primary-button; - - ${({ secondaryButtonExists }) => - !secondaryButtonExists && - css` - grid-column: 1 / span 2; - - ${media.sm} { - grid-column: -3 / span 2; - } - `} -` - export const SecondaryButton = styled(Button)` grid-area: secondary-button; ` @@ -80,3 +66,18 @@ export const FeeContainer = styled.div` display: flex; align-items: center; ` + +export const PrimaryButtonContainer = styled.div<{ secondaryButtonExists: boolean }>` + grid-area: primary-button; + width: 100%; + + ${({ secondaryButtonExists }) => + !secondaryButtonExists && + css` + grid-column: 1 / span 2; + + ${media.sm} { + grid-column: -3 / span 2; + } + `} +` diff --git a/packages/atlas/src/components/ActionBar/ActionBar.tsx b/packages/atlas/src/components/ActionBar/ActionBar.tsx index 026a08a8e3..eb488cd1cd 100644 --- a/packages/atlas/src/components/ActionBar/ActionBar.tsx +++ b/packages/atlas/src/components/ActionBar/ActionBar.tsx @@ -5,16 +5,16 @@ import { CSSTransition } from 'react-transition-group' import { Fee } from '@/components/Fee' import { Text } from '@/components/Text' import { Tooltip, TooltipProps } from '@/components/Tooltip' -import { ButtonProps } from '@/components/_buttons/Button' +import { Button, ButtonProps } from '@/components/_buttons/Button' import { useHasEnoughBalance } from '@/hooks/useHasEnoughBalance' import { useMediaMatch } from '@/hooks/useMediaMatch' import { transitions } from '@/styles' import { ActionBarContainer, - ActionButtonPrimary, DraftsBadgeContainer, FeeContainer, + PrimaryButtonContainer, SecondaryButton, StyledInformation, } from './ActionBar.styles' @@ -93,18 +93,22 @@ export const ActionBar = forwardRef( {secondaryButton?.text} - - {loadingState ? 'Please wait...' : primaryButton.text} - - {primaryButtonTooltip && } + + {/* tooltip is positioned weirdly on this button, that's we are setting offsetY to 22 */} + + + + ) } diff --git a/packages/atlas/src/components/Banner/Banner.styles.ts b/packages/atlas/src/components/Banner/Banner.styles.ts index c1da921839..e4d140ced3 100644 --- a/packages/atlas/src/components/Banner/Banner.styles.ts +++ b/packages/atlas/src/components/Banner/Banner.styles.ts @@ -34,13 +34,13 @@ export const BannerDescription = styled.div<{ withTitle?: boolean }>` white-space: pre-line; ` -export const BannerWrapper = styled.div<{ size: 'small' | 'medium' }>` +export const BannerWrapper = styled.div<{ size: 'small' | 'medium'; borderColor?: string }>` flex: 1; position: relative; padding: ${(props) => (props.size === 'small' ? sizes(4) : sizes(6))}; width: 100%; background-color: ${cVar('colorBackgroundMutedAlpha')}; - border-left: 2px solid ${cVar('colorBorderPrimary')}; + border-left: 2px solid ${({ borderColor }) => borderColor ?? cVar('colorBorderPrimary')}; ` export const ActionButton = styled(Button)` diff --git a/packages/atlas/src/components/Banner/Banner.tsx b/packages/atlas/src/components/Banner/Banner.tsx index 6ba6ede31a..49ed33bc30 100644 --- a/packages/atlas/src/components/Banner/Banner.tsx +++ b/packages/atlas/src/components/Banner/Banner.tsx @@ -22,6 +22,7 @@ type ActionButtonProps = { export type BannerProps = { dismissibleId?: string + borderColor?: string title?: string description?: ReactNode className?: string @@ -32,6 +33,7 @@ export type BannerProps = { export const Banner: FC = ({ title, + borderColor, description, className, icon, @@ -49,7 +51,7 @@ export const Banner: FC = ({ } return ( - +
{title && ( diff --git a/packages/atlas/src/components/PageTabs/PageTabs.styles.ts b/packages/atlas/src/components/PageTabs/PageTabs.styles.ts index 04caff01ee..f1f1fb5613 100644 --- a/packages/atlas/src/components/PageTabs/PageTabs.styles.ts +++ b/packages/atlas/src/components/PageTabs/PageTabs.styles.ts @@ -7,8 +7,15 @@ export const PageTabsWrapper = styled.div` padding: 0 ${sizes(4)}; box-shadow: ${cVar('effectDividersBottom')}; display: flex; - justify-content: space-between; +` + +export const BackActionWrapper = styled.div` + display: flex; + align-items: center; + padding: ${sizes(2)} ${sizes(4)} ${sizes(2)} 0; + position: relative; + border-right: 1px solid ${cVar('colorCoreNeutral600')}; ` export const TailingContentWrapper = styled.div` - margin: ${sizes(2)} ${sizes(4)}; + margin: ${sizes(2)} ${sizes(4)} ${sizes(2)} auto; ` diff --git a/packages/atlas/src/components/PageTabs/PageTabs.tsx b/packages/atlas/src/components/PageTabs/PageTabs.tsx index 1e564fcc86..68ea7ffc92 100644 --- a/packages/atlas/src/components/PageTabs/PageTabs.tsx +++ b/packages/atlas/src/components/PageTabs/PageTabs.tsx @@ -1,19 +1,30 @@ import { FC, ReactNode } from 'react' -import { PageTabsWrapper, TailingContentWrapper } from './PageTabs.styles' +import { SvgActionChevronL } from '@/assets/icons' + +import { BackActionWrapper, PageTabsWrapper, TailingContentWrapper } from './PageTabs.styles' import { Tabs, TabsProps } from '../Tabs' +import { Button, ButtonProps } from '../_buttons/Button' + +type BackAction = Pick -type PageTabsProps = { +type PageTabsProps = Omit & { + backAction?: BackAction trailingContent?: ReactNode -} & Omit +} -export const PageTabs: FC = ({ className, trailingContent, ...tabsProps }) => { +export const PageTabs: FC = ({ className, backAction, trailingContent, ...tabsProps }) => { return ( + {backAction && ( + + + + )} + + + + + + + + {!isWalletUser && ( + + + + )} + + {!isWalletUser && ( + } + variant="secondary" + size="large" + onClick={() => setIsChangePasswordDialogOpen(true)} + > + Change password + + )} + + {!isWalletUser && ( + + + + {CONNECTING_WALLET_STEPS.map(({ title, description }, idx) => ( + + ))} + + + + )} + + ) +} + +type WalletStepListItemComponentProps = { + title: string + description: ReactNode +} + +const WalletStepListItemComponent: FC = ({ title, description }) => { + return ( + +
+ + {title} + + + {description} + +
+
+ ) +} diff --git a/packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/index.ts b/packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/index.ts new file mode 100644 index 0000000000..e4dd7c6f2b --- /dev/null +++ b/packages/atlas/src/views/viewer/MembershipSettingsView/MembershipWallet/index.ts @@ -0,0 +1 @@ +export * from './MembershipWallet' diff --git a/packages/atlas/src/views/viewer/ViewerLayout.tsx b/packages/atlas/src/views/viewer/ViewerLayout.tsx index d13f99c538..5e5511f26f 100644 --- a/packages/atlas/src/views/viewer/ViewerLayout.tsx +++ b/packages/atlas/src/views/viewer/ViewerLayout.tsx @@ -82,13 +82,11 @@ export const ViewerLayout: FC = () => { } - // redirectTo={ENTRY_POINT_ROUTE} - // /> - + } + redirectTo={ENTRY_POINT_ROUTE} + /> } />