on/off switch for notifs - no actual notifs yet

This commit is contained in:
Emily Liu 2021-01-02 02:05:05 -05:00
parent 4c5d37b90e
commit f327c92573
9 changed files with 255 additions and 10 deletions

View File

@ -30,8 +30,6 @@ import Ionicons from 'react-native-vector-icons/Ionicons';
import I18n from './i18n';
import AsyncStorage from '@react-native-community/async-storage'
const Tab = createBottomTabNavigator();
AsyncStorage.getItem('language')
@ -40,6 +38,15 @@ AsyncStorage.getItem('language')
I18n.locale = token;
});
AsyncStorage.getItem('announcementNotifs')
.then((token) => {
console.log("announcementNotifs: " + token);
});
AsyncStorage.getItem('eventNotifs')
.then((token) => {
console.log("eventNotifs: " + token);
});
class App extends React.Component {
state = {
loaded: false

View File

@ -29,6 +29,8 @@ const Images = {
announcements:require('./assets/announcements.png'),
resources:require('./assets/resources.png'),
polls:require('./assets/polls.png'),
notifs:require('./assets/notifs.png'),
lang:require('./assets/lang.png'),
}
export default Images;

View File

@ -47,12 +47,17 @@ export default {
},
settings: {
settings: "Settings",
language: "Language"
language: "Language",
notifications: "Notifications",
},
language: {
SelectLanguage: "Select Language",
English: "English",
Spanish: "Spanish",
note: "*App will reload on language change"
},
notifications: {
announcements: "Announcements",
events: "Calendar Events"
}
}

View File

@ -47,12 +47,17 @@ export default {
},
settings: {
settings: "Configuraciones",
language: "Idioma"
language: "Idioma",
notifications: "ESNotifications"
},
language: {
SelectLanguage: "Seleccione el idioma",
English: "Inglés",
Spanish: "Español",
note: "*La aplicación se recargará al cambiar de idioma"
},
notifications: {
announcements: "ESAnnouncements",
events: "ESCalendar Events"
}
}

122
app/Notifications.js Normal file
View File

