98 lines
3.7 KiB
JavaScript
Raw Normal View History

2022-12-26 15:12:01 +03:00
import React, { useEffect, useState } from 'react'
2023-01-16 21:11:46 +03:00
import {useDispatch, useSelector} from 'react-redux'
2023-02-17 15:19:49 +03:00
import {getReports} from '../Calendar/calendarHelper'
2023-02-27 16:50:32 +03:00
import {Link, Navigate} from 'react-router-dom'
2022-12-26 15:12:01 +03:00
import moment from "moment";
2022-12-26 15:12:01 +03:00
import {ProfileCalendarComponent} from "./ProfileCalendarComponent";
2023-01-24 19:11:24 +03:00
import {Loader} from "../Loader/Loader";
import {ProfileHeader} from "../ProfileHeader/ProfileHeader";
2023-02-27 16:50:32 +03:00
import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"
2023-01-24 19:11:24 +03:00
import { Footer } from '../Footer/Footer'
2022-12-26 15:12:01 +03:00
import {urlForLocal} from "../../helper";
import {apiRequest} from "../../api/request";
import { getProfileInfo } from '../../redux/outstaffingSlice'
2023-02-09 20:46:02 +03:00
import {getRequestDates, setReportDate, setRequestDate} from "../../redux/reportSlice";
2023-02-09 20:46:02 +03:00
import 'moment/locale/ru'
import './profileCalendar.scss'
2023-01-16 21:11:46 +03:00
2022-12-26 15:12:01 +03:00
export const ProfileCalendar = () => {
2023-02-27 16:50:32 +03:00
if(localStorage.getItem('role_status') === '18') {
return <Navigate to="/profile" replace/>
}
2023-01-16 21:11:46 +03:00
const dispatch = useDispatch();
2023-02-09 20:46:02 +03:00
const profileInfo = useSelector(getProfileInfo)
const requestDates = useSelector(getRequestDates)
const [value, setValue] = useState(moment())
const [reports, setReports] = useState([]);
const [totalHours, setTotalHours] = useState(0);
2023-02-09 20:46:02 +03:00
const [loader, setLoader] = useState(true)
2023-02-09 20:46:02 +03:00
function setValueHandler (value) {
setValue(value)
}
2022-12-26 15:12:01 +03:00
useEffect(() => {
2023-02-09 20:46:02 +03:00
dispatch(setRequestDate(getReports(moment())))
},[]);
2022-12-26 15:12:01 +03:00
useEffect( () => {
2023-01-24 19:11:24 +03:00
setLoader(true)
2022-12-26 15:12:01 +03:00
if (!requestDates) {
return
}
2023-01-23 14:59:57 +03:00
apiRequest(`/reports/reports-by-date?${requestDates}&user_card_id=${localStorage.getItem('cardId')}`)
.then((reports) => {
let spendTime = 0;
2023-01-23 14:59:57 +03:00
for (const report of reports) {
report.task.map((task) => {
if(task.hours_spent) {
spendTime += Number(task.hours_spent)
}
})
}
setTotalHours(spendTime);
setReports(reports)
2023-01-24 19:11:24 +03:00
setLoader(false)
2022-12-26 15:12:01 +03:00
})
}, [requestDates]);
2022-12-26 15:12:01 +03:00
return (
2023-01-16 16:28:56 +03:00
<div className='profile__calendar'>
2023-01-13 15:53:07 +03:00
<ProfileHeader/>
<div className='container'>
2023-02-27 16:50:32 +03:00
<ProfileBreadcrumbs links={[{name: 'Главная', link: '/profile'},{name: 'Ваша отчетность', link: '/profile/calendar'}]} />
2023-01-13 15:53:07 +03:00
<h2 className='summary__title'>Ваши отчеты</h2>
<div className='summary__info'>
<div className='summary__person'>
<img src={urlForLocal(profileInfo.photo)} className='summary__avatar' alt='avatar'/>
2023-02-17 15:19:49 +03:00
<p className='summary__name'>{profileInfo.fio}, {profileInfo.specification} разработчик</p>
2022-12-26 15:12:01 +03:00
</div>
2023-01-16 20:38:33 +03:00
<Link to='/report'>
2023-01-16 21:11:46 +03:00
<button className="calendar__btn" onClick={() => {
dispatch(setReportDate(''))
}}>Заполнить отчет за день</button>
2023-01-13 15:53:07 +03:00
</Link>
2022-12-26 15:12:01 +03:00
</div>
2023-01-24 19:11:24 +03:00
{loader ?
2023-03-01 00:28:58 +03:00
<div className='loader__wrapper'>
<Loader height={80} width={80} />
</div>
2023-01-24 19:11:24 +03:00
:
2023-03-01 00:28:58 +03:00
<div className='row calendar__wrapper'>
2023-01-24 19:11:24 +03:00
<div className='col-12 col-xl-12'>
2023-02-17 15:19:49 +03:00
<ProfileCalendarComponent setValueHandler={setValueHandler} value={value} reports={reports} totalHours={totalHours} />
2023-01-24 19:11:24 +03:00
</div>
2023-01-13 15:53:07 +03:00
</div>
2023-01-24 19:11:24 +03:00
}
2022-12-26 15:12:01 +03:00
</div>
<Footer />
2023-01-13 15:53:07 +03:00
</div>
2022-12-26 15:12:01 +03:00
)
};