Browse Source

работает оформление заказов, частично работает добавление/изменение докторов(не работает поле специальности), работает добавление рассписания врачам(добавляет все выбранные даты пока)

Boris K 5 years ago
parent
commit
859ace7262

+ 8 - 8
src/App.js

@@ -24,13 +24,12 @@ export class App extends React.Component {
         this.props.getDoctors();
         this.props.getServices();
 
-     
-        fetch("https://api-clinics.herokuapp.com/api/v1/doctors", {
-            method: "GET",
-            credentials: "include"
-        })
-            .then(res => res.json())
-            .then(res => console.log (res))
+        // fetch("https://api-clinics.herokuapp.com/api/v1/orders", {
+        //     method: "GET",
+        //     credentials: "include"
+        // })
+        //     .then(res => res.json())
+        //     .then(res => console.log (res))
 
         // fetch("https://api-clinics.herokuapp.com/api/v1/services", {
         //     method: "GET",
@@ -55,6 +54,7 @@ export class App extends React.Component {
     }
 
     render() {
+        console.log(this.props.app)
         return (
             <div className="container">
                 <Header/>
@@ -63,7 +63,7 @@ export class App extends React.Component {
                         <Route exact path="/doctors" render={() => <Doctors data={this.props.app.doctors} /> } />
                         <Route exact path="/services" render={() => <Services data={this.props.app.services} />} />
                         <Route exact path="/reviews" render={() => <div>Reviews</div>} />
-                        <Route path="/admin/" render={(props) => <Admin />} />
+                        <Route path="/admin/" render={() => <Admin />} />
                         <Route exact path="/services/:service" render={(props) => <Service
                             his={props}
                             data={this.props.app.services}

+ 38 - 0
src/actions/actions.js

@@ -8,6 +8,13 @@ const URL = "https://api-clinics.herokuapp.com/api/v1/";
 export const changeInputDoctorForm = payload => ({
     type: types.CHANGE_INPUT_VALUE_DOCTOR_FORM,
     payload
+})
+
+// -----------------------------------------------------------------------------------------------------------------
+
+export const changeSelectedDoctor = payload => ({
+    type: types.CHANGE_SELECTED_DOCTOR,
+    payload
 });
 
 // -----------------------------------------------------------------------------------------------------------------
@@ -257,4 +264,35 @@ export const postOrders = (payload) => dispatch => {
 };
 
 // -----------------------------------------------------------------------------------------------------------------
+
+const putDoctorsRequest = payload => ({
+    type: types.PUT_DOCTORS_REQUEST,
+    payload
+});
+
+const putDoctorsRequestSuccess = payload => ({
+    type: types.PUT_DOCTORS_REQUEST_SUCCESS,
+    payload
+});
+
+const putDoctorsRequestFail = payload => ({
+    type: types.PUT_DOCTORS_REQUEST_FAIL,
+    payload
+});
+
+export const putDoctors = (payload) => dispatch => {
+    dispatch(putDoctorsRequest());
+    return fetch(`${URL}doctors/${payload.id}`, {
+        method: "PUT",
+        credentials: "include",
+        headers: {
+            "Content-Type": "application/json"
+        },
+        body: JSON.stringify(payload.data)
+    })
+        .then(res => res.json())
+        .then(res => dispatch(putDoctorsRequestSuccess(res)))
+        .catch(err => dispatch(putDoctorsRequestFail(err)));
+};
+
 // -----------------------------------------------------------------------------------------------------------------

+ 6 - 0
src/actionsTypes/actionsTypes.js

@@ -41,10 +41,16 @@ export const POST_SHEDULE_REQUEST = "POST_SHEDULE_REQUEST";
 export const POST_SHEDULE_REQUEST_SUCCESS = "POST_SHEDULE_REQUEST_SUCCESS";
 export const POST_SHEDULE_REQUEST_FAIL = "POST_SHEDULE_REQUEST_FAIL";
 
+export const PUT_DOCTORS_REQUEST = "PUT_DOCTORS_REQUEST";
+export const PUT_DOCTORS_REQUEST_SUCCESS = "PUT_DOCTORS_REQUEST_SUCCESS";
+export const PUT_DOCTORS_REQUEST_FAIL = "PUT_DOCTORS_REQUEST_FAIL";
+
 // export const CHANGE_SHEDULE_DATE= "CHANGE_SHEDULE_DATE";
 export const CHANGE_SHEDULE_DOCTOR= "CHANGE_SHEDULE_DOCTOR";
 
 export const CHANGE_INPUT_VALUE_DOCTOR_FORM= "CHANGE_INPUT_VALUE_DOCTOR_FORM";
 
+export const CHANGE_SELECTED_DOCTOR= "CHANGE_SELECTED_DOCTOR";
+
 
 

+ 12 - 4
src/components/Admin/Admin.js

@@ -6,7 +6,9 @@ import {
     setSheduleDoctor,
     postShedule,
     changeInputDoctorForm,
-    postDoctors
+    postDoctors,
+    changeSelectedDoctor,
+    putDoctors
 } from "../../actions/actions";
 
 import Shedule from './Shedule'
@@ -18,8 +20,8 @@ export class Admin extends React.Component {
 
 
     render() {
-        const {doctors,postNewShedule,sheduleMonthArray,postNewDoctor} = this.props.app;
-        const {setSheduleDoctor,postShedule,changeInputDoctorForm,postDoctors} = this.props;
+        const {doctors,postNewShedule,sheduleMonthArray,postNewDoctor,changeDoctor} = this.props.app;
+        const {setSheduleDoctor,postShedule,changeInputDoctorForm,postDoctors,changeSelectedDoctor,putDoctors} = this.props;
         return (
             <div style={{display:'flex',flexDirection:'column', width:'200px', margin:'100px 20px'}}>
                 <div>
@@ -36,6 +38,10 @@ export class Admin extends React.Component {
                         postShedule={postShedule}
                     />} />
                     <Route path='/admin/change-doctors' render={() => <ChangeDoctor
+                        putDoctors={putDoctors}
+                        changeDoctor={changeDoctor}
+                        doctors={doctors}
+                        changeSelectedDoctor={changeSelectedDoctor}
                         changeInputValues={changeInputDoctorForm}
                         postDoctors={postDoctors}
                         postNewDoctor={postNewDoctor}
@@ -57,7 +63,9 @@ const mapDispatchToProps = {
     setSheduleDoctor,
     postShedule,
     changeInputDoctorForm,
-    postDoctors
+    postDoctors,
+    changeSelectedDoctor,
+    putDoctors
 
 
 };

+ 51 - 5
src/components/Admin/ChangeDoctor.js

@@ -5,13 +5,19 @@ export default class ChangeDoctor extends React.Component {
 
 
     render() {
-        const {changeInputValues,postDoctors,postNewDoctor} = this.props;
+        const doc = {};
+        const {changeInputValues,postDoctors,postNewDoctor,changeSelectedDoctor,doctors,changeDoctor,putDoctors} = this.props;
         return (
-            <div style={{display:'flex',flexDirection:'column', width:'200px', margin:'10px 20px'}}>
-                <form onSubmit={(e)=>{
+            <div style={{display:'flex',flexDirection:'column', width:'400px', margin:'10px 20px'}}>
+                <form style={{display:"flex",flexDirection:"column"}} onSubmit={(e)=>{
                     e.preventDefault();
-                    console.log(postNewDoctor)
-                }}>
+                    // eslint-disable-next-line array-callback-return
+                    postNewDoctor.map(el => {
+                        doc[el.name] = el.value
+                    });
+                    postDoctors(doc)
+                }}
+                >
                 {
                     postNewDoctor.map(el => (
                         <Input
@@ -27,6 +33,46 @@ export default class ChangeDoctor extends React.Component {
                     value='Post new doctor'
                 />
                 </form>
+
+                <select  onChange={(e)=>changeSelectedDoctor(e.target.value)} defaultValue='choose doctor'>
+                    <option disabled >choose doctor</option>
+                    {
+                        doctors.map(el=> (
+                            <option key={el._id}>{el.name}</option>
+                        ))
+                    }
+                </select>
+
+                {
+                    <form style={{display:"flex",flexDirection:"column",margin:"20px 0"}} onSubmit={(e)=>{
+                        e.preventDefault();
+                        // eslint-disable-next-line array-callback-return
+                        postNewDoctor.map(el => {
+                            if (el.value !== '')
+                                doc[el.name] = el.value
+                        });
+                        putDoctors({data:doc,id:changeDoctor})
+
+                    }}>
+                        {changeDoctor &&
+                        postNewDoctor.map(el => {
+                            el.required = false;
+                            return (
+                                <Input
+                                    key={el.id}
+                                    id={el.id}
+                                    el={el}
+                                    changeInputValues={changeInputValues}
+                                />
+                                )
+                        })
+                        }
+                        <input
+                            type='submit'
+                            value='Change Selected Doctor'
+                        />
+                    </form>
+                }
             </div>
         );
     }

+ 2 - 2
src/components/Appointment.js

@@ -69,8 +69,8 @@ export class Appoint extends React.Component {
                         {appointment.spec &&
                             <input
                                 type="date"
-                                onChange={(e) => setAppointmentShedule(doctor.shedule.find(el => el.data === new Date(e.target.value).toISOString())
-                                    ? doctor.shedule.find(el => el.data === new Date(e.target.value).toISOString())._id
+                                onChange={(e) => setAppointmentShedule(doctor.shedule.find(el => new Date(el.data).toISOString().split('T')[0] === new Date(e.target.value).toISOString().split('T')[0])
+                                    ? doctor.shedule.find(el => new Date(el.data).toISOString().split('T')[0] === new Date(e.target.value).toISOString().split('T')[0])._id
                                     : null
                                 )}
                             />

+ 40 - 3
src/reducers/reducers.js

@@ -1,6 +1,6 @@
 import * as types from '../actionsTypes/actionsTypes'
 
-const doctorForm =[
+const postNewDoctorForm =[
     {
         id:1,
         type:'text',
@@ -70,7 +70,8 @@ const defaultState = {
         data:null,
         doctor:null
     },
-    postNewDoctor:doctorForm,
+    postNewDoctor:postNewDoctorForm,
+    changeDoctor:null,
     sheduleMonthArray:null,
     services:[],
     orders:[],
@@ -103,11 +104,21 @@ export const appReducer = (state = defaultState,action) => {
                 ...state,
                 postNewDoctor: state.postNewDoctor.map(el => el.id === +action.payload.target.id ? {
                     ...el,
-                    value:action.payload.target.value
+                    value:el.name === 'speciality' ? JSON.parse(action.payload.target.value) : action.payload.target.value
                 } : el)
             };
         }
 
+// -----------------------------------------------------------------------------------------------------------------
+
+        case types.CHANGE_SELECTED_DOCTOR : {
+            return {
+                ...state,
+                changeDoctor: state.doctors.find(el => el.name === action.payload)._id,
+                postNewDoctor:postNewDoctorForm
+            };
+        }
+
 // -----------------------------------------------------------------------------------------------------------------
 
         case types.CHANGE_APPOINTMENT_SHEDULE : {
@@ -116,8 +127,10 @@ export const appReducer = (state = defaultState,action) => {
             let shedule = doctor.shedule.find(el => el._id === action.payload);
             let duration = state.services.find(el => el._id === state.appointment.spec).duration;
             for (let index in shedule) {
+                console.log(index)
                 let check = true;
                 for (let x=0;x < duration; x++){
+
                     if (shedule[`${+index.split(':')[0]+x < 10 ? '0' +(+index.split(':')[0] + x) + ':00' : +index.split(':')[0]+ x + ':00'}`] !== true){
                         check = false
                     }
@@ -326,6 +339,30 @@ export const appReducer = (state = defaultState,action) => {
             }
         }
 
+// -----------------------------------------------------------------------------------------------------------------
+
+        case types.PUT_DOCTORS_REQUEST : {
+            return {
+                ...state,
+                isFetching: true
+            };
+        }
+
+        case types.PUT_DOCTORS_REQUEST_SUCCESS : {
+            return {
+                ...state,
+                isFetching: false
+            }
+        }
+
+        case types.PUT_DOCTORS_REQUEST_FAIL : {
+            return {
+                ...state,
+                error: action.payload,
+                isFetching: false
+            }
+        }
+
 // -----------------------------------------------------------------------------------------------------------------
 
         default: