diff --git a/.maestro/README.md b/.maestro/README.md index 33abb1e4..8660c71d 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -19,6 +19,12 @@ bun run maestro:test:android Use `bun run maestro:smoke` to run only the smoke flow. `maestro:debug` writes failure artifacts to `.maestro/debug-output`. -The smoke flow targets the example app ID `com.pagerviewexample` and verifies the Basic Example pager using stable `testID` selectors. -Additional Basic Example regression flows live in `.maestro/basic_example`. -Nested PagerView regression flows live in `.maestro/nested_pager_view_example`. +The smoke flow targets the example app ID `com.pagerviewexample` and verifies the horizontal pager using stable `testID` selectors. + +Basic PagerView regression coverage is split into three deterministic flows: + +- `tests/pager_basic_example.yaml` verifies horizontal paging in LTR. +- `tests/pager_vertical_basic_example.yaml` verifies vertical paging in LTR. +- `tests/pager_rtl_example.yaml` switches to RTL before verifying the reversed horizontal gesture. + +Shared setup and assertions live in `flows/basic-pager`. Each flow resets the app to the required layout direction, so a failed RTL run cannot affect the next test. diff --git a/.maestro/flows/basic-pager/ensure-ltr.yaml b/.maestro/flows/basic-pager/ensure-ltr.yaml new file mode 100644 index 00000000..a60a4670 --- /dev/null +++ b/.maestro/flows/basic-pager/ensure-ltr.yaml @@ -0,0 +1,22 @@ +appId: com.pagerviewexample +--- +- launchApp: + stopApp: true + +- extendedWaitUntil: + visible: + text: 'PagerView Example' + timeout: 15000 + +- runFlow: + when: + visible: + id: 'layout-direction-rtl' + commands: + - tapOn: + id: 'layout-direction-rtl' + +- extendedWaitUntil: + visible: + id: 'layout-direction-ltr' + timeout: 15000 diff --git a/.maestro/flows/basic-pager/ensure-rtl.yaml b/.maestro/flows/basic-pager/ensure-rtl.yaml new file mode 100644 index 00000000..7b02ea68 --- /dev/null +++ b/.maestro/flows/basic-pager/ensure-rtl.yaml @@ -0,0 +1,22 @@ +appId: com.pagerviewexample +--- +- launchApp: + stopApp: true + +- extendedWaitUntil: + visible: + text: 'PagerView Example' + timeout: 15000 + +- runFlow: + when: + visible: + id: 'layout-direction-ltr' + commands: + - tapOn: + id: 'layout-direction-ltr' + +- extendedWaitUntil: + visible: + id: 'layout-direction-rtl' + timeout: 15000 diff --git a/.maestro/flows/basic-pager/open.yaml b/.maestro/flows/basic-pager/open.yaml new file mode 100644 index 00000000..da9d4350 --- /dev/null +++ b/.maestro/flows/basic-pager/open.yaml @@ -0,0 +1,12 @@ +appId: com.pagerviewexample +--- +- tapOn: + id: ${EXAMPLE_ID} + +- extendedWaitUntil: + visible: + id: ${PAGER_ID} + timeout: 10000 + +- assertVisible: + id: 'pageNumber0' diff --git a/.maestro/flows/basic-pager/verify-controls.yaml b/.maestro/flows/basic-pager/verify-controls.yaml new file mode 100644 index 00000000..1fcad56e --- /dev/null +++ b/.maestro/flows/basic-pager/verify-controls.yaml @@ -0,0 +1,52 @@ +appId: com.pagerviewexample +--- +- tapOn: + id: 'next-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber2' + timeout: 5000 + +- tapOn: + id: 'prev-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber1' + timeout: 5000 + +- tapOn: + id: 'start-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber0' + timeout: 5000 + +- tapOn: + id: 'last-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber9' + timeout: 5000 + +- tapOn: + id: 'remove-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber8' + timeout: 5000 + +- tapOn: + id: 'add-page-button' + +- tapOn: + id: 'next-page-button' + +- extendedWaitUntil: + visible: + id: 'pageNumber9' + timeout: 5000 diff --git a/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml b/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml new file mode 100644 index 00000000..22fc19da --- /dev/null +++ b/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml @@ -0,0 +1,29 @@ +appId: com.pagerviewexample +--- +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-horizontal' + start: 90%, 50% + end: 10%, 50% + duration: 100 + +- assertVisible: + id: 'pageNumber0' + +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-horizontal' + start: 90%, 50% + end: 10%, 50% + duration: 100 + +- extendedWaitUntil: + visible: + id: 'pageNumber1' + timeout: 5000 diff --git a/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml b/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml new file mode 100644 index 00000000..fd8aa15d --- /dev/null +++ b/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml @@ -0,0 +1,29 @@ +appId: com.pagerviewexample +--- +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-horizontal' + start: 10%, 50% + end: 90%, 50% + duration: 100 + +- assertVisible: + id: 'pageNumber0' + +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-horizontal' + start: 10%, 50% + end: 90%, 50% + duration: 100 + +- extendedWaitUntil: + visible: + id: 'pageNumber1' + timeout: 5000 diff --git a/.maestro/flows/basic-pager/verify-vertical-swipe.yaml b/.maestro/flows/basic-pager/verify-vertical-swipe.yaml new file mode 100644 index 00000000..a160d576 --- /dev/null +++ b/.maestro/flows/basic-pager/verify-vertical-swipe.yaml @@ -0,0 +1,27 @@ +appId: com.pagerviewexample +--- +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-vertical' + direction: UP + duration: 100 + +- assertVisible: + id: 'pageNumber0' + +- tapOn: + id: 'scroll-enabled-button' + +- swipe: + from: + id: 'pager-view-vertical' + direction: UP + duration: 100 + +- extendedWaitUntil: + visible: + id: 'pageNumber1' + timeout: 5000 diff --git a/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml b/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml new file mode 100644 index 00000000..9deeae23 --- /dev/null +++ b/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml @@ -0,0 +1,20 @@ +appId: ${APP_ID} +--- +- launchApp + +# The issue examples are below the fundamental examples on the home screen. +- scrollUntilVisible: + element: + id: 'Issue #1098 Nested Pager Repro' + direction: DOWN + +- tapOn: + id: 'Issue #1098 Nested Pager Repro' + +- extendedWaitUntil: + visible: + id: 'issue-1098-outer-pager' + timeout: 10000 + +- assertVisible: + id: 'issue-1098-refresh-outer-pages' diff --git a/.maestro/setup/pager_basic_example_setup.yaml b/.maestro/setup/pager_basic_example_setup.yaml deleted file mode 100644 index 1389cdce..00000000 --- a/.maestro/setup/pager_basic_example_setup.yaml +++ /dev/null @@ -1,7 +0,0 @@ -appId: ${APP_ID} -# Nest PagerView Example tab is active and accessible ---- -- launchApp -- assertVisible: 'PagerView Example' -- tapOn: 'Basic Example' -- assertVisible: '7 likes' diff --git a/.maestro/setup/pager_vertical_basic_example_setup.yaml b/.maestro/setup/pager_vertical_basic_example_setup.yaml deleted file mode 100644 index 2d6ad62e..00000000 --- a/.maestro/setup/pager_vertical_basic_example_setup.yaml +++ /dev/null @@ -1,7 +0,0 @@ -appId: ${APP_ID} -# Vertical Basic Example tab is active and accessible ---- -- launchApp -- assertVisible: 'PagerView Example' -- tapOn: 'Vertical Basic Example' -- assertVisible: '7 likes' diff --git a/.maestro/smoke-test.yaml b/.maestro/smoke-test.yaml index 3a162642..62cb0f67 100644 --- a/.maestro/smoke-test.yaml +++ b/.maestro/smoke-test.yaml @@ -10,15 +10,15 @@ tags: - extendedWaitUntil: visible: - id: 'Basic Example' + id: 'example-basic-horizontal' timeout: 15000 - tapOn: - id: 'Basic Example' + id: 'example-basic-horizontal' - extendedWaitUntil: visible: - id: 'pager-view' + id: 'pager-view-horizontal' timeout: 10000 - assertVisible: diff --git a/.maestro/tests/issue_1098_nested_pager_repro.yaml b/.maestro/tests/issue_1098_nested_pager_repro.yaml new file mode 100644 index 00000000..52966488 --- /dev/null +++ b/.maestro/tests/issue_1098_nested_pager_repro.yaml @@ -0,0 +1,47 @@ +appId: com.pagerviewexample +tags: + - ios + - regression +--- +- runFlow: ../setup/issue_1098_nested_pager_repro_setup.yaml + +# Changing the outer page count remounts its SwiftUI page controllers while the +# nested pager remains mounted. The app must remain responsive after each change. +- tapOn: + id: 'issue-1098-refresh-outer-pages' + +- extendedWaitUntil: + visible: 'Refreshes: 1' + timeout: 5000 + +- swipe: + from: + id: 'issue-1098-outer-pager' + # Percentages are screen-relative in Maestro. 40% is the outer page title, + # above the nested pager, so this gesture reaches the outer pager. + start: 90%, 40% + end: 10%, 40% + duration: 500 + +- extendedWaitUntil: + visible: 'Outer page 2' + timeout: 5000 + +- swipe: + from: + id: 'issue-1098-outer-pager' + start: 10%, 40% + end: 90%, 40% + duration: 500 + +- extendedWaitUntil: + visible: + id: 'issue-1098-inner-pager' + timeout: 5000 + +- tapOn: + id: 'issue-1098-refresh-outer-pages' + +- extendedWaitUntil: + visible: 'Refreshes: 2' + timeout: 5000 diff --git a/.maestro/tests/pager_basic_example.yaml b/.maestro/tests/pager_basic_example.yaml index 16b4faa0..d6bdc1c9 100644 --- a/.maestro/tests/pager_basic_example.yaml +++ b/.maestro/tests/pager_basic_example.yaml @@ -1,47 +1,12 @@ appId: com.pagerviewexample --- -- runFlow: ../setup/pager_basic_example_setup.yaml -- tapOn: 'Scroll Enabled' -- swipe: - from: - id: 'pager-view' - start: 90%, 50% - end: 10%, 50% - duration: 100 -- assertVisible: - text: 'page number 0' -- tapOn: 'Scroll Disabled' -- swipe: - from: - id: 'pager-view' - start: 90%, 50% - end: 10%, 50% - duration: 100 -- assertVisible: - text: 'page number 1' -- tapOn: - id: 'next-page-button' -- assertVisible: - text: 'page number 2' -- tapOn: - id: 'prev-page-button' -- assertVisible: - text: 'page number 1' -- tapOn: - id: 'start-page-button' -- assertVisible: - text: 'page number 0' -- tapOn: - id: 'last-page-button' -- assertVisible: - text: 'page number 9' -- tapOn: - id: 'remove-page-button' -- assertVisible: - text: 'page number 8' -- tapOn: - id: 'add-page-button' -- tapOn: - id: 'next-page-button' -- assertVisible: - text: 'page number 9' +- runFlow: ../flows/basic-pager/ensure-ltr.yaml + +- runFlow: + file: ../flows/basic-pager/open.yaml + env: + EXAMPLE_ID: 'example-basic-horizontal' + PAGER_ID: 'pager-view-horizontal' + +- runFlow: ../flows/basic-pager/verify-horizontal-ltr-swipe.yaml +- runFlow: ../flows/basic-pager/verify-controls.yaml diff --git a/.maestro/tests/pager_rtl_example.yaml b/.maestro/tests/pager_rtl_example.yaml new file mode 100644 index 00000000..7448acd1 --- /dev/null +++ b/.maestro/tests/pager_rtl_example.yaml @@ -0,0 +1,12 @@ +appId: com.pagerviewexample +--- +- runFlow: ../flows/basic-pager/ensure-rtl.yaml + +- runFlow: + file: ../flows/basic-pager/open.yaml + env: + EXAMPLE_ID: 'example-basic-horizontal' + PAGER_ID: 'pager-view-horizontal' + +- runFlow: ../flows/basic-pager/verify-horizontal-rtl-swipe.yaml +- runFlow: ../flows/basic-pager/verify-controls.yaml diff --git a/.maestro/tests/pager_vertical_basic_example.yaml b/.maestro/tests/pager_vertical_basic_example.yaml index b8907646..2e02b221 100644 --- a/.maestro/tests/pager_vertical_basic_example.yaml +++ b/.maestro/tests/pager_vertical_basic_example.yaml @@ -1,45 +1,12 @@ appId: com.pagerviewexample --- -- runFlow: ../setup/pager_vertical_basic_example_setup.yaml -- tapOn: 'Scroll Enabled' -- swipe: - from: - id: 'pager-view' - direction: UP - duration: 100 -- assertVisible: - text: 'page number 0' -- tapOn: 'Scroll Disabled' -- swipe: - from: - id: 'pager-view' - direction: UP - duration: 100 -- assertVisible: - text: 'page number 1' -- tapOn: - id: 'next-page-button' -- assertVisible: - text: 'page number 2' -- tapOn: - id: 'prev-page-button' -- assertVisible: - text: 'page number 1' -- tapOn: - id: 'start-page-button' -- assertVisible: - text: 'page number 0' -- tapOn: - id: 'last-page-button' -- assertVisible: - text: 'page number 9' -- tapOn: - id: 'remove-page-button' -- assertVisible: - text: 'page number 8' -- tapOn: - id: 'add-page-button' -- tapOn: - id: 'next-page-button' -- assertVisible: - text: 'page number 9' +- runFlow: ../flows/basic-pager/ensure-ltr.yaml + +- runFlow: + file: ../flows/basic-pager/open.yaml + env: + EXAMPLE_ID: 'example-basic-vertical' + PAGER_ID: 'pager-view-vertical' + +- runFlow: ../flows/basic-pager/verify-vertical-swipe.yaml +- runFlow: ../flows/basic-pager/verify-controls.yaml diff --git a/.maestro/tests/rtl/pager_basic_example_rtl.yaml b/.maestro/tests/rtl/pager_basic_example_rtl.yaml deleted file mode 100644 index 933adb73..00000000 --- a/.maestro/tests/rtl/pager_basic_example_rtl.yaml +++ /dev/null @@ -1,115 +0,0 @@ -appId: com.pagerviewexample ---- -- launchApp - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- runFlow: - when: - visible: 'LTR' - commands: - - tapOn: 'LTR' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- extendedWaitUntil: - visible: - text: 'RTL' - timeout: 15000 - -- tapOn: 'Basic Example' - -- extendedWaitUntil: - visible: - id: 'pager-view' - timeout: 10000 - -- assertVisible: '7 likes' - -- tapOn: 'Scroll Enabled' - -- swipe: - from: - id: 'pager-view' - start: 10%, 50% - end: 90%, 50% - duration: 100 - -- assertVisible: - text: 'page number 0' - -- tapOn: 'Scroll Disabled' - -- swipe: - from: - id: 'pager-view' - start: 10%, 50% - end: 90%, 50% - duration: 100 - -- assertVisible: - text: 'page number 1' - -- tapOn: - id: 'next-page-button' - -- assertVisible: - text: 'page number 2' - -- tapOn: - id: 'prev-page-button' - -- assertVisible: - text: 'page number 1' - -- tapOn: - id: 'start-page-button' - -- assertVisible: - text: 'page number 0' - -- tapOn: - id: 'last-page-button' - -- assertVisible: - text: 'page number 9' - -- tapOn: - id: 'remove-page-button' - -- assertVisible: - text: 'page number 8' - -- tapOn: - id: 'add-page-button' - -- tapOn: - id: 'next-page-button' - -- assertVisible: - text: 'page number 9' - -- tapOn: 'Navigate up' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 10000 - -- tapOn: 'RTL' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- extendedWaitUntil: - visible: - text: 'LTR' - timeout: 15000 diff --git a/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml b/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml deleted file mode 100644 index d75a47ee..00000000 --- a/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml +++ /dev/null @@ -1,113 +0,0 @@ -appId: com.pagerviewexample ---- -- launchApp - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- runFlow: - when: - visible: 'LTR' - commands: - - tapOn: 'LTR' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- extendedWaitUntil: - visible: - text: 'RTL' - timeout: 15000 - -- tapOn: 'Vertical Basic Example' - -- extendedWaitUntil: - visible: - id: 'pager-view' - timeout: 10000 - -- assertVisible: '7 likes' - -- tapOn: 'Scroll Enabled' - -- swipe: - from: - id: 'pager-view' - direction: UP - duration: 100 - -- assertVisible: - text: 'page number 0' - -- tapOn: 'Scroll Disabled' - -- swipe: - from: - id: 'pager-view' - direction: UP - duration: 100 - -- assertVisible: - text: 'page number 1' - -- tapOn: - id: 'next-page-button' - -- assertVisible: - text: 'page number 2' - -- tapOn: - id: 'prev-page-button' - -- assertVisible: - text: 'page number 1' - -- tapOn: - id: 'start-page-button' - -- assertVisible: - text: 'page number 0' - -- tapOn: - id: 'last-page-button' - -- assertVisible: - text: 'page number 9' - -- tapOn: - id: 'remove-page-button' - -- assertVisible: - text: 'page number 8' - -- tapOn: - id: 'add-page-button' - -- tapOn: - id: 'next-page-button' - -- assertVisible: - text: 'page number 9' - -- tapOn: 'Navigate up' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 10000 - -- tapOn: 'RTL' - -- extendedWaitUntil: - visible: - text: 'PagerView Example' - timeout: 15000 - -- extendedWaitUntil: - visible: - text: 'LTR' - timeout: 15000 diff --git a/example/bun.lock b/example/bun.lock index 88ee5bef..e5340e1c 100644 --- a/example/bun.lock +++ b/example/bun.lock @@ -10,6 +10,7 @@ "@react-navigation/native": "^7.3.7", "@react-navigation/native-stack": "^7.17.9", "@react-navigation/stack": "^7.10.10", + "@rnx-kit/react-native-host": "0.5.21", "babel-plugin-module-resolver": "^5.0.3", "react": "19.2.3", "react-native": "0.85.3", @@ -482,7 +483,7 @@ "@rnx-kit/metro-config": ["@rnx-kit/metro-config@2.2.4", "", { "dependencies": { "@rnx-kit/tools-node": "^3.0.0", "@rnx-kit/tools-react-native": "^2.3.1", "@rnx-kit/tools-workspaces": "^0.2.0" }, "peerDependencies": { "@react-native/metro-config": "*", "react": "*", "react-native": "*" }, "optionalPeers": ["@react-native/metro-config"] }, "sha512-OPdGePL/RuzhbyM8hzUR3qcp1PVNju8G5D9f2evYfiowjorYRAP2lIey/zmbGDNezZSTbAzvHxN3BeEYWR4wKQ=="], - "@rnx-kit/react-native-host": ["@rnx-kit/react-native-host@0.5.20", "", { "peerDependencies": { "react-native": ">=0.66" } }, "sha512-QOi/D+QuTT6ZCq3DVHiFXqna3uDWZIlpNgdBYT2D2eRspAVOssgkRAOxHMk0JvKUFa8iAh00y7y2sjEAELja/Q=="], + "@rnx-kit/react-native-host": ["@rnx-kit/react-native-host@0.5.21", "", { "peerDependencies": { "react-native": ">=0.66" } }, "sha512-iXB8o7j/ervwYQk7tPANpq7/3t6zmji1vt699MRpZR31d/aMfjXTyTogUXBaJxMQtqGlrE8HwGlkJn3F0j3MOw=="], "@rnx-kit/tools-filesystem": ["@rnx-kit/tools-filesystem@0.2.0", "", { "peerDependencies": { "memfs": ">=4.0.0" }, "optionalPeers": ["memfs"] }, "sha512-r5YTy8yy8DWMGdM8yNFlFdX8gE71CHJ2KtpsdSAQN4mol9FFMoAYMwIHrz1i5TyUbtdLd7N/lwWCAK0ZxJYqyQ=="], diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 3be8049b..ca19358f 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1402,7 +1402,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-pager-view (8.0.3): + - react-native-pager-view (9.0.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1879,7 +1879,7 @@ PODS: - React-utils (= 0.85.3) - ReactNativeDependencies - ReactNativeDependencies (0.85.3) - - ReactNativeHost (0.5.19): + - ReactNativeHost (0.5.21): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1903,7 +1903,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ReactTestApp-DevSupport (5.4.1): + - ReactTestApp-DevSupport (5.4.4): - React-Core - React-jsi - ReactTestApp-Resources (1.0.0-dev) @@ -2496,7 +2496,7 @@ SPEC CHECKSUMS: React-Mapbuffer: 1aa9126122d4247ffc24bf9d28d50ce923499a71 React-microtasksnativemodule: d86581169e9bb5bb6f5fc3c5052f890016c1bf21 React-mutationobservernativemodule: 9a0c4e866f1ef2a57acebc902ebacbdf469ae741 - react-native-pager-view: cf6b0a0ef69c1aca3eeec7c172daf427da4920d9 + react-native-pager-view: 91a6d37f552b9c47445cc94792ad75cfa08487b2 react-native-safe-area-context: c1eb308f4b36372a4de4b3bdaa8ed695ec3dd461 React-NativeModulesApple: cc6ec4767844d610e92cc358bd3ea34937438d56 React-networking: a8ce15641ed7775d5b54a9d0d32defc367c2216e @@ -2532,8 +2532,8 @@ SPEC CHECKSUMS: ReactCodegen: 9af5798e943781fd2318dab7b60f25337388047c ReactCommon: 3ec2a55999d296af90c24beb66c8a77dc660d3ef ReactNativeDependencies: 15cf32e2807e82c7dca7ef543c5a095da41dc9e2 - ReactNativeHost: 4581e6dbba05390331bdf0958c660aad11a62f2a - ReactTestApp-DevSupport: a139ca54333640557f2686c1ef85c625aa0677a2 + ReactNativeHost: 035cd87713a3b8ce508f37d721fc4433011cc200 + ReactTestApp-DevSupport: 754876d5c25e6dd12e321a87d54bf618c71cbbd1 ReactTestApp-Resources: 1bd9ff10e4c24f2ad87101a32023721ae923bccf RNGestureHandler: 5cbe8c5f54204b2175c5d2b8fe6538b02da3aaf5 RNReanimated: 516d842d105966ae05a6a1ad7ad2a0dc1e968d6b diff --git a/example/package.json b/example/package.json index 41d35e74..5afe7406 100644 --- a/example/package.json +++ b/example/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "start": "react-native start", - "pods": "pod install --project-directory=ios", + "pods": "bundle install && cd ios && bundle exec pod install && cd ..", "test": "jest", "lint": "eslint .", "mkdist": "node -e \"require('node:fs').mkdirSync('dist', { recursive: true, mode: 0o755 })\"", @@ -21,6 +21,7 @@ "@react-navigation/native": "^7.3.7", "@react-navigation/native-stack": "^7.17.9", "@react-navigation/stack": "^7.10.10", + "@rnx-kit/react-native-host": "0.5.21", "babel-plugin-module-resolver": "^5.0.3", "react": "19.2.3", "react-native": "0.85.3", diff --git a/example/src/App.tsx b/example/src/App.tsx index 5883964c..87920525 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -34,6 +34,8 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { PagerHookExample } from './PagerHookExample'; import { NestedHorizontalScrollViewExample } from './NestedHorizontalScrollViewExample'; +import { Issue1098NestedPagerRepro } from './Issue1098NestedPagerRepro'; +import { Issue1099SafeAreaRepro } from './Issue1099SafeAreaRepro'; function BasicPagerViewExampleScreen() { return ; @@ -43,14 +45,22 @@ function VerticalBasicPagerViewExampleScreen() { return ; } -const examples = [ +type Example = { + component: React.ComponentType; + name: string; + testID?: string; +}; + +const examples: Example[] = [ { component: BasicPagerViewExampleScreen, name: 'Basic Example', + testID: 'example-basic-horizontal', }, { component: VerticalBasicPagerViewExampleScreen, name: 'Vertical Basic Example', + testID: 'example-basic-vertical', }, { component: OnPageScrollExample, name: 'OnPageScroll Example' }, @@ -73,21 +83,20 @@ const examples = [ component: ScrollViewInsideExample, name: 'ScrollView inside PagerView Example', }, - { component: TabViewInsideScrollViewExample, name: 'TabView inside ScrollView Example', }, ]; -const tabViewExamples = [ +const tabViewExamples: Example[] = [ { component: MaterialTopBarExample, name: 'MaterialTopBarExample' }, { component: TabBarIconExample, name: 'TabBarIconExample' }, { component: CustomTabBarExample, name: 'CustomTabBarExample' }, { component: CoverflowExample, name: 'CoverflowExample' }, ]; -const additionalExamples = [ +const additionalExamples: Example[] = [ { component: PagerHookExample, name: 'Pager Hook Example' }, { component: KeyboardExample, name: 'Keyboard Example' }, { component: HeadphonesCarouselExample, name: 'Headphones Carousel Example' }, @@ -98,7 +107,23 @@ const additionalExamples = [ }, ]; -const allExamples = [...examples, ...tabViewExamples, ...additionalExamples]; +const ghIssues: Example[] = [ + { + component: Issue1098NestedPagerRepro, + name: 'Issue #1098 Nested Pager Repro', + }, + { + component: Issue1099SafeAreaRepro, + name: 'Issue #1099 Safe Area Repro', + }, +]; + +const allExamples = [ + ...examples, + ...tabViewExamples, + ...additionalExamples, + ...ghIssues, +]; function App() { const navigation = useNavigation(); @@ -108,7 +133,7 @@ function App() { {examples.map((example) => ( { //@ts-ignore @@ -146,6 +171,20 @@ function App() { {example.name} ))} + Github Issues Examples + {ghIssues.map((example) => ( + { + //@ts-ignore + navigation.navigate(example.name); + }} + > + {example.name} + + ))} ); } @@ -192,6 +231,9 @@ export function Navigation() {