-
Notifications
You must be signed in to change notification settings - Fork 0
543 feat: backup/recovery UI #558
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
base: 373-fte-ui
Are you sure you want to change the base?
Conversation
PR SummaryImplemented a comprehensive backup and recovery UI flow that allows users to import profiles through multiple methods including device backup, cloud providers, and seed phrases. The implementation includes 8 new screens with proper navigation flow, TanStack Query integration for future API calls, and internationalization support. The flow starts from the GetStartedScreen and provides options for device sync via QR code, cloud backup from Google Drive/iCloud/Dropbox, seed phrase input, and other import methods. Changes
autogenerated by presubmit.ai |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Commits Considered (2)
- 74189a4: feat: backup flow ui
Closes #543
- 7efe46a: feat: backup flow ui
Closes #543
Files Processed (13)
- packages/screens/src/backup/BackupOptionsScreen.query.tsx (from packages/screens/src/onboarding/BackupOptionsScreen.query.tsx) (0 hunks)
- packages/screens/src/backup/CloudBackupScreen.query.tsx (1 hunk)
- packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx (1 hunk)
- packages/screens/src/backup/ImportProfileScreen.query.tsx (1 hunk)
- packages/screens/src/backup/OtherImportMethodsScreen.query.tsx (1 hunk)
- packages/screens/src/backup/index.ts (1 hunk)
- packages/screens/src/index.ts (1 hunk)
- packages/screens/src/locales/en.json (1 hunk)
- packages/screens/src/onboarding/GetStartedScreen.query.tsx (1 hunk)
- packages/screens/src/onboarding/index.ts (1 hunk)
- packages/ui/src/components/backup/InfoCard.tsx (1 hunk)
- packages/ui/src/components/backup/index.ts (1 hunk)
- packages/ui/src/index.ts (1 hunk)
Actionable Comments (3)
-
packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx [22-22]
security: "Seed phrase stored in plain text in component state."
-
packages/screens/src/backup/ImportProfileScreen.query.tsx [42-44]
possible bug: "Navigation target mismatch with actual screen name."
-
packages/screens/src/backup/OtherImportMethodsScreen.query.tsx [32-34]
possible bug: "Navigation target mismatch with actual screen name."
Skipped Comments (4)
-
packages/screens/src/backup/CloudBackupScreen.query.tsx [155-155]
possible bug: "Inconsistent disabled state across cloud provider options."
-
packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx [74-82]
maintainability: "Hardcoded styling instead of using design system tokens."
-
packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx [98-106]
maintainability: "Hardcoded styling instead of using design system tokens."
-
packages/screens/src/locales/en.json [305-305]
possible issue: "Misleading title for other import methods screen."
| */ | ||
| export function EnterSeedPhraseScreen(): React.ReactElement { | ||
| const { t } = useTranslation(); | ||
| const [seedPhrase, setSeedPhrase] = useState(''); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The seed phrase is stored in plain text in component state. For security, consider using a secure input method or clearing the state immediately after use to prevent exposure in memory dumps or debugging tools.
| // Navigate to recovery phrase input | ||
| navigation.navigate('EnterRecoveryPhrase'); | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The navigation target 'EnterRecoveryPhrase' doesn't match the actual screen name 'EnterSeedPhraseScreen' that was implemented. This will cause a navigation error.
| // Navigate to seed phrase input | ||
| navigation.navigate('EnterSeedPhrase'); | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The navigation target 'EnterSeedPhrase' doesn't match the actual screen name 'EnterSeedPhraseScreen' that was implemented. This will cause a navigation error.
Closes #543
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Files Processed (8)
- packages/screens/src/backup/CloudBackupScreen.query.tsx (1 hunk)
- packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx (1 hunk)
- packages/screens/src/backup/VerifyPasswordScreen.query.tsx (1 hunk)
- packages/screens/src/backup/index.ts (1 hunk)
- packages/screens/src/locales/en.json (1 hunk)
- packages/ui/src/components/backup/InfoCard.tsx (1 hunk)
- packages/ui/src/components/backup/index.ts (1 hunk)
- packages/ui/src/index.ts (1 hunk)
Actionable Comments (0)
Skipped Comments (8)
-
packages/screens/src/backup/CloudBackupScreen.query.tsx [153-153]
possible bug: "Inconsistent disabled state across cloud provider options."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [48-48]
possible bug: "Invalid hexadecimal character in mock Flow address."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [56-56]
possible bug: "Invalid hexadecimal character in mock Flow address."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [65-65]
possible bug: "Invalid hexadecimal character in mock Flow address."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [101-101]
possible bug: "Invalid hexadecimal character in mock Flow address."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [319-319]
possible issue: "Redundant conditional expression always returns same value."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [320-320]
possible issue: "Redundant conditional expression always returns same value."
-
packages/screens/src/backup/VerifyPasswordScreen.query.tsx [20-20]
security: "Password stored in plain text without validation."
Closes #543
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Files Processed (7)
- packages/screens/src/backup/BackupOptionsScreen.query.tsx (from packages/screens/src/onboarding/BackupOptionsScreen.query.tsx) (3 hunks)
- packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx (1 hunk)
- packages/screens/src/backup/DeviceBackupScanScreen.query.tsx (1 hunk)
- packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx (1 hunk)
- packages/screens/src/backup/ImportProfileScreen.query.tsx (1 hunk)
- packages/screens/src/backup/index.ts (1 hunk)
- packages/screens/src/locales/en.json (1 hunk)
Actionable Comments (2)
-
packages/screens/src/backup/ImportProfileScreen.query.tsx [43-43]
possible bug: "Navigation target mismatch will cause runtime error."
-
packages/screens/src/backup/EnterSeedPhraseScreen.query.tsx [23-23]
security: "Seed phrase stored in plain text creates security vulnerability."
Skipped Comments (5)
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [56-56]
possible bug: "Invalid hexadecimal character in mock address data."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [101-101]
possible bug: "Invalid hexadecimal character in mock address data."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [319-319]
maintainability: "Redundant conditional expression with identical values."
-
packages/screens/src/backup/ConfirmImportProfileScreen.query.tsx [320-320]
maintainability: "Redundant conditional expression with identical values."
-
packages/screens/src/backup/DeviceBackupScanScreen.query.tsx [77-81]
security: "Sensitive QR code data exposed in UI for debugging."
| const handleRecoveryPhrase = () => { | ||
| trackingMutation.mutate('recovery-phrase'); | ||
| // Navigate to recovery phrase input | ||
| navigation.navigate('EnterRecoveryPhrase'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The navigation target 'EnterRecoveryPhrase' doesn't match the actual screen name 'EnterSeedPhraseScreen' that was implemented. This will cause a navigation error at runtime.
| */ | ||
| export function EnterSeedPhraseScreen(): React.ReactElement { | ||
| const { t } = useTranslation(); | ||
| const [seedPhrase, setSeedPhrase] = useState(''); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The seed phrase is stored in plain text in component state, which poses a security risk. Consider using secure input methods, clearing the state immediately after use, or implementing proper memory protection to prevent exposure through memory dumps or debugging tools.
e2afcd7 to
1c0abb4
Compare
🔗 Related Issues
Closes #543
Linked automatically from the branch name. If incorrect, edit:
📝 Description
📸 Screenshots/Videos