Mila-Zagrevskaya 5 years ago
parent
commit
911521b96a

+ 119 - 52
package-lock.json

@@ -1948,6 +1948,58 @@
       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
       "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
     },
+    "ast-transform": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz",
+      "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=",
+      "requires": {
+        "escodegen": "~1.2.0",
+        "esprima": "~1.0.4",
+        "through": "~2.3.4"
+      },
+      "dependencies": {
+        "escodegen": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz",
+          "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=",
+          "requires": {
+            "esprima": "~1.0.4",
+            "estraverse": "~1.5.0",
+            "esutils": "~1.0.0",
+            "source-map": "~0.1.30"
+          }
+        },
+        "esprima": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+          "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
+        },
+        "estraverse": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
+          "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E="
+        },
+        "esutils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
+          "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA="
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "optional": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "ast-types": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz",
+      "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk="
+    },
     "ast-types-flow": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -2665,6 +2717,16 @@
         "safe-buffer": "^5.1.2"
       }
     },
+    "browserify-optional": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz",
+      "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=",
+      "requires": {
+        "ast-transform": "0.0.0",
+        "ast-types": "^0.7.0",
+        "browser-resolve": "^1.8.1"
+      }
+    },
     "browserify-rsa": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
@@ -2932,8 +2994,7 @@
             },
             "ansi-regex": {
               "version": "2.1.1",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "aproba": {
               "version": "1.2.0",
@@ -2951,13 +3012,11 @@
             },
             "balanced-match": {
               "version": "1.0.0",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "brace-expansion": {
               "version": "1.1.11",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -2970,18 +3029,15 @@
             },
             "code-point-at": {
               "version": "1.1.0",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "concat-map": {
               "version": "0.0.1",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "console-control-strings": {
               "version": "1.1.0",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "core-util-is": {
               "version": "1.0.2",
@@ -3084,8 +3140,7 @@
             },
             "inherits": {
               "version": "2.0.3",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "ini": {
               "version": "1.3.5",
@@ -3095,7 +3150,6 @@
             "is-fullwidth-code-point": {
               "version": "1.0.0",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "number-is-nan": "^1.0.0"
               }
@@ -3108,20 +3162,17 @@
             "minimatch": {
               "version": "3.0.4",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "brace-expansion": "^1.1.7"
               }
             },
             "minimist": {
               "version": "0.0.8",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "minipass": {
               "version": "2.3.5",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "safe-buffer": "^5.1.2",
                 "yallist": "^3.0.0"
@@ -3138,7 +3189,6 @@
             "mkdirp": {
               "version": "0.5.1",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "minimist": "0.0.8"
               }
@@ -3211,8 +3261,7 @@
             },
             "number-is-nan": {
               "version": "1.0.1",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "object-assign": {
               "version": "4.1.1",
@@ -3222,7 +3271,6 @@
             "once": {
               "version": "1.4.0",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "wrappy": "1"
               }
@@ -3298,8 +3346,7 @@
             },
             "safe-buffer": {
               "version": "5.1.2",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "safer-buffer": {
               "version": "2.1.2",
@@ -3329,7 +3376,6 @@
             "string-width": {
               "version": "1.0.2",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "code-point-at": "^1.0.0",
                 "is-fullwidth-code-point": "^1.0.0",
@@ -3347,7 +3393,6 @@
             "strip-ansi": {
               "version": "3.0.1",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "ansi-regex": "^2.0.0"
               }
@@ -3386,13 +3431,11 @@
             },
             "wrappy": {
               "version": "1.0.2",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "yallist": {
               "version": "3.0.3",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             }
           }
         },
@@ -3451,6 +3494,11 @@
         }
       }
     },
+    "classnames": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+    },
     "clean-css": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
@@ -5024,6 +5072,11 @@
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
     },
+    "eve": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/eve/-/eve-0.5.4.tgz",
+      "integrity": "sha1-Z9CAuXJSkdfjieNMJoYN2X8d66o="
+    },
     "eventemitter3": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
@@ -6986,8 +7039,7 @@
             },
             "ansi-regex": {
               "version": "2.1.1",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "aproba": {
               "version": "1.2.0",
@@ -7024,8 +7076,7 @@
             },
             "code-point-at": {
               "version": "1.1.0",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "concat-map": {
               "version": "0.0.1",
@@ -7034,8 +7085,7 @@
             },
             "console-control-strings": {
               "version": "1.1.0",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "core-util-is": {
               "version": "1.0.2",
@@ -7138,8 +7188,7 @@
             },
             "inherits": {
               "version": "2.0.3",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "ini": {
               "version": "1.3.5",
@@ -7149,7 +7198,6 @@
             "is-fullwidth-code-point": {
               "version": "1.0.0",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "number-is-nan": "^1.0.0"
               }
@@ -7175,7 +7223,6 @@
             "minipass": {
               "version": "2.3.5",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "safe-buffer": "^5.1.2",
                 "yallist": "^3.0.0"
@@ -7192,7 +7239,6 @@
             "mkdirp": {
               "version": "0.5.1",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "minimist": "0.0.8"
               }
@@ -7265,8 +7311,7 @@
             },
             "number-is-nan": {
               "version": "1.0.1",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "object-assign": {
               "version": "4.1.1",
@@ -7276,7 +7321,6 @@
             "once": {
               "version": "1.4.0",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "wrappy": "1"
               }
@@ -7352,8 +7396,7 @@
             },
             "safe-buffer": {
               "version": "5.1.2",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "safer-buffer": {
               "version": "2.1.2",
@@ -7383,7 +7426,6 @@
             "string-width": {
               "version": "1.0.2",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "code-point-at": "^1.0.0",
                 "is-fullwidth-code-point": "^1.0.0",
@@ -7401,7 +7443,6 @@
             "strip-ansi": {
               "version": "3.0.1",
               "bundled": true,
-              "optional": true,
               "requires": {
                 "ansi-regex": "^2.0.0"
               }
@@ -7440,13 +7481,11 @@
             },
             "wrappy": {
               "version": "1.0.2",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             },
             "yallist": {
               "version": "3.0.3",
-              "bundled": true,
-              "optional": true
+              "bundled": true
             }
           }
         }
@@ -10613,6 +10652,18 @@
         "whatwg-fetch": "3.0.0"
       }
     },
+    "react-burger-menu": {
+      "version": "2.6.11",
+      "resolved": "https://registry.npmjs.org/react-burger-menu/-/react-burger-menu-2.6.11.tgz",
+      "integrity": "sha512-Nz0CpcQBE4kgxI/xWviyHGQM8PS4GYlsxd8oUGuOabEweYzVJeFhGbHQlM2a/1SMeWM90S80vEvpI22/wFFifA==",
+      "requires": {
+        "browserify-optional": "^1.0.0",
+        "classnames": "^2.2.6",
+        "eve": "~0.5.1",
+        "prop-types": "^15.7.2",
+        "snapsvg-cjs": "0.0.6"
+      }
+    },
     "react-dev-utils": {
       "version": "9.0.1",
       "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz",
@@ -12035,6 +12086,22 @@
         "kind-of": "^3.2.0"
       }
     },
+    "snapsvg": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/snapsvg/-/snapsvg-0.5.1.tgz",
+      "integrity": "sha1-DK9Sx5GJopB0b8RGzF6GP2vd3+M=",
+      "requires": {
+        "eve": "~0.5.1"
+      }
+    },
+    "snapsvg-cjs": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/snapsvg-cjs/-/snapsvg-cjs-0.0.6.tgz",
+      "integrity": "sha1-Oy9WryVz09Nkw+1b+IhXRfTS3eE=",
+      "requires": {
+        "snapsvg": "0.5.1"
+      }
+    },
     "sockjs": {
       "version": "0.3.19",
       "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
     "node-sass": "^4.12.0",
     "react": "^16.8.6",
     "react-accessible-accordion": "^3.0.0",
+    "react-burger-menu": "^2.6.11",
     "react-dom": "^16.8.6",
     "react-escape-outside": "^0.1.1",
     "react-full-page": "^0.1.7",

+ 7 - 1
src/actions/auth.js

@@ -91,8 +91,14 @@ export const getUser = () => dispatch => {
         .catch(err => dispatch(getUserRequestFail(err)));
 };
 
-
 export const userLogout = payload => ({
     type: types.USER_LOGOUT,
     payload
 })
+
+export const changeInputValueUserUserForm = payload => (
+    {
+        type:types.CHANGE_INPUT_VALUE_USER_USER_FORM,
+        payload
+    }
+)

+ 5 - 0
src/actions/orders.js

@@ -34,6 +34,11 @@ const getOrdersFail = payload => ({
     payload
 });
 
+export const getUserOrders = payload => ({
+    type: types.USER_ORDERS,
+    payload
+})
+
 export const getOrders = (payload) => dispatch => {
     dispatch(getOrdersRequest());
     return fetch(`${URL}`,{

+ 7 - 0
src/actions/user.js

@@ -106,6 +106,11 @@ const putUserRequestSuccess = payload => ({
     payload
 });
 
+const changeDataInCurrentUser = payload => ({
+    type: types.CHANGE_DATA_IN_CURRENT_USER,
+    payload
+})
+
 const putUserRequestFail = payload => ({
     type: types.PUT_USER_REQUEST_FAIL,
     payload
@@ -113,6 +118,7 @@ const putUserRequestFail = payload => ({
 
 export const putUser = (payload) => dispatch => {
     dispatch(putUserRequest());
+   
     return fetch(`${URL}${payload.path}`, {
         method: "PUT",
         credentials: "include",
@@ -123,5 +129,6 @@ export const putUser = (payload) => dispatch => {
     })
         .then(res => res.json())
         .then(res => dispatch(putUserRequestSuccess(res)))
+        .then(dispatch(changeDataInCurrentUser(payload.data)))
         .catch(err => dispatch(putUserRequestFail(err)));
 };

+ 8 - 3
src/actionsTypes/actionsTypes.js

@@ -3,13 +3,12 @@ export const FIND_USER_REQUEST_SUCCESS = "FIND_USER_REQUEST_SUCCESS";
 export const FIND_USER_REQUEST_FAIL = "FIND_USER_REQUEST_FAIL";
 export const CHANGE_INPUT_VALUE_FIND_USER = "CHANGE_INPUT_VALUE_FIND_USER";
 export const CHANGE_INPUT_VALUE_USER_FORM= "CHANGE_INPUT_VALUE_USER_FORM";
+export const CHANGE_INPUT_VALUE_USER_USER_FORM = "CHANGE_INPUT_VALUE_USER_USER_FORM"
+export const CHANGE_DATA_IN_CURRENT_USER = "CHANGE_DATA_IN_CURRENT_USER"
 
 export const FIND_ORDERS_ARRAY = "FIND_ORDERS_ARRAY";
 export const CHANGE_INPUT_VALUE_FIND_ORDER = "CHANGE_INPUT_VALUE_FIND_ORDER";
 export const CHANGE_INPUT_VALUE_ORDER_FORM= "CHANGE_INPUT_VALUE_ORDER_FORM";
-export const GET_ORDERS_REQUEST = "GET_ORDERS_REQUEST";
-export const GET_ORDERS_REQUEST_SUCCESS = "GET_ORDERS_REQUEST_SUCCESS";
-export const GET_ORDERS_REQUEST_FAIL = "GET_ORDERS_REQUEST_FAIL";
 
 export const GET_USERS_REQUEST = "GET_USERS_REQUEST";
 export const GET_USERS_REQUEST_SUCCESS = "GET_USERS_REQUEST_SUCCESS";
@@ -100,6 +99,12 @@ export const CREATE_CALENDAR_MONTH_ARRAY= "CREATE_CALENDAR_MONTH_ARRAY";
 export const CHANGE_CALENDAR_MONTH= "CHANGE_CALENDAR_MONTH";
 export const RESET_CALENDAR_CURRENT= "RESET_CALENDAR_CURRENT";
 
+export const GET_ORDERS_REQUEST = "GET_ORDERS_REQUEST";
+export const GET_ORDERS_REQUEST_SUCCESS = "GET_ORDERS_REQUEST_SUCCESS";
+export const GET_ORDERS_REQUEST_FAIL = "GET_ORDERS_REQUEST_FAIL";
+export const USER_ORDERS = "USER_ORDERS"
+
+
 
 
 

+ 3 - 0
src/components/header/navigation.js

@@ -5,6 +5,9 @@ import { connect } from "react-redux";
 import { userLogout} from "../../actions/auth"
 
 class Header extends Component {
+	state = {
+		
+	}
 
 	logoutHandler  = (e) => {
 		localStorage.removeItem('userId')

+ 0 - 1
src/components/services/Services.js

@@ -21,7 +21,6 @@ export class Services extends React.Component {
                                     {el.services.map(item => (
                                         <div className="servise-name" key={item._id}>
                                             <p>{item.name}</p>
-                                            {/* <p>Длительность: {item.duration} ч.</p>  */}
                                             <p>Стоимость: {item.price} грн.</p>
                                             <div>
                                                 <Link to={`/appointment/${item._id}`}

+ 0 - 19
src/components/user.js

@@ -1,19 +0,0 @@
-import React from 'react';
-
-class User extends React.Component {
-    state = {  }
-    render() { 
-        return ( 
-        <div className = "main">
-            <div className="info-wrap">
-                <h2>User Name</h2>
-                <div classdescription = "reviews-container">
-                    <p>Это страница авторизованого пользователя</p>
-                </div>
-            </div>
-        </div>
-        );
-    }
-}
- 
-export default User;

+ 40 - 0
src/components/userInfo.js

@@ -0,0 +1,40 @@
+import React from 'react';
+import Input from './Admin/Input'
+
+
+class UserInfo extends React.Component {
+
+    changeUser = (e) => {
+        e.preventDefault();
+        const obj = {};
+        this.props.changeUserUserForm.map(el => {
+           return  obj[el.name] =  el.value
+        });
+        // console.log(obj)
+        // console.log(this.props.user._id)
+        this.props.putUser({data:obj,path:this.props.user._id})
+    };
+    render() { 
+        const { changeUserUserForm, changeInputValueUserUserForm} = this.props
+        console.log('user',this.props.user)
+        console.log('form', changeUserUserForm)
+        return ( 
+            <div>
+                <div className="admin-item">
+                    <form className="form-doctors" >
+               {changeUserUserForm.map(el =>
+                <Input
+                key={el.id}
+                el={el}
+                changeInputValues={changeInputValueUserUserForm}
+                className={el.className}
+            /> )}
+                    </form>
+                    <button onClick={this.changeUser} className="btn link admin">Изменить</button>
+                </div>
+            </div>
+        );
+    }
+}
+ 
+export default UserInfo;

+ 18 - 0
src/components/userOrders.js

@@ -0,0 +1,18 @@
+import React, { Component } from 'react';
+
+class UserOrders extends Component {
+    render() { 
+        const { data } = this.props
+        console.log(data)
+        return ( <div>
+            {data.map(el =>  
+                     <div key={el._id}>
+                        <p>Номер заказа: {el.orderNumber}</p>
+                        <p>Дата заказа: {el.date.split('T')[0]}</p>
+                        <p>Время заказа: {el.time}</p>
+                        </div>)}
+        </div> );
+    }
+}
+ 
+export default UserOrders;

+ 72 - 0
src/containers/user.js

@@ -0,0 +1,72 @@
+import React, { Component } from 'react';
+import {connect} from "react-redux";
+import {Link} from "react-router-dom";
+import {Switch, Route} from "react-router-dom";
+
+import UserInfo from '../components/userInfo'
+import UserOrders from '../components/userOrders'
+
+import { getUserOrders,getOrders } from "../actions/orders"
+import { changeInputValueUserUserForm } from '../actions/auth'
+import {putUser} from '../actions/user'
+
+class UserContainer extends Component {
+
+    componentDidMount() {
+        this.props.getOrders({
+            doctors: this.props.doctors,
+            services: this.props.services,
+            users: this.props.users})
+    }
+    // componentDidUpdate(){
+    //     if(this.props.orders.length > 0 &&) 
+    //     // console.log('did update', this.props.orders)
+    //      this.props.getUserOrders(this.props.currentUser)
+    // }
+    componentDidUpdate(prevProps) {
+        if(this.props.orders.length > 0 ) 
+            if(prevProps.orders !==  this.props.orders)
+            this.props.getUserOrders(this.props.currentUser)
+    }
+
+    render() { 
+        console.log(this.props.userOrdersArray)
+        const { currentUser,changeUserUserForm, changeInputValueUserUserForm,putUser,userOrdersArray } = this.props
+        return (
+            <div className="main">
+                <div className="info-wrap">
+                <h2>Добро пожаловать в личный кабинет, {currentUser.firstName}!</h2>
+                 <div className="btn-box">
+                    <Link to='/user/orders' className = "btn link admin" >Мои заказы</Link>
+                    <Link to='/user/info' className = "btn link admin">Редактировать профиль</Link>
+                 </div>
+                 <Switch>
+                    <Route path='/user/orders'  render={() => <UserOrders
+                           data={ userOrdersArray}
+                        />} />
+                    <Route path='/user/info' render={() => <UserInfo
+                            user={currentUser}
+                            changeUserUserForm = {changeUserUserForm}
+                            changeInputValueUserUserForm={changeInputValueUserUserForm}
+                            putUser= {putUser}
+                        />} />
+                 </Switch>
+                </div>
+            </div>
+
+              );
+    }
+}
+
+const mapStateToProps = state => {
+    return {
+        currentUser: state.auth.user,
+        changeUserUserForm: state.auth.changeUserForm,
+        orders: state.orders.orders,
+        users:state.user.users,
+        services: state.services.services,
+        doctors:state.app.doctors,
+        userOrdersArray: state.orders.userOrdersArray
+    }
+}
+export default connect(mapStateToProps, { changeInputValueUserUserForm, putUser, getOrders,getUserOrders })(UserContainer);

+ 47 - 3
src/reducers/auth.js

@@ -1,10 +1,12 @@
 import * as types from '../actionsTypes/actionsTypes'
+import { changeUserForm } from '../utils/formFields'
 
 const initialState = {
     user:{},
     isFetching: false,
+    changeUserForm:changeUserForm,
     error:null,
-    successRegister: null
+    successRegister: null,
 }
 
 export default (state = initialState, action) => {
@@ -40,12 +42,54 @@ export default (state = initialState, action) => {
         }
 
         case types.GET_USER_REQUEST_SUCCESS: {
-            return {...state,isFetching: false, user: action.payload.user}
+            const data = action.payload.user
+            return {
+                ...state,
+                isFetching: false,
+                user: action.payload.user,
+                changeUserForm: state.changeUserForm.map(el => Object.keys(data).find(item => item === el.name) ? {
+                    ...el,
+                    value: data[`${el.name}`]
+                    } :
+                    el)
+                }
         }
-        
+
         case types.USER_LOGOUT: {
             return { ...state, user: initialState.user}
         }
+
+        case types.CHANGE_INPUT_VALUE_USER_USER_FORM : {
+            const data = action.payload.target;
+            return {
+                ...state,
+                changeUserForm: state.changeUserForm.map(el => el.name === data.name ? 
+                    {
+                        ...el,
+                        value: data.value
+                    }:
+                    el
+                )
+            }
+        }
+
+        case types.CHANGE_DATA_IN_CURRENT_USER: {           
+            Object.keys(state.user).map(el => 
+                Object.keys(action.payload).map(item => {
+                if(item === el){
+                    return {
+                        ...state,
+                        user:{
+                            ...state.user,
+                            [el]:action.payload[el]
+                        }
+                    }   
+                }}
+            ))
+            return {
+                ...state     
+            }
+        }
         
         default:
              return state

+ 13 - 2
src/reducers/orders.js

@@ -4,6 +4,7 @@ const defaultState = {
     orders:[],
     ordersArray:[],
     findOrderInput:'',
+    userOrdersArray:[],
     error:null,
     isFetching:false,
     searching:false,
@@ -79,10 +80,20 @@ export const ordersReducer = (state = defaultState, action) => {
             }
         }
 
-
+        case types.USER_ORDERS: {
+            //  console.log(action.payload)
+            // console.log(state.orders)
+             const userOrderArray = state.orders.filter(userOrder => userOrder.user === action.payload._id)
+            //  console.log('userOrders',userOrderArray)
+             return  {
+                 ...state,
+                 userOrdersArray:userOrderArray,
+                isFetching: false,}
+        }
+                  
 
 
         default:
             return state
     }
-};
+};

+ 54 - 1
src/utils/formFields.js

@@ -242,6 +242,59 @@ export const postNewServiceForm =[
 	}
 ];
 
+export const changeUserForm = [
+	{
+		id:1,
+		type:'email',
+		value:"",
+		name:'email',
+		placeholder:'Введите E-mail',
+		readOnly:true,
+		required:true
+	},
+	{
+		id:2,
+		type:'text',
+		value:"",
+		name:'firstName',
+		placeholder:'Введите Имя',
+		required:true
+	},
+	{
+		id:3,
+		type:'text',
+		value:"",
+		name:'lastName',
+		placeholder:'Введите Фамилию',
+		required:true
+	},
+	{
+		id:4,
+		type:'number',
+		value:"",
+		name:'phone',
+		placeholder:'Введите ваш номер',
+		required:true
+	},
+	{
+		id:5,
+		type:'password',
+		value:"",
+		name:'password',
+		placeholder:'Введите новый пароль',
+		required:true
+	},
+	{
+		id:6,
+		type:'password',
+		value:"",
+		name:'confirmPassword',
+		placeholder:'Повторите пароль',
+		required:true
+	}
+	
+];
+
 export const adminChangeUserForm =[
 	{
 		id:1,
@@ -387,7 +440,7 @@ export const route = [
 	},
 	{
 		id: 9,
-		exact: true,
+		exact: false,
 		path: "/user",
 		protected: true,
 		component: User