From 7fdd98922f722ad0de78fb673680a197dc65ea88 Mon Sep 17 00:00:00 2001 From: shakalee14 Date: Wed, 31 May 2017 19:58:24 -0400 Subject: [PATCH 1/5] WIP: Incoming and all messages api end pts created, component and nav updated for incoming messages, working on rendering state correctly --- package.json | 3 ++- src/containers/AdminNavigation.jsx | 3 +++ src/routes.jsx | 2 ++ src/server/index.js | 22 ++++++++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ca12a9389..db8cf639b 100644 --- a/package.json +++ b/package.json @@ -63,10 +63,11 @@ "apollo-server": "^0.1.5", "apollo-tracer": "^0.1.4", "aws-sdk": "^2.6.3", + "axios": "^0.16.1", "babel-cli": "^6.10.1", "babel-core": "^6.10.4", "babel-loader": "^6.2.4", - "babel-polyfill": "^6.9.1", + "babel-polyfill": "^6.23.0", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-0": "^6.5.0", diff --git a/src/containers/AdminNavigation.jsx b/src/containers/AdminNavigation.jsx index 0968c8882..5a54d3702 100644 --- a/src/containers/AdminNavigation.jsx +++ b/src/containers/AdminNavigation.jsx @@ -58,6 +58,9 @@ class AdminNavigation extends React.Component { }, { name: 'Optouts', path: 'optouts' + }, { + name: 'Incoming Messages', + path: 'incoming' }] const { roles } = this.props.data.currentUser diff --git a/src/routes.jsx b/src/routes.jsx index 6fe9d2ce8..e2a3304e5 100644 --- a/src/routes.jsx +++ b/src/routes.jsx @@ -5,6 +5,7 @@ import AdminCampaignList from './containers/AdminCampaignList' import AdminCampaignStats from './containers/AdminCampaignStats' import AdminPersonList from './containers/AdminPersonList' import AdminOptOutList from './containers/AdminOptOutList' +import AdminIncomingMessageList from './containers/AdminIncomingMessageList' import AdminCampaignEdit from './containers/AdminCampaignEdit' import TexterDashboard from './components/TexterDashboard' import TopNav from './components/TopNav' @@ -41,6 +42,7 @@ export default function makeRoutes(requireAuth = () => {}) { + diff --git a/src/server/index.js b/src/server/index.js index fd027128a..95c063fd6 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -23,6 +23,10 @@ process.on('uncaughtException', (ex) => { process.exit(1) }) const DEBUG = process.env.NODE_ENV === 'development' +var accountSid = process.env.TWILIO_API_KEY; +var authToken = process.env.TWILIO_AUTH_TOKEN; +const client = require('twilio')(accountSid, authToken); + setupAuth0Passport() seedZipCodes() setupUserNotificationObservers() @@ -98,6 +102,24 @@ app.post('/twilio-message-report', wrap(async (req, res) => { })) +app.get('/incomingmessages', (req, res) => { + client.sms.messages.list(function(err, data) { + const listOfMessages = data.sms_messages + listOfMessages.forEach(function(message){ + if(message.direction == "inbound"){ + return console.log(message.body) + } + }) + }) +}) + +app.get('/allmessages', (req, res) => { + client.sms.messages.list(function(err, data) { + const listOfMessages = data.sms_messages + return res.json(listOfMessages) + }) +}) + app.get('/logout-callback', (req, res) => { req.logOut() res.redirect('/login') From 082b717a3b41b06fff45f38af4ee9f7dbc9499fa Mon Sep 17 00:00:00 2001 From: shakalee14 Date: Thu, 1 Jun 2017 10:18:22 -0400 Subject: [PATCH 2/5] Added admin incoming message list component that keeps track of incoming messages --- src/containers/AdminIncomingMessageList.jsx | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/containers/AdminIncomingMessageList.jsx diff --git a/src/containers/AdminIncomingMessageList.jsx b/src/containers/AdminIncomingMessageList.jsx new file mode 100644 index 000000000..1046603a3 --- /dev/null +++ b/src/containers/AdminIncomingMessageList.jsx @@ -0,0 +1,50 @@ +import React, { Component } from 'react' +// import { CampaignList } from '../components/campaign_list' +import FloatingActionButton from 'material-ui/FloatingActionButton' +import ContentAdd from 'material-ui/svg-icons/content/add' +import { moment } from 'moment' +import Subheader from 'material-ui/Subheader' +import SpeakerNotesIcon from 'material-ui/svg-icons/action/speaker-notes' +import axios from 'axios' +import Empty from '../components/Empty' + +const styles = { + floatingButton: { + margin: 0, + top: 'auto', + right: 20, + bottom: 20, + left: 'auto', + position: 'fixed' + } +} + +export default class AdminIncomingMessageList extends Component { + constructor(props) { + super(props); + + this.state = { + incomingmessages: [] + }; + } + componentWillMount() { + axios.get(`http://localhost:3000/allmessages`) + .then(res => this.setState({ incomingmessages: res.data })) + } + + render(){ + return ( +
+

Incoming Messages

+
    + {this.state.incomingmessages.map( message => { + if(message.direction == 'inbound' && message.from !=='+19282491850'){ + return
  • {message.date_sent} {message.from } {message.to } {message.body}
  • + } + } + )} +