@ -0,0 +1,122 @@
import React, { Component, useState } from 'react';
import {
Platform,
StyleSheet,
TouchableOpacity,
Text,
ScrollView,
View,
Switch
} from 'react-native';
import I18n from './i18n';
import AsyncStorage from '@react-native-community/async-storage'
const STORAGE_KEY_ANNOUNCEMENT = "announcementNotifs"
const STORAGE_KEY_EVENT = "eventNotifs"
function parseBoolean (val) {
if (val == "true") {
return true;
}
else if (val == "false") {
return false;
}
}
function AnnouncementNotifs() {
const [ isEnabled, setIsEnabled ] = React.useState()
React.useEffect(() => {
const checkAsync = async () => {
const value = await AsyncStorage.getItem('announcementNotifs')
if (value !== undefined || value !== null){
setIsEnabled(parseBoolean(value))
} else {
setIsEnabled(false)
AsyncStorage.setItem('announcementNotifs', JSON.stringify('false'))
}
}
checkAsync()
}, [])
const toggleSwitch = () => {
AsyncStorage.getItem('announcementNotifs')
.then((token) => {
const temp = parseBoolean(token)
AsyncStorage.setItem('announcementNotifs', JSON.stringify(!temp))
setIsEnabled(!isEnabled)
})
}
return (
<View style = {{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', marginTop: 20, alignContent: 'center'}}>
<Text style = {{fontSize: 22}}>{I18n.t('notifications.announcements')}</Text>
<Switch
trackColor={{ false: "#767577", true: "red" }}
thumbColor= "white"
ios_backgroundColor="white"
onValueChange={toggleSwitch}
value={isEnabled}
/>
</View>
)
}
function EventNotifs() {
const [ isEnabled, setIsEnabled ] = React.useState()
React.useEffect(() => {
const checkAsync = async () => {
const value = await AsyncStorage.getItem('eventNotifs')
if (value !== undefined || value !== null){
setIsEnabled(parseBoolean(value))
} else {
setIsEnabled(false)
AsyncStorage.setItem('eventNotifs', JSON.stringify('false'))
}
}
checkAsync()
}, [])
const toggleSwitch = () => {
AsyncStorage.getItem('eventNotifs')
.then((token) => {
const temp = parseBoolean(token)
AsyncStorage.setItem('eventNotifs', JSON.stringify(!temp))
setIsEnabled(!isEnabled)
})
}
return (
<View style = {{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', marginTop: 20, alignContent: 'center'}}>
<Text style = {{fontSize: 22}}>{I18n.t('notifications.events')}</Text>
<Switch
trackColor={{ false: "#767577", true: "red" }}
thumbColor= "white"
ios_backgroundColor="white"
onValueChange={toggleSwitch}
value={isEnabled}
/>
</View>
)
}
class Notifications extends Component {
render() {
return (
<View style = {{flex: 1, backgroundColor: 'white', padding: 20}}>
<AnnouncementNotifs />
<EventNotifs />
</View>
);
}
}
export default Notifications

View File

@ -23,11 +23,12 @@ import {
import styles from './styles/morestyles'
import LinearGradient from 'react-native-linear-gradient'
import Images from './Images'
import { NavigationContainer } from '@react-navigation/native'
import { createStackNavigator } from '@react-navigation/stack'
import I18n from './i18n';
import Language from './Language'
import Notifications from './Notifications'
const Stack = createStackNavigator()
@ -42,10 +43,12 @@ class SettingSwitch extends React.Component {
<View style={{flex:1,backgroundColor:'red'}}>
<FlatList
data={[
{name:"Language",key:"language"},
{name:"Language",key:"language", img:Images.lang},
{name:"Notifications",key:"notifications", img:Images.notifs},
]}
renderItem={({item})=>
<TouchableOpacity style={styles.moreitem} onPress={()=>this.props.navigation.navigate(item.key)}>
<Image source = {item.img} style = {{height: 40, width: 40, marginRight: 10, tintColor: '#e3e3e3'}}/>
<Text style={styles.moretext}>{I18n.t('settings.' + item.key)}</Text>
</TouchableOpacity>
}
@ -69,7 +72,7 @@ class Settings extends React.Component {
name="Chooser"
component={SettingSwitch}
options={{
title:'Settingss',
title:'Settings',
headerTitleStyle:styles.headerTitle,
headerBackground: ()=>background
}}
@ -84,6 +87,16 @@ class Settings extends React.Component {
headerBackground: ()=>background
}}
/>
<Stack.Screen
name="notifications"
component={Notifications}
options={{
title:'Notifications',
headerTitleStyle:[styles.headerTitle,{alignSelf:'center'}],
headerLeft:null,
headerBackground: ()=>background
}}
/>
</Stack.Navigator>
</NavigationContainer>
)

BIN
app/assets/lang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
app/assets/notifs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -711,6 +711,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.12.0", "@babel/runtime@^7.3.1":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.0.0", "@babel/template@^7.10.4", "@babel/template@^7.3.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@ -1025,10 +1032,9 @@
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
"@k3rn31p4nic/google-translate-api@^1.1.1":
"@k3rn31p4nic/google-translate-api@github:k3rn31p4nic/google-translate-api":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@k3rn31p4nic/google-translate-api/-/google-translate-api-1.1.1.tgz#3869854f7540bbb82afc1b61890281f5513e1717"
integrity sha512-vg3zLYXhUmdwrNxmoKOfYSJzB8lHKDnqR7L/SYQQKCYkxsj2syK/cJMAcK5fQC0hfwgexxUaWhR2p2gGEe3nVw==
resolved "https://codeload.github.com/k3rn31p4nic/google-translate-api/tar.gz/b15b464fb0a8fa4d58bc90d3d251250a8a71e907"
dependencies:
got "^11.1.1"
@ -1787,6 +1793,13 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428"
integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==
axios@^0.20.0:
version "0.20.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==
dependencies:
follow-redirects "^1.10.0"
babel-eslint@10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
@ -3007,6 +3020,11 @@ eventemitter3@^3.0.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
events@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
exec-sh@^0.3.2:
version "0.3.4"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
@ -3306,6 +3324,11 @@ flatted@^2.0.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
follow-redirects@^1.10.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@ -3628,6 +3651,13 @@ html-escaper@^2.0.0:
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
html-parse-stringify2@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a"
integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=
dependencies:
void-elements "^2.0.1"
http-cache-semantics@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
@ -3666,6 +3696,23 @@ human-signals@^1.1.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
i18n-js@3.0.11:
version "3.0.11"
resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.0.11.tgz#f9e96bdb641c5b9d6be12759d7c422089987ef02"
integrity sha512-v7dG3kYJTQTyox3NqDabPDE/ZotWntyMI9kh4cYi+XlCSnsIR+KBTS2opPyObL8WndnklcLzbNU92FP/mLge3Q==
i18next-react-native-language-detector@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/i18next-react-native-language-detector/-/i18next-react-native-language-detector-1.0.2.tgz#5c47482611a44262302a363d5be34a42b11ddfc6"
integrity sha1-XEdIJhGkQmIwKjY9W+NKQrEd38Y=
i18next@^19.8.4:
version "19.8.4"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.4.tgz#447718f2a26319b8debdbcc6fbc1a9761be7316b"
integrity sha512-FfVPNWv+felJObeZ6DSXZkj9QM1Ivvh7NcFCgA8XPtJWHz0iXVa9BUy+QY8EPrCLE+vWgDfV/sc96BgXVo6HAA==
dependencies:
"@babel/runtime" "^7.12.0"
iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -5390,6 +5437,11 @@ mkdirp@^0.5.1:
dependencies:
minimist "^1.2.5"
mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -6003,6 +6055,13 @@ prop-types@^15.6.2, prop-types@^15.7.2:
object-assign "^4.1.1"
react-is "^16.8.1"
properties-reader@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/properties-reader/-/properties-reader-2.2.0.tgz#41d837fe143d8d5f2386b6a869a1975c0b2c595c"
integrity sha512-CgVcr8MwGoBKK24r9TwHfZkLLaNFHQ6y4wgT9w/XzdpacOOi5ciH4hcuLechSDAwXsfrGQtI2JTutY2djOx2Ow==
dependencies:
mkdirp "^1.0.4"
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
@ -6068,6 +6127,14 @@ react-devtools-core@^4.6.0:
shell-quote "^1.6.1"
ws "^7"
react-i18next@^11.8.5:
version "11.8.5"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.8.5.tgz#a093335822e36252cda6efc0f55facef6253643f"
integrity sha512-2jY/8NkhNv2KWBnZuhHxTn13aMxAbvhiDUNskm+1xVVnrPId78l8fA7fCyVeO3XU1kptM0t4MtvxV1Nu08cjLw==
dependencies:
"@babel/runtime" "^7.3.1"
html-parse-stringify2 "2.0.1"
react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@ -6098,6 +6165,13 @@ react-native-gesture-handler@^1.7.0:
invariant "^2.2.4"
prop-types "^15.7.2"
react-native-i18n@^2.0.15:
version "2.0.15"
resolved "https://registry.yarnpkg.com/react-native-i18n/-/react-native-i18n-2.0.15.tgz#09b5a9836116fa7dbd0054c46e2d1014c1ef3c65"
integrity sha512-V8VwUP0TLda3oJvgt5tdnFaOV7WXPhTjCTLO7sXI3C2SHggSbD4bCUryMzNJhesimJidH21V2Owvj4zAylHoQQ==
dependencies:
i18n-js "3.0.11"
react-native-iphone-x-helper@^1.2.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.0.tgz#84fd13e6b89cc3aa4daa80ec514bf15cb724d86d"
@ -6108,6 +6182,11 @@ react-native-linear-gradient@^2.5.6:
resolved "https://registry.yarnpkg.com/react-native-linear-gradient/-/react-native-linear-gradient-2.5.6.tgz#96215cbc5ec7a01247a20890888aa75b834d44a0"
integrity sha512-HDwEaXcQIuXXCV70O+bK1rizFong3wj+5Q/jSyifKFLg0VWF95xh8XQgfzXwtq0NggL9vNjPKXa016KuFu+VFg==
react-native-locale-detector@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/react-native-locale-detector/-/react-native-locale-detector-1.0.1.tgz#c002261ecb60619e5952257c8c7fa31c2c15ed30"
integrity sha1-wAImHstgYZ5ZUiV8jH+jHCwV7TA=
react-native-ratings@^7.2.0:
version "7.3.0"
resolved "https://registry.yarnpkg.com/react-native-ratings/-/react-native-ratings-7.3.0.tgz#32e11e4ed944ba8adbbc995d601df3f131619b6f"
@ -7251,6 +7330,13 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
translate-google-api@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/translate-google-api/-/translate-google-api-1.0.4.tgz#562073926d4fa069ea4c105a69c0af9e1536bd92"
integrity sha512-KVXmo4+64/H1vIbnzf2zNiJ2JLeEB3jrEnNRP2EFNAGNqna/5bmw/Cps3pCHu0n3BzTOoWh9u6wFvrRYdzQ6Iw==
dependencies:
axios "^0.20.0"
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@ -7502,6 +7588,11 @@ vlq@^1.0.0:
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
void-elements@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
w3c-hr-time@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"