Skip to content

Commit

Permalink
chore: Create Push Notifications sandbox
Browse files Browse the repository at this point in the history
  • Loading branch information
TheNerdGuyLulu committed Apr 12, 2024
1 parent b7ca211 commit 8e2fc1a
Show file tree
Hide file tree
Showing 66 changed files with 10,876 additions and 0 deletions.
2 changes: 2 additions & 0 deletions sandboxes/NotificationsSandbox/.bundle/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
BUNDLE_PATH: "vendor/bundle"
BUNDLE_FORCE_RUBY_PLATFORM: 1
4 changes: 4 additions & 0 deletions sandboxes/NotificationsSandbox/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: '@react-native',
};
66 changes: 66 additions & 0 deletions sandboxes/NotificationsSandbox/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# OSX
#
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
ios/.xcode.env.local

# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
.cxx/
*.keystore
!debug.keystore

# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/

**/fastlane/report.xml
**/fastlane/Preview.html
**/fastlane/screenshots
**/fastlane/test_output

# Bundle artifact
*.jsbundle

# Ruby / CocoaPods
/ios/Pods/
/vendor/bundle/

# Temporary files created by Metro to check the health of the file watcher
.metro-health-check*

# testing
/coverage
7 changes: 7 additions & 0 deletions sandboxes/NotificationsSandbox/.prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: false,
singleQuote: true,
trailingComma: 'all',
};
1 change: 1 addition & 0 deletions sandboxes/NotificationsSandbox/.watchmanconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
39 changes: 39 additions & 0 deletions sandboxes/NotificationsSandbox/App.styles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import {StyleSheet} from 'react-native';

export const styles = StyleSheet.create({
safeArea: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
title: {
position: 'absolute',
top: '25%',
fontWeight: 'bold',
fontSize: 20,
},
wrapper: {
width: '50%',
},
input: {
borderWidth: 1,
borderColor: 'rgba(0,0,80,0.2)',
backgroundColor: '#f3f8ff',
paddingVertical: 10,
fontSize: 18,
marginBottom: 10,
},
button: {
backgroundColor: '#7284c5',
paddingVertical: 13,
alignItems: 'center',
},
buttonText: {
color: '#fff',
},
divider: {
marginVertical: 18,
borderWidth: 0.5,
borderColor: '#5757ca',
},
});
80 changes: 80 additions & 0 deletions sandboxes/NotificationsSandbox/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import React, {useEffect} from 'react';
import {
AppState,
SafeAreaView,
Text,
TextInput,
TouchableOpacity,
View,
} from 'react-native';
import Intercom, {Visibility} from '@intercom/intercom-react-native';
import {requestNotifications} from 'react-native-permissions';
import {useIntercom} from './useIntercom.tsx';
import {styles} from './App.styles.ts';

function App(): React.JSX.Element {
useEffect(() => {
const subscription = AppState.addEventListener(
'change',
nextAppState => nextAppState === 'active' && Intercom.handlePushMessage(),
);
return subscription.remove;
}, []);

useEffect(() => {
(async () => {
// Request permissions
await requestNotifications([
'alert',
'sound',
'criticalAlert',
'badge',
'provisional',
'carPlay',
'providesAppSettings',
]);

await Intercom.setLauncherVisibility(Visibility.VISIBLE);
})();
}, []);

const {
handleLoginIdentifiedUser,
handleLoginUnidentifiedUser,
handleLogout,
setUserIdentifier,
isLoggedIn,
} = useIntercom();

return (
<SafeAreaView style={styles.safeArea}>
<Text style={styles.title}>Push Notifications Sandbox</Text>
<View style={styles.wrapper}>
{!isLoggedIn ? (
<>
<TextInput style={styles.input} onChangeText={setUserIdentifier} />
<TouchableOpacity
style={styles.button}
onPress={handleLoginIdentifiedUser}>
<Text style={styles.buttonText}>Login Identified User</Text>
</TouchableOpacity>

<View style={styles.divider} />

<TouchableOpacity
style={styles.button}
onPress={handleLoginUnidentifiedUser}>
<Text style={styles.buttonText}>Login Unidentified User</Text>
</TouchableOpacity>
</>
) : (
<TouchableOpacity style={styles.button} onPress={handleLogout}>
<Text style={styles.buttonText}>Logout</Text>
</TouchableOpacity>
)}
</View>
</SafeAreaView>
);
}

export default App;
3 changes: 3 additions & 0 deletions sandboxes/NotificationsSandbox/App.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import {MMKVLoader} from 'react-native-mmkv-storage';

export const storage = new MMKVLoader().initialize();
9 changes: 9 additions & 0 deletions sandboxes/NotificationsSandbox/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
source 'https://rubygems.org'

# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby ">= 2.6.10"

# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
# bound in the template on Cocoapods with next React Native release.
gem 'cocoapods', '>= 1.13', '< 1.15'
gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
105 changes: 105 additions & 0 deletions sandboxes/NotificationsSandbox/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.7)
base64
nkf
rexml
activesupport (6.1.7.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
base64 (0.2.0)
claide (1.1.0)
cocoapods (1.14.3)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.14.3)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 2.1, < 3.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.6.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 2.3.0, < 3.0)
xcodeproj (>= 1.23.0, < 2.0)
cocoapods-core (1.14.3)
activesupport (>= 5.0, < 8)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (2.1)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.2.3)
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
ffi (1.16.3)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
json (2.7.2)
minitest (5.22.3)
molinillo (0.8.0)
nanaimo (0.3.0)
nap (1.1.0)
netrc (0.11.0)
nkf (0.2.0)
public_suffix (4.0.7)
rexml (3.2.6)
ruby-macho (2.5.1)
typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
xcodeproj (1.24.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
zeitwerk (2.6.13)

PLATFORMS
ruby

DEPENDENCIES
activesupport (>= 6.1.7.5, < 7.1.0)
cocoapods (>= 1.13, < 1.15)

RUBY VERSION
ruby 2.6.10p210

BUNDLED WITH
1.17.2
Loading

0 comments on commit 8e2fc1a

Please sign in to comment.