Explorar o código

add basic, orders, user

Alex %!s(int64=5) %!d(string=hai) anos
pai
achega
175719302f

+ 39 - 0
src/actions/auth.js

@@ -91,6 +91,45 @@ export const getUser = () => dispatch => {
         .catch(err => dispatch(getUserRequestFail(err)));
 };
 
+const putUserRequest = payload => ({
+    type: types.PUT_USER_REQUEST,
+    payload
+});
+
+const putUserRequestSuccess = payload => ({
+    type: types.PUT_USER_REQUEST_SUCCESS,
+    payload
+});
+
+const putUserRequestFail = payload => ({
+    type: types.PUT_USER_REQUEST_FAIL,
+    payload
+});
+
+export const putUser = (payload) => dispatch => {
+    dispatch(putUserRequest());
+    return fetch(` https://api-clinics.herokuapp.com/api/v1/users/` + localStorage.getItem('userId'), {
+        method: "PUT",
+        credentials: "include",
+        headers: {
+            "Content-Type": "application/json"
+        },
+        body: JSON.stringify(payload.data)
+    })
+        .then(res => res.json())
+        .then(res => dispatch(putUserRequestSuccess(res)))
+        .catch(err => dispatch(putUserRequestFail(err)));
+};
+
+export const changeInputValueUserForm = payload => ({
+    type: types.CHANGE_INPUT_VALUE_USER_FORM,
+    payload
+});
+
+export const setBasicFormValue = payload => ({
+    type: types.USER_CHANGE_FORM_INFO,
+    payload
+})
 
 export const userLogout = payload => ({
     type: types.USER_LOGOUT,

+ 34 - 0
src/actions/orders.js

@@ -0,0 +1,34 @@
+import * as types from '../actionsTypes/actionsTypes'
+
+const getOrdersRequest = payload => {
+    return {
+    type: types.GET_ORDERS_REQUEST,
+    payload
+}}
+
+const getOrdersRequestSuccess = payload => (
+    {
+    type: types.GET_ORDERS_REQUEST_SUCCESS,
+    payload
+})
+
+const getOrdersRequestFail = payload => ({
+    type: types.GET_ORDERS_REQUEST_FAIL,
+    payload
+})
+
+export const getUserOrders = payload => ({
+    type: types.USER_ORDERS,
+    payload
+})
+
+export const getOrders = (payload) => dispatch => {
+    dispatch(getOrdersRequest());
+    return fetch("https://api-clinics.herokuapp.com/api/v1/orders",{
+        credentials:"include"
+    })
+        .then(res => res.json())
+        .then(res => dispatch(getOrdersRequestSuccess(res)))
+        // .then(res => dispatch(getUserOrders({ data:res, userId: payload})))
+        .catch(err => dispatch(getOrdersRequestFail(err)));
+};

+ 13 - 0
src/actionsTypes/actionsTypes.js

@@ -29,6 +29,12 @@ export const GET_USER_REQUEST = "GET_USER_REQUEST";
 export const GET_USER_REQUEST_SUCCESS = "GET_USER_REQUEST_SUCESS";
 export const GET_USER_REQUEST_FAIL = "GET_USER_REQUEST_FAIL";
 
+export const PUT_USER_REQUEST = "PUT_USER_REQUEST"
+export const PUT_USER_REQUEST_SUCCESS = "PUT_USER_REQUEST_SUCCESS"
+export const PUT_USER_REQUEST_FAIL = "PUT_USER_REQUEST_FAIL"
+
+export const CHANGE_INPUT_VALUE_USER_FORM = "CHANGE_INPUT_VALUE_USER_FORM"
+
 export const USER_LOGOUT = "USER_LOGOUT"
 
 export const POST_DOCTORS_REQUEST = "POST_DOCTORS_REQUEST";
@@ -75,6 +81,13 @@ 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"
+
+export const USER_CHANGE_FORM_INFO = "USER_CHANGE_FORM_INFO"
+
 
 
 

+ 8 - 2
src/components/appointment/Appointment.js

@@ -53,7 +53,12 @@ export class Appoint extends React.Component {
     };
 
     postOrder = () => {
-        this.props.postOrders(this.props.appointment.appointment)
+        this.props.postOrders({      shedule: this.props.appointment.sheduleId,
+            time: this.props.appointment.time,
+            doctor: this.props.appointment.doctorId,
+            spec: this.props.appointment.specId,
+            comment: this.props.appointment.comment,
+            user: this.props.user})
     };
 
 
@@ -152,7 +157,8 @@ const mapStateToProps = state => {
         appointment: state.appointment.appointment,
         timeArray: state.appointment.timeArray,
         doctors: state.app.doctors,
-        services: state.services.services
+        services: state.services.services,
+        user: state.auth.user
     };
 };
 

+ 0 - 10
src/components/user.js

@@ -1,10 +0,0 @@
-import React from 'react';
-
-class User extends React.Component {
-    state = {  }
-    render() { 
-        return ( <div>User Component</div>);
-    }
-}
- 
-export default User;

+ 41 - 0
src/components/userInfo.js

@@ -0,0 +1,41 @@
+import React from 'react';
+import Input from './Admin/Input'
+
+
+class UserInfo extends React.Component {
+
+    changeItem = (e) => {
+ 
+    }
+    render() { 
+        const { form, user, putItem,postItem, changeInputValues} = this.props
+        // console.log('putItem', putItem)
+        return ( 
+            <div>
+                <div className="admin-item">
+                    <form className="form-doctors" onSubmit={this.changeItem}>
+                        {
+                            form.map(el => {
+                                
+                                    return (
+                                        <Input
+                                            key={el.id}
+                                            id={el.id}
+                                            el={el}
+                                            changeInputValues={changeInputValues}
+                                        />
+                                    )
+                            })
+                        }
+                        <input className="btn link"
+                               type='submit'
+                               value= 'Изменить'
+                        />
+                    </form>
+                </div>
+            </div>
+        );
+    }
+}
+ 
+export default UserInfo;

+ 10 - 0
src/components/userOrders.js

@@ -0,0 +1,10 @@
+import React, { Component } from 'react';
+
+class UserOrders extends Component {
+    state = {  }
+    render() { 
+        return ( <div>User Orders</div> );
+    }
+}
+ 
+export default UserOrders;

+ 60 - 0
src/containers/user.js

@@ -0,0 +1,60 @@
+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 { getOrders,getUserOrders } from "../actions/orders"
+import { putUser,changeInputValueUserForm, setBasicFormValue } from '../actions/auth'
+
+class UserContainer extends Component {
+
+    componentDidMount() {
+        this.props.getOrders(this.props.currentUser);
+        this.props.getUserOrders(this.props.currentUser)
+       
+    }
+   
+    // componentDidUpdate(){
+        
+    //     // orders ? action(currentUser) : null
+    // }
+
+    render() { 
+        const {currentUser,changeUserForm,changeInputValueUserForm, setBasicFormValue, dataOrders, getUserOrders} = this.props
+        // console.log('user',currentUser)
+        // console.log('Orders',dataOrders)
+        return (
+            <div className="main">
+                <div className="info-wrap">
+                 <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' component={ UserOrders } />
+                    <Route path='/user/info' render={() => <UserInfo
+                            user={currentUser}
+                            form={changeUserForm}
+                            putItem= {setBasicFormValue}
+                            postItem= {putUser}
+                            changeInputValues={changeInputValueUserForm}
+                        />} />
+                 </Switch>
+                </div>
+            </div>
+
+              );
+    }
+}
+
+const mapStateToProps = state => {
+    return {
+        currentUser: state.auth.user,
+        dataOrders: state.orders,
+        changeUserForm: state.auth.changeUserForm
+    }
+}
+export default connect(mapStateToProps, { getOrders, putUser,changeInputValueUserForm, setBasicFormValue,getUserOrders })(UserContainer);

+ 54 - 1
src/reducers/auth.js

@@ -1,10 +1,13 @@
 import * as types from '../actionsTypes/actionsTypes'
 
+import {changeUserForm} from '../utils/formFields'
+
 const initialState = {
     user:{},
     isFetching: false,
     error:null,
-    successRegister: null
+    successRegister: null,
+    changeUserForm: changeUserForm
 }
 
 export default (state = initialState, action) => {
@@ -42,6 +45,56 @@ export default (state = initialState, action) => {
         case types.GET_USER_REQUEST_SUCCESS: {
             return {...state,isFetching: false, user: action.payload.user}
         }
+
+        case types.CHANGE_INPUT_VALUE_USER_FORM : {
+            console.log(action.payload)
+            return { ...state,
+                changeUserForm: state.changeUserForm.map(el => el.id === +action.payload.target.id ? {
+                ...el,
+                
+                value: action.payload.target.value
+            } : el)
+        }
+        }
+        case types.PUT_USER_REQUEST : {
+            return {
+                ...state,
+                isFetching: true
+            };
+        }
+
+        case types.USER_CHANGE_FORM_INFO: {
+            const {data} = action.payload
+            console.log(data)
+          
+           
+            return {
+                ...state,
+                // changeUserForm:state.changeUserForm.map(el => 
+                //     el.name === data.name  ?  {                   
+                //          ...el,                   
+                //          value:data.value
+                //      } :
+                //      el)
+
+            }
+        }
+
+        case types.PUT_USER_REQUEST_SUCCESS : {
+            return {
+                ...state,
+                changeUserForm:changeUserForm,
+                isFetching: false
+            }
+        }
+
+        case types.PUT_USER_REQUEST_FAIL : {
+            return {
+                ...state,
+                error: action.payload,
+                isFetching: false
+            }
+        }
         
         case types.USER_LOGOUT: {
             return { ...state, user: initialState.user}

+ 3 - 1
src/reducers/index.js

@@ -5,6 +5,7 @@ import {calendarReducer} from "./calendar"
 import auth from './auth';
 import {appointmentReducer} from "./appointment";
 import {servicesReducer} from "./services";
+import orders from './orders'
 
 
 
@@ -13,5 +14,6 @@ export default combineReducers({
     auth,
     calendar:calendarReducer,
     appointment:appointmentReducer,
-    services:servicesReducer
+    services:servicesReducer,
+    orders
 })

+ 37 - 0
src/reducers/orders.js

@@ -0,0 +1,37 @@
+import * as types from '../actionsTypes/actionsTypes'
+
+const initialState = {
+    orders:[],
+    isFetching: false,
+    error:null,
+    userOrders: [],
+}
+
+export default (state = initialState, action) => {
+    switch(action.type){
+        case types.GET_ORDERS_REQUEST: {
+            return {...state, isFetching: true};
+        }
+
+        case types.GET_ORDERS_REQUEST_SUCCESS: {
+            // console.log(action.payload)     
+            return {...state, isFetching: false, orders: action.payload.orders};
+        }
+
+        case types.USER_ORDERS: {
+            // console.log(action.payload)
+            // console.log(state.orders)
+            const userOrdersArray = state.orders.filter(userOrder => userOrder.user === action.payload._id)
+            // console.log('arr',userOrdersArray)
+            return  {...state, isFetching: false,}
+        }
+
+        case types.GET_ORDERS_REQUEST_FAIL: {
+            return {...state, isFetching: false}
+            // return {...state, isFetching: false,error: action.payload.response.data.message };
+        }
+
+        default:
+             return state
+    }
+}

+ 46 - 2
src/utils/formFields.js

@@ -8,7 +8,7 @@ import Reviews from "../components/Reviews";
 import Admin from "../components/Admin/Admin";
 import Appointment from "../components/appointment/Appointment";
 import Auth from "../containers/auth";
-import User from "../components/user";
+import User from "../containers/user";
 const PAGENOTFOUND = () => <div>PAGE 404 NOT FOUND</div>;
 
 
@@ -231,6 +231,50 @@ export const postNewServiceForm =[
 	}
 ];
 
+export const changeUserForm = [
+	{
+		id:1,
+		type:'text',
+		value:"",
+		name:'firstName',
+		placeholder:'Введите Имя',
+		required:true
+	},
+	{
+		id:2,
+		type:'text',
+		value:"",
+		name:'lastName',
+		placeholder:'Введите Фамилию',
+		required:true
+	},
+	{
+		id:3,
+		type:'number',
+		value:"",
+		name:'phone',
+		placeholder:'Введите ваш номер',
+		required:true
+	},
+	{
+		id:4,
+		type:'password',
+		value:"",
+		name:'password',
+		placeholder:'Введите новый пароль',
+		required:true
+	},
+	{
+		id:5,
+		type:'password',
+		value:"",
+		name:'confirmPassword',
+		placeholder:'Повторите пароль',
+		required:true
+	}
+	
+];
+
 export const route = [
 	{
 		id: 1,
@@ -298,7 +342,7 @@ export const route = [
 	},
 	{
 		id: 9,
-		exact: true,
+		exact: false,
 		path: "/user",
 		protected: true,
 		component: User