@react-native-ohos/react-native-pager-view 6.2.4-rc.4

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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/harmony/pager_view/LICENSE +21 -0
  4. package/harmony/pager_view/NOTICE +33 -0
  5. package/harmony/pager_view/README.OpenSource +11 -0
  6. package/harmony/pager_view/build-profile.json5 +9 -0
  7. package/harmony/pager_view/consumer-rules.txt +0 -0
  8. package/harmony/pager_view/hvigorfile.ts +6 -0
  9. package/harmony/pager_view/index.ets +26 -0
  10. package/harmony/pager_view/obfuscation-rules.txt +18 -0
  11. package/harmony/pager_view/oh-package.json5 +14 -0
  12. package/harmony/pager_view/src/main/cpp/CMakeLists.txt +9 -0
  13. package/harmony/pager_view/src/main/cpp/RNCViewPagerTurbomodule.cpp +42 -0
  14. package/harmony/pager_view/src/main/cpp/RNCViewPagerTurbomodule.h +37 -0
  15. package/harmony/pager_view/src/main/cpp/SwiperNode.cpp +403 -0
  16. package/harmony/pager_view/src/main/cpp/SwiperNode.h +120 -0
  17. package/harmony/pager_view/src/main/cpp/ViewPagerComponentInstance.cpp +247 -0
  18. package/harmony/pager_view/src/main/cpp/ViewPagerComponentInstance.h +106 -0
  19. package/harmony/pager_view/src/main/cpp/ViewPagerPackage.h +64 -0
  20. package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/BaseReactNativePagerViewPackage.h +70 -0
  21. package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/components/BaseRNCViewPagerComponentInstance.h +16 -0
  22. package/harmony/pager_view/src/main/cpp/generated/RNOH/generated/components/RNCViewPagerJSIBinder.h +41 -0
  23. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ComponentDescriptors.h +22 -0
  24. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/EventEmitters.cpp +43 -0
  25. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/EventEmitters.h +47 -0
  26. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/Props.cpp +38 -0
  27. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/Props.h +139 -0
  28. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ShadowNodes.cpp +19 -0
  29. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/ShadowNodes.h +34 -0
  30. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/States.cpp +16 -0
  31. package/harmony/pager_view/src/main/cpp/generated/react/renderer/components/react_native_pager_view/States.h +38 -0
  32. package/harmony/pager_view/src/main/ets/Logger.ets +64 -0
  33. package/harmony/pager_view/src/main/ets/RNCViewPager.ets +281 -0
  34. package/harmony/pager_view/src/main/ets/RNCViewPagerManager.ets +58 -0
  35. package/harmony/pager_view/src/main/ets/ViewPagerModule.ts +34 -0
  36. package/harmony/pager_view/src/main/ets/ViewPagerPackage.ets +57 -0
  37. package/harmony/pager_view/src/main/module.json5 +7 -0
  38. package/harmony/pager_view/src/main/resources/base/element/string.json +8 -0
  39. package/harmony/pager_view/src/main/resources/en_US/element/string.json +8 -0
  40. package/harmony/pager_view/src/main/resources/zh_CN/element/string.json +8 -0
  41. package/harmony/pager_view/ts.ets +26 -0
  42. package/harmony/pager_view.har +0 -0
  43. package/lib/commonjs/PagerView.js +145 -0
  44. package/lib/commonjs/PagerView.js.map +1 -0
  45. package/lib/commonjs/PagerViewNativeComponent.js +14 -0
  46. package/lib/commonjs/PagerViewNativeComponent.js.map +1 -0
  47. package/lib/commonjs/index.js +9 -0
  48. package/lib/commonjs/index.js.map +1 -0
  49. package/lib/commonjs/utils.js +28 -0
  50. package/lib/commonjs/utils.js.map +1 -0
  51. package/lib/module/PagerView.js +138 -0
  52. package/lib/module/PagerView.js.map +1 -0
  53. package/lib/module/PagerViewNativeComponent.js +7 -0
  54. package/lib/module/PagerViewNativeComponent.js.map +1 -0
  55. package/lib/module/index.js +3 -0
  56. package/lib/module/index.js.map +1 -0
  57. package/lib/module/utils.js +20 -0
  58. package/lib/module/utils.js.map +1 -0
  59. package/lib/typescript/PagerView.d.ts +70 -0
  60. package/lib/typescript/PagerViewNativeComponent.d.ts +36 -0
  61. package/lib/typescript/index.d.ts +8 -0
  62. package/lib/typescript/utils.d.ts +2 -0
  63. package/package.json +142 -0
  64. package/src/PagerView.tsx +163 -0
  65. package/src/PagerViewNativeComponent.ts +67 -0
  66. package/src/index.tsx +26 -0
  67. package/src/utils.tsx +19 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * MIT License
