123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545 |
- import * as types from '../actionsTypes/actionsTypes'
- import {postNewDoctorForm,postNewServiceForm} from '../utils/formFields'
- const defaultState = {
- user:localStorage.getItem('id') ? localStorage.getItem('id') : null,
- doctors:[],
- services:[],
- servicesArray:{
- 'Хирургия':[],
- 'Детская стоматология':[],
- 'Ортодонтия':[],
- 'Терапия':[],
- 'Имплантология': [],
- 'Эндодонтия':[]
- },
- orders:[],
- users:[],
- reviews: [],
- postNewShedule:{
- data:null,
- doctor:null
- },
- postNewDoctor:postNewDoctorForm,
- postNewService:postNewServiceForm,
- changeDoctorId:null,
- changeServiceId:null,
- appointment:{
- shedule:null,
- time:null,
- doctor:null,
- spec:null,
- comment:''
- },
- timeArray:[],
- isFetching:false,
- error: null,
- };
- // -----------------------------------------------------------------------------------------------------------------
- export const appReducer = (state = defaultState,action) => {
- switch (action.type) {
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_INPUT_VALUE_DOCTOR_FORM : {
- return {
- ...state,
- postNewDoctor: state.postNewDoctor.map(el => el.id === +action.payload.target.id ? {
- ...el,
- value:el.name === 'speciality' ? JSON.parse(action.payload.target.value) : action.payload.target.value
- } : el)
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_INPUT_VALUE_SERVICE_FORM : {
- return {
- ...state,
- postNewService: state.postNewService.map(el => el.id === +action.payload.target.id ? {
- ...el,
- value:action.payload.target.value
- } : el)
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_SELECTED_DOCTOR_ID : {
- let doctor = state.doctors.find(el => el.name === action.payload)
- let result = Object.keys(doctor).map(key => {
- return [key, doctor[key]];
- });
- return {
- ...state,
- changeDoctorId: state.doctors.find(el => el.name === action.payload)._id,
- postNewDoctor:state.postNewDoctor.map(el => result.find(item => item[0] === el.name) ? {
- ...el,
- value:result.find(item => item[0] === el.name)[1]
- } : el)
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_SELECTED_SERVICE_ID : {
- let service = state.services.find(el => el.name === action.payload)
- let result = Object.keys(service).map(key => {
- return [key, service[key]];
- });
- return {
- ...state,
- changeServiceId: service._id,
- postNewService: state.postNewService.map(el => result.find(item => item[0] === el.name) ? {
- ...el,
- value:result.find(item => item[0] === el.name)[1]
- } : el)
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_APPOINTMENT_SHEDULE : {
- let timeArray =[];
- let doctor = state.doctors.find(el => el._id === state.appointment.doctor);
- let shedule = doctor.shedule.find(el => el.data === action.payload);
- let duration = state.services.find(el => el._id === state.appointment.spec).duration;
- console.log(shedule,action.payload)
- for (let index in shedule) {
- 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
- }
- }
- if (check) timeArray.push({[`${index}`]:shedule[`${index}`]});
- }
- return {
- ...state,
- appointment:{
- ...state.appointment,
- shedule:shedule._id
- },
- timeArray:timeArray
- };
- }
- case types.CHANGE_APPOINTMENT_DOCTOR : {
- return {
- ...state,
- appointment:{
- ...state.appointment,
- doctor:action.payload
- }
- };
- }
- case types.CHANGE_APPOINTMENT_TIME : {
- return {
- ...state,
- appointment:{
- ...state.appointment,
- time:action.payload
- }
- };
- }
- case types.CHANGE_APPOINTMENT_SPEC : {
- return {
- ...state,
- appointment:{
- ...state.appointment,
- spec:state.services.find(el => el.name === action.payload)._id,
- shedule:null,
- time:null
- }
- };
- }
- case types.CHANGE_APPOINTMENT_COMMENT : {
- return {
- ...state,
- appointment:{
- ...state.appointment,
- comment:action.payload
- }
- };
- }
- case types.CLEAR_APPOINTMENT : {
- return {
- ...state,
- appointment: defaultState.appointment
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.CHANGE_SHEDULE_DOCTOR : {
- let doctor = state.doctors.find(el=>el.name === action.payload);
- let array = [[],[],[],[],[],[],[],[],[],[],[],[]];
- // eslint-disable-next-line array-callback-return
- doctor.shedule.map(el => {
- array[new Date(el.data).getMonth()].push(el)
- });
- return {
- ...state,
- postNewShedule: {
- ...state.postNewShedule,
- doctor:doctor._id
- },
- sheduleMonthArray: array
- };
- }
- // -----------------------------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------------------------
- case types.GET_DOCTORS_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.GET_DOCTORS_REQUEST_SUCCESS : {
- return {
- ...state,
- doctors:action.payload.doctors,
- isFetching: false
- }
- }
- case types.GET_DOCTORS_REQUEST_FAIL : {
- return {
- ...state,
- error:action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.GET_SERVICES_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.GET_SERVICES_REQUEST_SUCCESS : {
- action.payload.services.sort((a,b) => {
- if (a.name.slice(0,1) < b.name.slice(0,1)) {return -1;}
- if(a.name.slice(0,1) > b.name.slice(0,1)) {return 1;}
- return 0
- });
- action.payload.services.map(el => {
- switch (el.description){
- case "Ортодонтия" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Ортодонтия':state.servicesArray['Ортодонтия'].push(el)
- }
- }
- }
- case "Детская стоматология" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Детская стоматология':state.servicesArray['Детская стоматология'].push(el)
- }
- }
- }
- case "Протезирование" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Имплантология':state.servicesArray['Имплантология'].push(el)
- }
- }
- }
- case "Имплантация" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Имплантология':state.servicesArray['Имплантология'].push(el)
- }
- }
- }
- case "Хирургия" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Хирургия':state.servicesArray['Хирургия'].push(el)
- }
- }
- }
- case "Эндодонтическое лечение с помощью микроскопа" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Эндодонтия':state.servicesArray['Эндодонтия'].push(el)
- }
- }
- }
- case "Лечение пародонтита" : {
- return {
- ...state,
- servicesArray:{
- ...state.servicesArray,
- 'Терапия':state.servicesArray['Терапия'].push(el)
- }
- }
- }
- default: return el
- }
- });
- return {
- ...state,
- services:action.payload.services,
- isFetching: false
- }
- }
- case types.GET_SERVICES_REQUEST_FAIL : {
- return {
- ...state,
- error:action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------------------------
- case types.POST_DOCTORS_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.POST_DOCTORS_REQUEST_SUCCESS : {
- return {
- ...state,
- postNewDoctor:postNewDoctorForm,
- isFetching: false
- }
- }
- case types.POST_DOCTORS_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.POST_SHEDULE_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.POST_SHEDULE_REQUEST_SUCCESS : {
- return {
- ...state,
- postNewShedule:{
- ...state.postNewShedule,
- data:null,
- },
- isFetching: false
- }
- }
- case types.POST_SHEDULE_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.POST_SERVICES_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.POST_SERVICES_REQUEST_SUCCESS : {
- return {
- ...state,
- isFetching: false
- }
- }
- case types.POST_SERVICES_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.POST_ORDERS_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.POST_ORDERS_REQUEST_SUCCESS : {
- return {
- ...state,
- appointment: defaultState.appointment,
- orders:action.payload,
- isFetching: false
- }
- }
- case types.POST_ORDERS_REQUEST_FAIL : {
- return {
- ...state,
- error:action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------------------------
- case types.PUT_DOCTORS_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.PUT_DOCTORS_REQUEST_SUCCESS : {
- return {
- ...state,
- postNewDoctor:postNewDoctorForm,
- changeId:null,
- isFetching: false
- }
- }
- case types.PUT_DOCTORS_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.PUT_SERVICES_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.PUT_SERVICES_REQUEST_SUCCESS : {
- return {
- ...state,
- postNewService:postNewServiceForm,
- changeId:null,
- isFetching: false
- }
- }
- case types.PUT_SERVICES_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------------------------
- case types.DELETE_DOCTORS_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.DELETE_DOCTORS_REQUEST_SUCCESS : {
- return {
- ...state,
- changeId:null,
- isFetching: false
- }
- }
- case types.DELETE_DOCTORS_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- case types.DELETE_SERVICES_REQUEST : {
- return {
- ...state,
- isFetching: true
- };
- }
- case types.DELETE_SERVICES_REQUEST_SUCCESS : {
- return {
- ...state,
- changeId:null,
- isFetching: false
- }
- }
- case types.DELETE_SERVICES_REQUEST_FAIL : {
- return {
- ...state,
- error: action.payload,
- isFetching: false
- }
- }
- // -----------------------------------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------------------------------
- default:
- return state
- }
- };
|