57 lines
1.8 KiB
JavaScript
57 lines
1.8 KiB
JavaScript
import React, { Component } from "react";
|
|
import { withApollo } from "react-apollo";
|
|
import { connect } from "react-redux";
|
|
import { createStructuredSelector } from "reselect";
|
|
import { logImEXEvent, messaging } from "../../firebase/firebase.utils";
|
|
import { UPDATE_FCM_TOKEN } from "../../graphql/user.queries";
|
|
import { selectCurrentUser } from "../../redux/user/user.selectors";
|
|
|
|
const mapStateToProps = createStructuredSelector({
|
|
currentUser: selectCurrentUser,
|
|
});
|
|
const mapDispatchToProps = (dispatch) => ({
|
|
//setUserLanguage: language => dispatch(setUserLanguage(language))
|
|
});
|
|
|
|
class FcmNotificationComponent extends Component {
|
|
async componentDidMount() {
|
|
const { client, currentUser } = this.props;
|
|
if (!!!messaging) return; //Skip all of the notification functionality if the firebase SDK could not start.
|
|
|
|
messaging
|
|
.requestPermission()
|
|
.then(async function () {
|
|
const token = await messaging.getToken();
|
|
client.mutate({
|
|
mutation: UPDATE_FCM_TOKEN,
|
|
variables: { authEmail: currentUser.email, token: { [token]: true } },
|
|
});
|
|
})
|
|
.catch(function (err) {
|
|
console.log("Unable to get permission to notify.", err);
|
|
logImEXEvent("fcm_permission_denied", { message: err });
|
|
});
|
|
}
|
|
|
|
render() {
|
|
return <span />;
|
|
}
|
|
}
|
|
|
|
export default connect(
|
|
mapStateToProps,
|
|
mapDispatchToProps
|
|
)(withApollo(FcmNotificationComponent));
|
|
|
|
//Firebase Service Worker Register
|
|
if ("serviceWorker" in navigator) {
|
|
navigator.serviceWorker
|
|
.register("/firebase-messaging-sw.js")
|
|
.then(function (registration) {
|
|
console.log("**********FCM Registration successful, scope is:", registration.scope);
|
|
})
|
|
.catch(function (err) {
|
|
console.log("**********FCM Service worker registration failed, error:", err);
|
|
});
|
|
}
|