Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[APP-1049]: (feat): Backups V2 #5310

Merged
merged 106 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
a0e5b03
[APP-1051]: (feat): add backups global config (#5306)
walmat Jan 3, 2024
6071e21
[APP-1052]: Add icon to Settings depending on `preferredBackupMethod`…
walmat Jan 4, 2024
7106604
Merge branch 'develop' into @matthew/APP-1049
walmat Jan 10, 2024
99d09b9
wallets and backups screen progress (#5315)
walmat Jan 11, 2024
a1ee579
Merge branch 'develop' into @matthew/APP-1049
walmat Jan 18, 2024
3bd0dab
chore: merge develop
walmat Jan 19, 2024
948af92
cleanup unused stuff and progress on backups flow
walmat Jan 22, 2024
c8cd9c3
backups: warning + new secret phrase styles (#5322)
skylarbarrera Jan 23, 2024
f047eda
chore: cleanup WalletsAndBackup settings screen and replace lang with…
walmat Jan 23, 2024
1b4b260
Merge branch 'develop' into @matthew/APP-1049
walmat Jan 23, 2024
27bd303
android settings fixes
walmat Jan 24, 2024
7994d9d
@matthew/app 1106 (#5359)
walmat Jan 26, 2024
e40d909
[APP-1105]: Progress on restore from cloud flow (#5358)
walmat Jan 30, 2024
b6592fc
restore from backup working
walmat Jan 31, 2024
0377ff7
fix UserData.json restoring from other backups
walmat Jan 31, 2024
e006088
some cloud backup type improvements
walmat Jan 31, 2024
5f5dc5c
fix menu item width bug
walmat Feb 1, 2024
b8fb3d6
bug fixes
walmat Feb 1, 2024
ee6ace5
merge dev
walmat Feb 1, 2024
9d787b3
cleanup unused imports from manage cloud backups file
walmat Feb 1, 2024
cd45172
Merge branch 'develop' into @matthew/APP-1049
walmat Feb 2, 2024
57b9014
typescript, lint and cleanup
walmat Feb 2, 2024
cb4fa72
fix lint issues
walmat Feb 5, 2024
e1a75f1
fix file name casing
walmat Feb 6, 2024
25d7091
fix import secret phrase or private key image
walmat Feb 6, 2024
ebcb377
fix casing
walmat Feb 6, 2024
9a94738
Merge branch 'develop' into @matthew/APP-1049
walmat Feb 6, 2024
fbbcc86
android style fixes
walmat Feb 6, 2024
fab805e
merge develop
walmat Feb 7, 2024
a3f20eb
wrap up work
walmat Feb 8, 2024
2081506
android stuff
walmat Feb 8, 2024
1781505
android bsstack fixes
walmat Feb 8, 2024
72c5957
more touches
walmat Feb 8, 2024
53d2991
fixes
walmat Feb 8, 2024
74ae3be
improve spacing on >1 line wallet rows
walmat Feb 8, 2024
7045631
fix lint
walmat Feb 9, 2024
b4c19ea
@matthew/app 1135 (#5397)
walmat Feb 9, 2024
0903594
Merge branch 'develop' into @matthew/APP-1049
walmat Feb 9, 2024
15df798
change log
walmat Feb 9, 2024
56f9f69
fix bug where create wallet sometimes uses the wrong wallet
walmat Feb 12, 2024
a0d194f
add ens avatars to wallets view
walmat Feb 12, 2024
9442310
cleanup size
walmat Feb 12, 2024
6130687
add more padding to image on settings page
walmat Feb 12, 2024
6d948ec
fix
walmat Feb 12, 2024
8227bfa
Merge branch 'develop' into @matthew/APP-1049
walmat Feb 12, 2024
5f59f0a
fix algo used to calculate account menu item height
walmat Feb 12, 2024
06af5a8
add change drivce accounts for android
walmat Feb 13, 2024
b97ed17
cleanup .android files
walmat Feb 13, 2024
6a96d9e
cleanup .android files
walmat Feb 13, 2024
7b4674b
change dev settings sheet title on android
walmat Feb 13, 2024
b7c0ca0
fix create wallet modal on close opening the create profile sheet
walmat Feb 13, 2024
7bb17c0
add menu item being the entire context menu boundary (#5405)
walmat Feb 13, 2024
b20c29e
few small changes
walmat Feb 14, 2024
214ec35
@matthew/app 1157 (#5406)
walmat Feb 15, 2024
9d7fb41
add icons
walmat Feb 16, 2024
6d9256c
ens fix + context menu button color change (#5414)
walmat Feb 16, 2024
b45ad3b
skylar did all this (#5409)
walmat Feb 16, 2024
525082a
improve pin screen on android
walmat Feb 20, 2024
ddc5cfc
some i18n and cloud backup changes
walmat Feb 20, 2024
e51877b
backups: show back up state (#5420)
skylarbarrera Feb 20, 2024
9c42987
Merge branch 'develop' into @matthew/APP-1049
walmat Feb 20, 2024
e813870
impl. backing up all wallets at once (#5432)
walmat Feb 23, 2024
8d57df3
merge develop
walmat Feb 29, 2024
7fa765a
merge develop
walmat Mar 5, 2024
8a4dd7e
Fix Android google drive login quirks (#5461)
walmat Mar 7, 2024
a532f53
Fix Android ShadowStack causing TextInputs to be funky... and not in …
walmat Mar 11, 2024
d27533a
added assets to xcode
dereknelson Mar 11, 2024
bdd9237
fix files (#5468)
walmat Mar 11, 2024
17713d1
Add this wallet sheet doesn't dismiss after backing up to iCloud (#5467)
walmat Mar 11, 2024
8ea8762
fix view cloud backups not working (#5466)
walmat Mar 11, 2024
ac47b01
Android only - previous back up with pin code requires a new creation…
walmat Mar 11, 2024
7546d18
Fixes to Android Google Account Management (#5476)
walmat Mar 11, 2024
d0c06d6
Merge branch 'develop' into @matthew/APP-1049
walmat Mar 11, 2024
83ad420
merge develop
walmat Mar 14, 2024
5208d6e
test signing key
walmat Mar 14, 2024
5448705
init (#5507)
walmat Mar 14, 2024
293e5d7
Merge branch 'develop' into @matthew/APP-1049
walmat Mar 14, 2024
96a53a8
fix android pin flow
walmat Mar 15, 2024
4453a14
restore to backup changes
walmat Mar 15, 2024
b9b9b44
restore changes
walmat Mar 15, 2024
2e48968
Merge branch 'develop' into @matthew/APP-1049
walmat Mar 15, 2024
a2e148c
fix lint
walmat Mar 15, 2024
02fed22
restoration changes
walmat Mar 15, 2024
31ebeb9
merge develop
walmat Mar 18, 2024
d866b7e
getprivatekey call changes
walmat Mar 18, 2024
72bf8f7
smol cleanup on keychain
walmat Mar 18, 2024
7746005
rm log
walmat Mar 18, 2024
097af8e
fix current backup not being restored into keychain properly
walmat Mar 19, 2024
6bfd659
add keychain logging
walmat Mar 19, 2024
94bec4f
some backups issues solved
walmat Mar 20, 2024
f4a64f6
fix some longstanding android old pin decryption and create wallet no…
walmat Mar 20, 2024
55473c7
remove unused lodash import and console logs
walmat Mar 20, 2024
3511d75
final restoration changes
walmat Mar 21, 2024
9b9c1cd
fix backup prompt not working since it wasn't wrapped in the provider
walmat Mar 21, 2024
93285d3
undo commit to nfts query
walmat Mar 21, 2024
5f4359b
merge
walmat Mar 21, 2024
767b3c0
add login if needed on android
walmat Mar 21, 2024
1eb3797
chore: merge develop
walmat Mar 21, 2024
325812e
fix no provider modal
walmat Mar 22, 2024
b51a399
Merge branch 'develop' into @matthew/APP-1049
walmat Mar 27, 2024
8fa92b7
rm xcode assets
walmat Mar 27, 2024
2f404f7
Update src/components/backup/BackupCloudStep.tsx
skylarbarrera Mar 27, 2024
1263ab5
Apply suggestions from code review
walmat Mar 27, 2024
e254f28
remove keychain logging stuff
walmat Mar 27, 2024
ff161df
fix lint
walmat Mar 27, 2024
3cb4d0e
fix i18n paths
walmat Mar 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added src/assets/BackedUpCloud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/BackedUpCloud@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/BackedUpCloud@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/BackupWarning.png
walmat marked this conversation as resolved.
Show resolved Hide resolved
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/BackupWarning@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/BackupWarning@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CloudBackupWarning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CloudBackupWarning@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CloudBackupWarning@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CreateNewWallet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CreateNewWallet@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/CreateNewWallet@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/ImportSecretPhraseOrPrivateKey.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/ImportSecretPhraseOrPrivateKey@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/ManuallyBackedUp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/ManuallyBackedUp@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/ManuallyBackedUp@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/PairHardwareWallet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/PairHardwareWallet@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/PairHardwareWallet@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/WalletsAndBackup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/WalletsAndBackup@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/WalletsAndBackup@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/watchWallet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/watchWallet@2x.png
Binary file added src/assets/watchWallet@3x.png
1 change: 0 additions & 1 deletion src/components/PromoSheet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ export function PromoSheet({
const contentHeight = deviceHeight - (!isSmallPhone ? sharedCoolModalTopOffset : 0);

return (
// @ts-ignore
<SlackSheet
additionalTopPadding={IS_ANDROID ? StatusBar.currentHeight : false}
contentHeight={contentHeight}
Expand Down
4 changes: 2 additions & 2 deletions src/components/add-wallet/AddWalletList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ type AddWalletListProps = {
export const AddWalletList = ({ items, totalHorizontalInset }: AddWalletListProps) => {
return (
<Stack space="24px" separator={<Separator color="divider60 (Deprecated)" />}>
{items.map((item: AddWalletItem) => (
<AddWalletRow key={item.icon} content={item} totalHorizontalInset={totalHorizontalInset} />
{items.map((item: AddWalletItem, index: number) => (
<AddWalletRow key={typeof item.icon === 'string' ? item.icon : index} content={item} totalHorizontalInset={totalHorizontalInset} />
))}
</Stack>
);
Expand Down
74 changes: 27 additions & 47 deletions src/components/add-wallet/AddWalletRow.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,14 @@
import React from 'react';
import { ImageSourcePropType } from 'react-native';

import { Box, Stack, Text, useForegroundColor } from '@/design-system';
import { IS_ANDROID, IS_TEST } from '@/env';
import styled from '@/styled-thing';
import { useTheme } from '@/theme';
import React from 'react';
import { GradientText, Text as RNText } from '../text';
import { Icon } from '../icons';
import ConditionalWrap from 'conditional-wrap';
import { deviceUtils } from '@/utils';
import { ButtonPressAnimation } from '../animations';

const RainbowText = styled(GradientText).attrs(({ theme: { colors } }: any) => ({
angle: false,
colors: colors.gradients.rainbow,
end: { x: 0, y: 0.5 },
start: { x: 1, y: 0.5 },
steps: [0, 0.774321, 1],
}))({});

const TextIcon = styled(RNText).attrs({
size: 29,
weight: 'medium',
})({
marginVertical: IS_ANDROID ? -10 : 0,
});
import { ImgixImage } from '../images';
import { Source } from 'react-native-fast-image';
import { TextColor } from '@/design-system/color/palettes';

const CaretIcon = styled(Icon).attrs(({ color }: { color: string }) => ({
name: 'caret',
Expand All @@ -34,7 +20,8 @@ const CaretIcon = styled(Icon).attrs(({ color }: { color: string }) => ({
export type AddWalletItem = {
title: string;
description: string;
icon: string;
descriptionColor?: TextColor;
icon: string | ImageSourcePropType;
iconColor?: string;
testID?: string;
onPress: () => void;
Expand All @@ -46,19 +33,17 @@ type AddWalletRowProps = {
};

export const AddWalletRow = ({ content, totalHorizontalInset }: AddWalletRowProps) => {
const { colors } = useTheme();
const labelQuaternary = useForegroundColor('labelQuaternary');
const { title, description, icon, iconColor, testID, onPress } = content;
const { title, description, icon, descriptionColor, testID, onPress } = content;

// device width - 2 * total horizontal inset from device boundaries - caret column width (30)
const contentWidth = deviceUtils.dimensions.width - 2 * totalHorizontalInset - 30;

const shouldUseRainbowText = !iconColor && !(IS_ANDROID && IS_TEST);
const size = 64;

return (
<Box
as={ButtonPressAnimation}
// @ts-ignore js component
scaleTo={0.9}
flexDirection="row"
alignItems="center"
Expand All @@ -67,28 +52,23 @@ export const AddWalletRow = ({ content, totalHorizontalInset }: AddWalletRowProp
testID={testID}
>
<Box width={{ custom: contentWidth }}>
<Stack space="12px" alignHorizontal="left">
<ConditionalWrap
condition={shouldUseRainbowText}
wrap={(children: React.ReactNode) => <RainbowText colors={colors}>{children}</RainbowText>}
>
<TextIcon color={iconColor}>{icon}</TextIcon>
</ConditionalWrap>
<ConditionalWrap
condition={shouldUseRainbowText}
wrap={(children: React.ReactNode) => (
<Box marginBottom={{ custom: -4 }}>
<RainbowText colors={colors}>
<Box marginBottom={{ custom: 4 }}>{children}</Box>
</RainbowText>
</Box>
)}
>
<Text size="20pt" weight="bold" color="label">
{title}
</Text>
</ConditionalWrap>
<Text size="13pt" weight="semibold" color="labelTertiary">
<Stack space="16px" alignHorizontal="left">
<Box
as={ImgixImage}
borderRadius={size / 2}
height={{ custom: size }}
marginLeft={{ custom: -12 }}
marginRight={{ custom: -12 }}
marginTop={{ custom: -12 }}
marginBottom={{ custom: -12 }}
source={icon as Source}
width={{ custom: size }}
size={size}
/>
<Text size="20pt" weight="heavy" color="label">
{title}
</Text>
<Text size="15pt" weight="semibold" color={descriptionColor || 'labelTertiary'}>
{description}
</Text>
</Stack>
Expand Down
22 changes: 3 additions & 19 deletions src/components/asset-list/RecyclerAssetList2/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -193,23 +193,6 @@ function NavbarOverlay({ accentColor, position }: { accentColor?: string; positi
[handlePressConnectedApps, handlePressQRCode, handlePressSettings]
);

const handlePressMenuItemAndroid = React.useCallback(
(buttonIndex: number) => {
switch (buttonIndex) {
case 0:
handlePressSettings();
break;
case 1:
handlePressQRCode();
break;
case 2:
handlePressConnectedApps();
break;
}
},
[handlePressConnectedApps, handlePressQRCode, handlePressSettings]
);

return (
<Box
as={RNAnimated.View}
Expand Down Expand Up @@ -262,11 +245,12 @@ function NavbarOverlay({ accentColor, position }: { accentColor?: string; positi
rightComponent={
IS_ANDROID ? (
<AndroidContextMenu
// no idea where dynamicOptions is defined as a required prop
dynamicOptions={undefined}
options={menuConfig.menuItems.map(item => item?.actionTitle)}
cancelButtonIndex={menuConfig.menuItems.length - 1}
onPressActionSheet={handlePressMenuItemAndroid}
onPressActionSheet={(buttonIndex: number) => {
handlePressMenuItem({ nativeEvent: { actionKey: menuConfig.menuItems[buttonIndex]?.actionKey } });
}}
>
<View>
<Navbar.Item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import { ButtonPressAnimation } from '@/components/animations';
import { CopyFloatingEmojis } from '@/components/floating-emojis';
import { enableActionsOnReadOnlyWallet } from '@/config';
import { AccentColorProvider, Box, Column, Columns, Inset, Stack, Text, useColorMode } from '@/design-system';
import { CurrencySelectionTypes, ExchangeModalTypes } from '@/helpers';
import { useAccountProfile, useAccountSettings, useSwapCurrencyHandlers, useWallets } from '@/hooks';
import { useAccountProfile, useAccountSettings, useWallets } from '@/hooks';
import { delayNext } from '@/hooks/useMagicAutofocus';
import { useNavigation } from '@/navigation';
import { ethereumUtils, watchingAlert } from '@/utils';
Expand Down
110 changes: 110 additions & 0 deletions src/components/backup/AddWalletToCloudBackupStep.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import React, { useCallback } from 'react';
import { Bleed, Box, Inline, Inset, Separator, Stack, Text } from '@/design-system';
import * as lang from '@/languages';
import { ImgixImage } from '../images';
import WalletsAndBackupIcon from '@/assets/WalletsAndBackup.png';
import { Source } from 'react-native-fast-image';
import { cloudPlatform } from '@/utils/platform';
import { ButtonPressAnimation } from '../animations';
import { useNavigation } from '@/navigation';
import { useWallets } from '@/hooks';
import { WalletCountPerType, useVisibleWallets } from '@/screens/SettingsSheet/useVisibleWallets';
import { format } from 'date-fns';
import { useCreateBackup } from './useCreateBackup';

const imageSize = 72;

export default function AddWalletToCloudBackupStep() {
const { goBack } = useNavigation();
const { wallets, selectedWallet } = useWallets();

const walletTypeCount: WalletCountPerType = {
phrase: 0,
privateKey: 0,
};

const { lastBackupDate } = useVisibleWallets({ wallets, walletTypeCount });

const { onSubmit } = useCreateBackup({
walletId: selectedWallet.id,
});

const onMaybeLater = useCallback(() => goBack(), [goBack]);

return (
<Inset horizontal={'24px'} vertical={'44px'}>
<Inset bottom={'44px'} horizontal={'24px'}>
<Stack alignHorizontal="center">
<Box
as={ImgixImage}
borderRadius={imageSize / 2}
height={{ custom: imageSize }}
marginLeft={{ custom: -12 }}
marginRight={{ custom: -12 }}
marginTop={{ custom: 0 }}
marginBottom={{ custom: 8 }}
source={WalletsAndBackupIcon as Source}
width={{ custom: imageSize }}
size={imageSize}
/>
<Text align="center" size="26pt" weight="bold" color="label">
{lang.t(lang.l.back_up.cloud.add_wallet_to_cloud_backups)}
</Text>
</Stack>
</Inset>

<Bleed horizontal="24px">
<Separator color="separatorSecondary" thickness={1} />
</Bleed>

<ButtonPressAnimation scaleTo={0.95} onPress={onSubmit}>
<Box alignItems="center" justifyContent="center" paddingTop={'24px'} paddingBottom={'24px'}>
<Box alignItems="center" justifyContent="center" width="full">
<Inline alignHorizontal="justify" alignVertical="center" wrap={false}>
<Text color={'action (Deprecated)'} size="20pt" weight="bold">
􀎽{' '}
{lang.t(lang.l.back_up.cloud.back_to_cloud_platform_now, {
cloudPlatform,
})}
</Text>
</Inline>
</Box>
</Box>
</ButtonPressAnimation>

<Bleed horizontal="24px">
<Separator color="separatorSecondary" thickness={1} />
</Bleed>

<ButtonPressAnimation scaleTo={0.95} onPress={onMaybeLater}>
<Box alignItems="center" justifyContent="center" paddingTop={'24px'} paddingBottom={'24px'}>
<Box alignItems="center" justifyContent="center" width="full">
<Inline alignHorizontal="justify" alignVertical="center" wrap={false}>
<Text color={'labelSecondary'} size="20pt" weight="bold">
{lang.t(lang.l.back_up.cloud.mayber_later)}
</Text>
</Inline>
</Box>
</Box>
</ButtonPressAnimation>

<Bleed horizontal="24px">
<Separator color="separatorSecondary" thickness={1} />
</Bleed>

{lastBackupDate && (
<Box alignItems="center" justifyContent="center" paddingTop={'24px'} paddingBottom={'24px'}>
<Box alignItems="center" justifyContent="center" width="full">
<Inline alignHorizontal="justify" alignVertical="center" wrap={false}>
<Text color={'labelTertiary'} size="15pt" weight="medium">
{lang.t(lang.l.back_up.cloud.latest_backup, {
date: format(lastBackupDate, "M/d/yy 'at' h:mm a"),
})}
</Text>
</Inline>
</Box>
</Box>
)}
</Inset>
);
}
Loading
Loading