From 04e9d1818c1a618af38acce03e162448b5e0b801 Mon Sep 17 00:00:00 2001 From: JaeeunCho <anna.jecho@gmail.com> Date: Tue, 4 Oct 2016 12:23:43 -0700 Subject: [PATCH] HTML 5 - added to display the state of unreaded messages right next to the user icon --- .../ui/components/nav-bar/component.jsx | 4 +++- .../ui/components/nav-bar/container.jsx | 23 +++++++++++++++++-- .../display-unreadmessage/component.jsx | 19 +++++++++++++++ .../nav-bar/recordbutton/component.jsx | 1 - .../imports/ui/components/nav-bar/styles.scss | 12 ++++++++++ 5 files changed, 55 insertions(+), 4 deletions(-) create mode 100755 bigbluebutton-html5/imports/ui/components/nav-bar/display-unreadmessage/component.jsx diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx index 8d51eb1098..d5fb09bc0f 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx @@ -3,6 +3,7 @@ import styles from './styles.scss'; import Button from '../button/component'; import RecordButton from './recordbutton/component'; import SettingsDropdown from './settings-dropdown/component'; +import DisplayUnreadMessage from './display-unreadmessage/component'; const propTypes = { presentationTitle: PropTypes.string.isRequired, @@ -28,7 +29,7 @@ class NavBar extends Component { } render() { - const { presentationTitle, beingRecorded } = this.props; + const { presentationTitle, hasUnreadMessages, beingRecorded } = this.props; document.title = presentationTitle; return ( @@ -44,6 +45,7 @@ class NavBar extends Component { className={styles.btn} /> </div> + <DisplayUnreadMessage hasUnreadMessages={hasUnreadMessages}/> <div className={styles.center}> <h1 className={styles.presentationTitle}>{presentationTitle}</h1> <span className={styles.divideBar}> | </span> diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx index 79b9f9a2f2..9bde55eda4 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/container.jsx @@ -2,11 +2,17 @@ import React, { Component, PropTypes } from 'react'; import { createContainer } from 'meteor/react-meteor-data'; import { withRouter } from 'react-router'; -import Auth from '/imports/ui/services/auth'; import Meetings from '/imports/api/meetings'; +import Auth from '/imports/ui/services/auth'; +import Service from '../user-list/service'; +import ChatService from '../chat/service'; + import NavBar from './component'; +const CHAT_CONFIG = Meteor.settings.public.chat; +const PUBLIC_CHAT_KEY = CHAT_CONFIG.public_id; + class NavBarContainer extends Component { constructor(props) { super(props); @@ -35,9 +41,22 @@ export default withRouter(createContainer(({ location, router }) => { meetingRecorded = meetingObject.currentlyBeingRecorded; } + const users = Service.getUsers(); + let unreadMessagesFromUsers; + let unreadMessagesFromPublic = ChatService.hasUnreadMessages(PUBLIC_CHAT_KEY); + let hasUnreadMessages; + + for (let i = 0; i < users.length; i++) { + if (users[i].id !== Auth.userID) { + unreadMessagesFromUsers = ChatService.hasUnreadMessages(users[i].id); + } + } + + hasUnreadMessages = unreadMessagesFromPublic || unreadMessagesFromUsers; + return { presentationTitle: meetingTitle, - hasUnreadMessages: true, + hasUnreadMessages: hasUnreadMessages, beingRecorded: meetingRecorded, toggleUserList: () => { if (location.pathname.indexOf('/users') !== -1) { diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/display-unreadmessage/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/display-unreadmessage/component.jsx new file mode 100755 index 0000000000..5a5cf72b59 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/display-unreadmessage/component.jsx @@ -0,0 +1,19 @@ +import React, { Component, PropTypes } from 'react'; +import styles from '../styles.scss'; + +export default class DisplayUnreadMessage extends Component{ + constructor(props) { + super(props); + } + + render() { + const { hasUnreadMessages } = this.props; + let fillColor = hasUnreadMessages ? '#F0615F' : '#ffffff'; + + return ( + <svg width="30" height="30" className={styles.msgFlag}> + <circle cx="13" cy="17.5" r="5" stroke="#2A2D36" strokeWidth="1" fill= {fillColor} /> + </svg> + ); + } +}; diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/recordbutton/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/recordbutton/component.jsx index c0c346639c..e1c8760411 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/recordbutton/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/recordbutton/component.jsx @@ -1,6 +1,5 @@ import React, { Component, PropTypes } from 'react'; import styles from '../styles.scss'; -import Meetings from '/imports/api/meetings'; export default class RecordButton extends Component{ constructor(props) { diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/styles.scss b/bigbluebutton-html5/imports/ui/components/nav-bar/styles.scss index ffbd0b2854..1ccfe930c2 100755 --- a/bigbluebutton-html5/imports/ui/components/nav-bar/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/nav-bar/styles.scss @@ -52,6 +52,11 @@ margin-left: -5px; } +.msgFlag{ + margin-left: -34px; + margin-top: 6px; +} + .hidden { position:absolute; left:-10000px; @@ -61,6 +66,13 @@ overflow:hidden; } +.btn{ + span { + border: none; + box-shadow: none; + } +} + .settingBtn { transform: rotate(90deg); span { -- GitLab