+
+ ) + } +} From 4cd8c90f0825236c7183b9fc517bf530c6e33df5 Mon Sep 17 00:00:00 2001 From: shakalee14 Date: Thu, 1 Jun 2017 10:36:02 -0400 Subject: [PATCH 3/5] Added prelim tags for filtering to view --- src/containers/AdminIncomingMessageList.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/AdminIncomingMessageList.jsx b/src/containers/AdminIncomingMessageList.jsx index 1046603a3..d0ab0c8fa 100644 --- a/src/containers/AdminIncomingMessageList.jsx +++ b/src/containers/AdminIncomingMessageList.jsx @@ -35,11 +35,11 @@ export default class AdminIncomingMessageList extends Component { render(){ return (
-

Incoming Messages

+

Incoming Messages

    {this.state.incomingmessages.map( message => { if(message.direction == 'inbound' && message.from !=='+19282491850'){ - return
  • {message.date_sent} {message.from } {message.to } {message.body}
  • + return
  • Date Sent: {message.date_sent} From: {message.from} To: {message.to} "{message.body}"
  • } } )} From 07bdedae344bd5d93bd33d8ada9c3eac380b21e4 Mon Sep 17 00:00:00 2001 From: shakalee14 Date: Thu, 1 Jun 2017 15:04:21 -0400 Subject: [PATCH 4/5] Arranged incoming messages info in mui table --- src/containers/AdminIncomingMessageList.jsx | 49 ++++++++++++++++----- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/containers/AdminIncomingMessageList.jsx b/src/containers/AdminIncomingMessageList.jsx index d0ab0c8fa..aff3dd395 100644 --- a/src/containers/AdminIncomingMessageList.jsx +++ b/src/containers/AdminIncomingMessageList.jsx @@ -1,6 +1,16 @@ import React, { Component } from 'react' // import { CampaignList } from '../components/campaign_list' import FloatingActionButton from 'material-ui/FloatingActionButton' +import { + Table, + TableBody, + TableHeader, + TableHeaderColumn, + TableRow, + TableRowColumn, +} from 'material-ui/Table'; + +// import SimpleTable from './Table.jsx' import ContentAdd from 'material-ui/svg-icons/content/add' import { moment } from 'moment' import Subheader from 'material-ui/Subheader' @@ -27,23 +37,42 @@ export default class AdminIncomingMessageList extends Component { incomingmessages: [] }; } - componentWillMount() { + componentDidMount() { axios.get(`http://localhost:3000/allmessages`) - .then(res => this.setState({ incomingmessages: res.data })) + .then(response => this.setState({ incomingmessages: response .data })) } render(){ return (

    Incoming Messages

    -
      - {this.state.incomingmessages.map( message => { - if(message.direction == 'inbound' && message.from !=='+19282491850'){ - return
    • Date Sent: {message.date_sent} From: {message.from} To: {message.to} "{message.body}"
    • - } - } - )} -
    +
    + + + + Date Sent: + From: + To: + Message Body + + + + {this.state.incomingmessages.map( message => { + if(message.direction == 'inbound' && message.from !=='+19282491850'){ + return ( + + {message.date_sent} + {message.from} + {message.to} + {message.body} + + ) + } + } + )} + +
    +
    ) } From 8568b3eaeb826b73e853c8b3e97d89df8ba1eaf5 Mon Sep 17 00:00:00 2001 From: shakalee14 Date: Thu, 1 Jun 2017 16:08:45 -0400 Subject: [PATCH 5/5] Added route to check available phone numbers --- src/containers/AdminIncomingMessageList.jsx | 18 ++++++++----- src/server/index.js | 28 +++++++++++++-------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/containers/AdminIncomingMessageList.jsx b/src/containers/AdminIncomingMessageList.jsx index aff3dd395..668cd401a 100644 --- a/src/containers/AdminIncomingMessageList.jsx +++ b/src/containers/AdminIncomingMessageList.jsx @@ -34,18 +34,24 @@ export default class AdminIncomingMessageList extends Component { super(props); this.state = { - incomingmessages: [] + incomingmessages: [], + availablephonenumbers: [] }; } componentDidMount() { axios.get(`http://localhost:3000/allmessages`) - .then(response => this.setState({ incomingmessages: response .data })) + .then(response => this.setState({ incomingmessages: response.data })) + } + + getAvailablePhoneNumbers(){ + axios.get(`http://localhost:3000/availablephonenumbers`) + .then(response => response.data) } render(){ return (
    -

    Incoming Messages

    +

    All Incoming Messages

    @@ -53,18 +59,18 @@ export default class AdminIncomingMessageList extends Component { Date Sent: From: To: - Message Body + Message Body {this.state.incomingmessages.map( message => { - if(message.direction == 'inbound' && message.from !=='+19282491850'){ + if(message.direction == 'inbound'){ return ( {message.date_sent} {message.from} {message.to} - {message.body} + {message.body} ) } diff --git a/src/server/index.js b/src/server/index.js index 95c063fd6..4bef2a803 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -102,24 +102,30 @@ app.post('/twilio-message-report', wrap(async (req, res) => { })) -app.get('/incomingmessages', (req, res) => { - client.sms.messages.list(function(err, data) { - const listOfMessages = data.sms_messages - listOfMessages.forEach(function(message){ - if(message.direction == "inbound"){ - return console.log(message.body) - } - }) - }) -}) +// app.get('/incomingmessages', (req, res) => { +// client.sms.messages.list(function(err, data) { +// const listOfMessages = data.sms_messages +// listOfMessages.forEach(function(message){ +// if(message.direction == "inbound"){ +// return console.log(message.body) +// } +// }) +// }) +// }) app.get('/allmessages', (req, res) => { - client.sms.messages.list(function(err, data) { + client.sms.messages.list((err, data) => { const listOfMessages = data.sms_messages return res.json(listOfMessages) }) }) +app.get('/availablephonenumbers', (req, res) => { + client.incomingPhoneNumbers.list((err, data) => { + return res.json(data.incomingPhoneNumbers) + }) +}) + app.get('/logout-callback', (req, res) => { req.logOut() res.redirect('/login')