From 64e12acfc01e45ed94f0a5a001c7195c3c987c6e Mon Sep 17 00:00:00 2001 From: Wiktor Smaga Date: Mon, 4 May 2026 12:24:24 +0200 Subject: [PATCH 01/20] [iOS][calendar][next] Add `presentPicker()` (#44965) # Why This is the first PR from the stack aiming to improve the limited-permissions flow in calendar@next. This PR adds the `presentPicker()` function, which allows selecting a calendar without requiring full access permissions. # How Implements the `presentPicker` function on iOS using `EKCalendarChooser` # Test Plan Tested on BareExpo - added a button to NCL https://github.com/user-attachments/assets/60966fee-047d-487c-b8b6-e535ec2712c9 --- .../src/screens/CalendarsNextScreen.tsx | 17 +++++++++-- packages/expo-calendar/CHANGELOG.md | 1 + .../expo-calendar/build/next/Calendar.d.ts | 6 ++++ .../build/next/Calendar.d.ts.map | 2 +- packages/expo-calendar/build/next/Calendar.js | 15 ++++++++++ .../expo-calendar/build/next/Calendar.js.map | 2 +- .../build/next/ExpoCalendar.d.ts | 1 + .../build/next/ExpoCalendar.d.ts.map | 2 +- .../build/next/ExpoCalendar.js.map | 2 +- .../build/next/ExpoCalendar.web.d.ts | 1 + .../build/next/ExpoCalendar.web.d.ts.map | 2 +- .../build/next/ExpoCalendar.web.js | 3 ++ .../build/next/ExpoCalendar.web.js.map | 2 +- .../build/next/ExpoGoCalendarNextStub.d.ts | 1 + .../next/ExpoGoCalendarNextStub.d.ts.map | 2 +- .../build/next/ExpoGoCalendarNextStub.js | 3 ++ .../build/next/ExpoGoCalendarNextStub.js.map | 2 +- .../ios/Next/CalendarNextExceptions.swift | 7 +++++ .../ios/Next/CalendarNextModule.swift | 28 +++++++++++++++++-- .../ios/Next/CalendarPickerDelegate.swift | 26 +++++++++++++++++ packages/expo-calendar/src/next/Calendar.ts | 16 +++++++++++ .../expo-calendar/src/next/ExpoCalendar.ts | 1 + .../src/next/ExpoCalendar.web.ts | 4 +++ .../src/next/ExpoGoCalendarNextStub.ts | 4 +++ 24 files changed, 138 insertions(+), 12 deletions(-) create mode 100644 packages/expo-calendar/ios/Next/CalendarNextExceptions.swift create mode 100644 packages/expo-calendar/ios/Next/CalendarPickerDelegate.swift diff --git a/apps/native-component-list/src/screens/CalendarsNextScreen.tsx b/apps/native-component-list/src/screens/CalendarsNextScreen.tsx index 479127a8c1db27..0f6fc48e1a8437 100644 --- a/apps/native-component-list/src/screens/CalendarsNextScreen.tsx +++ b/apps/native-component-list/src/screens/CalendarsNextScreen.tsx @@ -1,6 +1,6 @@ import type { StackNavigationProp } from '@react-navigation/stack'; import * as Calendar from 'expo-calendar'; -import { createCalendar, ExpoCalendar, getCalendars } from 'expo-calendar/next'; +import { createCalendar, ExpoCalendar, getCalendars, presentPicker } from 'expo-calendar/next'; import { useState } from 'react'; import { Alert, Platform, ScrollView, StyleSheet, View } from 'react-native'; @@ -163,7 +163,17 @@ export default function CalendarsNextScreen({ navigation }: { navigation: StackN if (calendars.length) { return ( -