Skip to content

Commit 3bfaa87

Browse files
committed
Migrate CompendiumEntryDetail to the new reducer protocol
1 parent 9424a23 commit 3bfaa87

14 files changed

+343
-330
lines changed

App/App/Compendium/View/CompendiumContainerView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ let compendiumRootReducer: AnyReducer<CompendiumIndexState, CompendiumIndexActio
5959
extension CompendiumIndexAction {
6060
var onSaveMonsterAsNPCButtonMonster: Monster? {
6161
switch self {
62-
case .nextScreen(.compendiumEntry(CompendiumItemDetailViewAction.onSaveMonsterAsNPCButton(let m))),
63-
.detailScreen(.compendiumEntry(CompendiumItemDetailViewAction.onSaveMonsterAsNPCButton(let m))):
62+
case .nextScreen(.compendiumEntry(CompendiumEntryDetailFeature.Action.onSaveMonsterAsNPCButton(let m))),
63+
.detailScreen(.compendiumEntry(CompendiumEntryDetailFeature.Action.onSaveMonsterAsNPCButton(let m))):
6464
return m
6565
case .nextScreen(.compendiumIndex(let a)), .detailScreen(.compendiumIndex(let a)):
6666
return a.onSaveMonsterAsNPCButtonMonster

App/App/Compendium/View/CompendiumItemDetailView.swift renamed to App/App/Compendium/View/CompendiumEntryDetailView.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ import ActionResolutionFeature
1717
import Compendium
1818
import SharedViews
1919

20-
struct CompendiumItemDetailView: View {
20+
struct CompendiumEntryDetailView: View {
2121
@EnvironmentObject var env: Environment
2222
@SwiftUI.Environment(\.appNavigation) var appNavigation
2323

24-
var store: Store<CompendiumEntryDetailViewState, CompendiumItemDetailViewAction>
25-
@ObservedObject var viewStore: ViewStore<CompendiumEntryDetailViewState, CompendiumItemDetailViewAction>
24+
var store: Store<CompendiumEntryDetailFeature.State, CompendiumEntryDetailFeature.Action>
25+
@ObservedObject var viewStore: ViewStore<CompendiumEntryDetailFeature.State, CompendiumEntryDetailFeature.Action>
2626

27-
init(store: Store<CompendiumEntryDetailViewState, CompendiumItemDetailViewAction>) {
27+
init(store: Store<CompendiumEntryDetailFeature.State, CompendiumEntryDetailFeature.Action>) {
2828
self.store = store
29-
self.viewStore = ViewStore(store, removeDuplicates: { $0.localStateForDeduplication == $1.localStateForDeduplication })
29+
self.viewStore = ViewStore(store, observe: \.self, removeDuplicates: { $0.localStateForDeduplication == $1.localStateForDeduplication })
3030
}
3131

3232
var item: CompendiumItem {
@@ -45,8 +45,8 @@ struct CompendiumItemDetailView: View {
4545
ScrollView {
4646
VStack {
4747
contentView()
48-
49-
if var attribution = viewStore.state.entryAttribution {
48+
49+
if let attribution = viewStore.state.entryAttribution {
5050
Text(attribution)
5151
.font(.footnote).italic()
5252
.foregroundColor(Color(UIColor.secondaryLabel))
@@ -101,9 +101,9 @@ struct CompendiumItemDetailView: View {
101101
}
102102
.stateDrivenNavigationLink(
103103
store: store,
104-
state: /CompendiumEntryDetailViewState.NextScreen.compendiumItemDetailView,
105-
action: /CompendiumItemDetailViewAction.NextScreenAction.compendiumItemDetailView,
106-
destination: CompendiumItemDetailView.init
104+
state: /CompendiumEntryDetailFeature.State.NextScreen.compendiumItemDetailView,
105+
action: /CompendiumEntryDetailFeature.Action.NextScreenAction.compendiumItemDetailView,
106+
destination: CompendiumEntryDetailView.init
107107
)
108108
.safariView(
109109
item: viewStore.binding(get: { $0.presentedNextSafariView }, send: { _ in .setNextScreen(nil) }),
@@ -134,7 +134,7 @@ struct CompendiumItemDetailView: View {
134134
}
135135

136136
@ViewBuilder
137-
func sheetView(_ sheet: CompendiumEntryDetailViewState.Sheet) -> some View {
137+
func sheetView(_ sheet: CompendiumEntryDetailFeature.State.Sheet) -> some View {
138138
switch viewStore.state.sheet {
139139
case .creatureEdit:
140140
IfLetStore(store.scope(state: replayNonNil({ $0.creatureEditSheet }), action: { .sheet(.creatureEdit($0)) })) { store in

App/App/Compendium/View/CompendiumIndexState.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ struct CompendiumIndexState: NavigationStackSourceState, Equatable {
5959
res.presentedScreens = presentedScreens.mapValues {
6060
switch $0 {
6161
case .compendiumIndex: return .compendiumIndex(CompendiumIndexState.nullInstance)
62-
case .itemDetail: return .itemDetail(CompendiumEntryDetailViewState.nullInstance)
62+
case .itemDetail: return .itemDetail(CompendiumEntryDetailFeature.State(entry: CompendiumEntry.nullInstance))
6363
case .safariView: return .safariView(.nullInstance)
6464
}
6565
}
@@ -180,7 +180,7 @@ struct CompendiumIndexState: NavigationStackSourceState, Equatable {
180180

181181
enum NextScreen: Equatable {
182182
indirect case compendiumIndex(CompendiumIndexState)
183-
case itemDetail(CompendiumEntryDetailViewState)
183+
case itemDetail(CompendiumEntryDetailFeature.State)
184184
case safariView(SafariViewState)
185185
}
186186

@@ -205,8 +205,16 @@ struct CompendiumIndexState: NavigationStackSourceState, Equatable {
205205

206206
static var reducer: AnyReducer<Self, CompendiumIndexAction, CompendiumIndexEnvironment> {
207207
return AnyReducer.combine(
208-
CompendiumEntryDetailViewState.reducer.optional().pullback(state: \.presentedNextItemDetail, action: /CompendiumIndexAction.nextScreen..CompendiumIndexAction.NextScreenAction.compendiumEntry, environment: { $0 }),
209-
CompendiumEntryDetailViewState.reducer.optional().pullback(state: \.presentedDetailItemDetail, action: /CompendiumIndexAction.detailScreen..CompendiumIndexAction.NextScreenAction.compendiumEntry, environment: { $0 }),
208+
AnyReducer { env in
209+
CompendiumEntryDetailFeature(environment: env)
210+
}
211+
.optional()
212+
.pullback(state: \.presentedNextItemDetail, action: /CompendiumIndexAction.nextScreen..CompendiumIndexAction.NextScreenAction.compendiumEntry, environment: { $0 }),
213+
AnyReducer { env in
214+
CompendiumEntryDetailFeature(environment: env)
215+
}
216+
.optional()
217+
.pullback(state: \.presentedDetailItemDetail, action: /CompendiumIndexAction.detailScreen..CompendiumIndexAction.NextScreenAction.compendiumEntry, environment: { $0 }),
210218
AnyReducer { state, action, env in
211219
switch action {
212220
case .results: break
@@ -521,7 +529,7 @@ enum CompendiumIndexAction: NavigationStackSourceAction, Equatable {
521529

522530
enum NextScreenAction: Equatable {
523531
case compendiumIndex(CompendiumIndexAction)
524-
case compendiumEntry(CompendiumItemDetailViewAction)
532+
case compendiumEntry(CompendiumEntryDetailFeature.Action)
525533
}
526534

527535
// Key-path support

App/App/Compendium/View/CompendiumIndexView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ struct CompendiumIndexView<BottomBarButtons>: View where BottomBarButtons: View
361361

362362
struct CompendiumIndexViewProvider {
363363
let row: (Store<CompendiumIndexState, CompendiumIndexAction>, CompendiumEntry) -> AnyView
364-
let detail: (Store<CompendiumEntryDetailViewState, CompendiumItemDetailViewAction>) -> AnyView
364+
let detail: (Store<CompendiumEntryDetailFeature.State, CompendiumEntryDetailFeature.Action>) -> AnyView
365365

366366
/// Can be used by the view to invalidate itself if the state changes
367367
let state: () -> any Equatable
@@ -371,7 +371,7 @@ struct CompendiumIndexViewProvider {
371371
CompendiumEntryRow(store: store, entry: entry).eraseToAnyView
372372
},
373373
detail: { store in
374-
CompendiumItemDetailView(store: store).eraseToAnyView
374+
CompendiumEntryDetailView(store: store).eraseToAnyView
375375
},
376376
state: { 0 }
377377
)
@@ -546,7 +546,7 @@ fileprivate struct CompendiumItemList: View, Equatable {
546546
Section(header: header) {
547547
ForEach(entries, id: \.item.key) { entry in
548548
NavigationRowButton(action: {
549-
viewStore.send(.setNextScreen(.itemDetail(CompendiumEntryDetailViewState(entry: entry))))
549+
viewStore.send(.setNextScreen(.itemDetail(CompendiumEntryDetailFeature.State(entry: entry))))
550550
}) {
551551
let itemView = viewProvider.row(self.store, entry)
552552

0 commit comments

Comments
 (0)