[#609] Split birthday from the import seed phrase (#622)

- birthday set separated from the backup seed phrase
- snapshot for the birthday screen added
This commit is contained in:
Lukas Korba 2023-03-07 07:16:34 +01:00 committed by GitHub
parent 078d214fd9
commit 4db00ff4a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 107 additions and 27 deletions

View File

@ -386,6 +386,8 @@
9E39114A2848EEB90073DD9A /* UserPreferencesStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3911442848EEB90073DD9A /* UserPreferencesStorage.swift */; };
9E39114C2848EEB90073DD9A /* DatabaseFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3911462848EEB90073DD9A /* DatabaseFiles.swift */; };
9E39115E284E3E350073DD9A /* secantUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D4E7A2526B364180058B01E /* secantUITests.swift */; };
9E486DE529B637AF003E6945 /* ImportBirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E486DE429B637AF003E6945 /* ImportBirthdayView.swift */; };
9E486DE629B637AF003E6945 /* ImportBirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E486DE429B637AF003E6945 /* ImportBirthdayView.swift */; };
9E4DC6E227C4C6B700E657F4 /* SecantButtonStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4DC6E127C4C6B700E657F4 /* SecantButtonStyles.swift */; };
9E5BF63F2819542C00BA3F17 /* WalletEventsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5BF63E2819542C00BA3F17 /* WalletEventsTests.swift */; };
9E5BF641281FD7B600BA3F17 /* TransactionFailedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5BF640281FD7B600BA3F17 /* TransactionFailedView.swift */; };
@ -702,6 +704,7 @@
9E3911442848EEB90073DD9A /* UserPreferencesStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserPreferencesStorage.swift; sourceTree = "<group>"; };
9E3911462848EEB90073DD9A /* DatabaseFiles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseFiles.swift; sourceTree = "<group>"; };
9E3911472848EEB90073DD9A /* WalletStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletStorage.swift; sourceTree = "<group>"; };
9E486DE429B637AF003E6945 /* ImportBirthdayView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportBirthdayView.swift; sourceTree = "<group>"; };
9E4DC6E127C4C6B700E657F4 /* SecantButtonStyles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecantButtonStyles.swift; sourceTree = "<group>"; };
9E5BF63B2818305D00BA3F17 /* TransactionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionState.swift; sourceTree = "<group>"; };
9E5BF63E2819542C00BA3F17 /* WalletEventsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletEventsTests.swift; sourceTree = "<group>"; };
@ -1361,6 +1364,7 @@
children = (
9E2DF99827CF704D00649636 /* ImportWalletStore.swift */,
9E2DF99B27CF704D00649636 /* ImportWalletView.swift */,
9E486DE429B637AF003E6945 /* ImportBirthdayView.swift */,
);
path = ImportWallet;
sourceTree = "<group>";
@ -2580,6 +2584,7 @@
0D26AED9299E8196005260EE /* LocalAuthenticationLiveKey.swift in Sources */,
0D26AEDA299E8196005260EE /* ImportSeedEditor.swift in Sources */,
0D26AEDB299E8196005260EE /* ProfileStore.swift in Sources */,
9E486DE629B637AF003E6945 /* ImportBirthdayView.swift in Sources */,
3467319629AE265300974482 /* SupportDataGenerator.swift in Sources */,
0D26AEDC299E8196005260EE /* CheckCircle.swift in Sources */,
0D26AEDD299E8196005260EE /* LogStore.swift in Sources */,
@ -2799,6 +2804,7 @@
9EBDF986291F91EF000A1A05 /* LocalAuthenticationLiveKey.swift in Sources */,
9E2DF99D27CF704D00649636 /* ImportSeedEditor.swift in Sources */,
F9971A5327680DD000A2DB75 /* ProfileStore.swift in Sources */,
9E486DE529B637AF003E6945 /* ImportBirthdayView.swift in Sources */,
3467319529AE265300974482 /* SupportDataGenerator.swift in Sources */,
346D41E428DF0B8600963F36 /* CheckCircle.swift in Sources */,
9E0F5745297EBA1B005304FA /* LogStore.swift in Sources */,

View File

