From 195b9aaebc735980ba85b256054bbbe62643c3aa Mon Sep 17 00:00:00 2001 From: Maarten Date: Thu, 8 Aug 2024 15:15:31 +0200 Subject: [PATCH] Implement one signal and save token of user --- app/(onboarding)/start.tsx | 4 ++++ app/(tabs)/index.tsx | 33 +++++++++++++++++++++++++++++++++ app/(tabs)/settings.tsx | 15 ++++++++------- package.json | 1 + yarn.lock | 9 ++++++++- 5 files changed, 54 insertions(+), 8 deletions(-) diff --git a/app/(onboarding)/start.tsx b/app/(onboarding)/start.tsx index 81b0c05..65db161 100644 --- a/app/(onboarding)/start.tsx +++ b/app/(onboarding)/start.tsx @@ -11,6 +11,8 @@ import { Colors } from '@/lib/constants/Colors'; import { useColorScheme } from '@/lib/hooks/useColorScheme'; import { Message } from '@/lib/services/message'; import { Request } from '@/lib/services/request'; +import { store } from '@/lib/store/store'; +import { setSession, setReloadCalendar } from '@/lib/store/dataStore'; export default function OnboardStartScreen() { const colorScheme = useColorScheme() ?? 'light'; @@ -45,6 +47,8 @@ export default function OnboardStartScreen() { setToken( token ); router.replace( "/(tabs)" ); + store.dispatch(setSession(response.session)); + Message.success( response.message ); } } ); diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx index 4888843..588321d 100644 --- a/app/(tabs)/index.tsx +++ b/app/(tabs)/index.tsx @@ -5,6 +5,7 @@ import CalendarPicker from 'react-native-calendar-picker'; import Ionicons from '@expo/vector-icons/Ionicons'; import { useIsFocused } from '@react-navigation/core'; import { useSelector } from 'react-redux'; +import { LogLevel, OneSignal } from 'react-native-onesignal'; import { ThemedText } from '@/lib/components/ThemedText'; import { ThemedView } from '@/lib/components/ThemedView'; @@ -13,6 +14,7 @@ import { useColorScheme } from '@/lib/hooks/useColorScheme'; import { useToken } from '@/lib/context/AppProvider'; import { Request } from '@/lib/services/request'; import List from '@/lib/components/List'; +import { Message } from '@/lib/services/message'; export default function HomeScreen() { const colorScheme = useColorScheme() ?? 'light'; @@ -23,6 +25,37 @@ export default function HomeScreen() { const [ name, setName ] = useState( ' ' ); // Default empty space to prevent layout shifting const [ dates, setDates ] = useState( [] ); const [ types, setTypes ] = useState( [] ); + const [ onesignalLoaded, setOnesignalLoaded ] = useState( false ); + + const loadOneSignal = () => { + // Remove this method to stop OneSignal Debugging + OneSignal.Debug.setLogLevel(LogLevel.Verbose); + + // OneSignal Initialization + OneSignal.initialize("6ef15aa7-9dc0-4d8b-b6b1-e2005bcd3dc6"); + + // Request permission + OneSignal.Notifications.requestPermission(true) + + // Retrieve one signal user token + OneSignal.User.pushSubscription.getIdAsync().then((notificationsToken) => { + if (notificationsToken) { + Request.post( 'sessions/update', { token: token, notifications_token: notificationsToken } ).then( (response) => { + if (!response.success) { + Message.error( 'Notificaties zijn uitgeschakeld door een onbekende error' ); + } + } ); + } + }) + + // Disable loading again + setOnesignalLoaded(true); + } + + // Load OneSignal + useEffect( () => { + loadOneSignal(); + }, [onesignalLoaded] ); // Load session useEffect( () => { diff --git a/app/(tabs)/settings.tsx b/app/(tabs)/settings.tsx index 3ab360b..e4318c1 100644 --- a/app/(tabs)/settings.tsx +++ b/app/(tabs)/settings.tsx @@ -24,8 +24,8 @@ import { setSession, setReloadCalendar } from '@/lib/store/dataStore'; export default function SettingsScreen() { const colorScheme = useColorScheme() ?? 'light'; - const { token, isLoading } = useToken(); - const session = useSelector((state: any) => state.data.session); + const { token, isLoading, setToken } = useToken(); + const session = useSelector( (state: any) => state.data.session ); const router = useRouter(); // Name @@ -41,7 +41,7 @@ export default function SettingsScreen() { useEffect( () => { setSessionData( session ); - }, [session] ); + }, [ session ] ); // Set session data in view const setSessionData = (session: any) => { @@ -81,8 +81,8 @@ export default function SettingsScreen() { setSessionData( response.session ); // Save to store - store.dispatch(setSession(response.session)) - store.dispatch(setReloadCalendar(addressChanged)) + store.dispatch( setSession( response.session ) ) + store.dispatch( setReloadCalendar( addressChanged ) ) Message.success( 'Opgeslagen!' ) } else { @@ -102,9 +102,10 @@ export default function SettingsScreen() { text: 'Ja', onPress: () => { Request.post( 'sessions/delete' ).then( (response) => { - console.log( 'sessions delete', response ); if (!response.success) { - Message.success( 'Je bent uitgelogd' ) + Message.success( 'Je bent uitgelogd' ); + + setToken( null ); router.replace( '/(onboarding)/start' ); } else { diff --git a/package.json b/package.json index c1dbf4e..a2338f6 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "react-native-gesture-handler": "~2.16.1", "react-native-leaflet-view": "^0.1.2", "react-native-modal": "^13.0.1", + "react-native-onesignal": "^5.2.2", "react-native-reanimated": "~3.10.1", "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "4.10.5", diff --git a/yarn.lock b/yarn.lock index 08df0a1..3697c71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5070,7 +5070,7 @@ internal-slot@^1.0.4, internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -invariant@2.2.4, invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -7433,6 +7433,13 @@ react-native-modal@^13.0.1: prop-types "^15.6.2" react-native-animatable "1.3.3" +react-native-onesignal@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/react-native-onesignal/-/react-native-onesignal-5.2.2.tgz#7959c0315329d6f608f59886e656c6284388fb9c" + integrity sha512-QrQOyRT8v9eXvf2jJNdbEsPG7QYgakyscr7nidKM4tW5IsiN7oEaSyCB26L9wc8sQtzW5n9Yz9VZcqh5zBO1yA== + dependencies: + invariant "^2.2.2" + react-native-reanimated@~3.10.1: version "3.10.1" resolved "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.10.1.tgz"