Skip to content

chore(pos-app): upgrade to Expo SDK 56#543

Merged
ignaciosantise merged 3 commits into
mainfrom
chore/update-expo-pos-app
Jun 23, 2026
Merged

chore(pos-app): upgrade to Expo SDK 56#543
ignaciosantise merged 3 commits into
mainfrom
chore/update-expo-pos-app

Conversation

@ignaciosantise

Copy link
Copy Markdown
Collaborator

Summary

Upgrades pos-app from Expo SDK 55 → 56 (React Native 0.83.2 → 0.85.3, React 19.2.0 → 19.2.3), aligning all Expo-managed deps via expo install --fix (expo-doctor passes 21/21). It also fixes the SDK 56 breaking changes, the new eslint-config-expo@56 react-hooks lint errors, and a dark-mode white flash during iOS native-stack transitions.

Changes

  • SDK 56 breaking changes: react-navigation theming imports moved to expo-router (no longer bundled); requireNativeModule imported from expo in the HCE module (expo-modules-core no longer hoisted); Jest preset switched to @react-native/jest-preset + its moved mock path; react-test-renderer bumped to match React.
  • Lint: resolved new react-hooks errors (refs, set-state-in-effect, incompatible-library) in amount, pin-modal, framed-modal, and the modal portal context (ref→state) — all 225 tests still pass.
  • Dark-mode fix: gave the root view and navigation theme a bg-primary background so iOS transitions no longer flash the white window underneath.
flowchart LR
    A[Expo SDK 55<br/>RN 0.83] --> B[expo install --fix]
    B --> C[Expo SDK 56<br/>RN 0.85 / React 19.2.3]
    C --> D[Fix breaking changes<br/>router / HCE / jest]
    C --> E[Fix eslint-config-expo@56<br/>react-hooks errors]
    C --> F[Fix iOS dark-mode<br/>transition flash]
    D --> G[expo-doctor 21/21 ✓<br/>225 tests ✓ · lint ✓]
    E --> G
    F --> G
Loading

🤖 Generated with Claude Code

Upgrade pos-app from Expo SDK 55 to SDK 56 (React Native 0.83 -> 0.85,
React 19.2.0 -> 19.2.3) and align all Expo-managed dependencies via
`expo install --fix`. expo-doctor passes 21/21.

Fix SDK 56 breaking changes: migrate react-navigation theming imports to
expo-router (no longer bundled), import requireNativeModule from `expo` in
the HCE module (expo-modules-core no longer hoisted), switch the Jest preset
to @react-native/jest-preset and its moved mock path, and bump
react-test-renderer to match React.

Resolve new eslint-config-expo@56 react-hooks errors (refs/set-state-in-effect/
incompatible-library) in amount, pin-modal, framed-modal and the modal portal
context. Fix a dark-mode white flash during iOS native-stack transitions by
giving the root view and navigation theme a bg-primary background.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 18, 2026 20:43
@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
deposit-app-demo Error Error Jun 19, 2026 1:24pm
pos-demo Ready Ready Preview, Comment Jun 19, 2026 1:24pm

Request Review

@claude

claude Bot commented Jun 18, 2026

Copy link
Copy Markdown

Claude finished @ignaciosantise's task in 2m 37s —— View job


PR Review: chore(pos-app): upgrade to Expo SDK 56

  • Gather context
  • Read changed files
  • License compliance check
  • Breaking changes check
  • Compile findings

✅ No issues found

The upgrade is well-executed. All SDK 56 breaking changes are correctly handled:

  • DarkTheme/DefaultTheme/ThemeProvider moved from @react-navigation/nativeexpo-router
  • requireNativeModule moved from expo-modules-coreexpo, with EventSubscription defined locally to satisfy expo-doctor
  • Jest preset switched from "react-native""@react-native/jest-preset" and mock path updated accordingly ✓
  • watch("amount")useWatch({ control, name: "amount" }) in amount.tsx correctly fixes the incompatible-library hooks lint error ✓
  • modal-portal-context.tsx refactor (ref → state) and corresponding framed-modal.web.tsx/desktop-frame-wrapper.web.tsx updates are internally consistent; no external consumers ✓
  • PIN clear logic moved from useEffect to the render-time derived-state pattern in pin-modal.tsx follows React's recommended pattern correctly ✓
  • Dark-mode flash fix (overriding background/card on the navigation theme + backgroundColor on the root view + loading state) is correct ✓
  • expo-status-bar plugin added to app.json plugins array — additive, correct for SDK 56 ✓
  • No new dependencies with problematic licenses (@react-native/jest-preset is MIT) ✓
  • No public API breaking changes (the containerRefcontainer rename in ModalPortalProvider is an internal refactor with all consumers updated atomically in this PR) ✓

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades dapps/pos-app to Expo SDK 56 / React Native 0.85.3, including required breaking-change updates (router/navigation, native module loading, Jest preset/mocks) and UI theming tweaks to avoid iOS dark-mode transition flashes.

Changes:

  • Bump Expo/React Native/React (and aligned Expo-managed packages) to SDK 56.
  • Update native module loading (requireNativeModule) and Jest preset/mock wiring for SDK 56.
  • Fix several lint-driven React hook/state patterns and adjust navigation/root backgrounds for iOS transitions.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
dapps/pos-app/package.json Updates Expo/RN/React versions, tooling deps, and renames formatting scripts.
dapps/pos-app/modules/hce/index.ts Switches requireNativeModule import to expo and removes direct expo-modules-core dependency.
dapps/pos-app/jest.setup.js Updates RN mock to use @react-native/jest-preset’s moved mock path.
dapps/pos-app/jest.config.js Switches Jest preset to @react-native/jest-preset.
dapps/pos-app/components/pin-modal.tsx Adjusts state-reset behavior tied to modal visibility/error to satisfy new lint rules.
dapps/pos-app/components/modal-portal-context.tsx Refactors portal context from ref-based to element-based container passing.
dapps/pos-app/components/framed-modal.web.tsx Updates portal container usage and render/mount logic around open/close animations.
dapps/pos-app/components/desktop-frame-wrapper.web.tsx Uses callback ref to store the modal portal container element in state.
dapps/pos-app/app/amount.tsx Replaces watch() with useWatch() for hook/lint compatibility.
dapps/pos-app/app/_layout.tsx Moves nav theming imports to expo-router and sets background colors to avoid iOS transition flashes.
dapps/pos-app/app.json Adds expo-status-bar to the plugins list.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread dapps/pos-app/package.json Outdated
Comment thread dapps/pos-app/package.json Outdated
Comment thread dapps/pos-app/package.json Outdated
Comment thread dapps/pos-app/app.json
Address PR review: the repo pins dependencies exactly (no ^/~), but
`expo install --fix` introduced range specifiers. Strip ranges from all
bumped Expo-managed packages, gesture-handler, safe-area-context,
eslint-config-expo and typescript, pinning to the installed versions, and
reconcile the lockfile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ignaciosantise ignaciosantise merged commit 47fa022 into main Jun 23, 2026
9 of 11 checks passed
@ignaciosantise ignaciosantise deleted the chore/update-expo-pos-app branch June 23, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants