Adding Calendar Feature in React Native Expo SDK
Do you know how to add the Calendar Feature in React Native Expo Calendar SDK ? it took me a few days to find out. but Finally, I did it.
In this blog post, I will explain How I added the calendar feature to my react native application.
React Native Expo SDK has just released a new update with the addition of a calendar feature. The calendar is a native UI that comes with its own set of unique properties and functionalities. React Native Expo SDK’s goal is to make an app feel truly native by providing a whole suite of components that are beautiful, customizable, and easy to use.
So first we have to install the expo calendar package.
npx expo install expo-calendar
Step 2 is to write our code into your component.
import React, { useEffect } from 'react'; import { View, StyleSheet, Image, Text, TouchableWithoutFeedback } from 'react-native'; import * as Calendar from 'expo-calendar'; function App() { useEffect(() => { (async () => { const { status } = await Calendar.requestCalendarPermissionsAsync(); if (status === 'granted') { // const calendars = await Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT); console.log('calender access granted'); // console.log({ calendars }); } })(); }, []); return ( <TouchableWithoutFeedback onPress={() => createCalendar()}> <Text> Add To Calendar </Text> </TouchableWithoutFeedback> ); } async function getDefaultCalendarSource() { const defaultCalendar = await Calendar.getDefaultCalendarAsync(); return defaultCalendar.source; } async function createCalendar(playdate,teamname,location) { console.log(playdate); const defaultCalendarSource = Platform.OS === 'ios' ? await getDefaultCalendarSource() : { isLocalAccount: true, name: 'CalendarName' }; const newCalendarID = await Calendar.createCalendarAsync({ title: 'CalendarName', color: 'red', timeZone: "GMT+1", status:Calendar.EventStatus.CONFIRMED, entityType: Calendar.EntityTypes.EVENT, sourceId: defaultCalendarSource.id, source: defaultCalendarSource, name: 'internalCalendarName', ownerAccount: 'personal', accessLevel: Calendar.CalendarAccessLevel.OWNER, }); console.log(`Your new calendar ID is: ${newCalendarID}`); alert(`Event saved in your Calendar.`); }
Now the calendar Created, Now we have to push events to the calendar .
To push events to the calendar we have to write another function.
Use the generated calendar IDÂ for this getcalid variable
const newevent = await Calendar.createEventAsync(getcalid,{ title: 'Event Name', startDate: new Date('2022-09-17T15:00:00.000Z'), endDate: new Date ('2022-09-17T15:00:00.000Z'), timeZone: "GMT+1", location: 'India', alarms: [ {relativeOffset: -15}], status:Calendar.EventStatus.CONFIRMED, accessLevel: Calendar.CalendarAccessLevel.OWNER, });
Here is the complete code
import React, { useEffect } from 'react'; import { View, StyleSheet, Image, Text, TouchableWithoutFeedback } from 'react-native'; import * as Calendar from 'expo-calendar'; function App() { useEffect(() => { (async () => { const { status } = await Calendar.requestCalendarPermissionsAsync(); if (status === 'granted') { // const calendars = await Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT); console.log('calender access granted'); // console.log({ calendars }); } })(); }, []); return ( <TouchableWithoutFeedback onPress={() => createCalendar()}> <Text> Add To Calendar </Text> </TouchableWithoutFeedback> ); } async function getDefaultCalendarSource() { const defaultCalendar = await Calendar.getDefaultCalendarAsync(); return defaultCalendar.source; } async function createCalendar(playdate,teamname,location) { console.log(playdate); const defaultCalendarSource = Platform.OS === 'ios' ? await getDefaultCalendarSource() : { isLocalAccount: true, name: 'CalendarName' }; const newCalendarID = await Calendar.createCalendarAsync({ title: 'CalendarName', color: 'red', timeZone: "GMT+1", status:Calendar.EventStatus.CONFIRMED, entityType: Calendar.EntityTypes.EVENT, sourceId: defaultCalendarSource.id, source: defaultCalendarSource, name: 'internalCalendarName', ownerAccount: 'personal', accessLevel: Calendar.CalendarAccessLevel.OWNER, }); console.log(`Your new calendar ID is: ${newCalendarID}`); alert(`Event saved in your Calendar.`); // creating event with calendar ID let getcalid = newCalendarID; const newevent = await Calendar.createEventAsync(getcalid,{ title: 'Event Name', startDate: new Date('2022-09-17T15:00:00.000Z'), endDate: new Date ('2022-09-17T15:00:00.000Z'), timeZone: "GMT+1", location: 'India', alarms: [ {relativeOffset: -15}], status:Calendar.EventStatus.CONFIRMED, accessLevel: Calendar.CalendarAccessLevel.OWNER, }); }
Adding permission to access calander
Go to your App.json File.
Android
Add “READ_CALENDAR”,”WRITE_CALENDAR” Permissions
"android": { "adaptiveIcon": { "foregroundImage": "./app/assets/adaptive-icon.png", "backgroundColor": "#FFFFFF" }, "package": "com.appsite.appname", "versionCode":56, "googleServicesFile": "./google-services.json", "permissions": ["READ_CALENDAR","WRITE_CALENDAR"] },
IOSÂ
inside infoPlist we have to add the permission “NSRemindersUsageDescription”
"ios": { "supportsTablet": true, "bundleIdentifier": "com.appsite.newapp", "buildNumber": "1.1.0", "infoPlist": { "NSRemindersUsageDescription": "This app uses the calender to save events." } },
Like this.
I tried Expo Publish (over the air) update. and it worked on ios but in android, i have to build a release and released an update.
Hope this helps
Share with your friends:
Adding Calendar Feature in React Native Expo SDK
Do you know how to add the Calendar Feature in React Native Expo Calendar SDK ? it took me a […]
September 16, 2022
Digital Marketing Toolkit
Get Free Access to Digital Marketing Toolkit. You can use all our tools without any limits
Get Free Access Now