3
+ *
4
+ * Copyright (C) 2024 Huawei Device Co., Ltd.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ #include "ViewPagerComponentInstance.h"
26
+ #include <arkui/native_gesture.h>
27
+ #include <arkui/native_interface.h>
28
+ #define DURATION_MILLISECONDS 400
29
+
30
+ namespace rnoh {
31
+
32
+ ViewPagerComponentInstance::ViewPagerComponentInstance(Context context)
33
+ : BaseRNCViewPagerComponentInstance(std::move(context))
34
+ {
35
+ m_swiperNode.setSwiperNodeDelegate(this);
36
+ this->regsiterGestureEvent();
37
+ }
38
+
39
+ void ViewPagerComponentInstance::onChildInserted(ComponentInstance::Shared const &childComponentInstance,
40
+ std::size_t index)
41
+ {
42
+ super::onChildInserted(childComponentInstance, index);
43
+ m_swiperNode.insertChild(childComponentInstance->getLocalRootArkUINode(), index);
44
+ }
45
+
46
+ SwiperNode &ViewPagerComponentInstance::getLocalRootArkUINode() { return m_swiperNode; }
47
+
48
+ void ViewPagerComponentInstance::onChildRemoved(ComponentInstance::Shared const &childComponentInstance)
49
+ {
50
+ super::onChildRemoved(childComponentInstance);
51
+ m_swiperNode.removeChild(childComponentInstance->getLocalRootArkUINode());
52
+ };
53
+
54
+ void ViewPagerComponentInstance::onPropsChanged(SharedConcreteProps const &props)
55
+ {
56
+ super::onPropsChanged(props);
57
+ DLOG(INFO) << "ViewPagerComponentInstance::onPropsChanged: initialPage:" << props->initialPage
58
+ << " scrollEnabled:" << props->scrollEnabled << " orientation:" << facebook::react::toString(props->orientation)
59
+ << " keyboardDismissMode:" << facebook::react::toString(props->keyboardDismissMode)
60
+ << " layoutDirection:" << facebook::react::toString(props->layoutDirection)
61
+ << " pageMargin:" << props->pageMargin << " offscreenPageLimit:" << props->offscreenPageLimit
62
+ << " overdrag:" << props->overdrag << " overScrollMode:" << facebook::react::toString(props->overScrollMode);
63
+ this->m_scrollEnabled = props->scrollEnabled;
64
+ if (this->m_isInitialPage) this->m_pageIndex = props->initialPage;
65
+ this->m_keyboardDismissMode = facebook::react::toString(props->keyboardDismissMode);
66
+ this->getLocalRootArkUINode().setVertical(facebook::react::toString(props->orientation));
67
+ this->getLocalRootArkUINode().setDirection(facebook::react::toString(props->layoutDirection));
68
+ this->getLocalRootArkUINode().setItemSpace(props->pageMargin);
69
+ this->getLocalRootArkUINode().setDisableSwipe(!props->scrollEnabled);
70
+ this->getLocalRootArkUINode().setLoop(false);
71
+ this->getLocalRootArkUINode().setIndicator(false);
72
+ this->getLocalRootArkUINode().setCachedCount(props->offscreenPageLimit);
73
+ this->getLocalRootArkUINode().setCurve(ARKUI_CURVE_SMOOTH);
74
+ this->getLocalRootArkUINode().setDuration(DURATION_MILLISECONDS);
75
+ if (props->overdrag) {
76
+ this->getLocalRootArkUINode().setEffectMode("SPRING");
77
+ } else {
78
+ if (facebook::react::toString(props->overScrollMode) == "never") {
79
+ this->getLocalRootArkUINode().setEffectMode("NONE");
80
+ } else {
81
+ this->getLocalRootArkUINode().setEffectMode("FADE");
82
+ }
83
+ }
84
+ }
85
+
86
+ void ViewPagerComponentInstance::onPageSelected(double pageIndex)
87
+ {
88
+ this->m_pageIndex = pageIndex;
89
+ DLOG(INFO) << "ViewPagerComponentInstance::onPageSelected:" << pageIndex;
90
+ facebook::react::RNCViewPagerEventEmitter::OnPageSelected event = {pageIndex};
91
+ m_eventEmitter->onPageSelected(event);
92
+ }
93
+
94
+ void ViewPagerComponentInstance::onPageScroll(
95
+ facebook::react::RNCViewPagerEventEmitter::OnPageScroll pageScroll)
96
+ {
97
+ DLOG(INFO) << "ViewPagerComponentInstance::onPageScroll";
98
+ m_eventEmitter->onPageScroll(pageScroll);
99
+ }
100
+
101
+ void ViewPagerComponentInstance::onPageScrollStateChanged(
102
+ facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChanged value)
103
+ {
104
+ DLOG(INFO) << "ViewPagerComponentInstance::onPageScrollStateChanged";
105
+ m_eventEmitter->onPageScrollStateChanged(value);
106
+ }
107
+
108
+ void ViewPagerComponentInstance::handleCommand(std::string const &commandName,
109
+ folly::dynamic const &args)
110
+ {
111
+ DLOG(INFO) << "handleCommand-->commandName: " << commandName;
112
+ if (commandName == "setScrollEnabledImperatively" && args.isArray() && args.size() == 1) {
113
+ DLOG(INFO) << "handleCommand-->setScrollEnabledImperatively: " << args[0];
114
+ this->m_scrollEnabled = args[0].asBool();
115
+ this->getLocalRootArkUINode().setDisableSwipe(!args[0].asBool());
116
+ if (!args[0].asBool()) {
117
+ facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChanged event = {
118
+ facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChangedPageScrollState::IDLE};
119
+ m_eventEmitter->onPageScrollStateChanged(event);
120
+ }
121
+ } else if (commandName == "setPage" && args.isArray() && args.size() == 1) {
122
+ this->m_clickTap = true;
123
+ DLOG(INFO) << "handleCommand-->setPage: " << args[0];
124
+ this->getLocalRootArkUINode().setIndex(args[0].asInt());
125
+ } else if (commandName == "setPageWithoutAnimation" && args.isArray() && args.size() == 1) {
126
+ DLOG(INFO) << "handleCommand-->setPageWithoutAnimation: " << args[0];
127
+ this->m_clickTap = true;
128
+ this->getLocalRootArkUINode().setIndexNoAnimation(args[0].asInt());
129
+ }
130
+ }
131
+
132
+ bool ViewPagerComponentInstance::getScrollEnabled() { return this->m_scrollEnabled; }
133
+
134
+ bool ViewPagerComponentInstance::getNativeLock() { return this->m_nativeLock; }
135
+
136
+ std::vector<TouchTarget::Shared> ViewPagerComponentInstance::getTouchTargetChildren()
137
+ {
138
+ auto children = getChildren();
139
+ std::vector<TouchTarget::Shared> result;
140
+ result.push_back(children.at(m_pageIndex));
141
+ return result;
142
+ }
143
+
144
+ void ViewPagerComponentInstance::setKeyboardDismiss()
145
+ {
146
+ DLOG(INFO) << "ViewPagerComponentInstance::setKeyboardDismiss: " << this->m_keyboardDismissMode;
147
+ if (this->m_keyboardDismissMode != "on-drag") {
148
+ return;
149
+ }
150
+ auto rnInstancePtr = this->m_deps->rnInstance.lock();
151
+ if (rnInstancePtr != nullptr) {
152
+ auto turboModule = rnInstancePtr->getTurboModule("RNCViewPagerContext");
153
+ auto arkTsTurboModule = std::dynamic_pointer_cast<rnoh::ArkTSTurboModule>(turboModule);
154
+ arkTsTurboModule->callSync("keyboardDismiss", {});
155
+ }
156
+ }
157
+
158
+ void ViewPagerComponentInstance::onNativeResponderBlockChange(bool isBlocked)
159
+ {
160
+ DLOG(INFO) << "ViewPagerComponentInstance::setNativeResponderBlocked:" << isBlocked;
161
+ if (isBlocked) {
162
+ this->m_nativeLock = true;
163
+ this->getLocalRootArkUINode().setDisableSwipe(true);
164
+ facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChanged event = {
165
+ facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChangedPageScrollState::IDLE};
166
+ m_eventEmitter->onPageScrollStateChanged(event);
167
+ } else {
168
+ this->m_nativeLock = false;
169
+ if (!this->m_scrollEnabled) {
170
+ return;
171
+ }
172
+ this->getLocalRootArkUINode().setDisableSwipe(false);
173
+ }
174
+ }
175
+
176
+ void ViewPagerComponentInstance::setGestureStatus(bool gestureStatus)
177
+ {
178
+ this->m_gestureStatus = gestureStatus;
179
+ DLOG(INFO) << "ViewPagerComponentInstance::setGestureStatus:" << gestureStatus;
180
+ }
181
+
182
+ bool ViewPagerComponentInstance::isHandlingTouches() const
183
+ {
184
+ DLOG(INFO) << "ViewPagerComponentInstance::isHandlingTouches:" << this->m_gestureStatus;
185
+ return this->m_gestureStatus;
186
+ }
187
+
188
+ void ViewPagerComponentInstance::regsiterGestureEvent()
189
+ {
190
+ DLOG(INFO) << "ViewPagerComponentInstance::regsiterGestureEvent";
191
+ auto gestureApi = OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_GESTURE, "ArkUI_NativeGestureAPI_1");
192
+ auto swiperGestureApi = reinterpret_cast<ArkUI_NativeGestureAPI_1 *>(gestureApi);
193
+ auto swiperGestureRecognizer = swiperGestureApi->createPanGesture(1, GESTURE_DIRECTION_ALL, 50);
194
+ auto onPanActionCallBack = [](ArkUI_GestureEvent *event, void *extraParam) {
195
+ PanActionCallBack *panActionCallBack = (PanActionCallBack *)extraParam;
196
+ ArkUI_GestureEventActionType actionType = OH_ArkUI_GestureEvent_GetActionType(event);
197
+ if (actionType == GESTURE_EVENT_ACTION_END) {
198
+ DLOG(INFO) << "ViewPagerComponentInstance::regsiterGestureEvent GESTURE_EVENT_ACTION_END";
199
+ panActionCallBack->swiperNodeDelegate->setGestureStatus(false);
200
+ }
201
+ };
202
+ PanActionCallBack *panActionCallBack = new PanActionCallBack{
203
+ .swiperNodeDelegate = this,
204
+ };
205
+ swiperGestureApi->setGestureEventTarget(
206
+ swiperGestureRecognizer, GESTURE_EVENT_ACTION_ACCEPT | GESTURE_EVENT_ACTION_UPDATE | GESTURE_EVENT_ACTION_END,
207
+ panActionCallBack, onPanActionCallBack);
208
+ swiperGestureApi->addGestureToNode(this->getLocalRootArkUINode().getArkUINodeHandle(), swiperGestureRecognizer,
209
+ PARALLEL, NORMAL_GESTURE_MASK);
210
+ }
211
+
212
+ bool ViewPagerComponentInstance::getClickTap() { return this->m_clickTap; }
213
+
214
+ void ViewPagerComponentInstance::setClickTap(bool clickTap) { this->m_clickTap = clickTap; }
215
+
216
+ void ViewPagerComponentInstance::sendEventAnimationsPageScroll(
217
+ facebook::react::RNCViewPagerEventEmitter::OnPageScroll pageScroll)
218
+ {
219
+ auto nativeAnimatedTurboModule = m_swiperNativeAnimatedTurboModule.lock();
220
+ if (nativeAnimatedTurboModule == nullptr) {
221
+ auto instance = m_deps->rnInstance.lock();
222
+ if (instance == nullptr) {
223
+ return;
224
+ }
225
+ nativeAnimatedTurboModule = instance->getTurboModule<NativeAnimatedTurboModule>("NativeAnimatedTurboModule");
226
+ m_swiperNativeAnimatedTurboModule = nativeAnimatedTurboModule;
227
+ }
228
+ if (nativeAnimatedTurboModule != nullptr) {
229
+ using folly::dynamic;
230
+ dynamic payload = dynamic::object("position", pageScroll.position)("offset", pageScroll.offset);
231
+ nativeAnimatedTurboModule->handleComponentEvent(m_tag, "onPageScroll", payload);
232
+ DLOG(INFO) << "ViewPagerComponentInstance::sendEventAnimationsPageScroll position "
233
+ << pageScroll.position
234
+ << " offset " << pageScroll.offset;
235
+ }
236
+ }
237
+
238
+ void ViewPagerComponentInstance::onSwiperAppear()
239
+ {
240
+ DLOG(INFO) << "ViewPagerComponentInstance onSwiperAppear m_isInitialPage:"
241
+ << this->m_isInitialPage << " m_pageIndex:" << this->m_pageIndex;
242
+ if (this->m_isInitialPage) {
243
+ this->m_isInitialPage = false;
244
+ this->getLocalRootArkUINode().setIndexNoAnimation(this->m_pageIndex);
245
+ }
246
+ }
247
+ } // namespace rnoh
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MIT License
3
+ *
4
+ * Copyright (C) 2024 Huawei Device Co., Ltd.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+ #ifndef VIEWPAGERCOMPONENTINSTANCE_H
25
+ #define VIEWPAGERCOMPONENTINSTANCE_H
26
+ #pragma once
27
+ #include "SwiperNode.h"
28
+ #include <folly/dynamic.h>
29
+ #include "RNOHCorePackage/TurboModules/Animated/NativeAnimatedTurboModule.h"
30
+ #include "generated/RNOH/generated/components/BaseRNCViewPagerComponentInstance.h"
31
+
32
+ namespace rnoh {
33
+ class ViewPagerComponentInstance : public BaseRNCViewPagerComponentInstance, public SwiperNodeDelegate {
34
+
35
+ using super = BaseRNCViewPagerComponentInstance;
36
+
37
+ private:
38
+ SwiperNode m_swiperNode;
39
+
40
+ double m_pageIndex;
41
+
42
+ bool m_scrollEnabled = false;
43
+
44
+ bool m_nativeLock = false;
45
+
46
+ std::string m_keyboardDismissMode;
47
+
48
+ bool m_gestureStatus = false;
49
+
50
+ bool m_clickTap = false;
51
+
52
+ bool m_gestureSwipe = false;
53
+
54
+ bool m_isInitialPage = true;
55
+
56
+ struct PanActionCallBack {
57
+ SwiperNodeDelegate *swiperNodeDelegate;
58
+ };
59
+
60
+ std::weak_ptr<NativeAnimatedTurboModule> m_swiperNativeAnimatedTurboModule{};
61
+
62
+ public:
63
+ explicit ViewPagerComponentInstance(Context context);
64
+
65
+ void onChildInserted(ComponentInstance::Shared const &childComponentInstance, std::size_t index) override;
66
+
67
+ void onChildRemoved(ComponentInstance::Shared const &childComponentInstance) override;
68
+
69
+ SwiperNode &getLocalRootArkUINode() override;
70
+
71
+ void onPropsChanged(SharedConcreteProps const &props) override;
72
+
73
+ void onPageSelected(double pageIndex) override;
74
+
75
+ void onPageScroll(facebook::react::RNCViewPagerEventEmitter::OnPageScroll pageScroll) override;
76
+
77
+ void onPageScrollStateChanged(facebook::react::RNCViewPagerEventEmitter::OnPageScrollStateChanged value) override;
78
+
79
+ void handleCommand(std::string const &commandName, folly::dynamic const &args) override;
80
+
81
+ std::vector<TouchTarget::Shared> getTouchTargetChildren() override;
82
+
83
+ bool getScrollEnabled() override;
84
+
85
+ bool getNativeLock() override;
86
+
87
+ void setKeyboardDismiss() override;
88
+
89
+ void onNativeResponderBlockChange(bool isBlocked) override;
90
+
91
+ void setGestureStatus(bool gestureStatus) override;
92
+
93
+ bool isHandlingTouches() const override;
94
+
95
+ bool getClickTap() override;
96
+
97
+ void setClickTap(bool clickTap) override;
98
+
99
+ void regsiterGestureEvent();
100
+
101
+ void sendEventAnimationsPageScroll(facebook::react::RNCViewPagerEventEmitter::OnPageScroll pageScroll) override;
102
+
103
+ void onSwiperAppear() override;
104
+ };
105
+ } // namespace rnoh
106
+ #endif
@@ -0,0 +1,64 @@
1
+ /**
2
+ * MIT License
3
+ *
4
+ * Copyright (C) 2023 Huawei Device Co., Ltd.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+ #ifndef HARMONY_PAGERVIEW_SRC_MAIN_CPP_VIEWPAGERPACKAGE_H
25
+ #define HARMONY_PAGERVIEW_SRC_MAIN_CPP_VIEWPAGERPACKAGE_H
26
+ #include "ViewPagerComponentInstance.h"
27
+ #include "RNCViewPagerTurbomodule.h"
28
+ #include "generated/RNOH/generated/BaseReactNativePagerViewPackage.h"
29
+ using namespace rnoh;
30
+ using namespace facebook;
31
+ namespace rnoh {
32
+
33
+ class RNCViewPagerContextFactoryDelegate : public TurboModuleFactoryDelegate {
34
+ public:
35
+ SharedTurboModule createTurboModule(Context ctx, const std::string &name) const override
36
+ {
37
+ if (name == "RNCViewPagerContext") {
38
+ return std::make_shared<RNCViewPagerTurbomodule>(ctx, name);
39
+ }
40
+ return nullptr;
41
+ };
42
+ };
43
+
44
+ class ViewPagerPackage : public BaseReactNativePagerViewPackage {
45
+ using Super = BaseReactNativePagerViewPackage;
46
+
47
+ public:
48
+ ViewPagerPackage(Package::Context ctx) : Super(ctx) {}
49
+
50
+ ComponentInstance::Shared createComponentInstance(const ComponentInstance::Context &ctx)
51
+ {
52
+ if (ctx.componentName == "RNCViewPager") {
53
+ return std::make_shared<ViewPagerComponentInstance>(ctx);
54
+ }
55
+ return nullptr;
56
+ };
57
+
58
+ std::unique_ptr<TurboModuleFactoryDelegate> createTurboModuleFactoryDelegate() override
59
+ {
60
+ return std::make_unique<RNCViewPagerContextFactoryDelegate>();
61
+ }
62
+ };
63
+ } // namespace rnoh
64
+ #endif
@@ -0,0 +1,70 @@
1
+ /**
2
+ * This code was generated by "react-native codegen-lib-harmony"
3
+ */
4
+ #pragma once
5
+
6
+ #include <react/renderer/components/react_native_pager_view/ComponentDescriptors.h>
7
+ #include "RNOH/Package.h"
8
+ #include "RNOH/ArkTSTurboModule.h"
9
+ #include "RNOH/generated/components/RNCViewPagerJSIBinder.h"
10
+
11
+ namespace rnoh {
12
+
13
+ class BaseReactNativePagerViewPackageTurboModuleFactoryDelegate : public TurboModuleFactoryDelegate {
14
+ public:
15
+ SharedTurboModule createTurboModule(Context ctx, const std::string &name) const override
16
+ {
17
+ return nullptr;
18
+ };
19
+ };
20
+
21
+ class BaseReactNativePagerViewPackageEventEmitRequestHandler : public EventEmitRequestHandler {
22
+ public:
23
+ void handleEvent(Context const &ctx) override
24
+ {
25
+ auto eventEmitter = ctx.shadowViewRegistry->getEventEmitter<facebook::react::EventEmitter>(ctx.tag);
26
+ if (eventEmitter == nullptr) {
27
+ return;
28
+ }
29
+ std::vector<std::string> supportedEventNames = {
30
+ };
31
+ if (std::find(supportedEventNames.begin(),
32
+ supportedEventNames.end(), ctx.eventName) != supportedEventNames.end()) {
33
+ eventEmitter->dispatchEvent(ctx.eventName, ArkJS(ctx.env).getDynamic(ctx.payload));
34
+ }
35
+ }
36
+ };
37
+
38
+
39
+ class BaseReactNativePagerViewPackage : public Package {
40
+ public:
41
+ BaseReactNativePagerViewPackage(Package::Context ctx) : Package(ctx){};
42
+
43
+ std::unique_ptr<TurboModuleFactoryDelegate> createTurboModuleFactoryDelegate() override
44
+ {
45
+ return std::make_unique<BaseReactNativePagerViewPackageTurboModuleFactoryDelegate>();
46
+ }
47
+
48
+ std::vector<facebook::react::ComponentDescriptorProvider> createComponentDescriptorProviders() override
49
+ {
50
+ return {
51
+ facebook::react::concreteComponentDescriptorProvider<facebook::react::RNCViewPagerComponentDescriptor>(),
52
+ };
53
+ }
54
+
55
+ ComponentJSIBinderByString createComponentJSIBinderByName() override
56
+ {
57
+ return {
58
+ {"RNCViewPager", std::make_shared<RNCViewPagerJSIBinder>()},
59
+ };
60
+ };
61
+
62
+ EventEmitRequestHandlers createEventEmitRequestHandlers() override
63
+ {
64
+ return {
65
+ std::make_shared<BaseReactNativePagerViewPackageEventEmitRequestHandler>(),
66
+ };
67
+ }
68
+ };
69
+
70
+ } // namespace rnoh
@@ -0,0 +1,16 @@
1
+
2
+ /**
3
+ * This code was generated by "react-native codegen-lib-harmony"
4
+ */
5
+ #pragma once
6
+
7
+ #include "RNOH/CppComponentInstance.h"
8
+ #include <react/renderer/components/react_native_pager_view/ShadowNodes.h>
9
+
10
+ namespace rnoh {
11
+ class BaseRNCViewPagerComponentInstance
12
+ : public CppComponentInstance<facebook::react::RNCViewPagerShadowNode> {
13
+ public:
14
+ using CppComponentInstance::CppComponentInstance;
15
+ };
16
+ } // namespace rnoh
@@ -0,0 +1,41 @@
1
+ /**
2
+ * This code was generated by "react-native codegen-lib-harmony"
3
+ */
4
+
5
+ #pragma once
6
+ #include "RNOHCorePackage/ComponentBinders/ViewComponentJSIBinder.h"
7
+
8
+ namespace rnoh {
9
+ class RNCViewPagerJSIBinder : public ViewComponentJSIBinder {
10
+ protected:
11
+ facebook::jsi::Object createNativeProps(facebook::jsi::Runtime &rt) override
12
+ {
13
+ auto object = ViewComponentJSIBinder::createNativeProps(rt);
14
+ object.setProperty(rt, "scrollEnabled", true);
15
+ object.setProperty(rt, "layoutDirection", true);
16
+ object.setProperty(rt, "initialPage", true);
17
+ object.setProperty(rt, "orientation", true);
18
+ object.setProperty(rt, "offscreenPageLimit", true);
19
+ object.setProperty(rt, "pageMargin", true);
20
+ object.setProperty(rt, "overScrollMode", true);
21
+ object.setProperty(rt, "overdrag", true);
22
+ object.setProperty(rt, "keyboardDismissMode", true);
23
+ return object;
24
+ }
25
+
26
+ facebook::jsi::Object createBubblingEventTypes(facebook::jsi::Runtime &rt) override
27
+ {
28
+ facebook::jsi::Object events(rt);
29
+ return events;
30
+ }
31
+
32
+ facebook::jsi::Object createDirectEventTypes(facebook::jsi::Runtime &rt) override
33
+ {
34
+ facebook::jsi::Object events(rt);
35
+ events.setProperty(rt, "topPageScroll", createDirectEvent(rt, "onPageScroll"));
36
+ events.setProperty(rt, "topPageSelected", createDirectEvent(rt, "onPageSelected"));
37
+ events.setProperty(rt, "topPageScrollStateChanged", createDirectEvent(rt, "onPageScrollStateChanged"));
38
+ return events;
39
+ }
40
+ };
41
+ } // namespace rnoh
@@ -0,0 +1,22 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateComponentDescriptorH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include <react/renderer/components/react_native_pager_view/ShadowNodes.h>
14
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
15
+
16
+ namespace facebook {
17
+ namespace react {
18
+
19
+ using RNCViewPagerComponentDescriptor = ConcreteComponentDescriptor<RNCViewPagerShadowNode>;
20
+
21
+ } // namespace react
22
+ } // namespace facebook
@@ -0,0 +1,43 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateEventEmitterCpp.js
9
+ */
10
+
11
+ #include <react/renderer/components/react_native_pager_view/EventEmitters.h>
12
+
13
+
14
+ namespace facebook {
15
+ namespace react {
16
+
17
+ void RNCViewPagerEventEmitter::onPageScroll(OnPageScroll $event) const
18
+ {
19
+ dispatchEvent("pageScroll", [$event = std::move($event)](jsi::Runtime &runtime) {
20
+ auto $payload = jsi::Object(runtime);
21
+ $payload.setProperty(runtime, "position", $event.position);
22
+ $payload.setProperty(runtime, "offset", $event.offset);
23
+ return $payload;
24
+ });
25
+ }
26
+ void RNCViewPagerEventEmitter::onPageSelected(OnPageSelected $event) const
27
+ {
28
+ dispatchEvent("pageSelected", [$event = std::move($event)](jsi::Runtime &runtime) {
29
+ auto $payload = jsi::Object(runtime);
30
+ $payload.setProperty(runtime, "position", $event.position);
31
+ return $payload;
32
+ });
33
+ }
34
+ void RNCViewPagerEventEmitter::onPageScrollStateChanged(OnPageScrollStateChanged $event) const
35
+ {
36
+ dispatchEvent("pageScrollStateChanged", [$event = std::move($event)](jsi::Runtime &runtime) {
37
+ auto $payload = jsi::Object(runtime);
38
+ $payload.setProperty(runtime, "pageScrollState", toString($event.pageScrollState));
39
+ return $payload;
40
+ });
41
+ }
42
+ } // namespace react
43
+ } // namespace facebook
@@ -0,0 +1,47 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateEventEmitterH.js
9
+ */
10
+ #pragma once
11
+
12
+ #include <react/renderer/components/view/ViewEventEmitter.h>
13
+
14
+ namespace facebook {
15
+ namespace react {
16
+ class RNCViewPagerEventEmitter : public ViewEventEmitter {
17
+ public:
18
+ using ViewEventEmitter::ViewEventEmitter;
19
+ struct OnPageScroll {
20
+ double position;
21
+ double offset;
22
+ };
23
+ struct OnPageSelected {
24
+ double position;
25
+ };
26
+ enum class OnPageScrollStateChangedPageScrollState {
27
+ IDLE,
28
+ DRAGGING,
29
+ SETTLING
30
+ };
31
+ static char const *toString(const OnPageScrollStateChangedPageScrollState value)
32
+ {
33
+ switch (value) {
34
+ case OnPageScrollStateChangedPageScrollState::IDLE: return "idle";
35
+ case OnPageScrollStateChangedPageScrollState::DRAGGING: return "dragging";
36
+ case OnPageScrollStateChangedPageScrollState::SETTLING: return "settling";
37
+ }
38
+ }
39
+ struct OnPageScrollStateChanged {
40
+ OnPageScrollStateChangedPageScrollState pageScrollState;
41
+ };
42
+ void onPageScroll(OnPageScroll value) const;
43
+ void onPageSelected(OnPageSelected value) const;
44
+ void onPageScrollStateChanged(OnPageScrollStateChanged value) const;
45
+ };
46
+ } // namespace react
47
+ } // namespace facebook