Skip to content

Commit 8ef22f8

Browse files
committed
Move several menu-specific actions from Root.Action to Menu.Action
1 parent c7d69c7 commit 8ef22f8

File tree

3 files changed

+36
-19
lines changed

3 files changed

+36
-19
lines changed

Authenticator/Source/Menu.swift

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
// SOFTWARE.
2424
//
2525

26-
struct Menu {
26+
struct Menu: Component {
2727
let infoList: InfoList
2828
private(set) var child: Child
2929

@@ -71,6 +71,25 @@ struct Menu {
7171

7272
// MARK: -
7373

74+
enum Action {
75+
case dismissInfo
76+
case dismissDisplayOptions
77+
}
78+
79+
typealias Effect = Never
80+
81+
mutating func update(with action: Action) throws -> Effect? {
82+
switch action {
83+
case .dismissInfo:
84+
try dismissInfo()
85+
return nil
86+
87+
case .dismissDisplayOptions:
88+
try dismissDisplayOptions()
89+
return nil
90+
}
91+
}
92+
7493
enum Error: Swift.Error {
7594
case badChildState
7695
}
@@ -82,7 +101,7 @@ struct Menu {
82101
child = .info(info)
83102
}
84103

85-
mutating func dismissInfo() throws {
104+
private mutating func dismissInfo() throws {
86105
guard case .info = child else {
87106
throw Error.badChildState
88107
}
@@ -96,7 +115,7 @@ struct Menu {
96115
child = .displayOptions(DisplayOptions())
97116
}
98117

99-
mutating func dismissDisplayOptions() throws {
118+
private mutating func dismissDisplayOptions() throws {
100119
guard case .displayOptions = child else {
101120
throw Error.badChildState
102121
}

Authenticator/Source/Root.swift

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,11 @@ extension Root {
8888
case tokenEntryFormAction(TokenEntryForm.Action)
8989
case tokenEditFormAction(TokenEditForm.Action)
9090
case tokenScannerAction(TokenScanner.Action)
91+
case menuAction(Menu.Action)
9192

9293
case infoListEffect(InfoList.Effect)
9394
case infoEffect(Info.Effect)
9495
case displayOptionsEffect(DisplayOptions.Effect)
95-
case dismissInfo
96-
case dismissDisplayOptions
9796

9897
case addTokenFromURL(Token)
9998
}
@@ -161,6 +160,12 @@ extension Root {
161160
handleTokenScannerEffect(effect)
162161
}
163162

163+
case .menuAction(let action):
164+
let effect = try modal.withMenu { menu in try menu.update(with: action) }
165+
return effect.flatMap { effect in
166+
handleMenuEffect(effect)
167+
}
168+
164169
case .infoListEffect(let effect):
165170
return try handleInfoListEffect(effect)
166171

@@ -170,18 +175,6 @@ extension Root {
170175
case .displayOptionsEffect(let effect):
171176
return handleDisplayOptionsEffect(effect)
172177

173-
case .dismissInfo:
174-
try modal.withMenu { menu in
175-
try menu.dismissInfo()
176-
}
177-
return nil
178-
179-
case .dismissDisplayOptions:
180-
try modal.withMenu { menu in
181-
try menu.dismissDisplayOptions()
182-
}
183-
return nil
184-
185178
case .addTokenFromURL(let token):
186179
return .addToken(token,
187180
success: Event.addTokenFromURLSucceeded,
@@ -381,6 +374,11 @@ extension Root {
381374
return .setDigitGroupSize(digitGroupSize)
382375
}
383376
}
377+
378+
private mutating func handleMenuEffect(_ effect: Menu.Effect) -> Effect? {
379+
switch effect {
380+
}
381+
}
384382
}
385383

386384
private extension Root.Modal {

Authenticator/Source/RootViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,11 @@ extension RootViewController: UINavigationControllerDelegate {
216216
case .info:
217217
// If the current modal state is the menu with an Info child, and the just-shown view controller is
218218
// an InfoList, then the user has popped the Info view controller.
219-
dispatchAction(.dismissInfo)
219+
dispatchAction(.menuAction(.dismissInfo))
220220
case .displayOptions:
221221
// If the current modal state is the menu with a DisplayOptions child, and the just-shown view
222222
// controller is an InfoList, then the user has popped the DisplayOptions view controller.
223-
dispatchAction(.dismissDisplayOptions)
223+
dispatchAction(.menuAction(.dismissDisplayOptions))
224224
default:
225225
break
226226
}

0 commit comments

Comments
 (0)