Browse Source

fix merge conflicts

Alex 5 years ago
parent
commit
97af7b530f

+ 4 - 2
src/App.js

@@ -5,6 +5,7 @@ import {Switch} from "react-router-dom";
 import {getDoctors} from "./actions/actions";
 import {getServices, getCategories} from "./actions/services";
 import {getUser} from "./actions/auth"
+import {getOrders} from "./actions/orders"
 
 import Loader from "./components/hooks/loader";
 import Header from "./components/header/index";
@@ -19,8 +20,8 @@ export class App extends React.Component {
     componentDidMount() {
         this.props.getDoctors();
         this.props.getServices();
-        console.log(this.props.app)
         this.props.getCategories();
+        // this.props.getOrders();
 
        if(localStorage.getItem('userId')) this.props.getUser()
 
@@ -70,7 +71,8 @@ const mapDispatchToProps = {
     getDoctors,
     getServices,
     getCategories,
-    getUser
+    getUser,
+    getOrders
 };
 
 export default connect (mapStateToProps,mapDispatchToProps)(App)

+ 34 - 18
src/actions/orders.js

@@ -1,34 +1,50 @@
-import * as types from '../actionsTypes/actionsTypes'
+import * as types from "../actionsTypes/actionsTypes";
 
-const getOrdersRequest = payload => {
-    return {
+const URL = "https://api-clinics.herokuapp.com/api/v1/orders";
+
+
+export const changeInputFindOrder = payload => ({
+    type:types.CHANGE_INPUT_VALUE_FIND_ORDER,
+    payload
+});
+
+export const findOrdersArray = payload => ({
+    type:types.FIND_ORDERS_ARRAY,
+    payload
+});
+
+export const changeInputValueOrderForm = payload => ({
+    type:types.CHANGE_INPUT_VALUE_ORDER_FORM,
+    payload
+});
+
+
+const getOrdersRequest = payload => ({
     type: types.GET_ORDERS_REQUEST,
     payload
-}}
+});
 
-const getOrdersRequestSuccess = payload => (
-    {
+const getOrdersSuccess = payload => ({
     type: types.GET_ORDERS_REQUEST_SUCCESS,
     payload
-})
+});
 
-const getOrdersRequestFail = payload => ({
+const getOrdersFail = 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",{
+    return fetch(`${URL}`,{
         credentials:"include"
     })
         .then(res => res.json())
-        .then(res => dispatch(getOrdersRequestSuccess(res)))
-        // .then(res => dispatch(getUserOrders({ data:res, userId: payload})))
-        .catch(err => dispatch(getOrdersRequestFail(err)));
+        .then(res => {
+            dispatch(getOrdersSuccess({res:res,data:payload}));
+        })
+        .catch(err => dispatch(getOrdersFail(err)));
 };
+
+
+

+ 31 - 4
src/actions/user.js

@@ -13,6 +13,34 @@ export const changeInputValueUserForm = payload => ({
     payload
 });
 
+const getUsersRequest = payload => ({
+    type: types.GET_USERS_REQUEST,
+    payload
+});
+
+const getUsersRequestSuccess = payload => ({
+    type: types.GET_USERS_REQUEST_SUCCESS,
+    payload
+});
+
+const getUsersRequestFail = payload => ({
+    type: types.GET_USERS_REQUEST_FAIL,
+    payload
+});
+
+export const getUsers = () => dispatch => {
+    dispatch(getUsersRequest());
+    return fetch(`${URL}`,{
+        credentials:"include"
+    })
+        .then(res => res.json())
+        .then(res => {
+            dispatch(getUsersRequestSuccess(res));
+        })
+        .catch(err => dispatch(getUsersRequestFail(err)));
+};
+
+
 const findUserRequest = payload => ({
     type: types.FIND_USER_REQUEST,
     payload
@@ -41,19 +69,18 @@ export const findUser = (payload) => dispatch => {
 };
 
 
-
 const deleteUserRequest = payload => ({
-    type: types.DELETE_DOCTORS_REQUEST,
+    type: types.DELETE_USER_REQUEST,
     payload
 });
 
 const deleteUserRequestSuccess = payload => ({
-    type: types.DELETE_DOCTORS_REQUEST_SUCCESS,
+    type: types.DELETE_USER_REQUEST_SUCCESS,
     payload
 });
 
 const deleteUserRequestFail = payload => ({
-    type: types.DELETE_DOCTORS_REQUEST_FAIL,
+    type: types.DELETE_USER_REQUEST_FAIL,
     payload
 });
 

+ 11 - 0
src/actionsTypes/actionsTypes.js

@@ -6,6 +6,17 @@ 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";
+export const GET_USERS_REQUEST_FAIL = "GET_USERS_REQUEST_FAIL";
+
 export const GET_DOCTORS_REQUEST = "GET_DOCTORS_REQUEST";
 export const GET_DOCTORS_REQUEST_SUCCESS = "GET_DOCTORS_REQUEST_SUCCESS";
 export const GET_DOCTORS_REQUEST_FAIL = "GET_DOCTORS_REQUEST_FAIL";

+ 47 - 3
src/components/Admin/Admin.js

@@ -2,6 +2,7 @@ import React from 'react';
 import {connect} from 'react-redux'
 import {Link} from 'react-router-dom'
 import {Switch, Route} from "react-router-dom";
+
 import {
     changeInputValueDoctorForm,
     changeInputValueServiceForm,
@@ -18,7 +19,8 @@ import {
     findUser,
     deleteUser,
     changeInputValueUserForm,
-    putUser
+    putUser,
+    getUsers,
 } from "../../actions/user"
 
 import {
@@ -32,9 +34,16 @@ import {
     postShedule,
 } from "../../actions/shedule"
 
+import  {
+    getOrders,
+    changeInputFindOrder,
+    findOrdersArray
+} from "../../actions/orders"
+
 import Shedule from './Shedule'
 import ChangeUser from './ChangeUser'
 import ChangeServicesDoctors from './ChangeServices-Doctors'
+import Orders from "./Orders";
 
 
 
@@ -65,6 +74,7 @@ export class Admin extends React.Component {
             changeSpecialityArray,
             specialityArray,
             user,
+            users,
             findUserInput,
             changeFindUserInput,
             findUser,
@@ -72,7 +82,15 @@ export class Admin extends React.Component {
             userError,
             changeUserForm,
             changeInputValueUserForm,
-            putUser
+            putUser,
+            getUsers,
+            getOrders,
+            orders,
+            changeInputFindOrder,
+            findOrderInput,
+            findOrdersArray,
+            ordersArray,
+            searching
         } = this.props;
 
         return (
@@ -83,6 +101,7 @@ export class Admin extends React.Component {
                         <Link to='/admin/change-doctors' className = "btn link admin">Сотрудники</Link>
                         <Link to='/admin/change-services' className = "btn link admin">Сервисы</Link>
                         <Link to='/admin/change-user' className = "btn link admin">Пользователи</Link>
+                        <Link to='/admin/change-orders' className = "btn link admin">Заказы</Link>
                     </div>
                     <Switch>
                         <Route path='/admin/change-shedule' render={() => <Shedule
@@ -116,6 +135,7 @@ export class Admin extends React.Component {
                         />} />
                         <Route path='/admin/change-user' render={() => <ChangeUser
                             user={user}
+                            users={users}
                             findUserInput={findUserInput}
                             changeFindUserInput={changeFindUserInput}
                             findUser={findUser}
@@ -124,6 +144,20 @@ export class Admin extends React.Component {
                             changeUserForm={changeUserForm}
                             changeInputValueUserForm={changeInputValueUserForm}
                             putUser={putUser}
+                            getUsers={getUsers}
+                        />} />
+                        <Route path='/admin/change-orders' render={() => <Orders
+                            getOrders={getOrders}
+                            orders={orders}
+                            doctors={doctors}
+                            services={services}
+                            users={users}
+                            findOrderInput={findOrderInput}
+                            ordersArray={ordersArray}
+                            searching={searching}
+                            changeInputFindOrder={changeInputFindOrder}
+                            findOrdersArray={findOrdersArray}
+                            getUsers={getUsers}
                         />} />
                     </Switch>
                 </div>
@@ -147,6 +181,12 @@ const mapStateToProps = state => {
         findUserInput:state.user.findUserInput,
         userError:state.user.error,
         changeUserForm:state.user.changeUserForm,
+        users:state.user.users,
+        orders:state.orders.orders,
+        findOrdersArray:state.orders.findOrdersArray,
+        findOrderInput:state.orders.findOrderInput,
+        ordersArray:state.orders.ordersArray,
+        searching:state.orders.searching
     }
 };
 
@@ -168,7 +208,11 @@ const mapDispatchToProps = {
     findUser,
     deleteUser,
     changeInputValueUserForm,
-    putUser
+    putUser,
+    getUsers,
+    getOrders,
+    changeInputFindOrder,
+    findOrdersArray
 };
 
 export default connect (mapStateToProps,mapDispatchToProps)(Admin)

+ 82 - 0
src/components/Admin/Orders.js

@@ -0,0 +1,82 @@
+import React, {Component} from 'react';
+import {Link} from 'react-router-dom'
+
+class Orders extends Component {
+
+    componentDidMount() {
+        this.props.getUsers();
+        this.props.getOrders({doctors:this.props.doctors,services:this.props.services,users:this.props.users});
+    }
+
+    changeInputFindOrder = (e) => {
+        this.props.changeInputFindOrder(e.target.value)
+    };
+
+    findOrders = () => {
+        this.props.findOrdersArray()
+    };
+
+    enterPressed = (e) => {
+        if (e.key === 'Enter') {
+            this.findOrders();
+        }
+    };
+
+    render() {
+        const{findOrderInput,ordersArray,searching,orders} = this.props;
+        console.log(this.props);
+        return (
+            <div style={{
+                display:'flex',
+            }}>
+                <div style={{
+                    width:'50%'
+                }}>
+                    <input type="text" onKeyDown={this.enterPressed} onChange={this.changeInputFindOrder}/>
+                    {findOrderInput &&
+                    <button id='enter' onClick={this.findOrders}>Find User</button>
+                    }
+                    {searching && ordersArray.length === 0 && <p>Order not found</p>}
+                    {ordersArray.map(el => (
+                        <div key={el._id} style={{
+                            display:'flex',
+
+                        }}>
+                            <Link to={`/order/${el._id}`}>{el.orderNumber}</Link>
+                            <div>
+                                <p>{el.date.split('T')[0]}</p>
+                                <p>{el.time}</p>
+                            </div>
+                            <Link to={`/user/${el.user._id}`}>{el.user.email}</Link>
+                            <Link to={`/doctors/${el.doctor._id}`}>{el.doctor.name}</Link>
+                            <Link to={`/services/${el.spec._id}`}>{el.spec.name}</Link>
+                        </div>
+                    ))}
+                </div>
+                <div style={{
+                    display:'flex',
+                    flexDirection:'column',
+                    width:'50%'
+                }}>
+                    {orders.map(el => (
+                        <div key={el._id} style={{
+                            display:'flex',
+
+                        }}>
+                            <Link to={`/order/${el._id}`}>{el.orderNumber}</Link>
+                            <div>
+                                <p>{el.date.split('T')[0]}</p>
+                                <p>{el.time}</p>
+                            </div>
+                            <Link to={`/user/${el.user._id}`}>{el.user.email}</Link>
+                            <Link to={`/doctors/${el.doctor._id}`}>{el.doctor.name}</Link>
+                            <Link to={`/services/${el.spec._id}`}>{el.spec.name}</Link>
+                        </div>
+                    ))}
+                </div>
+            </div>
+        );
+    }
+}
+
+export default Orders;

+ 3 - 1
src/reducers/index.js

@@ -8,6 +8,7 @@ import {servicesReducer} from "./services";
 import orders from './orders'
 import {userReducer} from "./user";
 import {sheduleReducer} from "./shedule";
+import {ordersReducer} from "./orders";
 
 
 
@@ -19,5 +20,6 @@ export default combineReducers({
     services:servicesReducer,
     orders,
     user:userReducer,
-    shedule:sheduleReducer
+    shedule:sheduleReducer,
+    orders:ordersReducer
 })

+ 73 - 21
src/reducers/orders.js

@@ -1,36 +1,88 @@
 import * as types from '../actionsTypes/actionsTypes'
 
-const initialState = {
+const defaultState = {
     orders:[],
-    isFetching: false,
+    ordersArray:[],
+    findOrderInput:'',
     error:null,
-    userOrders: [],
-}
+    isFetching:false,
+    searching:false,
+};
 
-export default (state = initialState, action) => {
-    switch(action.type){
-        case types.GET_ORDERS_REQUEST: {
-            return {...state, isFetching: true};
+export const ordersReducer = (state = defaultState, action) => {
+    switch (action.type) {
+
+        case types.CHANGE_INPUT_VALUE_FIND_ORDER : {
+            return {
+                ...state,
+                findOrderInput:action.payload
+            };
         }
 
-        case types.GET_ORDERS_REQUEST_SUCCESS: { 
-            return {...state, isFetching: false, orders: action.payload.orders};
+        case types.FIND_ORDERS_ARRAY : {
+            if(!isNaN(+state.findOrderInput)){
+                return {
+                    ...state,
+                    ordersArray:state.orders.filter(el => el.orderNumber === +state.findOrderInput),
+                    searching:true,
+                }
+            }
+            if(state.findOrderInput.includes('@')){
+                return {
+                    ...state,
+                    ordersArray:state.orders.filter(el => el.user.email === state.findOrderInput),
+                    searching:true,
+                }
+            }
+            return {
+                ...state,
+                searching:true,
+            };
         }
 
-        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('userOrders',userOrdersArray)
-            return  {...state, isFetching: false,}
+        case types.CHANGE_INPUT_VALUE_ORDER_FORM : {
+            return {
+                ...state,
+            };
         }
 
-        case types.GET_ORDERS_REQUEST_FAIL: {
-            return {...state, isFetching: false}
-            // return {...state, isFetching: false,error: action.payload.response.data.message };
+
+        case types.GET_ORDERS_REQUEST : {
+            return {
+                ...state,
+                isFetching: true
+            };
         }
 
+        case types.GET_ORDERS_REQUEST_SUCCESS : {
+            const res = action.payload.res.orders;
+            const doctors = action.payload.data.doctors;
+            const services = action.payload.data.services;
+            const users = action.payload.data.users;
+            // eslint-disable-next-line array-callback-return
+            res.map(el => {
+                if(doctors.find(doc => doc._id === el.doctor))el.doctor = doctors.find(doc => doc._id === el.doctor);
+                if(services.find(spec => spec._id === el.spec))el.spec = services.find(spec => spec._id === el.spec);
+                if(users.find(us => us._id === el.user))el.user = users.find(us => us._id === el.user)
+            });
+            return {
+                ...state,
+                orders: res
+            };
+        }
+
+        case types.GET_ORDERS_REQUEST_FAIL : {
+            return {
+                ...state,
+                error: action.payload,
+                isFetching: false
+            }
+        }
+
+
+
+
         default:
-             return state
+            return state
     }
-}
+};

+ 62 - 16
src/reducers/user.js

@@ -4,6 +4,7 @@ import {adminChangeUserForm} from "../utils/formFields"
 
 const defaultState = {
     user: null,
+    users:[],
     findUserInput: '',
     changeUserForm: adminChangeUserForm,
     isFetching: false,
@@ -13,6 +14,55 @@ const defaultState = {
 export const userReducer = (state = defaultState, action) => {
     switch (action.type) {
 
+        case types.CHANGE_INPUT_VALUE_FIND_USER : {
+            return {
+                ...state,
+                findUserInput: action.payload
+            };
+        }
+
+        case types.CHANGE_INPUT_VALUE_USER_FORM : {
+            const data = action.payload.target;
+            return {
+                ...state,
+                changeUserForm: state.changeUserForm.map(el => el.name === data.name ? el.type === 'radio' ?
+                    {
+                        ...el,
+                        checked: !el.checked
+                    } :
+                    {
+                        ...el,
+                        value: data.value
+                    } :
+                    el
+                ),
+            };
+        }
+
+        case types.GET_USERS_REQUEST : {
+            return {
+                ...state,
+                isFetching: true
+            };
+        }
+
+        case types.GET_USERS_REQUEST_SUCCESS : {
+            return {
+                ...state,
+                users: action.payload.users,
+                isFetching: false
+            };
+        }
+
+        case types.GET_USERS_REQUEST_FAIL : {
+            return {
+                ...state,
+                error: action.payload,
+                isFetching: false
+            }
+        }
+
+
         case types.FIND_USER_REQUEST : {
             return {
                 ...state,
@@ -49,31 +99,28 @@ export const userReducer = (state = defaultState, action) => {
             }
         }
 
-        case types.CHANGE_INPUT_VALUE_FIND_USER : {
+        case types.PUT_USER_REQUEST : {
             return {
                 ...state,
-                findUserInput: action.payload
+                isFetching: true
             };
         }
 
-        case types.CHANGE_INPUT_VALUE_USER_FORM : {
-            const data = action.payload.target;
+        case types.PUT_USER_REQUEST_SUCCESS : {
             return {
                 ...state,
-                changeUserForm: state.changeUserForm.map(el => el.name === data.name ? el.type === 'radio' ?
-                    {
-                        ...el,
-                        checked: !el.checked
-                    } :
-                    {
-                        ...el,
-                        value: data.value
-                    } :
-                    el
-                ),
+                isFetching: false
             };
         }
 
+        case types.PUT_USER_REQUEST_FAIL : {
+            return {
+                ...state,
+                error: action.payload,
+                isFetching: false
+            }
+        }
+
         case types.DELETE_USER_REQUEST : {
             return {
                 ...state,
@@ -84,7 +131,6 @@ export const userReducer = (state = defaultState, action) => {
         case types.DELETE_USER_REQUEST_SUCCESS : {
             return {
                 ...state,
-                services: action.payload,
                 isFetching: false
             };
         }