@ -0,0 +1,60 @@
//
// ImportBirthdayView.swift
// secant-testnet
//
// Created by Lukáš Korba on 03/06/2023.
//
import SwiftUI
import ComposableArchitecture
struct ImportBirthdayView: View {
var store: ImportWalletStore
var body: some View {
WithViewStore(store) { viewStore in
VStack {
Text("importWallet.birthday.description")
.font(.system(size: 16))
.fontWeight(.bold)
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
TextField(
"importWallet.birthday.placeholder",
text: viewStore.bindingForRedactableBirthday(viewStore.birthdayHeight)
)
.keyboardType(.numberPad)
.autocapitalization(.none)
.importSeedEditorModifier()
Button("importWallet.button.restoreWallet") {
viewStore.send(.restoreWallet)
}
.activeButtonStyle
.importWalletButtonLayout()
.disabled(!viewStore.isValidForm)
.opacity(viewStore.isValidForm ? 1.0 : 0.5)
Spacer()
}
.padding(.horizontal, 20)
.applyScreenBackground()
.scrollableWhenScaledUp()
.onAppear(perform: { viewStore.send(.onAppear) })
.alert(self.store.scope(state: \.alert), dismiss: .dismissAlert)
}
}
}
// MARK: - Previews
struct ImportBirthdayView_Previews: PreviewProvider {
static var previews: some View {
ImportBirthdayView(store: .demo)
.preferredColorScheme(.light)
ImportBirthdayView(store: .demo)
.previewDevice(PreviewDevice(rawValue: "iPhone SE (2nd generation)"))
.preferredColorScheme(.light)
}
}

View File

@ -14,9 +14,14 @@ typealias ImportWalletViewStore = ViewStore<ImportWalletReducer.State, ImportWal
struct ImportWalletReducer: ReducerProtocol {
struct State: Equatable {
enum Destination: Equatable {
case birthday
}
@BindingState var alert: AlertState<ImportWalletReducer.Action>?
var birthdayHeight = "".redacted
var birthdayHeightValue: RedactableBlockHeight?
var destination: Destination?
var importedSeedPhrase = "".redacted
var isValidMnemonic = false
var isValidNumberOfWords = false
@ -48,6 +53,7 @@ struct ImportWalletReducer: ReducerProtocol {
case onAppear
case seedPhraseInputChanged(RedactableString)
case successfullyRecovered
case updateDestination(ImportWalletReducer.State.Destination?)
}
@Dependency(\.mnemonic) var mnemonic
@ -135,6 +141,10 @@ struct ImportWalletReducer: ReducerProtocol {
return .none
case .updateDestination(let destination):
state.destination = destination
return .none
case .importPrivateOrViewingKey:
return .none
@ -151,6 +161,15 @@ struct ImportWalletReducer: ReducerProtocol {
// MARK: - ViewStore
extension ImportWalletViewStore {
func bindingForDestination(_ destination: ImportWalletReducer.State.Destination) -> Binding<Bool> {
self.binding(
get: { $0.destination == destination },
send: { isActive in
return .updateDestination(isActive ? destination : nil)
}
)
}
func bindingForRedactableSeedPhrase(_ importedSeedPhrase: RedactableString) -> Binding<String> {
self.binding(
get: { _ in importedSeedPhrase.data },

View File

@ -18,44 +18,30 @@ struct ImportWalletView: View {
.font(.system(size: 27))
.fontWeight(.bold)
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
.minimumScaleFactor(0.3)
ZStack {
ImportSeedEditor(store: store)
mnemonicStatus(viewStore)
}
.frame(width: nil, height: 200, alignment: .center)
VStack {
Text("importWallet.birthday.description")
.font(.system(size: 16))
.fontWeight(.bold)
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
TextField(
"importWallet.birthday.placeholder",
text: viewStore.bindingForRedactableBirthday(viewStore.birthdayHeight)
)
.keyboardType(.numberPad)
.autocapitalization(.none)
.importSeedEditorModifier()
}
.padding(28)
Button("importWallet.button.restoreWallet") {
viewStore.send(.restoreWallet)
ImportSeedEditor(store: store)
.frame(width: nil, height: 200, alignment: .center)
Button("general.next") {
viewStore.send(.updateDestination(.birthday))
}
.activeButtonStyle
.importWalletButtonLayout()
.disabled(!viewStore.isValidForm)
.opacity(viewStore.isValidForm ? 1.0 : 0.5)
Spacer()
}
.navigationBarHidden(true)
.padding(.horizontal, 20)
.applyScreenBackground()
.scrollableWhenScaledUp()
.onAppear(perform: { viewStore.send(.onAppear) })
.alert(self.store.scope(state: \.alert), dismiss: .dismissAlert)
.navigationLinkEmpty(
isActive: viewStore.bindingForDestination(.birthday),
destination: { ImportBirthdayView(store: store) }
)
}
}
}

View File

@ -18,4 +18,13 @@ class ImportWalletSnapshotTests: XCTestCase {
addAttachments(ImportWalletView(store: store))
}
func testImportBirthdaySnapshot() throws {
let store = ImportWalletStore(
initialState: .placeholder,
reducer: ImportWalletReducer()
)
addAttachments(ImportBirthdayView(store: store))
}
}