@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/README.md +147 -51
- package/android/CLAUDE.md +31 -6
- package/android/CORE.md +7 -2
- package/android/RECIPES.md +4 -3
- package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +29 -1
- package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +7 -3
- package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +5 -4
- package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +75 -60
- package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +3 -2
- package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +5 -4
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +7 -6
- package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +3 -35
- package/android/src/main/java/dev/apexnative/navigation/react/events/EventContract.kt +226 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +101 -87
- package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +0 -6
- package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +13 -5
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +76 -13
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +28 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +22 -24
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +86 -16
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +21 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +41 -23
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +24 -20
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetStops.kt +25 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +4 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +42 -4
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +29 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +2 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +3 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +5 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +4 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +16 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +8 -1
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +16 -2
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/BackPreview.kt +287 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +148 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +24 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +51 -11
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +26 -8
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +105 -2
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +123 -8
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +19 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +29 -11
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +5 -5
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStep.kt +31 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +85 -27
- package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +5 -4
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +9 -6
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionViews.kt +100 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +45 -1
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +3 -5
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +3 -5
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +3 -5
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +2 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +4 -6
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +4 -6
- package/android/src/main/java/dev/apexnative/navigation/views/stack/ScreenEdge.kt +15 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +137 -1
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +8 -1
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +26 -4
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +4 -3
- package/cli/app.js +1 -1
- package/cli/project.js +6 -2
- package/cli/setup/index.js +13 -0
- package/cli/setup/steps/appDelegate.js +66 -11
- package/cli/setup/steps/sceneDelegate.js +108 -0
- package/docs-md/architecture/transitions.md +7 -1
- package/docs-md/containers/modals.md +4 -2
- package/docs-md/containers/overlays.md +3 -1
- package/docs-md/containers/side-menu.md +4 -2
- package/docs-md/containers/tabs.md +2 -0
- package/docs-md/flows/forms-in-a-modal.md +1 -1
- package/docs-md/guides/deep-links.md +15 -33
- package/docs-md/help/glossary.md +1 -1
- package/docs-md/index.json +8 -0
- package/docs-md/screen-ui/back-and-gestures.md +6 -0
- package/docs-md/screen-ui/system-ui.md +1 -1
- package/docs-md/start/installation.md +1 -0
- package/ios/Animations/ANNTransitionAnimator.mm +13 -11
- package/ios/Animations/ANNTransitionWait.mm +6 -7
- package/ios/Animations/Elements/ANNElementFinder.h +57 -0
- package/ios/Animations/Elements/ANNElementFinder.mm +174 -2
- package/ios/Animations/Elements/ANNElementTransition.h +7 -5
- package/ios/Animations/Elements/ANNElementTransition.mm +17 -19
- package/ios/Animations/Elements/ANNSharedElementFlight.h +13 -8
- package/ios/Animations/Elements/ANNSharedElementFlight.mm +59 -24
- package/ios/CLAUDE.md +10 -2
- package/ios/CORE.md +3 -2
- package/ios/Contract/ANNCommandAnswer.h +4 -3
- package/ios/Contract/ANNCommandAnswer.mm +12 -2
- package/ios/Contract/ANNCommandRunner.h +2 -2
- package/ios/Contract/ANNCommandRunner.mm +1 -1
- package/ios/Contract/ANNErrorTexts.h +6 -2
- package/ios/Contract/ANNErrorTexts.mm +18 -10
- package/ios/Core/ANNDeepLinkQueue.h +20 -1
- package/ios/Core/ANNDeepLinkQueue.mm +107 -12
- package/ios/Core/ANNErrorHandler.h +8 -3
- package/ios/Core/ANNErrorHandler.mm +17 -1
- package/ios/Core/ANNEventContract.h +246 -0
- package/ios/Core/ANNEventContract.mm +225 -0
- package/ios/Core/ANNEventEmitter.h +5 -1
- package/ios/Core/ANNEventEmitter.mm +117 -80
- package/ios/Core/ANNHinge.mm +6 -4
- package/ios/Core/ANNSceneDelegate.mm +25 -15
- package/ios/Core/ANNSystemUI.h +3 -2
- package/ios/Core/ANNSystemUI.mm +7 -0
- package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +6 -4
- package/ios/Layouts/Modal/ANNModalCoordinator.mm +1 -1
- package/ios/Layouts/Modal/ANNModalPresentation.h +8 -5
- package/ios/Layouts/Modal/ANNModalPresentation.mm +12 -12
- package/ios/Layouts/Modal/ANNSheetPresenter.mm +83 -1
- package/ios/Layouts/Root/ANNRootCoordinator.mm +12 -3
- package/ios/Layouts/Screen/ANNComponentPresenter.h +11 -3
- package/ios/Layouts/Screen/ANNComponentPresenter.mm +34 -6
- package/ios/Layouts/Screen/ANNComponentViewController.mm +28 -7
- package/ios/Layouts/Screen/ANNNativeScreenContext.mm +7 -5
- package/ios/Layouts/Screen/ANNScreenInsets.mm +6 -4
- package/ios/Layouts/Screen/ANNScreenRegions.mm +9 -6
- package/ios/Layouts/SplitView/ANNSplitViewController.mm +4 -7
- package/ios/Options/ANNSheetOptions.h +4 -1
- package/ios/Public/ApexNavigation/ANNSceneDelegate.h +3 -0
- package/ios/RECIPES.md +2 -1
- package/ios/TurboModules/ANNTurboEventEmitter.mm +4 -35
- package/ios/TurboModules/ANNTurboModule.mm +5 -2
- package/lib/module/ARCHITECTURE.md +7 -4
- package/lib/module/api/app/createNavigation.js +2 -0
- package/lib/module/api/app/createNavigation.js.map +1 -1
- package/lib/module/api/hooks/useNavigation.js +8 -3
- package/lib/module/api/hooks/useNavigation.js.map +1 -1
- package/lib/module/api/linking/dispatchedLinks.js +23 -0
- package/lib/module/api/linking/dispatchedLinks.js.map +1 -0
- package/lib/module/interfaces/contract/errors.json +275 -0
- package/lib/typescript/api/app/createNavigation.d.ts.map +1 -1
- package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -1
- package/lib/typescript/api/linking/dispatchedLinks.d.ts +7 -0
- package/lib/typescript/api/linking/dispatchedLinks.d.ts.map +1 -0
- package/lib/typescript/interfaces/Events.d.ts +9 -0
- package/lib/typescript/interfaces/Events.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/animations.d.ts +27 -18
- package/lib/typescript/interfaces/options/animations.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/modals.d.ts +33 -24
- package/lib/typescript/interfaces/options/modals.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/sideMenu.d.ts +7 -6
- package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/system.d.ts +10 -6
- package/lib/typescript/interfaces/options/system.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ARCHITECTURE.md +7 -4
- package/src/api/app/createNavigation.ts +2 -0
- package/src/api/hooks/useNavigation.ts +8 -3
- package/src/api/linking/dispatchedLinks.ts +18 -0
- package/src/interfaces/Events.ts +10 -0
- package/src/interfaces/contract/errors.json +275 -0
- package/src/interfaces/options/animations.ts +27 -18
- package/src/interfaces/options/modals.ts +33 -24
- package/src/interfaces/options/sideMenu.ts +7 -6
- package/src/interfaces/options/system.ts +10 -6
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Made by scripts/contract.mjs from the event types of src/interfaces/: change them and run the script again.
|
|
2
|
+
|
|
3
|
+
#import "ANNEventContract.h"
|
|
4
|
+
|
|
5
|
+
const struct ANNEventContractTable ANNEventContract = {
|
|
6
|
+
.AppLaunched = {.event = @"ANN.AppLaunched"},
|
|
7
|
+
.ArrangementChanged =
|
|
8
|
+
{
|
|
9
|
+
.event = @"ANN.ArrangementChanged",
|
|
10
|
+
.componentId = @"componentId",
|
|
11
|
+
.placement = @"placement",
|
|
12
|
+
.layout = @"layout",
|
|
13
|
+
.front = @"front",
|
|
14
|
+
.hidden = @"hidden",
|
|
15
|
+
},
|
|
16
|
+
.BottomAccessoryPlacementChanged =
|
|
17
|
+
{
|
|
18
|
+
.event = @"ANN.BottomAccessoryPlacementChanged",
|
|
19
|
+
.componentId = @"componentId",
|
|
20
|
+
.placement = @"placement",
|
|
21
|
+
},
|
|
22
|
+
.BottomTabLongPressed =
|
|
23
|
+
{
|
|
24
|
+
.event = @"ANN.BottomTabLongPressed",
|
|
25
|
+
.selectedTabIndex = @"selectedTabIndex",
|
|
26
|
+
.bottomTabsId = @"bottomTabsId",
|
|
27
|
+
},
|
|
28
|
+
.BottomTabPressed =
|
|
29
|
+
{
|
|
30
|
+
.event = @"ANN.BottomTabPressed",
|
|
31
|
+
.tabIndex = @"tabIndex",
|
|
32
|
+
.bottomTabsId = @"bottomTabsId",
|
|
33
|
+
.screenId = @"screenId",
|
|
34
|
+
.wasSelected = @"wasSelected",
|
|
35
|
+
},
|
|
36
|
+
.BottomTabSelected =
|
|
37
|
+
{
|
|
38
|
+
.event = @"ANN.BottomTabSelected",
|
|
39
|
+
.selectedTabIndex = @"selectedTabIndex",
|
|
40
|
+
.unselectedTabIndex = @"unselectedTabIndex",
|
|
41
|
+
.bottomTabsId = @"bottomTabsId",
|
|
42
|
+
},
|
|
43
|
+
.CommandCompleted =
|
|
44
|
+
{
|
|
45
|
+
.event = @"ANN.CommandCompleted",
|
|
46
|
+
.commandName = @"commandName",
|
|
47
|
+
.commandId = @"commandId",
|
|
48
|
+
.completionTime = @"completionTime",
|
|
49
|
+
},
|
|
50
|
+
.ComponentDidAppear =
|
|
51
|
+
{
|
|
52
|
+
.event = @"ANN.ComponentDidAppear",
|
|
53
|
+
.componentId = @"componentId",
|
|
54
|
+
.componentName = @"componentName",
|
|
55
|
+
.componentType = @"componentType",
|
|
56
|
+
},
|
|
57
|
+
.ComponentDidDisappear =
|
|
58
|
+
{
|
|
59
|
+
.event = @"ANN.ComponentDidDisappear",
|
|
60
|
+
.componentId = @"componentId",
|
|
61
|
+
.componentName = @"componentName",
|
|
62
|
+
.componentType = @"componentType",
|
|
63
|
+
},
|
|
64
|
+
.ComponentWillAppear =
|
|
65
|
+
{
|
|
66
|
+
.event = @"ANN.ComponentWillAppear",
|
|
67
|
+
.componentId = @"componentId",
|
|
68
|
+
.componentName = @"componentName",
|
|
69
|
+
.componentType = @"componentType",
|
|
70
|
+
},
|
|
71
|
+
.DeepLinkDispatched = {.event = @"ANN.DeepLinkDispatched", .url = @"url"},
|
|
72
|
+
.HingeChanged = {.event = @"ANN.HingeChanged", .state = @"state", .angle = @"angle"},
|
|
73
|
+
.KeyCommandPressed =
|
|
74
|
+
{
|
|
75
|
+
.event = @"ANN.KeyCommandPressed",
|
|
76
|
+
.componentId = @"componentId",
|
|
77
|
+
.keyCommandId = @"keyCommandId",
|
|
78
|
+
},
|
|
79
|
+
.ModalAttemptedToDismiss =
|
|
80
|
+
{
|
|
81
|
+
.event = @"ANN.ModalAttemptedToDismiss",
|
|
82
|
+
.componentId = @"componentId",
|
|
83
|
+
},
|
|
84
|
+
.ModalDismissed =
|
|
85
|
+
{
|
|
86
|
+
.event = @"ANN.ModalDismissed",
|
|
87
|
+
.componentId = @"componentId",
|
|
88
|
+
.componentName = @"componentName",
|
|
89
|
+
.modalsDismissed = @"modalsDismissed",
|
|
90
|
+
},
|
|
91
|
+
.NativeScreenCall =
|
|
92
|
+
{
|
|
93
|
+
.event = @"ANN.NativeScreenCall",
|
|
94
|
+
.componentId = @"componentId",
|
|
95
|
+
.callId = @"callId",
|
|
96
|
+
.kind = @"kind",
|
|
97
|
+
.name = @"name",
|
|
98
|
+
.args = @"args",
|
|
99
|
+
},
|
|
100
|
+
.NativeScreenReleased = {.event = @"ANN.NativeScreenReleased", .componentId = @"componentId"},
|
|
101
|
+
.NavigationButtonPressed =
|
|
102
|
+
{
|
|
103
|
+
.event = @"ANN.NavigationButtonPressed",
|
|
104
|
+
.componentId = @"componentId",
|
|
105
|
+
.buttonId = @"buttonId",
|
|
106
|
+
.selected = @"selected",
|
|
107
|
+
},
|
|
108
|
+
.NavigationStateChanged =
|
|
109
|
+
{
|
|
110
|
+
.event = @"ANN.NavigationStateChanged",
|
|
111
|
+
.screen = @"screen",
|
|
112
|
+
.tab = @"tab",
|
|
113
|
+
},
|
|
114
|
+
.NavigationStateChangedScreen = {.id = @"id", .name = @"name"},
|
|
115
|
+
.PreviewCompleted =
|
|
116
|
+
{
|
|
117
|
+
.event = @"ANN.PreviewCompleted",
|
|
118
|
+
.componentId = @"componentId",
|
|
119
|
+
.previewComponentId = @"previewComponentId",
|
|
120
|
+
},
|
|
121
|
+
.ScreenInsetsChanged =
|
|
122
|
+
{
|
|
123
|
+
.event = @"ANN.ScreenInsetsChanged",
|
|
124
|
+
.componentId = @"componentId",
|
|
125
|
+
.top = @"top",
|
|
126
|
+
.right = @"right",
|
|
127
|
+
.bottom = @"bottom",
|
|
128
|
+
.left = @"left",
|
|
129
|
+
},
|
|
130
|
+
.ScreenPopped = {.event = @"ANN.ScreenPopped", .componentId = @"componentId"},
|
|
131
|
+
.ScreenRegionRect = {.x = @"x", .y = @"y", .width = @"width", .height = @"height"},
|
|
132
|
+
.ScreenRegionsChanged =
|
|
133
|
+
{
|
|
134
|
+
.event = @"ANN.ScreenRegionsChanged",
|
|
135
|
+
.componentId = @"componentId",
|
|
136
|
+
.division = @"division",
|
|
137
|
+
.occlusion = @"occlusion",
|
|
138
|
+
},
|
|
139
|
+
.SearchBarCancelPressed =
|
|
140
|
+
{
|
|
141
|
+
.event = @"ANN.SearchBarCancelPressed",
|
|
142
|
+
.componentId = @"componentId",
|
|
143
|
+
},
|
|
144
|
+
.SearchBarSubmitted =
|
|
145
|
+
{
|
|
146
|
+
.event = @"ANN.SearchBarSubmitted",
|
|
147
|
+
.componentId = @"componentId",
|
|
148
|
+
.text = @"text",
|
|
149
|
+
.scope = @"scope",
|
|
150
|
+
.tokens = @"tokens",
|
|
151
|
+
},
|
|
152
|
+
.SearchBarUpdated =
|
|
153
|
+
{
|
|
154
|
+
.event = @"ANN.SearchBarUpdated",
|
|
155
|
+
.componentId = @"componentId",
|
|
156
|
+
.text = @"text",
|
|
157
|
+
.isFocused = @"isFocused",
|
|
158
|
+
.scope = @"scope",
|
|
159
|
+
.tokens = @"tokens",
|
|
160
|
+
},
|
|
161
|
+
.SearchSuggestionPicked =
|
|
162
|
+
{
|
|
163
|
+
.event = @"ANN.SearchSuggestionPicked",
|
|
164
|
+
.componentId = @"componentId",
|
|
165
|
+
.suggestionId = @"suggestionId",
|
|
166
|
+
},
|
|
167
|
+
.SheetDetentChanged =
|
|
168
|
+
{
|
|
169
|
+
.event = @"ANN.SheetDetentChanged",
|
|
170
|
+
.componentId = @"componentId",
|
|
171
|
+
.detent = @"detent",
|
|
172
|
+
},
|
|
173
|
+
.SlotDestroyed = {.event = @"ANN.SlotDestroyed", .componentId = @"componentId"},
|
|
174
|
+
.SplitViewColumnsStacked =
|
|
175
|
+
{
|
|
176
|
+
.event = @"ANN.SplitViewColumnsStacked",
|
|
177
|
+
.componentId = @"componentId",
|
|
178
|
+
.stacked = @"stacked",
|
|
179
|
+
},
|
|
180
|
+
.SplitViewDisplayModeChanged =
|
|
181
|
+
{
|
|
182
|
+
.event = @"ANN.SplitViewDisplayModeChanged",
|
|
183
|
+
.componentId = @"componentId",
|
|
184
|
+
.displayMode = @"displayMode",
|
|
185
|
+
.inspectorVisible = @"inspectorVisible",
|
|
186
|
+
},
|
|
187
|
+
.TitleRenamed = {.event = @"ANN.TitleRenamed", .componentId = @"componentId", .text = @"text"},
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
NSArray<NSString *> *ANNEventContractNames(void) {
|
|
191
|
+
return @[
|
|
192
|
+
ANNEventContract.AppLaunched.event,
|
|
193
|
+
ANNEventContract.ArrangementChanged.event,
|
|
194
|
+
ANNEventContract.BottomAccessoryPlacementChanged.event,
|
|
195
|
+
ANNEventContract.BottomTabLongPressed.event,
|
|
196
|
+
ANNEventContract.BottomTabPressed.event,
|
|
197
|
+
ANNEventContract.BottomTabSelected.event,
|
|
198
|
+
ANNEventContract.CommandCompleted.event,
|
|
199
|
+
ANNEventContract.ComponentDidAppear.event,
|
|
200
|
+
ANNEventContract.ComponentDidDisappear.event,
|
|
201
|
+
ANNEventContract.ComponentWillAppear.event,
|
|
202
|
+
ANNEventContract.DeepLinkDispatched.event,
|
|
203
|
+
ANNEventContract.HingeChanged.event,
|
|
204
|
+
ANNEventContract.KeyCommandPressed.event,
|
|
205
|
+
ANNEventContract.ModalAttemptedToDismiss.event,
|
|
206
|
+
ANNEventContract.ModalDismissed.event,
|
|
207
|
+
ANNEventContract.NativeScreenCall.event,
|
|
208
|
+
ANNEventContract.NativeScreenReleased.event,
|
|
209
|
+
ANNEventContract.NavigationButtonPressed.event,
|
|
210
|
+
ANNEventContract.NavigationStateChanged.event,
|
|
211
|
+
ANNEventContract.PreviewCompleted.event,
|
|
212
|
+
ANNEventContract.ScreenInsetsChanged.event,
|
|
213
|
+
ANNEventContract.ScreenPopped.event,
|
|
214
|
+
ANNEventContract.ScreenRegionsChanged.event,
|
|
215
|
+
ANNEventContract.SearchBarCancelPressed.event,
|
|
216
|
+
ANNEventContract.SearchBarSubmitted.event,
|
|
217
|
+
ANNEventContract.SearchBarUpdated.event,
|
|
218
|
+
ANNEventContract.SearchSuggestionPicked.event,
|
|
219
|
+
ANNEventContract.SheetDetentChanged.event,
|
|
220
|
+
ANNEventContract.SlotDestroyed.event,
|
|
221
|
+
ANNEventContract.SplitViewColumnsStacked.event,
|
|
222
|
+
ANNEventContract.SplitViewDisplayModeChanged.event,
|
|
223
|
+
ANNEventContract.TitleRenamed.event,
|
|
224
|
+
];
|
|
225
|
+
}
|
|
@@ -22,7 +22,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
22
22
|
/// Whether the JavaScript of this emitter still runs: its events go only then. Any thread.
|
|
23
23
|
@property(nonatomic, readonly) BOOL isCurrent;
|
|
24
24
|
|
|
25
|
-
/// Sends `ANN.<
|
|
25
|
+
/// Sends the event `name` (`ANNEventContract.<Event>.event`, `ANN.<Event>`) with the payload as it is, its keys from
|
|
26
|
+
/// `ANNEventContract` too. From another queue it moves to the main queue first.
|
|
26
27
|
- (void)sendEvent:(NSString *)name body:(nullable NSDictionary<NSString *, id> *)body;
|
|
27
28
|
|
|
28
29
|
#pragma mark - The contract
|
|
@@ -85,6 +86,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
85
86
|
|
|
86
87
|
- (void)sendSlotDestroyed:(NSString *)componentId;
|
|
87
88
|
|
|
89
|
+
/// `ANN.DeepLinkDispatched { url }` (iOS only): a link React Native's `Linking` didn't take, for JavaScript to hand it.
|
|
90
|
+
- (void)sendDeepLinkDispatched:(NSURL *)url;
|
|
91
|
+
|
|
88
92
|
/// `ANN.TitleRenamed { componentId, text }` (EVT-TitleRenamed).
|
|
89
93
|
- (void)sendTitleRenamed:(NSString *)componentId text:(NSString *)text;
|
|
90
94
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#import "ANNEventEmitter.h"
|
|
2
2
|
#import "ANNAssert.h"
|
|
3
|
+
#import "ANNEventContract.h"
|
|
3
4
|
#import "ANNReloadCoordinator.h"
|
|
4
5
|
#import "ANNTurboEventEmitter.h"
|
|
5
6
|
#import <React/RCTUtils.h>
|
|
@@ -24,8 +25,6 @@ static NSString *ANNComponentTypeName(ANNReactComponentType componentType) {
|
|
|
24
25
|
static BOOL ANNAppLaunchedPending;
|
|
25
26
|
static NSUInteger ANNAppLaunchedBundle;
|
|
26
27
|
|
|
27
|
-
static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
28
|
-
|
|
29
28
|
@implementation ANNEventEmitter
|
|
30
29
|
|
|
31
30
|
- (instancetype)init {
|
|
@@ -42,12 +41,11 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
42
41
|
// The generation is checked where the event goes out, on the main queue: an event sent from another queue just
|
|
43
42
|
// before a reload is dropped too.
|
|
44
43
|
- (void)sendEvent:(NSString *)name body:(NSDictionary<NSString *, id> *)body {
|
|
45
|
-
NSString *eventName = [@"ANN." stringByAppendingString:name];
|
|
46
44
|
RCTExecuteOnMainQueue(^{
|
|
47
45
|
if (!self.isCurrent) {
|
|
48
46
|
return;
|
|
49
47
|
}
|
|
50
|
-
[ANNTurboEventEmitter.current sendIfListened:
|
|
48
|
+
[ANNTurboEventEmitter.current sendIfListened:name body:body];
|
|
51
49
|
});
|
|
52
50
|
}
|
|
53
51
|
|
|
@@ -62,7 +60,7 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
62
60
|
return;
|
|
63
61
|
}
|
|
64
62
|
ANNAppLaunchedPending = NO;
|
|
65
|
-
[eventEmitter sendIfListened:
|
|
63
|
+
[eventEmitter sendIfListened:ANNEventContract.AppLaunched.event body:nil];
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
+ (void)eventEmitterListensToAppLaunched:(ANNTurboEventEmitter *)eventEmitter {
|
|
@@ -71,7 +69,7 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
71
69
|
return;
|
|
72
70
|
}
|
|
73
71
|
ANNAppLaunchedPending = NO;
|
|
74
|
-
[eventEmitter sendIfListened:
|
|
72
|
+
[eventEmitter sendIfListened:ANNEventContract.AppLaunched.event body:nil];
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
// Only an `AppLaunched` of the module's own JavaScript or an older one: the module is made while its bundle runs,
|
|
@@ -87,11 +85,12 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
87
85
|
- (void)sendCommandCompleted:(NSString *)commandName
|
|
88
86
|
commandId:(NSString *)commandId
|
|
89
87
|
completionTime:(double)completionTime {
|
|
90
|
-
|
|
88
|
+
const auto &keys = ANNEventContract.CommandCompleted;
|
|
89
|
+
[self sendEvent:keys.event
|
|
91
90
|
body:@{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
keys.commandName : commandName,
|
|
92
|
+
keys.commandId : commandId,
|
|
93
|
+
keys.completionTime : @(completionTime),
|
|
95
94
|
}];
|
|
96
95
|
}
|
|
97
96
|
|
|
@@ -100,7 +99,7 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
100
99
|
- (void)sendComponentWillAppear:(NSString *)componentId
|
|
101
100
|
componentName:(NSString *)componentName
|
|
102
101
|
componentType:(ANNReactComponentType)componentType {
|
|
103
|
-
[self sendComponentEvent
|
|
102
|
+
[self sendComponentEvent:ANNEventContract.ComponentWillAppear.event
|
|
104
103
|
componentId:componentId
|
|
105
104
|
componentName:componentName
|
|
106
105
|
componentType:componentType];
|
|
@@ -109,7 +108,7 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
109
108
|
- (void)sendComponentDidAppear:(NSString *)componentId
|
|
110
109
|
componentName:(NSString *)componentName
|
|
111
110
|
componentType:(ANNReactComponentType)componentType {
|
|
112
|
-
[self sendComponentEvent
|
|
111
|
+
[self sendComponentEvent:ANNEventContract.ComponentDidAppear.event
|
|
113
112
|
componentId:componentId
|
|
114
113
|
componentName:componentName
|
|
115
114
|
componentType:componentType];
|
|
@@ -118,21 +117,23 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
118
117
|
- (void)sendComponentDidDisappear:(NSString *)componentId
|
|
119
118
|
componentName:(NSString *)componentName
|
|
120
119
|
componentType:(ANNReactComponentType)componentType {
|
|
121
|
-
[self sendComponentEvent
|
|
120
|
+
[self sendComponentEvent:ANNEventContract.ComponentDidDisappear.event
|
|
122
121
|
componentId:componentId
|
|
123
122
|
componentName:componentName
|
|
124
123
|
componentType:componentType];
|
|
125
124
|
}
|
|
126
125
|
|
|
126
|
+
// The three appearance events have the same keys.
|
|
127
127
|
- (void)sendComponentEvent:(NSString *)name
|
|
128
128
|
componentId:(NSString *)componentId
|
|
129
129
|
componentName:(NSString *)componentName
|
|
130
130
|
componentType:(ANNReactComponentType)componentType {
|
|
131
|
+
const auto &keys = ANNEventContract.ComponentDidAppear;
|
|
131
132
|
[self sendEvent:name
|
|
132
133
|
body:@{
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
keys.componentId : componentId ?: @"",
|
|
135
|
+
keys.componentName : componentName ?: @"",
|
|
136
|
+
keys.componentType : ANNComponentTypeName(componentType),
|
|
136
137
|
}];
|
|
137
138
|
}
|
|
138
139
|
|
|
@@ -143,58 +144,76 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
143
144
|
- (void)sendOnNavigationButtonPressed:(NSString *)componentId
|
|
144
145
|
buttonId:(NSString *)buttonId
|
|
145
146
|
selected:(NSNumber *)selected {
|
|
147
|
+
const auto &keys = ANNEventContract.NavigationButtonPressed;
|
|
146
148
|
NSMutableDictionary *body =
|
|
147
|
-
[@{
|
|
149
|
+
[@{keys.componentId : componentId ?: @"", keys.buttonId : buttonId ?: @""} mutableCopy];
|
|
148
150
|
if (selected) {
|
|
149
|
-
body[
|
|
151
|
+
body[keys.selected] = @(selected.boolValue);
|
|
150
152
|
}
|
|
151
|
-
[self sendEvent
|
|
153
|
+
[self sendEvent:keys.event body:body];
|
|
152
154
|
}
|
|
153
155
|
|
|
154
156
|
- (void)sendScreenPopped:(NSString *)componentId {
|
|
155
|
-
|
|
157
|
+
const auto &keys = ANNEventContract.ScreenPopped;
|
|
158
|
+
[self sendEvent:keys.event body:@{keys.componentId : componentId ?: @""}];
|
|
156
159
|
}
|
|
157
160
|
|
|
158
161
|
- (void)sendNavigationStateChanged:(NSString *)screenId name:(NSString *)name tab:(NSNumber *)tab {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
+
const auto &keys = ANNEventContract.NavigationStateChanged;
|
|
163
|
+
const auto &screenKeys = ANNEventContract.NavigationStateChangedScreen;
|
|
164
|
+
id screen = screenId ? @{screenKeys.id : screenId, screenKeys.name : name ?: @""}
|
|
165
|
+
: (id)NSNull.null;
|
|
166
|
+
[self sendEvent:keys.event body:@{keys.screen : screen, keys.tab : tab ?: (id)NSNull.null}];
|
|
162
167
|
}
|
|
163
168
|
|
|
164
169
|
- (void)sendScreenInsetsChanged:(NSString *)componentId
|
|
165
170
|
insets:(NSDictionary<NSString *, NSNumber *> *)insets {
|
|
171
|
+
const auto &keys = ANNEventContract.ScreenInsetsChanged;
|
|
166
172
|
NSMutableDictionary *body = [insets mutableCopy] ?: [NSMutableDictionary new];
|
|
167
|
-
body[
|
|
168
|
-
[self sendEvent
|
|
173
|
+
body[keys.componentId] = componentId;
|
|
174
|
+
[self sendEvent:keys.event body:body];
|
|
169
175
|
}
|
|
170
176
|
|
|
171
177
|
- (void)sendScreenRegionsChanged:(NSString *)componentId
|
|
172
178
|
regions:(NSDictionary<NSString *, NSArray *> *)regions {
|
|
179
|
+
const auto &keys = ANNEventContract.ScreenRegionsChanged;
|
|
173
180
|
NSMutableDictionary *body = [regions mutableCopy] ?: [NSMutableDictionary new];
|
|
174
|
-
body[
|
|
175
|
-
[self sendEvent
|
|
181
|
+
body[keys.componentId] = componentId;
|
|
182
|
+
[self sendEvent:keys.event body:body];
|
|
176
183
|
}
|
|
177
184
|
|
|
178
185
|
- (void)sendSlotDestroyed:(NSString *)componentId {
|
|
179
|
-
|
|
186
|
+
const auto &keys = ANNEventContract.SlotDestroyed;
|
|
187
|
+
[self sendEvent:keys.event body:@{keys.componentId : componentId ?: @""}];
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
- (void)sendDeepLinkDispatched:(NSURL *)url {
|
|
191
|
+
const auto &keys = ANNEventContract.DeepLinkDispatched;
|
|
192
|
+
[self sendEvent:keys.event body:@{keys.url : url.absoluteString ?: @""}];
|
|
180
193
|
}
|
|
181
194
|
|
|
182
195
|
- (void)sendTitleRenamed:(NSString *)componentId text:(NSString *)text {
|
|
183
|
-
|
|
184
|
-
|
|
196
|
+
const auto &keys = ANNEventContract.TitleRenamed;
|
|
197
|
+
[self sendEvent:keys.event
|
|
198
|
+
body:@{keys.componentId : componentId ?: @"", keys.text : text ?: @""}];
|
|
185
199
|
}
|
|
186
200
|
|
|
187
201
|
- (void)sendKeyCommandPressed:(NSString *)componentId keyCommandId:(NSString *)keyCommandId {
|
|
188
|
-
|
|
189
|
-
|
|
202
|
+
const auto &keys = ANNEventContract.KeyCommandPressed;
|
|
203
|
+
[self sendEvent:keys.event
|
|
204
|
+
body:@{
|
|
205
|
+
keys.componentId : componentId ?: @"",
|
|
206
|
+
keys.keyCommandId : keyCommandId ?: @"",
|
|
207
|
+
}];
|
|
190
208
|
}
|
|
191
209
|
|
|
192
210
|
- (void)sendPreviewCompleted:(NSString *)componentId
|
|
193
211
|
previewComponentId:(NSString *)previewComponentId {
|
|
194
|
-
|
|
212
|
+
const auto &keys = ANNEventContract.PreviewCompleted;
|
|
213
|
+
[self sendEvent:keys.event
|
|
195
214
|
body:@{
|
|
196
|
-
|
|
197
|
-
|
|
215
|
+
keys.componentId : componentId ?: @"",
|
|
216
|
+
keys.previewComponentId : previewComponentId ?: @"",
|
|
198
217
|
}];
|
|
199
218
|
}
|
|
200
219
|
|
|
@@ -203,21 +222,24 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
203
222
|
- (void)sendModalDismissed:(NSString *)componentId
|
|
204
223
|
componentName:(NSString *)componentName
|
|
205
224
|
modalsDismissed:(NSUInteger)modalsDismissed {
|
|
206
|
-
|
|
225
|
+
const auto &keys = ANNEventContract.ModalDismissed;
|
|
226
|
+
[self sendEvent:keys.event
|
|
207
227
|
body:@{
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
228
|
+
keys.componentId : componentId ?: @"",
|
|
229
|
+
keys.componentName : componentName ?: @"",
|
|
230
|
+
keys.modalsDismissed : @(modalsDismissed),
|
|
211
231
|
}];
|
|
212
232
|
}
|
|
213
233
|
|
|
214
234
|
- (void)sendModalAttemptedToDismiss:(NSString *)componentId {
|
|
215
|
-
|
|
235
|
+
const auto &keys = ANNEventContract.ModalAttemptedToDismiss;
|
|
236
|
+
[self sendEvent:keys.event body:@{keys.componentId : componentId ?: @""}];
|
|
216
237
|
}
|
|
217
238
|
|
|
218
239
|
- (void)sendSheetDetentChanged:(NSString *)componentId detent:(id)detent {
|
|
219
|
-
|
|
220
|
-
|
|
240
|
+
const auto &keys = ANNEventContract.SheetDetentChanged;
|
|
241
|
+
[self sendEvent:keys.event
|
|
242
|
+
body:@{keys.componentId : componentId ?: @"", keys.detent : detent ?: @""}];
|
|
221
243
|
}
|
|
222
244
|
|
|
223
245
|
#pragma mark - Search
|
|
@@ -227,82 +249,94 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
227
249
|
isFocused:(BOOL)isFocused
|
|
228
250
|
scope:(NSString *)scope
|
|
229
251
|
tokens:(NSArray<NSString *> *)tokens {
|
|
252
|
+
const auto &keys = ANNEventContract.SearchBarUpdated;
|
|
230
253
|
NSMutableDictionary *body = [@{
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
254
|
+
keys.componentId : componentId ?: @"",
|
|
255
|
+
keys.text : text ?: @"",
|
|
256
|
+
keys.isFocused : @(isFocused),
|
|
234
257
|
} mutableCopy];
|
|
235
|
-
body[
|
|
236
|
-
body[
|
|
237
|
-
[self sendEvent
|
|
258
|
+
body[keys.scope] = scope;
|
|
259
|
+
body[keys.tokens] = tokens;
|
|
260
|
+
[self sendEvent:keys.event body:body];
|
|
238
261
|
}
|
|
239
262
|
|
|
240
263
|
- (void)sendOnSearchBarSubmitted:(NSString *)componentId
|
|
241
264
|
text:(NSString *)text
|
|
242
265
|
scope:(NSString *)scope
|
|
243
266
|
tokens:(NSArray<NSString *> *)tokens {
|
|
267
|
+
const auto &keys = ANNEventContract.SearchBarSubmitted;
|
|
244
268
|
NSMutableDictionary *body =
|
|
245
|
-
[@{
|
|
246
|
-
body[
|
|
247
|
-
body[
|
|
248
|
-
[self sendEvent
|
|
269
|
+
[@{keys.componentId : componentId ?: @"", keys.text : text ?: @""} mutableCopy];
|
|
270
|
+
body[keys.scope] = scope;
|
|
271
|
+
body[keys.tokens] = tokens;
|
|
272
|
+
[self sendEvent:keys.event body:body];
|
|
249
273
|
}
|
|
250
274
|
|
|
251
275
|
- (void)sendOnSearchBarCancelPressed:(NSString *)componentId {
|
|
252
|
-
|
|
276
|
+
const auto &keys = ANNEventContract.SearchBarCancelPressed;
|
|
277
|
+
[self sendEvent:keys.event body:@{keys.componentId : componentId ?: @""}];
|
|
253
278
|
}
|
|
254
279
|
|
|
255
280
|
- (void)sendOnSearchSuggestionPicked:(NSString *)componentId suggestionId:(NSString *)suggestionId {
|
|
256
|
-
|
|
257
|
-
|
|
281
|
+
const auto &keys = ANNEventContract.SearchSuggestionPicked;
|
|
282
|
+
[self sendEvent:keys.event
|
|
283
|
+
body:@{
|
|
284
|
+
keys.componentId : componentId ?: @"",
|
|
285
|
+
keys.suggestionId : suggestionId ?: @"",
|
|
286
|
+
}];
|
|
258
287
|
}
|
|
259
288
|
|
|
260
289
|
#pragma mark - Split view, pair, hinge
|
|
261
290
|
|
|
262
291
|
- (void)sendSplitViewColumnsStacked:(NSString *)componentId stacked:(BOOL)stacked {
|
|
263
|
-
|
|
264
|
-
|
|
292
|
+
const auto &keys = ANNEventContract.SplitViewColumnsStacked;
|
|
293
|
+
[self sendEvent:keys.event
|
|
294
|
+
body:@{keys.componentId : componentId ?: @"", keys.stacked : @(stacked)}];
|
|
265
295
|
}
|
|
266
296
|
|
|
267
297
|
- (void)sendSplitViewDisplayModeChanged:(NSString *)componentId
|
|
268
298
|
displayMode:(NSString *)displayMode
|
|
269
299
|
inspectorVisible:(NSNumber *)inspectorVisible {
|
|
300
|
+
const auto &keys = ANNEventContract.SplitViewDisplayModeChanged;
|
|
270
301
|
NSMutableDictionary *body = [@{
|
|
271
|
-
|
|
272
|
-
|
|
302
|
+
keys.componentId : componentId ?: @"",
|
|
303
|
+
keys.displayMode : displayMode ?: @"automatic",
|
|
273
304
|
} mutableCopy];
|
|
274
|
-
body[
|
|
275
|
-
[self sendEvent
|
|
305
|
+
body[keys.inspectorVisible] = inspectorVisible;
|
|
306
|
+
[self sendEvent:keys.event body:body];
|
|
276
307
|
}
|
|
277
308
|
|
|
278
309
|
- (void)sendArrangementChanged:(NSString *)componentId state:(NSDictionary<NSString *, id> *)state {
|
|
310
|
+
const auto &keys = ANNEventContract.ArrangementChanged;
|
|
279
311
|
NSMutableDictionary *body = [state mutableCopy] ?: [NSMutableDictionary new];
|
|
280
|
-
body[
|
|
281
|
-
[self sendEvent
|
|
312
|
+
body[keys.componentId] = componentId;
|
|
313
|
+
[self sendEvent:keys.event body:body];
|
|
282
314
|
}
|
|
283
315
|
|
|
284
316
|
- (void)sendHingeChanged:(NSDictionary<NSString *, id> *)value {
|
|
285
|
-
[self sendEvent
|
|
317
|
+
[self sendEvent:ANNEventContract.HingeChanged.event body:value ?: @{}];
|
|
286
318
|
}
|
|
287
319
|
|
|
288
320
|
#pragma mark - Native screens, tabs
|
|
289
321
|
|
|
290
322
|
- (void)sendNativeScreenCall:(NSDictionary<NSString *, id> *)call {
|
|
291
|
-
[self sendEvent
|
|
323
|
+
[self sendEvent:ANNEventContract.NativeScreenCall.event body:call];
|
|
292
324
|
}
|
|
293
325
|
|
|
294
326
|
- (void)sendNativeScreenReleased:(NSString *)componentId {
|
|
295
|
-
|
|
327
|
+
const auto &keys = ANNEventContract.NativeScreenReleased;
|
|
328
|
+
[self sendEvent:keys.event body:@{keys.componentId : componentId ?: @""}];
|
|
296
329
|
}
|
|
297
330
|
|
|
298
331
|
- (void)sendBottomTabSelected:(NSUInteger)selectedTabIndex
|
|
299
332
|
unselectedTabIndex:(NSUInteger)unselectedTabIndex
|
|
300
333
|
bottomTabsId:(NSString *)bottomTabsId {
|
|
301
|
-
|
|
334
|
+
const auto &keys = ANNEventContract.BottomTabSelected;
|
|
335
|
+
[self sendEvent:keys.event
|
|
302
336
|
body:@{
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
337
|
+
keys.selectedTabIndex : @(selectedTabIndex),
|
|
338
|
+
keys.unselectedTabIndex : @(unselectedTabIndex),
|
|
339
|
+
keys.bottomTabsId : bottomTabsId ?: @"",
|
|
306
340
|
}];
|
|
307
341
|
}
|
|
308
342
|
|
|
@@ -310,28 +344,31 @@ static NSString *const ANNAppLaunchedEvent = @"ANN.AppLaunched";
|
|
|
310
344
|
bottomTabsId:(NSString *)bottomTabsId
|
|
311
345
|
screenId:(NSString *)screenId
|
|
312
346
|
wasSelected:(BOOL)wasSelected {
|
|
347
|
+
const auto &keys = ANNEventContract.BottomTabPressed;
|
|
313
348
|
NSMutableDictionary *body = [@{
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
349
|
+
keys.tabIndex : @(tabIndex),
|
|
350
|
+
keys.bottomTabsId : bottomTabsId ?: @"",
|
|
351
|
+
keys.wasSelected : @(wasSelected),
|
|
317
352
|
} mutableCopy];
|
|
318
|
-
body[
|
|
319
|
-
[self sendEvent
|
|
353
|
+
body[keys.screenId] = screenId;
|
|
354
|
+
[self sendEvent:keys.event body:body];
|
|
320
355
|
}
|
|
321
356
|
|
|
322
357
|
- (void)sendBottomTabLongPressed:(NSUInteger)selectedTabIndex
|
|
323
358
|
bottomTabsId:(NSString *)bottomTabsId {
|
|
324
|
-
|
|
359
|
+
const auto &keys = ANNEventContract.BottomTabLongPressed;
|
|
360
|
+
[self sendEvent:keys.event
|
|
325
361
|
body:@{
|
|
326
|
-
|
|
327
|
-
|
|
362
|
+
keys.selectedTabIndex : @(selectedTabIndex),
|
|
363
|
+
keys.bottomTabsId : bottomTabsId ?: @"",
|
|
328
364
|
}];
|
|
329
365
|
}
|
|
330
366
|
|
|
331
367
|
- (void)sendBottomAccessoryPlacementChanged:(NSString *)componentId
|
|
332
368
|
placement:(NSString *)placement {
|
|
333
|
-
|
|
334
|
-
|
|
369
|
+
const auto &keys = ANNEventContract.BottomAccessoryPlacementChanged;
|
|
370
|
+
[self sendEvent:keys.event
|
|
371
|
+
body:@{keys.componentId : componentId ?: @"", keys.placement : placement ?: @""}];
|
|
335
372
|
}
|
|
336
373
|
|
|
337
374
|
@end
|