- 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 */; };
|
9E39114A2848EEB90073DD9A /* UserPreferencesStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3911442848EEB90073DD9A /* UserPreferencesStorage.swift */; };
|
||||||
9E39114C2848EEB90073DD9A /* DatabaseFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3911462848EEB90073DD9A /* DatabaseFiles.swift */; };
|
9E39114C2848EEB90073DD9A /* DatabaseFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3911462848EEB90073DD9A /* DatabaseFiles.swift */; };
|
||||||
9E39115E284E3E350073DD9A /* secantUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D4E7A2526B364180058B01E /* secantUITests.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 */; };
|
9E4DC6E227C4C6B700E657F4 /* SecantButtonStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4DC6E127C4C6B700E657F4 /* SecantButtonStyles.swift */; };
|
||||||
9E5BF63F2819542C00BA3F17 /* WalletEventsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5BF63E2819542C00BA3F17 /* WalletEventsTests.swift */; };
|
9E5BF63F2819542C00BA3F17 /* WalletEventsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5BF63E2819542C00BA3F17 /* WalletEventsTests.swift */; };
|
||||||
9E5BF641281FD7B600BA3F17 /* TransactionFailedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5BF640281FD7B600BA3F17 /* TransactionFailedView.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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
9E5BF63E2819542C00BA3F17 /* WalletEventsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletEventsTests.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1361,6 +1364,7 @@
|
||||||
children = (
|
children = (
|
||||||
9E2DF99827CF704D00649636 /* ImportWalletStore.swift */,
|
9E2DF99827CF704D00649636 /* ImportWalletStore.swift */,
|
||||||
9E2DF99B27CF704D00649636 /* ImportWalletView.swift */,
|
9E2DF99B27CF704D00649636 /* ImportWalletView.swift */,
|
||||||
|
9E486DE429B637AF003E6945 /* ImportBirthdayView.swift */,
|
||||||
);
|
);
|
||||||
path = ImportWallet;
|
path = ImportWallet;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2580,6 +2584,7 @@
|
||||||
0D26AED9299E8196005260EE /* LocalAuthenticationLiveKey.swift in Sources */,
|
0D26AED9299E8196005260EE /* LocalAuthenticationLiveKey.swift in Sources */,
|
||||||
0D26AEDA299E8196005260EE /* ImportSeedEditor.swift in Sources */,
|
0D26AEDA299E8196005260EE /* ImportSeedEditor.swift in Sources */,
|
||||||
0D26AEDB299E8196005260EE /* ProfileStore.swift in Sources */,
|
0D26AEDB299E8196005260EE /* ProfileStore.swift in Sources */,
|
||||||
|
9E486DE629B637AF003E6945 /* ImportBirthdayView.swift in Sources */,
|
||||||
3467319629AE265300974482 /* SupportDataGenerator.swift in Sources */,
|
3467319629AE265300974482 /* SupportDataGenerator.swift in Sources */,
|
||||||
0D26AEDC299E8196005260EE /* CheckCircle.swift in Sources */,
|
0D26AEDC299E8196005260EE /* CheckCircle.swift in Sources */,
|
||||||
0D26AEDD299E8196005260EE /* LogStore.swift in Sources */,
|
0D26AEDD299E8196005260EE /* LogStore.swift in Sources */,
|
||||||
|
@ -2799,6 +2804,7 @@
|
||||||
9EBDF986291F91EF000A1A05 /* LocalAuthenticationLiveKey.swift in Sources */,
|
9EBDF986291F91EF000A1A05 /* LocalAuthenticationLiveKey.swift in Sources */,
|
||||||
9E2DF99D27CF704D00649636 /* ImportSeedEditor.swift in Sources */,
|
9E2DF99D27CF704D00649636 /* ImportSeedEditor.swift in Sources */,
|
||||||
F9971A5327680DD000A2DB75 /* ProfileStore.swift in Sources */,
|
F9971A5327680DD000A2DB75 /* ProfileStore.swift in Sources */,
|
||||||
|
9E486DE529B637AF003E6945 /* ImportBirthdayView.swift in Sources */,
|
||||||
3467319529AE265300974482 /* SupportDataGenerator.swift in Sources */,
|
3467319529AE265300974482 /* SupportDataGenerator.swift in Sources */,
|
||||||
346D41E428DF0B8600963F36 /* CheckCircle.swift in Sources */,
|
346D41E428DF0B8600963F36 /* CheckCircle.swift in Sources */,
|
||||||
9E0F5745297EBA1B005304FA /* LogStore.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 ImportWalletReducer: ReducerProtocol {
|
||||||
struct State: Equatable {
|
struct State: Equatable {
|
||||||
|
enum Destination: Equatable {
|
||||||
|
case birthday
|
||||||
|
}
|
||||||
|
|
||||||
@BindingState var alert: AlertState<ImportWalletReducer.Action>?
|
@BindingState var alert: AlertState<ImportWalletReducer.Action>?
|
||||||
var birthdayHeight = "".redacted
|
var birthdayHeight = "".redacted
|
||||||
var birthdayHeightValue: RedactableBlockHeight?
|
var birthdayHeightValue: RedactableBlockHeight?
|
||||||
|
var destination: Destination?
|
||||||
var importedSeedPhrase = "".redacted
|
var importedSeedPhrase = "".redacted
|
||||||
var isValidMnemonic = false
|
var isValidMnemonic = false
|
||||||
var isValidNumberOfWords = false
|
var isValidNumberOfWords = false
|
||||||
|
@ -48,6 +53,7 @@ struct ImportWalletReducer: ReducerProtocol {
|
||||||
case onAppear
|
case onAppear
|
||||||
case seedPhraseInputChanged(RedactableString)
|
case seedPhraseInputChanged(RedactableString)
|
||||||
case successfullyRecovered
|
case successfullyRecovered
|
||||||
|
case updateDestination(ImportWalletReducer.State.Destination?)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Dependency(\.mnemonic) var mnemonic
|
@Dependency(\.mnemonic) var mnemonic
|
||||||
|
@ -135,6 +141,10 @@ struct ImportWalletReducer: ReducerProtocol {
|
||||||
|
|
||||||
return .none
|
return .none
|
||||||
|
|
||||||
|
case .updateDestination(let destination):
|
||||||
|
state.destination = destination
|
||||||
|
return .none
|
||||||
|
|
||||||
case .importPrivateOrViewingKey:
|
case .importPrivateOrViewingKey:
|
||||||
return .none
|
return .none
|
||||||
|
|
||||||
|
@ -151,6 +161,15 @@ struct ImportWalletReducer: ReducerProtocol {
|
||||||
// MARK: - ViewStore
|
// MARK: - ViewStore
|
||||||
|
|
||||||
extension ImportWalletViewStore {
|
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> {
|
func bindingForRedactableSeedPhrase(_ importedSeedPhrase: RedactableString) -> Binding<String> {
|
||||||
self.binding(
|
self.binding(
|
||||||
get: { _ in importedSeedPhrase.data },
|
get: { _ in importedSeedPhrase.data },
|
||||||
|
|
|
@ -18,44 +18,30 @@ struct ImportWalletView: View {
|
||||||
.font(.system(size: 27))
|
.font(.system(size: 27))
|
||||||
.fontWeight(.bold)
|
.fontWeight(.bold)
|
||||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||||
|
.minimumScaleFactor(0.3)
|
||||||
|
|
||||||
ZStack {
|
|
||||||
ImportSeedEditor(store: store)
|
ImportSeedEditor(store: store)
|
||||||
|
|
||||||
mnemonicStatus(viewStore)
|
|
||||||
}
|
|
||||||
.frame(width: nil, height: 200, alignment: .center)
|
.frame(width: nil, height: 200, alignment: .center)
|
||||||
|
|
||||||
VStack {
|
Button("general.next") {
|
||||||
Text("importWallet.birthday.description")
|
viewStore.send(.updateDestination(.birthday))
|
||||||
.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)
|
|
||||||
}
|
}
|
||||||
.activeButtonStyle
|
.activeButtonStyle
|
||||||
.importWalletButtonLayout()
|
.importWalletButtonLayout()
|
||||||
.disabled(!viewStore.isValidForm)
|
.disabled(!viewStore.isValidForm)
|
||||||
|
.opacity(viewStore.isValidForm ? 1.0 : 0.5)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
.navigationBarHidden(true)
|
.padding(.horizontal, 20)
|
||||||
.applyScreenBackground()
|
.applyScreenBackground()
|
||||||
.scrollableWhenScaledUp()
|
.scrollableWhenScaledUp()
|
||||||
.onAppear(perform: { viewStore.send(.onAppear) })
|
.onAppear(perform: { viewStore.send(.onAppear) })
|
||||||
.alert(self.store.scope(state: \.alert), dismiss: .dismissAlert)
|
.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))
|
addAttachments(ImportWalletView(store: store))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testImportBirthdaySnapshot() throws {
|
||||||
|
let store = ImportWalletStore(
|
||||||
|
initialState: .placeholder,
|
||||||
|
reducer: ImportWalletReducer()
|
||||||
|
)
|
||||||
|
|
||||||
|
addAttachments(ImportBirthdayView(store: store))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue