diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8ee4bfd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,52 @@
+# Created by .ignore support plugin (hsz.mobi)
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+.idea
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/admin-panel/src/App.js b/admin-panel/src/App.js
index fd110f7..44e860d 100644
--- a/admin-panel/src/App.js
+++ b/admin-panel/src/App.js
@@ -1,23 +1,21 @@
-import React, { Component } from 'react'
-import {Route} from 'react-router-dom'
-import Auth from './components/routes/auth'
-import Admin from './components/routes/Admin'
-import ProtectedRoute from './components/common/ProtectedRoute'
+import React, { Component } from "react";
+import { Route } from "react-router-dom";
+import Auth from "./components/routes/auth";
+import Admin from "./components/routes/Admin";
+import ProtectedRoute from "./components/common/ProtectedRoute";
class App extends Component {
- static propTypes = {
+ static propTypes = {};
- };
-
- render() {
- return (
-
- )
- }
+ render() {
+ return (
+
+ );
+ }
}
-export default App
\ No newline at end of file
+export default App;
diff --git a/admin-panel/src/Root.js b/admin-panel/src/Root.js
index f69da88..7ebfadc 100644
--- a/admin-panel/src/Root.js
+++ b/admin-panel/src/Root.js
@@ -1,24 +1,22 @@
-import React, { Component } from 'react'
-import {ConnectedRouter as Router} from 'react-router-redux'
-import {Provider} from 'react-redux'
-import App from './App'
-import store from './redux'
-import history from './history'
+import React, { Component } from "react";
+import { ConnectedRouter as Router } from "react-router-redux";
+import { Provider } from "react-redux";
+import App from "./App";
+import store from "./redux";
+import history from "./history";
class Root extends Component {
- static propTypes = {
+ static propTypes = {};
- };
-
- render() {
- return (
-
-
-
-
-
- )
- }
+ render() {
+ return (
+
+
+
+
+
+ );
+ }
}
-export default Root
\ No newline at end of file
+export default Root;
diff --git a/admin-panel/src/components/auth/SignInForm.js b/admin-panel/src/components/auth/SignInForm.js
index 3033ef6..344223a 100644
--- a/admin-panel/src/components/auth/SignInForm.js
+++ b/admin-panel/src/components/auth/SignInForm.js
@@ -1,30 +1,28 @@
-import React, { Component } from 'react'
-import {reduxForm, Field} from 'redux-form'
+import React, { Component } from "react";
+import { reduxForm, Field } from "redux-form";
class SignInForm extends Component {
- static propTypes = {
+ static propTypes = {};
- };
-
- render() {
- return (
-
- )
- }
+ render() {
+ return (
+
+ );
+ }
}
export default reduxForm({
- form: 'auth'
-})(SignInForm)
\ No newline at end of file
+ form: "auth",
+})(SignInForm);
diff --git a/admin-panel/src/components/auth/SignUpForm.js b/admin-panel/src/components/auth/SignUpForm.js
index d8e9a85..b2d0aa0 100644
--- a/admin-panel/src/components/auth/SignUpForm.js
+++ b/admin-panel/src/components/auth/SignUpForm.js
@@ -1,45 +1,44 @@
-import React, { Component } from 'react'
-import {reduxForm, Field} from 'redux-form'
-import validator from 'email-validator'
-import ErrorField from '../common/ErrorField'
+import React, { Component } from "react";
+import { reduxForm, Field } from "redux-form";
+import validator from "email-validator";
+import ErrorField from "../common/ErrorField";
class SignUpForm extends Component {
- static propTypes = {
-
- };
-
- render() {
- return (
-
- )
- }
+ static propTypes = {};
+
+ render() {
+ return (
+
+ );
+ }
}
const validate = ({ email, password }) => {
- const errors = {}
+ const errors = {};
- if (!email) errors.email = 'email is a required field'
- if (email && !validator.validate(email)) errors.email = 'incorrect email format'
+ if (!email) errors.email = "email is a required field";
+ if (email && !validator.validate(email))
+ errors.email = "incorrect email format";
- if (!password) errors.password = 'password is a required field'
- if (password && password.length < 8) errors.password = 'password is to short'
+ if (!password) errors.password = "password is a required field";
+ if (password && password.length < 8) errors.password = "password is to short";
- return errors
-}
+ return errors;
+};
export default reduxForm({
- form: 'auth',
- validate
-})(SignUpForm)
\ No newline at end of file
+ form: "auth",
+ validate,
+})(SignUpForm);
diff --git a/admin-panel/src/components/common/ErrorField.js b/admin-panel/src/components/common/ErrorField.js
index e9b16d5..346b500 100644
--- a/admin-panel/src/components/common/ErrorField.js
+++ b/admin-panel/src/components/common/ErrorField.js
@@ -1,20 +1,19 @@
-import React, { Component } from 'react'
+import React, { Component } from "react";
class ErrorField extends Component {
- static propTypes = {
+ static propTypes = {};
- };
-
- render() {
- const {input, meta: { error, touched }, type} = this.props
- const errorMessage = error && touched && {error}
- return (
-
-
- {errorMessage}
-
- )
- }
+ render() {
+ const { input, meta: { error, touched }, type } = this.props;
+ const errorMessage = error &&
+ touched && {error}
;
+ return (
+
+
+ {errorMessage}
+
+ );
+ }
}
-export default ErrorField
\ No newline at end of file
+export default ErrorField;
diff --git a/admin-panel/src/components/common/ProtectedRoute.js b/admin-panel/src/components/common/ProtectedRoute.js
index 1b12def..373ba05 100644
--- a/admin-panel/src/components/common/ProtectedRoute.js
+++ b/admin-panel/src/components/common/ProtectedRoute.js
@@ -1,24 +1,31 @@
-import React, { Component } from 'react'
-import {Route} from 'react-router-dom'
-import {connect} from 'react-redux'
-import {userSelector} from '../../ducks/auth'
+import React, { Component } from "react";
+import { Route } from "react-router-dom";
+import { connect } from "react-redux";
+import { userSelector } from "../../ducks/auth";
class ProtectedRoute extends Component {
- static propTypes = {
+ static propTypes = {};
- };
+ render() {
+ const { component, authorized, ...rest } = this.props;
+ return ;
+ }
- render() {
- const {component, authorized, ...rest} = this.props
- return
- }
-
- renderAuthorized = ({match}) => {
-// const {authorized, ...rest} = this.props
- return this.props.authorized ? : UnAuthorized
- }
+ renderAuthorized = ({ match }) => {
+ // const {authorized, ...rest} = this.props
+ return this.props.authorized ? (
+
+ ) : (
+ UnAuthorized
+ );
+ };
}
-export default connect(state => ({
- authorized: userSelector(state)
-}), null, null, {pure: false})(ProtectedRoute)
\ No newline at end of file
+export default connect(
+ state => ({
+ authorized: userSelector(state),
+ }),
+ null,
+ null,
+ { pure: false },
+)(ProtectedRoute);
diff --git a/admin-panel/src/components/people/AddPeopleForm.js b/admin-panel/src/components/people/AddPeopleForm.js
new file mode 100644
index 0000000..af6f71d
--- /dev/null
+++ b/admin-panel/src/components/people/AddPeopleForm.js
@@ -0,0 +1,51 @@
+import React, { Component } from "react";
+import { reduxForm, Field } from "redux-form";
+import validator from "email-validator";
+import ErrorField from "../common/ErrorField";
+
+class AddPeopleForm extends Component {
+ render() {
+ return (
+
+
Add people from Page
+
+
+ );
+ }
+}
+
+
+const validate = ({ email, firstName, lastName }) => {
+ const errors = {};
+
+ if (!email) errors.email = "email is a required field";
+ if (email && !validator.validate(email))
+ errors.email = "incorrect email format";
+
+ if (!firstName) errors.firstName = "firstName is a required field";
+ if (!lastName) errors.firstName = "firstName is a required field";
+
+ return errors;
+};
+
+
+export default reduxForm({
+ form: "people",
+ validate,
+})(AddPeopleForm);
diff --git a/admin-panel/src/components/routes/Admin.js b/admin-panel/src/components/routes/Admin.js
index 952248e..254bbe2 100644
--- a/admin-panel/src/components/routes/Admin.js
+++ b/admin-panel/src/components/routes/Admin.js
@@ -1,17 +1,21 @@
-import React, { Component } from 'react'
+import React, { Component } from "react";
+import AddPeopleForm from "../people/AddPeopleForm";
+import { addPeople } from "../../ducks/people";
+import { connect } from "react-redux";
class Admin extends Component {
- static propTypes = {
+ static propTypes = {};
- };
+ render() {
+ return (
+
+ );
+ }
- render() {
- return (
-
-
Admin Page
-
- )
- }
+ sendPeople = (people ) => this.props.addPeople(people);
}
-export default Admin
\ No newline at end of file
+export default connect(null, { addPeople })(Admin);
diff --git a/admin-panel/src/components/routes/auth/index.js b/admin-panel/src/components/routes/auth/index.js
index 91c9bab..b6d3f11 100644
--- a/admin-panel/src/components/routes/auth/index.js
+++ b/admin-panel/src/components/routes/auth/index.js
@@ -1,32 +1,43 @@
-import React, { Component } from 'react'
-import {Route, NavLink} from 'react-router-dom'
-import {connect} from 'react-redux'
-import {signIn, signUp} from '../../../ducks/auth'
-import SignInForm from '../../auth/SignInForm'
-import SignUpForm from '../../auth/SignUpForm'
+import React, { Component } from "react";
+import { Route, NavLink } from "react-router-dom";
+import { connect } from "react-redux";
+import { signIn, signUp } from "../../../ducks/auth";
+import SignInForm from "../../auth/SignInForm";
+import SignUpForm from "../../auth/SignUpForm";
class Auth extends Component {
- static propTypes = {
+ static propTypes = {};
- };
-
- render() {
- return (
-
-
Auth page
-
-
} />
- } />
-
- )
- }
-
- onSignIn = ({ email, password }) => this.props.signIn(email, password)
- onSignUp = ({ email, password }) => this.props.signUp(email, password)
+ render() {
+ return (
+
+
Auth page
+
+ -
+
+ Sign In
+
+
+ -
+
+ Sign Up
+
+
+
+
}
+ />
+ }
+ />
+
+ );
+ }
+ onSignIn = ({ email, password }) => this.props.signIn(email, password);
+ onSignUp = ({ email, password }) => this.props.signUp(email, password);
}
-export default connect(null, { signIn, signUp })(Auth)
\ No newline at end of file
+export default connect(null, { signIn, signUp })(Auth);
diff --git a/admin-panel/src/config.js b/admin-panel/src/config.js
index 65bba00..c2d4248 100644
--- a/admin-panel/src/config.js
+++ b/admin-panel/src/config.js
@@ -1,14 +1,14 @@
-import firebase from 'firebase'
+import firebase from "firebase";
-export const appName = 'advreact-04-12'
+export const appName = "adv-react-lykovrs";
const config = {
- apiKey: "AIzaSyCmDWlgYIhtEr1pWjgKYds3iXKWBl9wbjE",
- authDomain: `${appName}.firebaseapp.com`,
- databaseURL: `https://${appName}.firebaseio.com`,
- projectId: appName,
- storageBucket: "",
- messagingSenderId: "95255462276"
-}
+ apiKey: "AIzaSyBt2lilyVzkwxC5U0Jff1kGPgrR0stMww0",
+ authDomain: `${appName}.firebaseapp.com`,
+ databaseURL: `https://${appName}.firebaseio.com`,
+ projectId: appName,
+ storageBucket: "",
+ messagingSenderId: "347411917883",
+};
-firebase.initializeApp(config)
\ No newline at end of file
+firebase.initializeApp(config);
diff --git a/admin-panel/src/ducks/auth.js b/admin-panel/src/ducks/auth.js
index f031871..7c75c5b 100644
--- a/admin-panel/src/ducks/auth.js
+++ b/admin-panel/src/ducks/auth.js
@@ -1,86 +1,93 @@
-import {appName} from '../config'
-import {Record} from 'immutable'
-import firebase from 'firebase'
+import { appName } from "../config";
+import { Record } from "immutable";
+import firebase from "firebase";
/**
* Constants
* */
-export const moduleName = 'auth'
-const prefix = `${appName}/${moduleName}`
+export const moduleName = "auth";
+const prefix = `${appName}/${moduleName}`;
-export const SIGN_IN_START = `${prefix}/SIGN_IN_START`
-export const SIGN_IN_SUCCESS = `${prefix}/SIGN_IN_SUCCESS`
-export const SIGN_UP_START = `${prefix}/SIGN_UP_START`
-export const SIGN_UP_SUCCESS = `${prefix}/SIGN_UP_SUCCESS`
+export const SIGN_IN_START = `${prefix}/SIGN_IN_START`;
+export const SIGN_IN_SUCCESS = `${prefix}/SIGN_IN_SUCCESS`;
+export const SIGN_UP_START = `${prefix}/SIGN_UP_START`;
+export const SIGN_UP_SUCCESS = `${prefix}/SIGN_UP_SUCCESS`;
/**
* Reducer
* */
export const ReducerRecord = Record({
- user: null,
- loading: false,
- error: null
-})
+ user: null,
+ loading: false,
+ error: null,
+});
export default function reducer(state = new ReducerRecord(), action) {
- const {type, payload} = action
-
- switch (type) {
- case SIGN_IN_START:
- case SIGN_UP_START:
- return state.set('loading', true)
+ const { type, payload } = action;
- case SIGN_IN_SUCCESS:
- case SIGN_UP_SUCCESS:
- return state
- .set('loading', false)
- .set('user', payload.user)
- default:
- return state
- }
+ switch (type) {
+ case SIGN_IN_START:
+ case SIGN_UP_START:
+ return state.set("loading", true);
+
+ case SIGN_IN_SUCCESS:
+ case SIGN_UP_SUCCESS:
+ return state.set("loading", false).set("user", payload.user);
+ default:
+ return state;
+ }
}
/**
* Selectors
* */
-export const userSelector = state => state[moduleName].user
+export const userSelector = state => state[moduleName].user;
/**
* Action Creators
* */
export function signIn(email, password) {
- return (dispatch) => {
- dispatch({
- type: SIGN_IN_START
- })
+ return dispatch => {
+ dispatch({
+ type: SIGN_IN_START,
+ });
- firebase.auth().signInWithEmailAndPassword(email, password)
- .then(user => dispatch({
- type: SIGN_IN_SUCCESS,
- payload: { user }
- }))
- }
+ firebase
+ .auth()
+ .signInWithEmailAndPassword(email, password)
+ .then(user =>
+ dispatch({
+ type: SIGN_IN_SUCCESS,
+ payload: { user },
+ }),
+ );
+ };
}
export function signUp(email, password) {
- return (dispatch) => {
- dispatch({
- type: SIGN_UP_START
- })
+ return dispatch => {
+ dispatch({
+ type: SIGN_UP_START,
+ });
- firebase.auth().createUserWithEmailAndPassword(email, password)
- .then(user => dispatch({
- type: SIGN_UP_SUCCESS,
- payload: { user }
- }))
- }
+ firebase
+ .auth()
+ .createUserWithEmailAndPassword(email, password)
+ .then(user =>
+ dispatch({
+ type: SIGN_UP_SUCCESS,
+ payload: { user },
+ }),
+ );
+ };
}
firebase.auth().onAuthStateChanged(user => {
- if (user) window.store.dispatch({
- type: SIGN_IN_SUCCESS,
- payload: { user }
- })
-})
\ No newline at end of file
+ if (user)
+ window.store.dispatch({
+ type: SIGN_IN_SUCCESS,
+ payload: { user },
+ });
+});
diff --git a/admin-panel/src/ducks/people.js b/admin-panel/src/ducks/people.js
new file mode 100644
index 0000000..8942586
--- /dev/null
+++ b/admin-panel/src/ducks/people.js
@@ -0,0 +1,72 @@
+import { appName } from "../config";
+import { Record } from "immutable";
+import firebase from "firebase";
+
+/**
+ * Constants
+ * */
+export const moduleName = "people";
+const prefix = `${appName}/${moduleName}`;
+
+export const ADD_PEOPLE_START = `${prefix}/ADD_PEOPLE_START`;
+export const ADD_PEOPLE_SUCCESS = `${prefix}/ADD_PEOPLE_SUCCESS`;
+
+/**
+ * Reducer
+ * */
+export const ReducerRecord = Record({
+ user: null,
+ loading: false,
+ error: null,
+});
+
+export default function reducer(state = new ReducerRecord(), action) {
+ const { type, payload } = action;
+
+ switch (type) {
+ case ADD_PEOPLE_START:
+ return state.set("loading", true);
+
+ case ADD_PEOPLE_SUCCESS:
+ return state.set("loading", false).set("user", payload.user);
+ default:
+ return state;
+ }
+}
+
+/**
+ * Selectors
+ * */
+
+
+/**
+ * Action Creators
+ * */
+
+export function addPeople(people) {
+ return dispatch => {
+ dispatch({
+ type: ADD_PEOPLE_START,
+ });
+
+ var newPostKey = firebase
+ .database()
+ .ref()
+ .child("people")
+ .push().key;
+
+ var updates = {};
+ updates["/people/" + newPostKey] = people;
+
+ firebase
+ .database()
+ .ref()
+ .update(updates)
+ .then(() =>
+ dispatch({
+ type: ADD_PEOPLE_SUCCESS
+ }),
+ );
+ };
+}
+
diff --git a/admin-panel/src/history.js b/admin-panel/src/history.js
index 6e795fc..92844b6 100644
--- a/admin-panel/src/history.js
+++ b/admin-panel/src/history.js
@@ -1,5 +1,5 @@
-import createHistory from 'history/createBrowserHistory'
+import createHistory from "history/createBrowserHistory";
-const history = createHistory()
+const history = createHistory();
-export default history
\ No newline at end of file
+export default history;
diff --git a/admin-panel/src/index.js b/admin-panel/src/index.js
index ad60938..c8628b2 100644
--- a/admin-panel/src/index.js
+++ b/admin-panel/src/index.js
@@ -1,6 +1,6 @@
-import React from 'react'
-import ReactDOM from 'react-dom'
-import './config'
-import Root from './Root'
+import React from "react";
+import ReactDOM from "react-dom";
+import "./config";
+import Root from "./Root";
-ReactDOM.render(, document.getElementById('root'))
+ReactDOM.render(, document.getElementById("root"));
diff --git a/admin-panel/src/redux/index.js b/admin-panel/src/redux/index.js
index 1a37261..100ce7a 100644
--- a/admin-panel/src/redux/index.js
+++ b/admin-panel/src/redux/index.js
@@ -1,13 +1,16 @@
-import {createStore, applyMiddleware} from 'redux'
-import logger from 'redux-logger'
-import {routerMiddleware} from 'react-router-redux'
-import thunk from 'redux-thunk'
-import reducer from './reducer'
-import history from '../history'
+import { createStore, applyMiddleware } from "redux";
+import logger from "redux-logger";
+import { routerMiddleware } from "react-router-redux";
+import thunk from "redux-thunk";
+import reducer from "./reducer";
+import history from "../history";
-const store = createStore(reducer, applyMiddleware(thunk, routerMiddleware(history), logger))
+const store = createStore(
+ reducer,
+ applyMiddleware(thunk, routerMiddleware(history), logger),
+);
//dev only
-window.store = store
+window.store = store;
-export default store
\ No newline at end of file
+export default store;
diff --git a/admin-panel/src/redux/reducer.js b/admin-panel/src/redux/reducer.js
index 34143fe..152c458 100644
--- a/admin-panel/src/redux/reducer.js
+++ b/admin-panel/src/redux/reducer.js
@@ -1,9 +1,10 @@
-import {combineReducers} from 'redux'
-import {routerReducer as router} from 'react-router-redux'
-import {reducer as form} from 'redux-form'
-import authReducer, {moduleName as authModule} from '../ducks/auth'
+import { combineReducers } from "redux";
+import { routerReducer as router } from "react-router-redux";
+import { reducer as form } from "redux-form";
+import authReducer, { moduleName as authModule } from "../ducks/auth";
export default combineReducers({
- router, form,
- [authModule]: authReducer
-})
\ No newline at end of file
+ router,
+ form,
+ [authModule]: authReducer,
+});