-
-
Notifications
You must be signed in to change notification settings - Fork 643
Expand file tree
/
Copy pathRNSTabsHostEventEmitter.mm
More file actions
101 lines (91 loc) · 3.4 KB
/
RNSTabsHostEventEmitter.mm
File metadata and controls
101 lines (91 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#import "RNSTabsHostEventEmitter.h"
#import <React/RCTLog.h>
#if RCT_NEW_ARCH_ENABLED
#import <React/RCTConversions.h>
#import <react/renderer/components/rnscreens/EventEmitters.h>
#import "RNSConversions.h"
#endif // RCT_NEW_ARCH_ENABLED
#if RCT_NEW_ARCH_ENABLED
namespace react = facebook::react;
#endif // RCT_NEW_ARCH_ENABLED
@implementation RNSTabsHostEventEmitter {
#if RCT_NEW_ARCH_ENABLED
std::shared_ptr<const react::RNSTabsHostIOSEventEmitter> _reactEventEmitter;
#endif // RCT_NEW_ARCH_ENABLED
}
- (instancetype)init
{
if (self = [super init]) {
#if RCT_NEW_ARCH_ENABLED
_reactEventEmitter = nullptr;
#endif // RCT_NEW_ARCH_ENABLED
}
return self;
}
#if RCT_NEW_ARCH_ENABLED
- (void)updateEventEmitter:(const std::shared_ptr<const react::RNSTabsHostIOSEventEmitter> &)emitter
{
_reactEventEmitter = emitter;
}
#endif // RCT_NEW_ARCH_ENABLED
- (BOOL)emitOnTabSelected:(OnTabSelectedPayload)payload
{
if (_reactEventEmitter != nullptr) {
auto convertedActionOrigin =
rnscreens::conversion::RNSOnTabSelectedActionOriginFromRNSTabsActionOrigin(payload.actionOrigin);
_reactEventEmitter->onTabSelected(
{.selectedScreenKey = RCTStringFromNSString(payload.selectedScreenKey),
.provenance = payload.provenance,
.isRepeated = static_cast<bool>(payload.isRepeated),
.hasTriggeredSpecialEffect = static_cast<bool>(payload.hasTriggeredSpecialEffect),
.actionOrigin = convertedActionOrigin});
return YES;
} else {
RCTLogWarn(@"[RNScreens] Skipped OnTabSelected event emission due to nullish emitter");
return NO;
}
}
- (BOOL)emitOnTabSelectionRejected:(OnTabSelectionRejectedPayload)payload
{
if (_reactEventEmitter != nullptr) {
auto convertedReason =
rnscreens::conversion::RNSOnTabSelectionRejectedRejectionReasonFromRNSTabsNavigationStateRejectionReason(
payload.rejectionReason);
_reactEventEmitter->onTabSelectionRejected(
{.selectedScreenKey = RCTStringFromNSString(payload.currentNavState.selectedScreenKey),
.provenance = payload.currentNavState.provenance,
.rejectedScreenKey = RCTStringFromNSString(payload.rejectedNavState.selectedScreenKey),
.rejectedProvenance = payload.rejectedNavState.provenance,
.rejectionReason = convertedReason});
return YES;
} else {
RCTLogWarn(@"[RNScreens] Skipped OnTabSelectionRejected event emission due to nullish emitter");
return NO;
}
}
- (BOOL)emitOnTabSelectionPrevented:(OnTabSelectionPreventedPayload)payload
{
if (_reactEventEmitter != nullptr) {
_reactEventEmitter->onTabSelectionPrevented(
{.selectedScreenKey = RCTStringFromNSString(payload.currentNavState.selectedScreenKey),
.provenance = payload.currentNavState.provenance,
.preventedScreenKey = RCTStringFromNSString(payload.preventedScreenKey)});
return YES;
} else {
RCTLogWarn(@"[RNScreens] Skipped OnTabSelectionPrevented event emission due to nullish emitter");
return NO;
}
}
- (BOOL)emitOnMoreTabSelected:(OnMoreTabSelectedPayload)payload
{
if (_reactEventEmitter != nullptr) {
_reactEventEmitter->onMoreTabSelected(
{.selectedScreenKey = RCTStringFromNSString(payload.currentNavState.selectedScreenKey),
.provenance = payload.currentNavState.provenance});
return YES;
} else {
RCTLogWarn(@"[RNScreens] Skipped OnMoreTabSelected event emission due to nullish emitter");
return NO;
}
}
@end