From 1be54d5ce8370bbe3e96df6e015089fd53301e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:22:42 +0200 Subject: [PATCH 1/2] feat: remove legacy architecture support --- .../java/com/reactnativepagerview/Helper.kt | 21 - .../PagerViewViewManager.kt | 0 .../PagerViewViewManager.kt | 172 ------- example/ios/Podfile.lock | 4 +- example/src/App.tsx | 3 - ios/Fabric/RNCPagerViewComponentView.h | 28 - ...IPageViewControllerNavigationOrientation.h | 11 - ...IPageViewControllerNavigationOrientation.m | 11 - ios/RCTOnPageScrollStateChanged.h | 14 - ios/RCTOnPageScrollStateChanged.m | 59 --- ios/RCTOnPageSelected.h | 14 - ios/RCTOnPageSelected.m | 60 --- ios/RNCPagerView.h | 36 -- ios/RNCPagerView.m | 481 ------------------ ios/RNCPagerViewComponentView.h | 11 + ios/{Fabric => }/RNCPagerViewComponentView.mm | 29 +- ios/RNCPagerViewManager.h | 13 - ios/RNCPagerViewManager.m | 92 ---- ios/RNCPagerViewShadowView.h | 5 - ios/RNCPagerViewShadowView.m | 24 - ios/UIView+isHorizontalRtlLayout.h | 14 - ios/UIView+isHorizontalRtlLayout.m | 14 - ios/UIViewController+CreateExtension.h | 11 - ios/UIViewController+CreateExtension.m | 12 - react-native-pager-view.podspec | 25 +- 25 files changed, 34 insertions(+), 1130 deletions(-) delete mode 100644 android/src/main/java/com/reactnativepagerview/Helper.kt rename android/src/{fabric => main}/java/com/reactnativepagerview/PagerViewViewManager.kt (100%) delete mode 100644 android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt delete mode 100644 ios/Fabric/RNCPagerViewComponentView.h delete mode 100644 ios/RCTConvert+UIPageViewControllerNavigationOrientation.h delete mode 100644 ios/RCTConvert+UIPageViewControllerNavigationOrientation.m delete mode 100644 ios/RCTOnPageScrollStateChanged.h delete mode 100644 ios/RCTOnPageScrollStateChanged.m delete mode 100644 ios/RCTOnPageSelected.h delete mode 100644 ios/RCTOnPageSelected.m delete mode 100644 ios/RNCPagerView.h delete mode 100644 ios/RNCPagerView.m create mode 100644 ios/RNCPagerViewComponentView.h rename ios/{Fabric => }/RNCPagerViewComponentView.mm (95%) delete mode 100644 ios/RNCPagerViewManager.h delete mode 100644 ios/RNCPagerViewManager.m delete mode 100644 ios/RNCPagerViewShadowView.h delete mode 100644 ios/RNCPagerViewShadowView.m delete mode 100644 ios/UIView+isHorizontalRtlLayout.h delete mode 100644 ios/UIView+isHorizontalRtlLayout.m delete mode 100644 ios/UIViewController+CreateExtension.h delete mode 100644 ios/UIViewController+CreateExtension.m diff --git a/android/src/main/java/com/reactnativepagerview/Helper.kt b/android/src/main/java/com/reactnativepagerview/Helper.kt deleted file mode 100644 index 9c6bd8c1..00000000 --- a/android/src/main/java/com/reactnativepagerview/Helper.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.reactnativepagerview - -import android.content.Context -import android.content.ContextWrapper -import android.view.View -import com.facebook.react.bridge.ReactContext - - -class Helper { - companion object { - // https://github.com/facebook/react-native/blob/v0.64.2/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java#L138 - fun getReactContext(view: View): ReactContext? { - var context: Context = view.getContext() - if (context !is ReactContext && context is ContextWrapper) { - context = context.baseContext - } - return if (context is ReactContext) context else null; - } - } - -} \ No newline at end of file diff --git a/android/src/fabric/java/com/reactnativepagerview/PagerViewViewManager.kt b/android/src/main/java/com/reactnativepagerview/PagerViewViewManager.kt similarity index 100% rename from android/src/fabric/java/com/reactnativepagerview/PagerViewViewManager.kt rename to android/src/main/java/com/reactnativepagerview/PagerViewViewManager.kt diff --git a/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt b/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt deleted file mode 100644 index 66ad7b60..00000000 --- a/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt +++ /dev/null @@ -1,172 +0,0 @@ -package com.reactnativepagerview - -import android.view.View -import android.view.ViewGroup -import androidx.viewpager2.widget.ViewPager2 -import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback -import com.facebook.infer.annotation.Assertions -import com.facebook.react.bridge.ReadableArray -import com.facebook.react.common.MapBuilder -import com.facebook.react.uimanager.PixelUtil -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.UIManagerModule -import com.facebook.react.uimanager.ViewGroupManager -import com.facebook.react.uimanager.annotations.ReactProp -import com.facebook.react.uimanager.events.EventDispatcher -import com.reactnativepagerview.event.PageScrollEvent -import com.reactnativepagerview.event.PageScrollStateChangedEvent -import com.reactnativepagerview.event.PageSelectedEvent - - -class PagerViewViewManager : ViewGroupManager() { - private lateinit var eventDispatcher: EventDispatcher - - override fun getName(): String { - return PagerViewViewManagerImpl.NAME - } - - override fun createViewInstance(reactContext: ThemedReactContext): NestedScrollableHost { - val host = NestedScrollableHost(reactContext) - host.id = View.generateViewId() - host.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - host.isSaveEnabled = false - val vp = ViewPager2(reactContext) - vp.adapter = ViewPagerAdapter() - //https://github.com/callstack/react-native-viewpager/issues/183 - vp.isSaveEnabled = false - eventDispatcher = reactContext.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher - - vp.post { - vp.registerOnPageChangeCallback(object : OnPageChangeCallback() { - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - super.onPageScrolled(position, positionOffset, positionOffsetPixels) - eventDispatcher.dispatchEvent( - PageScrollEvent(host.id, position, positionOffset)) - } - - override fun onPageSelected(position: Int) { - super.onPageSelected(position) - eventDispatcher.dispatchEvent( - PageSelectedEvent(host.id, position)) - } - - override fun onPageScrollStateChanged(state: Int) { - super.onPageScrollStateChanged(state) - val pageScrollState: String = when (state) { - ViewPager2.SCROLL_STATE_IDLE -> "idle" - ViewPager2.SCROLL_STATE_DRAGGING -> "dragging" - ViewPager2.SCROLL_STATE_SETTLING -> "settling" - else -> throw IllegalStateException("Unsupported pageScrollState") - } - eventDispatcher.dispatchEvent( - PageScrollStateChangedEvent(host.id, pageScrollState)) - } - }) - - eventDispatcher.dispatchEvent(PageSelectedEvent(host.id, vp.currentItem)) - } - host.addView(vp) - return host - } - - override fun addView(host: NestedScrollableHost, child: View, index: Int) { - PagerViewViewManagerImpl.addView(host, child, index) - } - - override fun getChildCount(parent: NestedScrollableHost) = PagerViewViewManagerImpl.getChildCount(parent) - - override fun getChildAt(parent: NestedScrollableHost, index: Int): View { - return PagerViewViewManagerImpl.getChildAt(parent, index) - } - - override fun removeView(parent: NestedScrollableHost, view: View) { - PagerViewViewManagerImpl.removeView(parent, view) - } - - override fun removeAllViews(parent: NestedScrollableHost) { - PagerViewViewManagerImpl.removeAllViews(parent) - } - - override fun removeViewAt(parent: NestedScrollableHost, index: Int) { - PagerViewViewManagerImpl.removeViewAt(parent, index) - } - - override fun needsCustomLayoutForChildren(): Boolean { - return PagerViewViewManagerImpl.needsCustomLayoutForChildren() - } - - @ReactProp(name = "scrollEnabled", defaultBoolean = true) - fun setScrollEnabled(host: NestedScrollableHost, value: Boolean) { - PagerViewViewManagerImpl.setScrollEnabled(host, value) - } - - @ReactProp(name = "initialPage", defaultInt = 0) - fun setInitialPage(host: NestedScrollableHost, value: Int) { - PagerViewViewManagerImpl.setInitialPage(host, value) - } - - @ReactProp(name = "orientation") - fun setOrientation(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setOrientation(host, value) - } - - @ReactProp(name = "offscreenPageLimit", defaultInt = ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT) - operator fun set(host: NestedScrollableHost, value: Int) { - PagerViewViewManagerImpl.setOffscreenPageLimit(host, value) - } - - @ReactProp(name = "overScrollMode") - fun setOverScrollMode(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setOverScrollMode(host, value) - } - - @ReactProp(name = "layoutDirection") - fun setLayoutDirection(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setLayoutDirection(host, value) - } - - override fun getExportedCustomDirectEventTypeConstants(): MutableMap> { - return MapBuilder.of( - PageScrollEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageScroll"), - PageScrollStateChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageScrollStateChanged"), - PageSelectedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageSelected")) - } - - override fun receiveCommand(root: NestedScrollableHost, commandId: String, args: ReadableArray?) { - super.receiveCommand(root, commandId, args) - val view = PagerViewViewManagerImpl.getViewPager(root) - Assertions.assertNotNull(view) - Assertions.assertNotNull(args) - val childCount = view.adapter?.itemCount - - when (commandId) { - COMMAND_SET_PAGE, COMMAND_SET_PAGE_WITHOUT_ANIMATION -> { - val pageIndex = args!!.getInt(0) - val canScroll = childCount != null && childCount > 0 && pageIndex >= 0 && pageIndex < childCount - if (canScroll) { - val scrollWithAnimation = commandId == COMMAND_SET_PAGE - PagerViewViewManagerImpl.setCurrentItem(view, pageIndex, scrollWithAnimation) - } - } - COMMAND_SET_SCROLL_ENABLED -> { - view.isUserInputEnabled = args!!.getBoolean(0) - } - else -> throw IllegalArgumentException(String.format( - "Unsupported command %d received by %s.", - commandId, - javaClass.simpleName)) - } - } - - @ReactProp(name = "pageMargin", defaultInt = 0) - fun setPageMargin(host: NestedScrollableHost, margin: Int) { - PagerViewViewManagerImpl.setPageMargin(host, margin) - } - - companion object { - private const val COMMAND_SET_PAGE = "setPage" - private const val COMMAND_SET_PAGE_WITHOUT_ANIMATION = "setPageWithoutAnimation" - private const val COMMAND_SET_SCROLL_ENABLED = "setScrollEnabledImperatively" - } -} - diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0a2cb8f7..27891d05 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1332,7 +1332,7 @@ PODS: - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - react-native-pager-view (6.7.1): + - react-native-pager-view (6.8.1): - DoubleConversion - glog - hermes-engine @@ -2321,7 +2321,7 @@ SPEC CHECKSUMS: React-logger: 8edfcedc100544791cd82692ca5a574240a16219 React-Mapbuffer: c3f4b608e4a59dd2f6a416ef4d47a14400194468 React-microtasksnativemodule: 054f34e9b82f02bd40f09cebd4083828b5b2beb6 - react-native-pager-view: f238ed7fb53458bd03366944a33686f067c83e9a + react-native-pager-view: 919534782a0489f7e2aeeb9a8b8959edfd3f067a react-native-safe-area-context: 562163222d999b79a51577eda2ea8ad2c32b4d06 React-NativeModulesApple: 2c4377e139522c3d73f5df582e4f051a838ff25e React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c diff --git a/example/src/App.tsx b/example/src/App.tsx index a755a9da..eb33e443 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -107,9 +107,6 @@ export function Navigation() { name="PagerView Example" component={App} options={{ - title: global?.nativeFabricUIManager - ? 'PagerView Example (Fabric)' - : 'PagerView Example', headerRight: () => (