diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders index 61ee313..dacc2c0 100644 --- a/.meteor/.finished-upgraders +++ b/.meteor/.finished-upgraders @@ -10,3 +10,4 @@ notices-for-facebook-graph-api-2 1.2.0-meteor-platform-split 1.2.0-cordova-changes 1.2.0-breaking-changes +1.3.0-split-minifiers-package diff --git a/.meteor/packages b/.meteor/packages index d0c2167..5315246 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -16,7 +16,6 @@ ejson email fastclick johnantoni:meteor-normalize -jquery lepozepo:streams logging meteor-base @@ -24,36 +23,30 @@ meteorflux:dispatcher meteorflux:reactive-dependency meteorhacks:kadira mobile-experience -momentjs:moment mongo random -react reactive-var -reactrouter:react-router reload service-configuration session spacebars spiderable -standard-minifiers tracker twbs:bootstrap underscore -markoshust:radium okgrow:analytics mizzao:user-status quark:electron crosswalk -meteorhacks:npm - - -npm-container long:google-contacts cfs:standard-packages -cosmos:browserify@=0.9.3 -izzilab:material-ui@=0.2.6 http raix:push cfs:gridfs force-ssl msavin:mongol +srtucker22:throttled-requester +standard-minifier-css +standard-minifier-js +ecmascript +react-meteor-data diff --git a/.meteor/release b/.meteor/release index cca846a..7ab69c9 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.3-cordova-beta.3 +METEOR@1.3-beta.11 diff --git a/.meteor/versions b/.meteor/versions index c2e71b1..24b9765 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,31 +1,31 @@ -accounts-base@1.2.3-cordova.3 +accounts-base@1.2.3-beta.11 accounts-google@1.0.6 -accounts-oauth@1.1.8 -accounts-password@1.1.5-cordova.3 +accounts-oauth@1.1.9-beta.11 +accounts-password@1.1.5-beta.11 accounts-ui@1.1.6 -accounts-ui-unstyled@1.1.8 +accounts-ui-unstyled@1.1.9-beta.11 alanning:roles@1.2.14 aldeed:collection2@2.8.0 aldeed:collection2-core@1.0.0 aldeed:schema-deny@1.0.1 aldeed:schema-index@1.0.1 aldeed:simple-schema@1.5.3 -allow-deny@1.0.1-cordova.3 +allow-deny@1.0.1-beta.11 artwells:accounts-guest@0.1.13 -autoupdate@1.2.5-cordova.3 -babel-compiler@5.8.25-cordova.3 -babel-runtime@0.1.5-cordova.3 -base64@1.0.4 -binary-heap@1.0.4 -blaze@2.1.4-cordova.3 +autoupdate@1.2.5-beta.11 +babel-compiler@6.4.0-beta.11 +babel-runtime@0.1.5-beta.11 +base64@1.0.5-beta.11 +binary-heap@1.0.5-beta.11 +blaze@2.1.4-beta.11 blaze-html-templates@1.0.1 -blaze-tools@1.0.4 -boilerplate-generator@1.0.5-cordova.3 +blaze-tools@1.0.5-beta.11 +boilerplate-generator@1.0.5-beta.11 brettle:accounts-login-state@0.0.4 brettle:accounts-patch-ui@0.1.3 -caching-compiler@1.0.1-cordova.3 -caching-html-compiler@1.0.2 -callback-hook@1.0.4 +caching-compiler@1.0.1-beta.11 +caching-html-compiler@1.0.3-beta.11 +callback-hook@1.0.5-beta.11 cfs:access-point@0.1.49 cfs:base-package@0.0.30 cfs:collection@0.5.5 @@ -43,109 +43,102 @@ cfs:storage-adapter@0.2.3 cfs:tempstore@0.1.5 cfs:upload-http@0.0.20 cfs:worker@0.1.4 -check@1.1.1-cordova.3 -coffeescript@1.0.12-cordova.3 -cosmos:browserify@0.9.3 -crosswalk@1.4.0-cordova.3 +check@1.1.1-beta.11 +coffeescript@1.0.12-beta.11 +crosswalk@1.4.0-beta.11 dburles:mongo-collection-instances@0.3.4 ddp@1.2.2 -ddp-client@1.2.2-cordova.3 +ddp-client@1.2.2-beta.11 ddp-common@1.2.2 -ddp-rate-limiter@1.0.1-cordova.3 -ddp-server@1.2.3-cordova.3 +ddp-rate-limiter@1.0.1-beta.11 +ddp-server@1.2.3-beta.11 deps@1.0.9 -diff-sequence@1.0.1 -ecmascript@0.3.1-cordova.3 -ecmascript-runtime@0.2.6 -ejson@1.0.7 -email@1.0.9-cordova.3 -fastclick@1.0.7 -force-ssl@1.0.6 -geojson-utils@1.0.4 -google@1.1.7 -hot-code-push@1.0.0 -html-tools@1.0.5 -htmljs@1.0.6-cordova.3 -http@1.1.2-cordova.3 +diff-sequence@1.0.2-beta.11 +ecmascript@0.4.0-beta.11 +ecmascript-runtime@0.2.7-beta.11 +ejson@1.0.8-beta.11 +email@1.0.9-beta.11 +fastclick@1.0.8-beta.11 +force-ssl@1.0.8-beta.11 +geojson-utils@1.0.5-beta.11 +google@1.1.8-beta.11 +hot-code-push@1.0.1-beta.11 +html-tools@1.0.6-beta.11 +htmljs@1.0.6-beta.11 +http@1.1.2-beta.11 id-map@1.0.4 -izzilab:material-ui@0.2.6 johnantoni:meteor-normalize@0.0.1 -jquery@1.11.4 +jquery@1.11.5-beta.11 jsx@0.2.4 lai:collection-extensions@0.1.4 -launch-screen@1.0.5-cordova.3 +launch-screen@1.0.6-beta.11 lepozepo:streams@0.2.0 -less@2.5.2-cordova.3 +less@2.5.2-beta.11 livedata@1.0.15 -localstorage@1.0.5 -logging@1.0.9-cordova.3 +localstorage@1.0.6-beta.11 +logging@1.0.9-beta.11 long:google-contacts@0.2.1 -markoshust:radium@0.15.3 mdg:validation-error@0.4.0 -meteor@1.1.11-cordova.3 +meteor@1.1.11-beta.11 meteor-base@1.0.1 +meteor-env-dev@0.0.1-beta.11 +meteor-env-prod@0.0.1-beta.11 meteorflux:dispatcher@1.2.3 meteorflux:namespace@1.0.0 meteorflux:reactive-dependency@0.1.1 -meteorhacks:async@1.0.0 meteorhacks:kadira@2.27.3 meteorhacks:meteorx@1.4.1 -meteorhacks:npm@1.5.0 meteortoys:toykit@2.2.1 -minifiers-css@1.1.8-cordova.3 -minifiers-js@1.1.8-cordova.3 -minimongo@1.0.11-cordova.3 +minifier-css@1.1.8-beta.11 +minifier-js@1.1.8-beta.11 +minimongo@1.0.11-beta.11 mizzao:timesync@0.3.4 mizzao:user-status@0.6.6 mobile-experience@1.0.1 -mobile-status-bar@1.0.7-cordova.3 +mobile-status-bar@1.0.8-beta.11 +modules@0.5.0-beta.11 +modules-runtime@0.5.0-beta.11 momentjs:moment@2.11.2 -mongo@1.1.4-cordova.3 +mongo@1.1.4-beta.11 mongo-id@1.0.1 mongo-livedata@1.0.9 msavin:mongol@1.6.2 npm-bcrypt@0.7.8_2 -npm-container@1.2.0 -npm-mongo@1.4.40-cordova.3 -oauth@1.1.7-cordova.3 -oauth2@1.1.5 -observe-sequence@1.0.7 +npm-mongo@1.4.40-beta.11 +oauth@1.1.7-beta.11 +oauth2@1.1.6-beta.11 +observe-sequence@1.0.8-beta.11 okgrow:analytics@1.0.4 ordered-dict@1.0.4 -promise@0.5.2-cordova.3 +promise@0.5.2-beta.11 quark:electron@0.1.3 raix:eventemitter@0.1.3 raix:eventstate@0.0.4 raix:push@3.0.2 -random@1.0.5 -rate-limit@1.0.0 -react@0.14.3_1 +random@1.0.6-beta.11 +rate-limit@1.0.1-beta.11 react-meteor-data@0.2.5 -react-runtime@0.14.4 -react-runtime-dev@0.14.4 -react-runtime-prod@0.14.4 -reactive-dict@1.1.4-cordova.3 +reactive-dict@1.1.4-beta.11 reactive-var@1.0.6 -reactrouter:react-router@0.1.12 -reload@1.1.5-cordova.3 +reload@1.1.5-beta.11 retry@1.0.4 -routepolicy@1.0.6 -service-configuration@1.0.5 -session@1.1.1 +routepolicy@1.0.7-beta.11 +service-configuration@1.0.6-beta.11 +session@1.1.2-beta.11 sha@1.0.4 -spacebars@1.0.8-cordova.3 -spacebars-compiler@1.0.8-cordova.3 -spiderable@1.0.10-cordova.3 -srp@1.0.4 -standard-minifiers@1.0.3-cordova.3 -standard-minifiers-css@1.0.3-cordova.3 -standard-minifiers-js@1.0.3-cordova.3 -templating@1.1.6-cordova.3 -templating-tools@1.0.1-cordova.3 -tracker@1.0.9 +spacebars@1.0.8-beta.11 +spacebars-compiler@1.0.8-beta.11 +spiderable@1.0.10-beta.11 +srp@1.0.5-beta.11 +srtucker22:throttled-requester@0.0.1 +standard-minifier-css@1.0.3-beta.11 +standard-minifier-js@1.0.3-beta.11 +templating@1.1.6-beta.11 +templating-tools@1.0.1-beta.11 +tracker@1.0.10-beta.11 twbs:bootstrap@3.3.6 ui@1.0.8 -underscore@1.0.4 -url@1.0.5 -webapp@1.2.4-cordova.3 -webapp-hashing@1.0.5 +underscore@1.0.5-beta.11 +url@1.0.6-beta.11 +webapp@1.2.5-beta.11 +webapp-hashing@1.0.6-beta.11 diff --git a/README.md b/README.md index d295ac9..230f176 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,14 @@ It is also an example of how to create a WebRTC video chatroom and of how to int 5. Run the app with the settings meteor --settings settings.json +### Deployment Notes: + +To deploy to a remote server, consider using a package like Meteor Up + ### Electron Notes: +*Do NOT include the 'electron' field in your settings.json file if you are not running quasar from a Windows or Mac machine. meteor-electron will throw errors if you try and build from a Linux machine.* + quasar uses meteor-electron to easily transform into a downloadable desktop app and update as you develop. For settings.json configuration for this feature, please refer to the meteor-electron documentation. meteor-electron has been modified to build a compressed version of the quasar desktop app at quasar/public/downloads/{platform}-{arch}/quasar.zip, which browser versions can reference for easy downloading. See download-button.component.jsx for how components reference this directory. @@ -88,7 +94,7 @@ To run the Electron app pointing to localhost, exclude the rootUrl ## Application Design Overview -As mentioned previously, quasar is an example of how to create a WebRTC video chatroom and also of how to integrate React and Flux in a Meteor app. +Quasar is an example of how to create a WebRTC video chatroom and also of how to integrate React and Flux in a Meteor app. Don't know React or Flux? No problem! @@ -137,13 +143,10 @@ quasar is intended to be an example of how to create a WebRTC video chatroom and - Change the name of the project to make it more accessible for projected users (suggestions welcome) ## TODO -- local material icons - Enhance invite workflow - - mobile -- you send an invite to a room to active users - - if an invitee opens the app after a notification and the inviter is active, - they will get a dialog asking to join the room and a notification in their quasar notification list for retrieval -- which shows 'join' cta until the users leave the room - - if you invite non-users, they will go through auth flow and then directed to the room. if the room is empty, user will be directed to notifications list on mobile or homepage on desktop. -- Implement a global namespace for appName (clarify meaning) + - mobile -- you send an invite + - if an active invitee opens the app after a notification and the inviter is active, they will get a dialog asking to join the room and a notification in their quasar notification list for retrieval -- which shows 'join' cta until the users leave the room + - if you invite non-users, they will go directly to room as guest. if the room is empty, user will be directed to notifications list on mobile or homepage on desktop. ~ implement with invitation codes in email - Add raix push notifications for cordova to enhance mobile support - Add TURN server support to make it more useful for real-world deployment - Package the application to make it easier to install diff --git a/client/actions/user.actions.jsx b/client/actions/user.actions.jsx index 6629086..ce7c27e 100644 --- a/client/actions/user.actions.jsx +++ b/client/actions/user.actions.jsx @@ -29,6 +29,10 @@ var UserActions = function() { Dispatcher.dispatch({actionType: 'USER_LOGIN_PASSWORD'}); }, + loginAsGuest() { + Dispatcher.dispatch({actionType: 'USER_LOGIN_GUEST'}); + }, + loginWithGoogle() { Dispatcher.dispatch({actionType: 'USER_LOGIN_GOOGLE'}); }, diff --git a/client/components/app.component.jsx b/client/components/app.component.jsx index e98dec2..4fcaa6e 100644 --- a/client/components/app.component.jsx +++ b/client/components/app.component.jsx @@ -19,6 +19,10 @@ * */ +import MUI from 'material-ui'; +import Radium from 'radium'; +import React from 'react'; + let {ThemeManager, LightRawTheme} = MUI.Styles; const styles = { @@ -27,7 +31,7 @@ const styles = { } }; -AppComponent = Radium(React.createClass({ +export const AppComponent = Radium(React.createClass({ childContextTypes: { muiTheme: React.PropTypes.object, }, @@ -44,7 +48,9 @@ AppComponent = Radium(React.createClass({ render() { return ( -
{this.props.children}
+
+ {this.props.children} +
); }, })); diff --git a/client/components/home-mobile.component.jsx b/client/components/home-mobile.component.jsx index 8f6268b..4a78339 100644 --- a/client/components/home-mobile.component.jsx +++ b/client/components/home-mobile.component.jsx @@ -20,7 +20,11 @@ */ // Dependencies -const {History} = ReactRouter; +import {browserHistory} from 'react-router'; +import MUI from 'material-ui'; +import Radium from 'radium'; +import React from 'react'; + const { Avatar, Dialog, @@ -31,7 +35,8 @@ const { ListDivider, ListItem, RaisedButton, - Styles: {Colors} + Styles: {Colors}, + TextField } = MUI; const styles = { @@ -70,8 +75,8 @@ Dependency.autorun(()=> { UserStore = Dependency.get('UserStore'); }); -HomeMobileComponent = Radium(React.createClass({ - mixins: [ReactMeteorData, History], +export default HomeMobileComponent = Radium(React.createClass({ + mixins: [ReactMeteorData], getMeteorData() { return { @@ -83,17 +88,26 @@ HomeMobileComponent = Radium(React.createClass({ }, handleOpen() { - this.setState({open: true}); + setTimeout(()=> { + this.setState({open: true}); + }, 0); }, handleClose() { - this.setState({open: false}); + setTimeout(()=> { + this.setState({open: false}); + }, 0); }, invite() { - if (this.state.invitees) { - RoomActions.invite(this.state.invitees); - } + setTimeout(()=> { + if (this.state.invitees) { + RoomActions.invite(this.state.invitees); + this.setState({ + loading: true + }); + } + },0); }, componentWillMount() { @@ -102,17 +116,10 @@ HomeMobileComponent = Radium(React.createClass({ componentWillUpdate(nextProps, nextState) { if (this.data.currentRoom) { - this.history.pushState(null, '/room/' + this.data.currentRoom._id); + browserHistory.push('/room/' + this.data.currentRoom._id); } }, - createRoom() { - RoomActions.createRoom(); - this.setState({ - loading: true - }); - }, - getInitialState() { return { loading: false, @@ -120,6 +127,10 @@ HomeMobileComponent = Radium(React.createClass({ }; }, + loginWithGoogle() { + UserActions.loginWithGoogle(); + }, + onTypeaheadChange(state) { this.setState({ invitees: state.invitees @@ -132,6 +143,10 @@ HomeMobileComponent = Radium(React.createClass({ }); }, + updateProfileName(e) { + UserActions.updateProfileName(e.target.value); + }, + render() { const actions = [ , , ]; return ( - (!!this.data.user && !!this.data.user.services && !!this.data.user.services.google) ? + (!!this.data.user) ? (
+ {this.state.loading ? + : '' + } : ''} + onChange={this.onTypeaheadChange}/> : '' + }
- {'Contacts who are already using quasar will receive a notification. New users will be sent an email request.'} + {UserStore.isGuest() ? : ''} + {'Contacts who are already using ' + AppDetails.name + ' will receive a notification. New users will be sent an email request.'} { UserActions = Dependency.get('UserActions'); }); -HomeComponent = Radium(React.createClass({ - mixins: [ReactMeteorData, History], +export default HomeComponent = Radium(React.createClass({ + mixins: [ReactMeteorData], getMeteorData() { return { @@ -73,7 +83,7 @@ HomeComponent = Radium(React.createClass({ componentWillUpdate(nextProps, nextState) { if (this.data.currentRoom) { - this.history.pushState(null, '/room/' + this.data.currentRoom._id); + browserHistory.push('/room/' + this.data.currentRoom._id); } }, diff --git a/client/components/intro.component.jsx b/client/components/intro.component.jsx index f3a01d9..4f726ad 100644 --- a/client/components/intro.component.jsx +++ b/client/components/intro.component.jsx @@ -20,6 +20,13 @@ */ // Dependencies +import GithubComponent from './modules/github.component.jsx'; +import LoadingDialogComponent from './modules/loading-dialog.component.jsx'; +import MUI from 'material-ui'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import Radium from 'radium'; +import React from 'react'; + const { RaisedButton, Styles: {Colors} @@ -28,7 +35,7 @@ const { const styles = { css: { backgroundAttachment: 'fixed', - backgroundImage: 'url(images/quasar.jpg)', + backgroundImage: 'url(' + (Meteor.isCordova ? '/local-filesystem/images/quasar.jpg' : 'images/quasar.jpg') + ')', backgroundPosition: 'center center', backgroundRepeat: 'no-repeat', backgroundSize: 'cover', @@ -55,8 +62,8 @@ Dependency.autorun(()=> { UserStore = Dependency.get('UserStore'); }); -IntroComponent = Radium(React.createClass({ - mixins: [ReactMeteorData], +export default IntroComponent = Radium(React.createClass({ + mixins: [PureRenderMixin, ReactMeteorData], getMeteorData() { return { @@ -65,6 +72,10 @@ IntroComponent = Radium(React.createClass({ }; }, + loginAsGuest() { + UserActions.loginAsGuest(); + }, + loginWithGoogle() { UserActions.loginWithGoogle(); }, @@ -72,16 +83,24 @@ IntroComponent = Radium(React.createClass({ render() { return (
+
-

{'quasar'}

+

{AppDetails.name}


+
+
diff --git a/client/components/modules/answer-dialog.component.jsx b/client/components/modules/answer-dialog.component.jsx index b660935..d37bb2c 100644 --- a/client/components/modules/answer-dialog.component.jsx +++ b/client/components/modules/answer-dialog.component.jsx @@ -19,6 +19,12 @@ * */ +import MUI from 'material-ui'; +import LoadingDialogComponent from './loading-dialog.component.jsx'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import Radium from 'radium'; +import React from 'react'; + const { Dialog, FlatButton, @@ -41,9 +47,14 @@ Dependency.autorun(()=> { GlobalStyles = Dependency.get('NotificationActions'); }); -AnswerDialogComponent = Radium(React.createClass({ +export default AnswerDialogComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], + answer() { NotificationActions.accept(); + this.setState({ + loading: true + }); }, reject() { NotificationActions.reject(); @@ -70,6 +81,9 @@ AnswerDialogComponent = Radium(React.createClass({ open={!!this.props.invitation} onRequestClose={this.handleClose} > + {this.state.loading ? + : '' + } ); }, diff --git a/client/components/modules/calling-overlay.component.jsx b/client/components/modules/calling-overlay.component.jsx index dfcc319..5b61579 100644 --- a/client/components/modules/calling-overlay.component.jsx +++ b/client/components/modules/calling-overlay.component.jsx @@ -19,7 +19,11 @@ * */ -const {History} = ReactRouter; +import {browserHistory} from 'react-router'; +import MUI from 'material-ui'; +import Radium from 'radium'; +import React from 'react'; + const { CircularProgress, RaisedButton, @@ -48,8 +52,8 @@ Dependency.autorun(()=> { RoomStore = Dependency.get('RoomStore'); }); -CallingOverlayComponent = Radium(React.createClass({ - mixins: [ReactMeteorData, History], +export default CallingOverlayComponent = Radium(React.createClass({ + mixins: [ReactMeteorData], getMeteorData() { return { @@ -59,7 +63,7 @@ CallingOverlayComponent = Radium(React.createClass({ }, leave() { - this.history.pushState(null, '/'); + browserHistory.push('/'); }, retry() { diff --git a/client/components/modules/controls.component.jsx b/client/components/modules/controls.component.jsx index 3939234..d05695e 100644 --- a/client/components/modules/controls.component.jsx +++ b/client/components/modules/controls.component.jsx @@ -19,7 +19,11 @@ * */ -const {History} = ReactRouter; +import {browserHistory} from 'react-router'; +import MUI from 'material-ui'; +import Radium from 'radium'; +import React from 'react'; + const { FontIcon, FlatButton, @@ -90,8 +94,8 @@ Dependency.autorun(()=> { RTCStore = Dependency.get('RTCStore'); }); -ControlsComponent = Radium(React.createClass({ - mixins: [ReactMeteorData, History], +export default ControlsComponent = Radium(React.createClass({ + mixins: [ReactMeteorData], getInitialState: function() { return {visible: false}; @@ -106,7 +110,15 @@ ControlsComponent = Radium(React.createClass({ }, leave() { - this.history.pushState(null, '/'); + setTimeout(()=> { + browserHistory.push('/'); + }, 0); + }, + + showInviteModal() { + setTimeout(()=> { + RoomActions.showInviteModal(); + }, 0); }, toggleLocalAudio() { @@ -130,7 +142,7 @@ ControlsComponent = Radium(React.createClass({ this.data.controlsVisible) ? styles.controls.visible : {} )}>
{ GlobalStyles = Dependency.get('GlobalStyles'); }); -DownloadButtonComponent = Radium(React.createClass({ +export default DownloadButtonComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { let platforms = { mac: { diff --git a/client/components/modules/error.component.jsx b/client/components/modules/error.component.jsx index 86dd874..368b5bc 100644 --- a/client/components/modules/error.component.jsx +++ b/client/components/modules/error.component.jsx @@ -19,7 +19,13 @@ * */ -const {History} = ReactRouter; +import Browser from 'bowser'; +import {browserHistory} from 'react-router'; +import MUI from 'material-ui'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import Radium from 'radium'; +import React from 'react'; + const { FontIcon, RaisedButton, @@ -84,6 +90,7 @@ Dependency.autorun(()=> { // Ask for permission to use the camera and microphone on the user's computer let PermissionDeniedComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (
@@ -112,7 +119,7 @@ let PermissionDeniedComponent = Radium(React.createClass({
@@ -123,6 +130,7 @@ let PermissionDeniedComponent = Radium(React.createClass({ // Warn that the user is already connected to the room in a different window, tab or browser let DuplicateErrorComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (
@@ -133,7 +141,7 @@ let DuplicateErrorComponent = Radium(React.createClass({
@@ -143,6 +151,7 @@ let DuplicateErrorComponent = Radium(React.createClass({ // Warn that there has been a general error and ask the user to refresh the session let GeneralErrorComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (
@@ -153,7 +162,7 @@ let GeneralErrorComponent = Radium(React.createClass({
@@ -163,6 +172,7 @@ let GeneralErrorComponent = Radium(React.createClass({ // Alert the user that their browser is not supported and suggest they try Chrome or Firefox let NotSupportedErrorComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (
@@ -176,7 +186,7 @@ let NotSupportedErrorComponent = Radium(React.createClass({
@@ -185,11 +195,11 @@ let NotSupportedErrorComponent = Radium(React.createClass({ })); // Logic for determining which error message to show when something goes wrong -ErrorComponent = Radium(React.createClass({ - mixins: [History], +export default ErrorComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], back() { - this.history.pushState(null, '/'); + browserHistory.push('/'); }, render() { diff --git a/client/components/modules/first-overlay.component.jsx b/client/components/modules/first-overlay.component.jsx index af3f818..0d7a5c3 100644 --- a/client/components/modules/first-overlay.component.jsx +++ b/client/components/modules/first-overlay.component.jsx @@ -19,6 +19,11 @@ * */ +import MUI from 'material-ui'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import Radium from 'radium'; +import React from 'react'; + const { RaisedButton, Styles: {Colors} @@ -68,7 +73,8 @@ Dependency.autorun(()=> { RoomActions = Dependency.get('RoomActions'); }); -FirstOverlayComponent = Radium(React.createClass({ +export default FirstOverlayComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (
diff --git a/client/components/modules/footer.component.jsx b/client/components/modules/footer.component.jsx index f453400..2178390 100644 --- a/client/components/modules/footer.component.jsx +++ b/client/components/modules/footer.component.jsx @@ -19,6 +19,11 @@ * */ +import MUI from 'material-ui'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import Radium from 'radium'; +import React from 'react'; + const styles = { css: { width: '100%', @@ -34,7 +39,8 @@ Dependency.autorun(()=> { let glipcode = {name: 'Glipcode', href: 'http://glipcode.com/'}; let meteorFlux = {name: 'MeteorFlux', href: 'https://github.com/meteorflux'}; -FooterComponent = Radium(React.createClass({ +export default FooterComponent = Radium(React.createClass({ + mixins: [PureRenderMixin], render() { return (