- birthday set separated from the backup seed phrase - snapshot for the birthday screen added
This commit is contained in:
parent
078d214fd9
commit
4db00ff4a9
|
@ -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 */,
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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 },
|
||||
|
|
|
@ -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) }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue