WIP BOD-14 changes.

This commit is contained in:
Patrick Fic
2020-03-26 09:49:09 -07:00
parent 4c35337d36
commit a507e40816
4 changed files with 37 additions and 67 deletions

View File

@@ -24,10 +24,12 @@ export default class AppContainer extends Component {
const wsLink = new WebSocketLink({ const wsLink = new WebSocketLink({
uri: process.env.REACT_APP_GRAPHQL_ENDPOINT_WS, uri: process.env.REACT_APP_GRAPHQL_ENDPOINT_WS,
options: { options: {
//lazy: true, lazy: true,
reconnect: true, reconnect: true,
connectionParams: () => { connectionParams: async () => {
const token = localStorage.getItem("token"); //const token = localStorage.getItem("token");
const token = await auth.currentUser.getIdToken(true);
console.log("token", token);
if (token) { if (token) {
return { return {
headers: { headers: {
@@ -40,6 +42,7 @@ export default class AppContainer extends Component {
}); });
const subscriptionMiddleware = { const subscriptionMiddleware = {
applyMiddleware: async (options, next) => { applyMiddleware: async (options, next) => {
console.log("SubMiddleware");
options.authToken = await auth.currentUser.getIdToken(true); options.authToken = await auth.currentUser.getIdToken(true);
next(); next();
} }

View File

@@ -3,7 +3,10 @@ import { Avatar, Badge, Col, List, Row } from "antd";
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { openConversation, toggleChatVisible } from "../../redux/messaging/messaging.actions"; import {
openConversation,
toggleChatVisible
} from "../../redux/messaging/messaging.actions";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser //currentUser: selectCurrentUser
@@ -29,27 +32,29 @@ export function ChatConversationListComponent({
</Col> </Col>
</Row> </Row>
<Row> <Row>
<List <Col span={24}>
dataSource={conversationList} <List
renderItem={item => ( dataSource={conversationList}
<Badge count={item.messages_aggregate.aggregate.count || 0}> renderItem={item => (
<List.Item <Badge count={item.messages_aggregate.aggregate.count || 0}>
key={item.id} <List.Item
style={{ cursor: "pointer" }} key={item.id}
onClick={() => style={{ cursor: "pointer" }}
openConversation({ phone_num: item.phone_num, id: item.id }) onClick={() =>
}> openConversation({ phone_num: item.phone_num, id: item.id })
<List.Item.Meta }>
avatar={ <List.Item.Meta
<Avatar src='https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png' /> avatar={
} <Avatar src='https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png' />
title={item.phone_num} }
description='Some sort of RO info? ' title={item.phone_num}
/> description='Some sort of RO info? '
</List.Item> />
</Badge> </List.Item>
)} </Badge>
/> )}
/>
</Col>
</Row> </Row>
</div> </div>
); );

View File

@@ -1,38 +0,0 @@
import { auth } from "../firebase/firebase.utils";
//used to ensure that there is always a fresh token.
function minutesSince(date) {
const now = new Date();
const millisecondsSince = now - date;
// Divide milliseconds by 1000 to get seconds
// Divide seconds by 60 to get minutes
return millisecondsSince / 1000 / 60;
}
// Pass a different argument number to set a sooner/longer refresh time
export function shouldRefreshToken(minutesBeforeShouldRefresh = 45) {
const stringifiedRefreshTime = window.sessionStorage.getItem(
`lastTokenRefreshTime`
);
const lastRefreshAt = new Date(stringifiedRefreshTime);
const aboutToExpire =
minutesSince(lastRefreshAt) >= minutesBeforeShouldRefresh;
return aboutToExpire;
}
export async function refreshToken() {
try {
if (auth.user) {
const idToken = await auth().currentUser.getIdToken(
/* force refresh */ true
);
const now = new Date();
window.localStorage.setItem(`lastTokenRefreshTime`, now);
localStorage.setItem("token", idToken);
console.log("Token refreshed.");
}
} catch (err) {
console.error(err);
}
}

View File

@@ -27,8 +27,8 @@ export function* signInWithEmail({ payload: { email, password } }) {
try { try {
const { user } = yield auth.signInWithEmailAndPassword(email, password); const { user } = yield auth.signInWithEmailAndPassword(email, password);
let token = yield user.getIdToken(); let token = yield user.getIdToken();
localStorage.setItem("token", token); // localStorage.setItem("token", token);
window.sessionStorage.setItem(`lastTokenRefreshTime`, new Date()); //window.sessionStorage.setItem(`lastTokenRefreshTime`, new Date());
yield put( yield put(
signInSuccess({ signInSuccess({
uid: user.uid, uid: user.uid,
@@ -55,8 +55,8 @@ export function* isUserAuthenticated() {
return; return;
} }
let token = yield user.getIdToken(); let token = yield user.getIdToken();
localStorage.setItem("token", token); //localStorage.setItem("token", token);
window.sessionStorage.setItem(`lastTokenRefreshTime`, new Date()); //window.sessionStorage.setItem(`lastTokenRefreshTime`, new Date());
yield put( yield put(
signInSuccess({ signInSuccess({