Skip to content

Commit 9153ac7

Browse files
committed
TCAExtras
1 parent 2f387b9 commit 9153ac7

File tree

3 files changed

+42
-38
lines changed

3 files changed

+42
-38
lines changed

ModalNav.xcodeproj/project.pbxproj

+17
Original file line numberOriginal file lineDiff line numberDiff line change
@@ -7,6 +7,7 @@
7
objects = {
7
objects = {
8

8

9
/* Begin PBXBuildFile section */
9
/* Begin PBXBuildFile section */
10+
305099342D8AB58B0032D764 /* TCAExtras in Frameworks */ = {isa = PBXBuildFile; productRef = 305099332D8AB58B0032D764 /* TCAExtras */; };
10
307157692D8460A60060BF78 /* ComposableArchitecture in Frameworks */ = {isa = PBXBuildFile; productRef = 307157682D8460A60060BF78 /* ComposableArchitecture */; };
11
307157692D8460A60060BF78 /* ComposableArchitecture in Frameworks */ = {isa = PBXBuildFile; productRef = 307157682D8460A60060BF78 /* ComposableArchitecture */; };
11
/* End PBXBuildFile section */
12
/* End PBXBuildFile section */
12

13

@@ -27,6 +28,7 @@
27
isa = PBXFrameworksBuildPhase;
28
isa = PBXFrameworksBuildPhase;
28
buildActionMask = 2147483647;
29
buildActionMask = 2147483647;
29
files = (
30
files = (
31+
305099342D8AB58B0032D764 /* TCAExtras in Frameworks */,
30
307157692D8460A60060BF78 /* ComposableArchitecture in Frameworks */,
32
307157692D8460A60060BF78 /* ComposableArchitecture in Frameworks */,
31
);
33
);
32
runOnlyForDeploymentPostprocessing = 0;
34
runOnlyForDeploymentPostprocessing = 0;
@@ -71,6 +73,7 @@
71
name = ModalNav;
73
name = ModalNav;
72
packageProductDependencies = (
74
packageProductDependencies = (
73
307157682D8460A60060BF78 /* ComposableArchitecture */,
75
307157682D8460A60060BF78 /* ComposableArchitecture */,
76+
305099332D8AB58B0032D764 /* TCAExtras */,
74
);
77
);
75
productName = ModalNav;
78
productName = ModalNav;
76
productReference = 307157562D8460380060BF78 /* ModalNav.app */;
79
productReference = 307157562D8460380060BF78 /* ModalNav.app */;
@@ -102,6 +105,7 @@
102
minimizedProjectReferenceProxies = 1;
105
minimizedProjectReferenceProxies = 1;
103
packageReferences = (
106
packageReferences = (
104
307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */,
107
307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */,
108+
305099322D8AB58B0032D764 /* XCRemoteSwiftPackageReference "tca-utils" */,
105
);
109
);
106
preferredProjectObjectVersion = 77;
110
preferredProjectObjectVersion = 77;
107
productRefGroup = 307157572D8460380060BF78 /* Products */;
111
productRefGroup = 307157572D8460380060BF78 /* Products */;
@@ -335,6 +339,14 @@
335
/* End XCConfigurationList section */
339
/* End XCConfigurationList section */
336

340

337
/* Begin XCRemoteSwiftPackageReference section */
341
/* Begin XCRemoteSwiftPackageReference section */
342+
305099322D8AB58B0032D764 /* XCRemoteSwiftPackageReference "tca-utils" */ = {
343+
isa = XCRemoteSwiftPackageReference;
344+
repositoryURL = "https://gitlab.com/krr-tca/tca-utils";
345+
requirement = {
346+
kind = upToNextMajorVersion;
347+
minimumVersion = 8.0.1;
348+
};
349+
};
338
307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */ = {
350
307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */ = {
339
isa = XCRemoteSwiftPackageReference;
351
isa = XCRemoteSwiftPackageReference;
340
repositoryURL = "https://github.com/pointfreeco/swift-composable-architecture.git";
352
repositoryURL = "https://github.com/pointfreeco/swift-composable-architecture.git";
@@ -346,6 +358,11 @@
346
/* End XCRemoteSwiftPackageReference section */
358
/* End XCRemoteSwiftPackageReference section */
347

359

348
/* Begin XCSwiftPackageProductDependency section */
360
/* Begin XCSwiftPackageProductDependency section */
361+
305099332D8AB58B0032D764 /* TCAExtras */ = {
362+
isa = XCSwiftPackageProductDependency;
363+
package = 305099322D8AB58B0032D764 /* XCRemoteSwiftPackageReference "tca-utils" */;
364+
productName = TCAExtras;
365+
};
349
307157682D8460A60060BF78 /* ComposableArchitecture */ = {
366
307157682D8460A60060BF78 /* ComposableArchitecture */ = {
350
isa = XCSwiftPackageProductDependency;
367
isa = XCSwiftPackageProductDependency;
351
package = 307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */;
368
package = 307157672D8460A60060BF78 /* XCRemoteSwiftPackageReference "swift-composable-architecture" */;

ModalNav.xcodeproj/xcuserdata/roman.xcuserdatad/xcschemes/xcschememanagement.plist

-14
This file was deleted.

ModalNav/ModalView.swift

+25-24
Original file line numberOriginal file lineDiff line numberDiff line change
@@ -1,18 +1,25 @@
1
import ComposableArchitecture
1
import ComposableArchitecture
2
import SwiftUI
2
import SwiftUI
3+
import TCAExtras
3

4

4
@Reducer
5
@Reducer
5
struct Modal {
6
struct Modal {
6
@ObservableState
7
@ObservableState
7
struct State: Equatable {
8
struct State: Equatable {
8-
@Presents var alert: AlertState<Action.Alert>?
9+
@Presents var alert: AlertState<Alert.Action>?
9
}
10
}
10

11

11
enum Action {
12
enum Action {
12-
case showAlertButtonPressed(AlertState<Action.Alert>)
13+
case showAlertButtonPressed(Alert)
13-
case alert(PresentationAction<Action.Alert>)
14+
case alert(PresentationAction<Alert.Action>)
15+
}
16+
17+
enum Alert: CaseIterable {
18+
case closeModal
19+
case doSmthElse
14

20

15-
enum Alert {
21+
@CasePathable
22+
enum Action {
16
case closeModalButtonPressed
23
case closeModalButtonPressed
17
case doSmthElseButtonPressed
24
case doSmthElseButtonPressed
18
}
25
}
@@ -21,8 +28,8 @@ struct Modal {
21
var body: some ReducerOf<Self> {
28
var body: some ReducerOf<Self> {
22
Reduce { state, action in
29
Reduce { state, action in
23
switch action {
30
switch action {
24-
case .showAlertButtonPressed(let alertState):
31+
case .showAlertButtonPressed(let alert):
25-
state.alert = alertState
32+
state.alert = .init(alert)
26
return .none
33
return .none
27
case .alert(let action):
34
case .alert(let action):
28
switch action {
35
switch action {
@@ -43,26 +50,20 @@ struct Modal {
43
}
50
}
44
}
51
}
45

52

46-
extension AlertState where Action == Modal.Action.Alert {
53+
extension Modal.Alert: AlertStateConvertible {
47-
static let closeModal: Self = .init {
54+
var title: String {
48-
TextState("Close Model Alert")
55+
switch self {
49-
} actions: {
56+
case .closeModal: "Close Model Alert"
50-
ButtonState(role: .cancel) {
57+
case .doSmthElse: "Do Smth Else Alert"
51-
TextState("Cancel")
52-
}
53-
ButtonState(action: .closeModalButtonPressed) {
54-
TextState("Close modal")
55
}
58
}
56
}
59
}
57-
60+
}
58-
static let doSmthElse: Self = .init {
61+
59-
TextState("Do Smth Else Alert")
62+
extension Modal.Alert.Action: AlertAction {
60-
} actions: {
63+
var buttonLabel: String {
61-
ButtonState(role: .cancel) {
64+
switch self {
62-
TextState("Cancel")
65+
case .closeModalButtonPressed: "Close modal"
63-
}
66+
case .doSmthElseButtonPressed: "Do smth else"
64-
ButtonState(action: .doSmthElseButtonPressed) {
65-
TextState("Do smth else")
66
}
67
}
67
}
68
}
68
}
69
}

0 commit comments

Comments
 (0)