diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders index 3e712bc..a541808 100644 --- a/.meteor/.finished-upgraders +++ b/.meteor/.finished-upgraders @@ -13,3 +13,4 @@ notices-for-facebook-graph-api-2 1.3.0-split-minifiers-package 1.3.5-remove-old-dev-bundle-link 1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package diff --git a/.meteor/packages b/.meteor/packages index cb32a5a..6e488ac 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -6,19 +6,19 @@ meteor-base@1.0.4 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.10 # The database Meteor supports right now -reactive-var@1.0.10 # Reactive variable for tracker -session@1.1.6 -tracker@1.1.0 # Meteor's client-side reactive programming library +mongo@1.1.14 # The database Meteor supports right now +reactive-var@1.0.11 # Reactive variable for tracker +session@1.1.7 +tracker@1.1.1 # Meteor's client-side reactive programming library -standard-minifier-css@1.1.8 # CSS minifier run for production mode -standard-minifier-js@1.1.8 # JS minifier run for production mode -es5-shim@4.6.13 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.5.7 # Enable ECMAScript2015+ syntax in app code +standard-minifier-css@1.3.2 # CSS minifier run for production mode +standard-minifier-js@1.2.1 # JS minifier run for production mode +es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. +ecmascript@0.5.9 # Enable ECMAScript2015+ syntax in app code -accounts-password@1.2.12 -accounts-base@1.2.9 -check@1.2.3 +accounts-password@1.3.1 +accounts-base@1.2.14 +check@1.2.4 audit-argument-checks@1.0.7 browser-policy@1.0.9 @@ -32,4 +32,5 @@ practicalmeteor:mocha xolvio:backdoor mdg:validated-method dburles:factory@1.0.0 -ddp-rate-limiter@1.0.5 +ddp-rate-limiter@1.0.6 +shell-server diff --git a/.meteor/release b/.meteor/release index c85944c..c260846 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.4.0.1 +METEOR@1.4.2 diff --git a/.meteor/versions b/.meteor/versions index 6747b7b..6092391 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,106 +1,109 @@ -accounts-base@1.2.10 -accounts-password@1.2.14 +accounts-base@1.2.14 +accounts-password@1.3.1 alanning:roles@1.2.15 -aldeed:collection2@2.9.1 -aldeed:collection2-core@1.1.1 -aldeed:schema-deny@1.0.1 -aldeed:schema-index@1.0.1 +aldeed:collection2@2.10.0 +aldeed:collection2-core@1.2.0 +aldeed:schema-deny@1.1.0 +aldeed:schema-index@1.1.0 aldeed:simple-schema@1.5.3 allow-deny@1.0.5 audit-argument-checks@1.0.7 -autoupdate@1.2.11 -babel-compiler@6.9.0 -babel-runtime@0.1.10 -base64@1.0.9 -binary-heap@1.0.9 -blaze@2.1.8 -blaze-tools@1.0.9 -boilerplate-generator@1.0.9 +autoupdate@1.3.12 +babel-compiler@6.13.0 +babel-runtime@0.1.12 +base64@1.0.10 +binary-heap@1.0.10 +blaze@2.1.9 +blaze-tools@1.0.10 +boilerplate-generator@1.0.11 browser-policy@1.0.9 -browser-policy-common@1.0.10 -browser-policy-content@1.0.11 -browser-policy-framing@1.0.11 -caching-compiler@1.0.6 -caching-html-compiler@1.0.6 -callback-hook@1.0.9 -check@1.2.3 -coffeescript@1.1.4 +browser-policy-common@1.0.11 +browser-policy-content@1.0.12 +browser-policy-framing@1.0.12 +caching-compiler@1.1.8 +caching-html-compiler@1.0.7 +callback-hook@1.0.10 +check@1.2.4 +coffeescript@1.11.1_2 dburles:factory@1.1.0 ddp@1.2.5 -ddp-client@1.2.9 -ddp-common@1.2.6 -ddp-rate-limiter@1.0.5 -ddp-server@1.2.10 +ddp-client@1.3.2 +ddp-common@1.2.7 +ddp-rate-limiter@1.0.6 +ddp-server@1.3.11 deps@1.0.12 -diff-sequence@1.0.6 -ecmascript@0.5.7 -ecmascript-runtime@0.3.13 -ejson@1.0.12 -email@1.1.16 -es5-shim@4.6.13 -fastclick@1.0.12 -fortawesome:fontawesome@4.5.0 -fourseven:scss@3.8.1 -geojson-utils@1.0.9 +diff-sequence@1.0.7 +ecmascript@0.5.9 +ecmascript-runtime@0.3.15 +ejson@1.0.13 +email@1.1.18 +es5-shim@4.6.15 +fastclick@1.0.13 +fortawesome:fontawesome@4.6.3 +fourseven:scss@3.10.0 +geojson-utils@1.0.10 hot-code-push@1.0.4 -html-tools@1.0.10 -htmljs@1.0.10 -http@1.1.8 -id-map@1.0.8 -jquery@1.11.9 -launch-screen@1.0.12 +html-tools@1.0.11 +htmljs@1.0.11 +http@1.2.10 +id-map@1.0.9 +jquery@1.11.10 +launch-screen@1.1.0 livedata@1.0.18 -localstorage@1.0.11 -logging@1.1.14 +localstorage@1.0.12 +logging@1.1.16 mdg:validated-method@1.1.0 mdg:validation-error@0.5.1 -meteor@1.2.16 +meteor@1.6.0 meteor-base@1.0.4 -minifier-css@1.2.13 -minifier-js@1.2.13 -minimongo@1.0.17 +minifier-css@1.2.15 +minifier-js@1.2.15 +minimongo@1.0.18 mobile-experience@1.0.4 -mobile-status-bar@1.0.12 -modules@0.7.5 -modules-runtime@0.7.5 -mongo@1.1.10 -mongo-id@1.0.5 -npm-bcrypt@0.8.7_1 -npm-mongo@1.5.45 -observe-sequence@1.0.12 -ordered-dict@1.0.8 +mobile-status-bar@1.0.13 +modules@0.7.7 +modules-runtime@0.7.7 +mongo@1.1.14 +mongo-id@1.0.6 +npm-bcrypt@0.9.2 +npm-mongo@2.2.11_2 +observe-sequence@1.0.14 +ordered-dict@1.0.9 practicalmeteor:chai@2.1.0_1 practicalmeteor:loglevel@1.2.0_2 practicalmeteor:mocha@2.4.5_6 practicalmeteor:mocha-core@1.0.1 practicalmeteor:sinon@1.14.1_2 -promise@0.8.3 +promise@0.8.8 raix:eventemitter@0.1.3 random@1.0.10 -rate-limit@1.0.5 +rate-limit@1.0.6 reactive-dict@1.1.8 -reactive-var@1.0.10 -reload@1.1.10 -retry@1.0.8 -routepolicy@1.0.11 -service-configuration@1.0.10 -session@1.1.6 -sha@1.0.8 -spacebars@1.0.12 -spacebars-compiler@1.0.12 -srp@1.0.9 -standard-minifier-css@1.1.8 -standard-minifier-js@1.1.8 -static-html@1.1.11 -templating@1.1.14 -templating-tools@1.0.4 +reactive-var@1.0.11 +reload@1.1.11 +retry@1.0.9 +routepolicy@1.0.12 +service-configuration@1.0.11 +session@1.1.7 +sha@1.0.9 +shell-server@0.2.1 +spacebars@1.0.13 +spacebars-compiler@1.0.13 +srp@1.0.10 +standard-minifier-css@1.3.2 +standard-minifier-js@1.2.1 +static-html@1.1.13 +templating@1.2.15 +templating-compiler@1.2.15 +templating-runtime@1.2.15 +templating-tools@1.0.5 themeteorchef:bert@2.1.1 tmeasday:test-reporter-helpers@0.2.1 -tracker@1.1.0 -ui@1.0.11 -underscore@1.0.9 -url@1.0.10 -webapp@1.3.10 +tracker@1.1.1 +ui@1.0.12 +underscore@1.0.10 +url@1.0.11 +webapp@1.3.12 webapp-hashing@1.0.9 -xolvio:backdoor@0.2.0 +xolvio:backdoor@0.2.1 xolvio:cleaner@0.3.1 diff --git a/README.md b/README.md index 9afdc91..915afca 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ A starting point for Meteor apps. Base Version - v4.7.0 + v4.8.0 Meteor Version - v1.4.0.1 + v1.4.2 diff --git a/imports/api/documents/documents.js b/imports/api/documents/documents.js index c9570dc..5578ed5 100644 --- a/imports/api/documents/documents.js +++ b/imports/api/documents/documents.js @@ -1,4 +1,4 @@ -import faker from 'faker'; +if (Meteor.isClient) import faker from 'faker'; import { Mongo } from 'meteor/mongo'; import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { Factory } from 'meteor/dburles:factory'; diff --git a/imports/api/documents/methods.js b/imports/api/documents/methods.js index c2339bd..dac5b4c 100644 --- a/imports/api/documents/methods.js +++ b/imports/api/documents/methods.js @@ -1,6 +1,6 @@ -import { Documents } from './documents'; import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { ValidatedMethod } from 'meteor/mdg:validated-method'; +import { Documents } from './documents'; import { rateLimit } from '../../modules/rate-limit.js'; export const insertDocument = new ValidatedMethod({ diff --git a/imports/modules/get-input-value.js b/imports/modules/get-input-value.js deleted file mode 100644 index 365711b..0000000 --- a/imports/modules/get-input-value.js +++ /dev/null @@ -1,3 +0,0 @@ -import ReactDOM from 'react-dom'; - -export const getInputValue = (component) => ReactDOM.findDOMNode(component).value; diff --git a/imports/startup/client/routes.js b/imports/startup/client/routes.js index 85eebae..2ca0b69 100644 --- a/imports/startup/client/routes.js +++ b/imports/startup/client/routes.js @@ -2,14 +2,14 @@ import React from 'react'; import { render } from 'react-dom'; import { Router, Route, IndexRoute, browserHistory } from 'react-router'; import { Meteor } from 'meteor/meteor'; -import { App } from '../../ui/layouts/app'; -import { Documents } from '../../ui/pages/documents'; -import { Index } from '../../ui/pages/index'; -import { Login } from '../../ui/pages/login'; -import { NotFound } from '../../ui/pages/not-found'; -import { RecoverPassword } from '../../ui/pages/recover-password'; -import { ResetPassword } from '../../ui/pages/reset-password'; -import { Signup } from '../../ui/pages/signup'; +import { App } from '../../ui/layouts/App.js'; +import { Documents } from '../../ui/pages/Documents.js'; +import { Index } from '../../ui/pages/Index.js'; +import { Login } from '../../ui/pages/Login.js'; +import { NotFound } from '../../ui/pages/NotFound.js'; +import { RecoverPassword } from '../../ui/pages/RecoverPassword.js'; +import { ResetPassword } from '../../ui/pages/ResetPassword.js'; +import { Signup } from '../../ui/pages/Signup.js'; const requireAuth = (nextState, replace) => { if (!Meteor.loggingIn() && !Meteor.userId()) { diff --git a/imports/ui/components/AddDocument.js b/imports/ui/components/AddDocument.js new file mode 100644 index 0000000..9cc7156 --- /dev/null +++ b/imports/ui/components/AddDocument.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { FormGroup, FormControl } from 'react-bootstrap'; +import { Bert } from 'meteor/themeteorchef:bert'; +import { insertDocument } from '../../api/documents/methods.js'; + +const handleInsertDocument = (event) => { + const target = event.target; + const title = target.value.trim(); + + if (title !== '' && event.keyCode === 13) { + insertDocument.call({ + title, + }, (error) => { + if (error) { + Bert.alert(error.reason, 'danger'); + } else { + target.value = ''; + Bert.alert('Document added!', 'success'); + } + }); + } +}; + +const AddDocument = () => ( + + + +); + +export default AddDocument; diff --git a/imports/ui/components/AppNavigation.js b/imports/ui/components/AppNavigation.js new file mode 100644 index 0000000..a22edb8 --- /dev/null +++ b/imports/ui/components/AppNavigation.js @@ -0,0 +1,27 @@ +import React from 'react'; +import { Navbar } from 'react-bootstrap'; +import { Link } from 'react-router'; +import { PublicNavigation } from './PublicNavigation.js'; +import { AuthenticatedNavigation } from './AuthenticatedNavigation.js'; + +const renderNavigation = hasUser => (hasUser ? : ); + +const AppNavigation = ({ hasUser }) => ( + + + + Application Name + + + + + { renderNavigation(hasUser) } + + +); + +AppNavigation.propTypes = { + hasUser: React.PropTypes.object, +}; + +export default AppNavigation; diff --git a/imports/ui/components/AuthenticatedNavigation.js b/imports/ui/components/AuthenticatedNavigation.js new file mode 100644 index 0000000..b75c066 --- /dev/null +++ b/imports/ui/components/AuthenticatedNavigation.js @@ -0,0 +1,33 @@ +import React from 'react'; +import { browserHistory } from 'react-router'; +import { IndexLinkContainer, LinkContainer } from 'react-router-bootstrap'; +import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap'; +import { Meteor } from 'meteor/meteor'; + +const handleLogout = () => Meteor.logout(() => browserHistory.push('/login')); + +const userName = () => { + const user = Meteor.user(); + const name = user && user.profile ? user.profile.name : ''; + return user ? `${name.first} ${name.last}` : ''; +}; + +const AuthenticatedNavigation = () => ( +
+ + +
+); + +export default AuthenticatedNavigation; diff --git a/imports/ui/components/DocumentsList.js b/imports/ui/components/DocumentsList.js new file mode 100644 index 0000000..288613b --- /dev/null +++ b/imports/ui/components/DocumentsList.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { ListGroup, Alert } from 'react-bootstrap'; +import { Document } from './Document.js'; + +const DocumentsList = ({ documents }) => ( + documents.length > 0 ? + {documents.map(doc => ( + + ))} + : + No documents yet. +); + +DocumentsList.propTypes = { + documents: React.PropTypes.array, +}; + +export default DocumentsList; diff --git a/imports/ui/components/PublicNavigation.js b/imports/ui/components/PublicNavigation.js new file mode 100644 index 0000000..d04fc80 --- /dev/null +++ b/imports/ui/components/PublicNavigation.js @@ -0,0 +1,16 @@ +import React from 'react'; +import { LinkContainer } from 'react-router-bootstrap'; +import { Nav, NavItem } from 'react-bootstrap'; + +const PublicNavigation = () => ( + +); + +export default PublicNavigation; diff --git a/imports/ui/components/add-document.js b/imports/ui/components/add-document.js deleted file mode 100644 index a08c345..0000000 --- a/imports/ui/components/add-document.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; -import { FormGroup, FormControl } from 'react-bootstrap'; -import { Bert } from 'meteor/themeteorchef:bert'; -import { insertDocument } from '../../api/documents/methods.js'; - -const handleInsertDocument = (event) => { - const target = event.target; - const title = target.value.trim(); - - if (title !== '' && event.keyCode === 13) { - insertDocument.call({ - title, - }, (error) => { - if (error) { - Bert.alert(error.reason, 'danger'); - } else { - target.value = ''; - Bert.alert('Document added!', 'success'); - } - }); - } -}; - -export const AddDocument = () => ( - - - -); diff --git a/imports/ui/components/app-navigation.js b/imports/ui/components/app-navigation.js deleted file mode 100644 index a8276fa..0000000 --- a/imports/ui/components/app-navigation.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import { Navbar } from 'react-bootstrap'; -import { Link } from 'react-router'; -import { PublicNavigation } from './public-navigation'; -import { AuthenticatedNavigation } from './authenticated-navigation'; - -export class AppNavigation extends React.Component { - renderNavigation(hasUser) { - return hasUser ? : ; - } - - render() { - return - - - Application Name - - - - - { this.renderNavigation(this.props.hasUser) } - - ; - } -} - -AppNavigation.propTypes = { - hasUser: React.PropTypes.object, -}; diff --git a/imports/ui/components/authenticated-navigation.js b/imports/ui/components/authenticated-navigation.js deleted file mode 100644 index ff8d001..0000000 --- a/imports/ui/components/authenticated-navigation.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import { browserHistory } from 'react-router'; -import { IndexLinkContainer, LinkContainer } from 'react-router-bootstrap'; -import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap'; -import { Meteor } from 'meteor/meteor'; - -const handleLogout = () => Meteor.logout(() => browserHistory.push('/login')); - -const userName = () => { - const user = Meteor.user(); - const name = user && user.profile ? user.profile.name : ''; - return user ? `${name.first} ${name.last}` : ''; -}; - -export const AuthenticatedNavigation = () => ( -
- - -
-); diff --git a/imports/ui/components/document.js b/imports/ui/components/document.js index 96f8ec8..0cc1ee2 100644 --- a/imports/ui/components/document.js +++ b/imports/ui/components/document.js @@ -37,7 +37,7 @@ const handleRemoveDocument = (documentId, event) => { } }; -export const Document = ({ document }) => ( +const Document = ({ document }) => ( @@ -58,3 +58,9 @@ export const Document = ({ document }) => ( ); + +Document.propTypes = { + document: React.PropTypes.object, +}; + +export default Document; diff --git a/imports/ui/components/documents-list.js b/imports/ui/components/documents-list.js deleted file mode 100644 index f61fdc9..0000000 --- a/imports/ui/components/documents-list.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { ListGroup, Alert } from 'react-bootstrap'; -import { Document } from './document.js'; - -export const DocumentsList = ({ documents }) => ( - documents.length > 0 ? - {documents.map((doc) => ( - - ))} - : - No documents yet. -); - -DocumentsList.propTypes = { - documents: React.PropTypes.array, -}; diff --git a/imports/ui/components/loading.js b/imports/ui/components/loading.js index f63d935..e7c7e7e 100644 --- a/imports/ui/components/loading.js +++ b/imports/ui/components/loading.js @@ -1,6 +1,6 @@ import React from 'react'; -export const Loading = () => ( +const Loading = () => ( ( ); + +export default Loading; diff --git a/imports/ui/components/public-navigation.js b/imports/ui/components/public-navigation.js deleted file mode 100644 index a1f4e99..0000000 --- a/imports/ui/components/public-navigation.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { LinkContainer } from 'react-router-bootstrap'; -import { Nav, NavItem } from 'react-bootstrap'; - -export const PublicNavigation = () => ( - -); diff --git a/imports/ui/containers/AppNavigation.js b/imports/ui/containers/AppNavigation.js new file mode 100644 index 0000000..f272227 --- /dev/null +++ b/imports/ui/containers/AppNavigation.js @@ -0,0 +1,7 @@ +import { composeWithTracker } from 'react-komposer'; +import { Meteor } from 'meteor/meteor'; +import { AppNavigation } from '../components/AppNavigation.js'; + +const composer = (props, onData) => onData(null, { hasUser: Meteor.user() }); + +export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation); diff --git a/imports/ui/containers/DocumentsList.js b/imports/ui/containers/DocumentsList.js new file mode 100644 index 0000000..0768ded --- /dev/null +++ b/imports/ui/containers/DocumentsList.js @@ -0,0 +1,15 @@ +import { composeWithTracker } from 'react-komposer'; +import { Meteor } from 'meteor/meteor'; +import { Documents } from '../../api/documents/documents.js'; +import { DocumentsList } from '../components/DocumentsList.js'; +import { Loading } from '../components/Loading.js'; + +const composer = (params, onData) => { + const subscription = Meteor.subscribe('documents'); + if (subscription.ready()) { + const documents = Documents.find().fetch(); + onData(null, { documents }); + } +}; + +export default composeWithTracker(composer, Loading)(DocumentsList); diff --git a/imports/ui/containers/app-navigation.js b/imports/ui/containers/app-navigation.js deleted file mode 100644 index 4e39dcb..0000000 --- a/imports/ui/containers/app-navigation.js +++ /dev/null @@ -1,9 +0,0 @@ -import { composeWithTracker } from 'react-komposer'; -import { Meteor } from 'meteor/meteor'; -import { AppNavigation } from '../components/app-navigation'; - -const composer = (props, onData) => { - onData(null, { hasUser: Meteor.user() }); -}; - -export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation); diff --git a/imports/ui/containers/documents-list.js b/imports/ui/containers/documents-list.js deleted file mode 100644 index b711315..0000000 --- a/imports/ui/containers/documents-list.js +++ /dev/null @@ -1,15 +0,0 @@ -import { composeWithTracker } from 'react-komposer'; -import { Documents } from '../../api/documents/documents.js'; -import { DocumentsList } from '../components/documents-list.js'; -import { Loading } from '../components/loading.js'; -import { Meteor } from 'meteor/meteor'; - -const composer = (params, onData) => { - const subscription = Meteor.subscribe('documents'); - if (subscription.ready()) { - const documents = Documents.find().fetch(); - onData(null, { documents }); - } -}; - -export default composeWithTracker(composer, Loading)(DocumentsList); diff --git a/imports/ui/layouts/app.js b/imports/ui/layouts/app.js index 3ff4760..1a8c89c 100644 --- a/imports/ui/layouts/app.js +++ b/imports/ui/layouts/app.js @@ -1,17 +1,18 @@ import React from 'react'; import { Grid } from 'react-bootstrap'; -import AppNavigation from '../containers/app-navigation'; +import AppNavigation from '../containers/AppNavigation.js'; -export const App = React.createClass({ - propTypes: { - children: React.PropTypes.element.isRequired, - }, - render() { - return
- - - { this.props.children } - -
; - }, -}); +const App = ({ children }) => ( +
+ + + { children } + +
+); + +App.propTypes = { + children: React.PropTypes.node, +}; + +export default App; diff --git a/imports/ui/pages/NotFound.js b/imports/ui/pages/NotFound.js new file mode 100644 index 0000000..73d3a85 --- /dev/null +++ b/imports/ui/pages/NotFound.js @@ -0,0 +1,10 @@ +import React from 'react'; +import { Alert } from 'react-bootstrap'; + +const NotFound = () => ( + +

Error [404]: { window.location.pathname } does not exist.

+
+); + +export default NotFound; diff --git a/imports/ui/pages/RecoverPassword.js b/imports/ui/pages/RecoverPassword.js new file mode 100644 index 0000000..114e8ba --- /dev/null +++ b/imports/ui/pages/RecoverPassword.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap'; +import { handleRecoverPassword } from '../../modules/recover-password'; + +export default class RecoverPassword extends React.Component { + componentDidMount() { + handleRecoverPassword({ component: this }); + } + + handleSubmit() { + this.preventDefault(); + } + + render() { + return ( + +

Recover Password

+ + Enter your email address below to receive a link to reset your password. + +
+ + + + +
+ +
); + } +} diff --git a/imports/ui/pages/ResetPassword.js b/imports/ui/pages/ResetPassword.js new file mode 100644 index 0000000..e8c7154 --- /dev/null +++ b/imports/ui/pages/ResetPassword.js @@ -0,0 +1,50 @@ +import React from 'react'; +import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap'; +import { handleResetPassword } from '../../modules/reset-password'; + +export default class ResetPassword extends React.Component { + componentDidMount() { + handleResetPassword({ component: this, token: this.props.params.token }); + } + + handleSubmit() { + this.preventDefault(); + } + + render() { + return ( + +

