Enable tray to indicate when there's new notifications
This commit is contained in:
parent
e07b89b981
commit
b6ee403eb9
Binary file not shown.
After Width: | Height: | Size: 9.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -1,5 +1,8 @@
|
||||||
import React from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import { Image } from "react-native";
|
import { Image } from "react-native";
|
||||||
|
|
||||||
|
import { checkUnreadNotifications } from "src/requests";
|
||||||
|
|
||||||
import { activeOrNot } from "src/interface/interactions"
|
import { activeOrNot } from "src/interface/interactions"
|
||||||
import { TouchableWithoutFeedback, View } from "react-native";
|
import { TouchableWithoutFeedback, View } from "react-native";
|
||||||
|
|
||||||
|
@ -18,6 +21,19 @@ const TrayButtonJsx = (props) => {
|
||||||
|
|
||||||
const TrayJsx = (props) => {
|
const TrayJsx = (props) => {
|
||||||
const nav = props.navigation;
|
const nav = props.navigation;
|
||||||
|
const [state, setState] = useState({
|
||||||
|
unreadNotifications: false
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
checkUnreadNotifications()
|
||||||
|
.then(isUnread => {
|
||||||
|
setState({...state,
|
||||||
|
unreadNotifications: isUnread,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
const icons = {
|
const icons = {
|
||||||
feed: {
|
feed: {
|
||||||
|
@ -40,8 +56,12 @@ const TrayJsx = (props) => {
|
||||||
active: require("assets/eva-icons/person-black.png"),
|
active: require("assets/eva-icons/person-black.png"),
|
||||||
inactive: require("assets/eva-icons/person-grey.png")
|
inactive: require("assets/eva-icons/person-grey.png")
|
||||||
},
|
},
|
||||||
|
profileNotif: {
|
||||||
|
active: require("assets/eva-icons/person-black-notif.png"),
|
||||||
|
inactive: require("assets/eva-icons/person-grey-notif.png")
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style = { styles.tray }>
|
<View style = { styles.tray }>
|
||||||
<View style = { styles.iconList }>
|
<View style = { styles.iconList }>
|
||||||
|
@ -67,7 +87,11 @@ const TrayJsx = (props) => {
|
||||||
nav = { nav } />
|
nav = { nav } />
|
||||||
<TrayButtonJsx
|
<TrayButtonJsx
|
||||||
where = "Profile"
|
where = "Profile"
|
||||||
pack = { icons.profile }
|
pack = {
|
||||||
|
state.unreadNotifications ?
|
||||||
|
icons.profileNotif
|
||||||
|
: icons.profile
|
||||||
|
}
|
||||||
active = { props.active }
|
active = { props.active }
|
||||||
nav = { nav } />
|
nav = { nav } />
|
||||||
</View>
|
</View>
|
||||||
|
@ -103,4 +127,4 @@ const styles = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TrayJsx;
|
export default TrayJsx;
|
||||||
|
|
|
@ -44,9 +44,9 @@ const AuthenticateJsx = ({navigation}) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const profile = AsyncStorage.getItem("@user_profile").then((profile) => {
|
AsyncStorage.getItem("@user_profile").then((profile) => {
|
||||||
if (profile != null) {
|
if (profile) {
|
||||||
navigation.navigate("feed");
|
navigation.navigate("Feed");
|
||||||
}
|
}
|
||||||
|
|
||||||
setState({...state, authChecked: true});
|
setState({...state, authChecked: true});
|
||||||
|
@ -55,9 +55,17 @@ const AuthenticateJsx = ({navigation}) => {
|
||||||
|
|
||||||
const loginCallback = async () => {
|
const loginCallback = async () => {
|
||||||
const profileJSON = JSON.stringify(TEST_PROFILE);
|
const profileJSON = JSON.stringify(TEST_PROFILE);
|
||||||
AsyncStorage.setItem("@user_profile", profileJSON).then(() => {
|
|
||||||
navigation.navigate("Feed");
|
// TODO: Should fetch initial notifications to prevent bugging a newly
|
||||||
|
// logged in user about the notifications already on their account
|
||||||
|
const notificationsJSON = JSON.stringify({
|
||||||
|
unread: false,
|
||||||
|
memory: [{ id: 1 }, { id: 2 }],
|
||||||
});
|
});
|
||||||
|
await AsyncStorage.setItem("@user_profile", profileJSON);
|
||||||
|
await AsyncStorage.setItem("@user_notifications", notificationsJSON);
|
||||||
|
|
||||||
|
navigation.navigate("Feed");
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -10,6 +10,8 @@ import {
|
||||||
Dimensions,
|
Dimensions,
|
||||||
} from "react-native";
|
} from "react-native";
|
||||||
|
|
||||||
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||||
|
|
||||||
import { withoutHTML } from "src/interface/rendering";
|
import { withoutHTML } from "src/interface/rendering";
|
||||||
|
|
||||||
import { ScreenWithBackBarJsx } from "src/components/navigation/navigators";
|
import { ScreenWithBackBarJsx } from "src/components/navigation/navigators";
|
||||||
|
@ -203,7 +205,17 @@ const SettingsJsx = (props) => {
|
||||||
<TouchableOpacity style = { styles.largeButton }>
|
<TouchableOpacity style = { styles.largeButton }>
|
||||||
<Text> Save Profile </Text>
|
<Text> Save Profile </Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
<TouchableOpacity style = { styles.largeButton }>
|
<TouchableOpacity
|
||||||
|
style = { styles.largeButton }
|
||||||
|
onPress = {
|
||||||
|
() => {
|
||||||
|
AsyncStorage.multiRemove(
|
||||||
|
["@user_profile", "@user_notifications"]
|
||||||
|
).then(() => {
|
||||||
|
props.navigation.navigate("Authenticate");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}>
|
||||||
<Text style = { styles.textWarning }> Log out </Text>
|
<Text style = { styles.textWarning }> Log out </Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||||
|
|
||||||
|
const TEST_NOTIFICATIONS = [{ id: 1 }, { id: 2 }];
|
||||||
|
const TEST_NEW_NOTIFICATIONS_1 = [{ id: 1 }, { id: 2 }];
|
||||||
|
const TEST_NEW_NOTIFICATIONS_2 = [{ id: 1 }, { id: 2 }, { id: 3 }];
|
||||||
|
|
||||||
|
export async function checkUnreadNotifications() {
|
||||||
|
// If the check has already been made since the last time notifications.js
|
||||||
|
// has been opened
|
||||||
|
const notifications = JSON.parse(await AsyncStorage.getItem("@user_notifications"));
|
||||||
|
|
||||||
|
if (notifications.unread) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// Some promise to get new notifications
|
||||||
|
const newNotifs = await Promise.resolve(TEST_NEW_NOTIFICATIONS_2);
|
||||||
|
|
||||||
|
const isUnread = JSON.stringify(newNotifs) != JSON.stringify(notifications.memory);
|
||||||
|
|
||||||
|
console.log(JSON.stringify(newNotifs));
|
||||||
|
console.log(JSON.stringify(notifications.memory));
|
||||||
|
|
||||||
|
// Update stored notifications
|
||||||
|
await AsyncStorage.setItem(
|
||||||
|
"@user_notifications",
|
||||||
|
JSON.stringify({...notifications,
|
||||||
|
unread: isUnread,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return isUnread;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue