diff --git a/README.md b/README.md index ed581a9..98ecfb5 100644 --- a/README.md +++ b/README.md @@ -63,20 +63,15 @@ This application assumes you have: ``` $ npm install ``` -3. Navigate to `ui-react/`. In the `package.json` file, change: - ``` - "proxy" : "http://localhost:8080" - ``` - to whatever the IP of where express is running. Typically you can use something similar to the default but you can change the IP and port as long as it coincides with what is in `server.js`. -4. In the root directory, open a terminal or cmd: +3. In the root directory, open a terminal or cmd: ``` $ npm run build ``` -5. In the root directory, open a terminal or cmd: +4. In the root directory, open a terminal or cmd: ``` $ npm start ``` -6. If you want to start the react development server, in the root directory run: +5. If you want to start the react development server, in the root directory run: ``` $ npm start-ui-dev ``` @@ -86,7 +81,8 @@ This application assumes you have: ## Root Folder Structure Explained * `app/` : Routes for EWS APIs -* `config/` : All EWS functionality +* `app/ews/` : All EWS functionality +* `confg/` : All server side configuration settings * `scss/` : All styles * `static/` : All global static files * `ui-react/` : Front end React routes and components @@ -161,17 +157,25 @@ There are three main directories in the `ui-react/src/` folder: export DOMAIN=domain.com ``` +* In `/config/room-blacklist.js`, add any room by email to exclude it from the list of rooms: + + ```javascript + module.exports = { + 'roomEmails' : [ + 'ROOM_EMAIL@DOMAIN.com' + ] + }; + ``` + * In `/ui-react/src/config/flightboard.config.js`, manage your customizations: ```javascript module.exports = { 'board' : { - 'text' : { - 'nextUp' : 'Next Up', - 'statusAvailable' : 'Open', - 'statusBusy' : 'Busy', - 'statusError' : 'Error' - } + 'nextUp' : 'Next Up', + 'statusAvailable' : 'Open', + 'statusBusy' : 'Busy', + 'statusError' : 'Error' }, 'navbar' : { @@ -182,10 +186,6 @@ There are three main directories in the `ui-react/src/` folder: 'filterTitle' : 'Locations', 'filterAllTitle' : 'All Conference Rooms', }, - - 'socket' : { - 'endpoint' : 'http://localhost:8080', - } }; ``` @@ -193,11 +193,11 @@ There are three main directories in the `ui-react/src/` folder: ### Advanced -* All EWS functionality is located in `config/ews`. -* To change the interval in which the web socket emits, edit the interval time in `config/controller.js`. By default, it is set to 1 minute. +* All EWS functionality is located in `app/ews`. +* To change the interval in which the web socket emits, edit the interval time in `app/socket-controller.js`. By default, it is set to 1 minute. * To update styles, make sure you install grunt first with `npm install -g grunt-cli`. Then run `grunt` in the root directory to watch for SCSS changes. Use the `.scss` files located in the `/scss` folder. * All React components can be locally styled by adding a new `.css` file and importing it into the component itself if you'd prefer to do it that way. -* In `config/ews/rooms.js`, there is a block of code that may not be necessary but were added as a convenience. Feel free to use it, comment it out, or remove it completely. It was designed for a use case where the email addresses (ex: jsmith@domain.com) do not match the corporate domain (ex: jsmith-enterprise). +* In `app/ews/rooms.js`, there is a block of code that may not be necessary but were added as a convenience. Feel free to use it, comment it out, or remove it completely. It was designed for a use case where the email addresses (ex: jsmith@domain.com) do not match the corporate domain (ex: jsmith-enterprise). ```javascript // if the email domain != your corporate domain, // replace email domain with domain from auth config diff --git a/TODO.md b/TODO.md index 91da8ba..3ae9456 100644 --- a/TODO.md +++ b/TODO.md @@ -2,12 +2,15 @@ ## Last updated: 07.18.2018 ### To Do: -* [ ] - Handle credentials error -* [ ] - Handle room list error ('no folder in store') +* [ ] - Handle Socket error (ERR CONNECTION REFUSED) +* [ ] - Update Wiki +* [ ] - update to es6 +* [ ] - add better comments +* [ ] - Jest/Cypress for Unit/Integration/Functional testing ### Icebox: * [ ] - Add Room Booking component/feature -* [ ] - Oauth +* [ ] - OAuth ### Done: * [x] - Test on multiple mobile devices @@ -15,3 +18,4 @@ * [x] - Make "Next Up", "Open", "Busy", "Upcoming", etc. all customizable as to enable multilingual support * [x] - Look into port issues * [x] - Change domain so it can be .com, .co.uk, etc +* [x] - Handle credentials error diff --git a/app/ews/roomlists.js b/app/ews/roomlists.js index 59e4fa3..b046052 100644 --- a/app/ews/roomlists.js +++ b/app/ews/roomlists.js @@ -17,6 +17,8 @@ module.exports = function (callback) { roomLists.push(item.Name); }); callback(null, roomLists.sort()); + }, (err) => { + callback(err, null); }); }; diff --git a/app/ews/rooms.js b/app/ews/rooms.js index 80624aa..7702873 100644 --- a/app/ews/rooms.js +++ b/app/ews/rooms.js @@ -17,6 +17,8 @@ module.exports = function (callback) { exch.GetRoomLists().then((lists) => { var roomLists = lists.items; resolve(roomLists); + }, (err) => { + callback(err, null); }); }) return promise; diff --git a/app/routes.js b/app/routes.js index a7ee307..4d8ef4f 100644 --- a/app/routes.js +++ b/app/routes.js @@ -8,7 +8,17 @@ module.exports = function(app) { var ews = require('./ews/rooms.js'); ews(function(err, rooms) { - res.json(rooms); + if (err) { + if (err.responseCode === 127) { + res.json({error: 'Oops, there seems to be an issue with the credentials you have supplied. Make sure you typed them correctly and that you have access to Exchange Roomlists.'}); + } + else { + res.json({error: 'Hmm, there seems to be a weird issue occuring.'}); + } + } + else { + res.json(rooms); + } }); }); @@ -18,7 +28,17 @@ module.exports = function(app) { var ews = require('./ews/roomlists.js'); ews(function(err, roomlists) { - res.json(roomlists); + if (err) { + if (err.responseCode === 127) { + res.json({error: 'Oops, there seems to be an issue with the credentials you have supplied. Make sure you typed them correctly and that you have access to Exchange Roomlists.'}); + } + else { + res.json({error: 'Hmm, there seems to be a weird issue occuring.'}); + } + } + else { + res.json(roomlists); + } }); }); diff --git a/scss/_globals.scss b/scss/_globals.scss index b8630ff..f44acee 100644 --- a/scss/_globals.scss +++ b/scss/_globals.scss @@ -22,6 +22,10 @@ body { background-color: $bodyBackground; } +.credentials-error { + text-align: center; +} + #fb__spinner-wrap { text-align: center; diff --git a/static/css/styles.css b/static/css/styles.css index 657c0e9..08bbd36 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -17,6 +17,9 @@ body { color: #ffffff; background-color: #191919; } +.credentials-error { + text-align: center; } + #fb__spinner-wrap { text-align: center; } #fb__spinner-wrap #fb__spinner { diff --git a/static/css/styles.css.map b/static/css/styles.css.map index 6260170..032ceab 100644 --- a/static/css/styles.css.map +++ b/static/css/styles.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../../scss/_globals.scss","../../scss/_variables.scss"], "names": [], "file": "styles.css" diff --git a/ui-react/src/components/flightboard/Flightboard.js b/ui-react/src/components/flightboard/Flightboard.js index 488f64e..75258e6 100644 --- a/ui-react/src/components/flightboard/Flightboard.js +++ b/ui-react/src/components/flightboard/Flightboard.js @@ -9,6 +9,7 @@ class Flightboard extends Component { super(props); this.state = { response: false, + error: false, now: new Date(), rooms: [] } @@ -18,10 +19,20 @@ class Flightboard extends Component { return fetch('/api/rooms') .then((response) => response.json()) .then((data) => { - this.setState({ - response: true, - rooms: data - }); + if(!data.error){ + this.setState({ + response: true, + error: false, + rooms: data + }); + } + else { + this.setState({ + response: true, + error: true, + rooms: data + }); + } }) } @@ -38,15 +49,21 @@ class Flightboard extends Component { } render() { - const { response, now } = this.state; + const { error, now, response, rooms } = this.state; return (
{ response ? - this.state.rooms.map((room, key) => - + (!error ? + rooms.map((room, key) => + + ) + : +
+
{rooms.error}
+
) : diff --git a/ui-react/src/components/flightboard/FlightboardRow.js b/ui-react/src/components/flightboard/FlightboardRow.js index 7f5e52d..73bee03 100644 --- a/ui-react/src/components/flightboard/FlightboardRow.js +++ b/ui-react/src/components/flightboard/FlightboardRow.js @@ -24,7 +24,7 @@ class FlightboardRow extends Component { }); if (item.Appointments[0].Start < now && now < item.Appointments[0].End) { } else { this.setState({ - nextUp: fbConfig.board.text.nextUp + ': ' + nextUp: fbConfig.board.nextUp + ': ' }); } } @@ -58,10 +58,10 @@ class FlightboardRow extends Component { ? 'meeting-busy' : 'meeting-open'; let statusText = item.ErrorMessage - ? fbConfig.board.text.statusError + ? fbConfig.board.statusError : item.Busy - ? fbConfig.board.text.statusBusy - : fbConfig.board.text.statusAvailable; + ? fbConfig.board.statusBusy + : fbConfig.board.statusAvailable; return (
diff --git a/ui-react/src/components/flightboard/RoomFilter.js b/ui-react/src/components/flightboard/RoomFilter.js index 094b55f..5a9df18 100644 --- a/ui-react/src/components/flightboard/RoomFilter.js +++ b/ui-react/src/components/flightboard/RoomFilter.js @@ -7,6 +7,7 @@ class RoomFilter extends Component { super(props); this.state = { response: false, + error: false, roomlists: [] } } @@ -15,10 +16,20 @@ class RoomFilter extends Component { return fetch('/api/roomlists') .then((response) => response.json()) .then((data) => { - this.setState({ - response: true, - roomlists: data - }); + if(!data.error){ + this.setState({ + response: true, + error: false, + roomlists: data + }); + } + else { + this.setState({ + response: true, + error: true, + roomlists: data + }); + } }) } @@ -32,7 +43,7 @@ class RoomFilter extends Component { } render() { - const { response } = this.state; + const { error, response } = this.state; return (
  • @@ -44,7 +55,7 @@ class RoomFilter extends Component { {fbConfig.roomFilter.filterAllTitle}
  • - { response ? + { response && !error ? this.state.roomlists.map((item, key) =>
  • {item} diff --git a/ui-react/src/components/global/Socket.js b/ui-react/src/components/global/Socket.js index 59c59f5..fc1e886 100644 --- a/ui-react/src/components/global/Socket.js +++ b/ui-react/src/components/global/Socket.js @@ -1,63 +1,41 @@ import React, { Component } from 'react'; - import socketIOClient from 'socket.io-client'; -let fbConfig = require('../../config/flightboard.config.js'); - class Socket extends Component { constructor(props) { super(props); this.state = { response: false, now: new Date(), - rooms: [], - endpoint: fbConfig.socket.endpoint + rooms: [] } } - componentDidMount() { - const { endpoint } = this.state; - const socket = socketIOClient(endpoint); - - console.log("socket connect at: " + endpoint); - console.log("====================================="); + componentDidMount = () => { + const socket = socketIOClient(); socket.on('updatedRooms', (rooms) => { let time = new Date(); - for (var i = 0; i < rooms.length; i++) { - var meetingRoom = rooms[i].Name; - console.log("updating: " + meetingRoom); + for (let i = 0; i < rooms.length; i++) { + let meetingRoom = rooms[i].Name; } - console.log(" "); - console.log("time: " + time.toLocaleTimeString()); - console.log("====================================="); this.props.response({ response: true, now: new Date(), rooms: rooms - }) - - this.setState({ - response: true, - now: new Date(), - rooms: rooms }); }); - } - componentWillUnmount () { - const { endpoint } = this.state; - const socket = socketIOClient(endpoint); + componentWillUnmount = () => { + const socket = socketIOClient(); socket.close(); } - render() { return null; } - } export default Socket; diff --git a/ui-react/src/config/flightboard.config.js b/ui-react/src/config/flightboard.config.js index 2124866..aff8e55 100644 --- a/ui-react/src/config/flightboard.config.js +++ b/ui-react/src/config/flightboard.config.js @@ -1,11 +1,9 @@ module.exports = { 'board' : { - 'text' : { - 'nextUp' : 'Next Up', - 'statusAvailable' : 'Open', - 'statusBusy' : 'Busy', - 'statusError' : 'Error' - } + 'nextUp' : 'Next Up', + 'statusAvailable' : 'Open', + 'statusBusy' : 'Busy', + 'statusError' : 'Error' }, 'navbar' : { @@ -16,8 +14,4 @@ module.exports = { 'filterTitle' : 'Locations', 'filterAllTitle' : 'All Conference Rooms', }, - - 'socket' : { - 'endpoint' : 'http://localhost:8080', - } };