Reset Password

+ + To reset your password, enter a new one below. You will be logged in +with your new password. + +
+ + New Password + + + + Repeat New Password + + + +
+ +
); + } +} + +ResetPassword.propTypes = { + params: React.PropTypes.object, +}; diff --git a/imports/ui/pages/documents.js b/imports/ui/pages/documents.js index 886ae89..8d1601b 100644 --- a/imports/ui/pages/documents.js +++ b/imports/ui/pages/documents.js @@ -1,9 +1,9 @@ import React from 'react'; import { Row, Col } from 'react-bootstrap'; -import DocumentsList from '../containers/documents-list.js'; -import { AddDocument } from '../components/add-document.js'; +import DocumentsList from '../containers/DocumentsList.js'; +import { AddDocument } from '../components/AddDocument.js'; -export const Documents = () => ( +const Documents = () => (

Documents

@@ -12,3 +12,5 @@ export const Documents = () => (
); + +export default Documents; diff --git a/imports/ui/pages/index.js b/imports/ui/pages/index.js index 750c8e6..02cb4a6 100644 --- a/imports/ui/pages/index.js +++ b/imports/ui/pages/index.js @@ -1,11 +1,13 @@ import React from 'react'; import { Jumbotron } from 'react-bootstrap'; -export const Index = () => ( +const Index = () => (

Base

A starting point for Meteor applications.

Read the Documentation

-

Currently at v4.7.0

+

Currently at v4.8.0

); + +export default Index; diff --git a/imports/ui/pages/login.js b/imports/ui/pages/login.js index 99b3427..7d00da3 100644 --- a/imports/ui/pages/login.js +++ b/imports/ui/pages/login.js @@ -3,17 +3,17 @@ import { Link } from 'react-router'; import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap'; import { handleLogin } from '../../modules/login'; -export class Login extends React.Component { +export default class Login extends React.Component { componentDidMount() { handleLogin({ component: this }); } - handleSubmit(event) { - event.preventDefault(); + handleSubmit() { + this.preventDefault(); } render() { - return + return (

Login

@@ -41,6 +41,6 @@ export class Login extends React.Component {
-
; +
); } } diff --git a/imports/ui/pages/not-found.js b/imports/ui/pages/not-found.js deleted file mode 100644 index 559955f..0000000 --- a/imports/ui/pages/not-found.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import { Alert } from 'react-bootstrap'; - -export const NotFound = () => ( - -

Error [404]: { window.location.pathname } does not exist.

-
-); diff --git a/imports/ui/pages/recover-password.js b/imports/ui/pages/recover-password.js deleted file mode 100644 index 10017ce..0000000 --- a/imports/ui/pages/recover-password.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap'; -import { handleRecoverPassword } from '../../modules/recover-password'; - -export class RecoverPassword extends React.Component { - componentDidMount() { - handleRecoverPassword({ component: this }); - } - - handleSubmit(event) { - event.preventDefault(); - } - - render() { - return - -

Recover Password

- - Enter your email address below to receive a link to reset your password. - -
- - - - -
- -
; - } -} diff --git a/imports/ui/pages/reset-password.js b/imports/ui/pages/reset-password.js deleted file mode 100644 index ca52b17..0000000 --- a/imports/ui/pages/reset-password.js +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap'; -import { handleResetPassword } from '../../modules/reset-password'; - -export class ResetPassword extends React.Component { - componentDidMount() { - handleResetPassword({ - component: this, - token: this.props.params.token, - }); - } - - handleSubmit(event) { - event.preventDefault(); - } - - render() { - return - -

Reset Password

- - To reset your password, enter a new one below. You will be logged in -with your new password. - -
- - New Password - - - - Repeat New Password - - - -
- -
; - } -} - -ResetPassword.propTypes = { - params: React.PropTypes.object, -}; diff --git a/imports/ui/pages/signup.js b/imports/ui/pages/signup.js index 16acb67..6784e50 100644 --- a/imports/ui/pages/signup.js +++ b/imports/ui/pages/signup.js @@ -3,17 +3,17 @@ import { Link } from 'react-router'; import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap'; import { handleSignup } from '../../modules/signup'; -export class Signup extends React.Component { +export default class Signup extends React.Component { componentDidMount() { handleSignup({ component: this }); } - handleSubmit(event) { - event.preventDefault(); + handleSubmit() { + this.preventDefault(); } render() { - return + return (

Sign Up

@@ -63,6 +63,6 @@ export class Signup extends React.Component {

Already have an account? Log In.

-
; +
); } } diff --git a/package.json b/package.json index d0f2e82..5207367 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,13 @@ "production": "meteor deploy production.meteor.com --settings settings-production.json" }, "devDependencies": { - "chimp": "^0.39.1", - "eslint": "^2.13.1", - "eslint-config-airbnb": "^9.0.1", - "eslint-plugin-jsx-a11y": "^1.5.5", - "eslint-plugin-meteor": "^3.6.0", - "eslint-plugin-react": "^5.2.2", + "chimp": "^0.41.2", + "eslint": "^3.8.1", + "eslint-config-airbnb": "^12.0.0", + "eslint-plugin-import": "^1.16.0", + "eslint-plugin-jsx-a11y": "^2.2.3", + "eslint-plugin-meteor": "^4.0.1", + "eslint-plugin-react": "^6.4.1", "faker": "^3.1.0" }, "eslintConfig": { @@ -34,6 +35,9 @@ "plugin:meteor/guide", "plugin:react/recommended" ], + "env": { + "browser": true + }, "globals": { "server": false, "browser": false, @@ -41,6 +45,8 @@ }, "rules": { "import/no-unresolved": 0, + "import/no-extraneous-dependencies": 0, + "import/extensions": 0, "no-underscore-dangle": [ "error", { @@ -56,15 +62,16 @@ } }, "dependencies": { + "bcrypt": "^0.8.7", "bootstrap": "^3.3.7", - "jquery": "^2.2.4", + "jquery": "^3.1.1", "jquery-validation": "^1.15.1", - "react": "^15.3.0", - "react-addons-pure-render-mixin": "^15.2.1", - "react-bootstrap": "^0.30.2", - "react-dom": "^15.3.0", + "react": "^15.3.2", + "react-addons-pure-render-mixin": "^15.3.2", + "react-bootstrap": "^0.30.5", + "react-dom": "^15.3.2", "react-komposer": "^1.13.1", - "react-router": "^2.6.1", + "react-router": "^3.0.0", "react-router-bootstrap": "^0.23.1" } }