Merge branch 'task-29-feature/create-switch-hours' into 'development'

Task 29 feature/create switch hours

See merge request !15
parents 98b1a3d0 5fc6aa16
...@@ -36,6 +36,11 @@ import { ...@@ -36,6 +36,11 @@ import {
description!: string description!: string
@CreateDateColumn({ name: 'created_at', type: Date, default: new Date() }) @CreateDateColumn({ name: 'created_at', type: Date, default: new Date() })
createdAt!: Date; createdAt!: Date;
@Column({ name: 'dateTimeStart', type: Date,nullable: true })
dateTimeStart!: Date | null;
@Column({ name: 'dateTimeDue', type: Date,nullable: true })
dateTimeDue!: Date | null;
@Column({ @Column({
type: "enum", type: "enum",
enum: ["opened", "done" , "failed"], enum: ["opened", "done" , "failed"],
......
import { Grid, TextField } from "@mui/material"; import { Grid, TextField } from "@mui/material";
import { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
const CalendarTask = ({year, month, tasks, day, hours, setCurrentTask, onChange}) => { const CalendarTask = ({year, month, tasks, day, hours, setCurrentTask, onChange, hourFormat}) => {
const getTaskInDayCell = (tasks, day, hours) => { const getTaskInDayCell = (tasks, day, hours) => {
const task = tasks.find(task=> { const hour = parseInt(hours.split(':')[0])
let hourDiffEnd
let hourDiffStart
if (hourFormat) {
hourDiffEnd = hour + 1
} else {
hourDiffEnd = hour + 2
}
if (hourFormat) {
hourDiffStart = hour - 1
} else {
hourDiffStart = hour - 2
}
const tasksCell = tasks.filter(task=> {
if (year === task.infoForCell.startYear) { if (year === task.infoForCell.startYear) {
if (month + 1 === task.infoForCell.startMonth) { if (month + 1 === task.infoForCell.startMonth) {
if (day.dayNumber === task.infoForCell.startDay) { if (day.dayNumber === task.infoForCell.startDay) {
if ((task.infoForCell.endHour <= parseInt(hours.split(':')[0]) || task.infoForCell.startHour <= parseInt(hours.split(':')[0])) && (task.infoForCell.endHour > parseInt(hours.split(':')[0]))) { if (((task.infoForCell.endHour <= hour || task.infoForCell.startHour <= hour) && (task.infoForCell.endHour > hour))
|| (task.infoForCell.startHour >= hour && task.infoForCell.endHour < hourDiffEnd)
|| (task.infoForCell.endMinute <= 59 && task.infoForCell.endHour === hour)) {
return task return task
} }
} }
} }
} }
}) })
return task return tasksCell
} }
let task = getTaskInDayCell(tasks, day, hours) const tasksCell = getTaskInDayCell(tasks, day, hours)
return (<> return (<>
{task ? {tasksCell.length ? tasksCell.map((task, i)=>
<Grid sx={{backgroundColor: 'lightgreen'}}> {
return (
<Grid key={task.id} sx={{backgroundColor: 'lightgreen'}}>
<TextField <TextField
id={task.title} id={task.title}
variant="standard" variant="standard"
...@@ -31,8 +48,8 @@ const CalendarTask = ({year, month, tasks, day, hours, setCurrentTask, onChange} ...@@ -31,8 +48,8 @@ const CalendarTask = ({year, month, tasks, day, hours, setCurrentTask, onChange}
onClick={(e)=>{e.stopPropagation(); setCurrentTask(task)}} onClick={(e)=>{e.stopPropagation(); setCurrentTask(task)}}
onChange={onChange}> onChange={onChange}>
</TextField> </TextField>
</Grid> </Grid>)}
: null } ) : null }
</>) </>)
}; };
......
import { FormControlLabel, Switch } from "@mui/material";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import CalendarRow from "./CalendarRow/CalendarRow"; import CalendarRow from "./CalendarRow/CalendarRow";
import CalendarSmallCell from "./CalendarSmallCell/CalendarSmallCell"; import CalendarSmallCell from "./CalendarSmallCell/CalendarSmallCell";
import CalendarStandartCell from "./CalendarStandartCell.js/CalendarStandartCell"; import CalendarStandartCell from "./CalendarStandartCell.js/CalendarStandartCell";
import CalendarTask from "./CalendarTask/CalendarTask"; import CalendarTask from "./CalendarTask/CalendarTask";
function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChangeCellTaskTitle, setCurrentTask}) { function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChangeCellTaskTitle, setCurrentTask, hourFormat, setHourFormat}) {
const [hoursInDay, setHoursInDay] = useState(['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00', '6:00']) const [hoursInDay, setHoursInDay] = useState(['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00'])
const [daysInMonth, setDaysInMonth] = useState([]) const [daysInMonth, setDaysInMonth] = useState([])
const [cellSizes, setCellSizes] = useState({}) const [cellSizes, setCellSizes] = useState({})
useEffect(()=>{ useEffect(()=>{
const cells = hoursInDay.length const cells = hoursInDay.length
const xs = 11/cells const xs = 10.8/cells
setCellSizes(()=>{ setCellSizes(()=>{
return {smallCell: 0.5, standarCell: xs} return {smallCell: 0.6, standarCell: xs}
}) })
}, []) }, [])
useEffect(()=>{
if (hourFormat) {
const arr = ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00','21:00','22:00']
const cells = arr.length
const xs = 10.8/cells
setCellSizes(()=>{
return {smallCell: 0.6, standarCell: xs}
})
setHoursInDay(()=>arr)
} else {
const arr = ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00']
const cells = arr.length
const xs = 10.8/cells
setCellSizes(()=>{
return {smallCell: 0.6, standarCell: xs}
})
setHoursInDay(()=>arr)
}
}, [hourFormat])
useEffect(()=>{ useEffect(()=>{
setNewMonthDays() setNewMonthDays()
}, [month]) }, [month])
...@@ -47,8 +67,13 @@ function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChang ...@@ -47,8 +67,13 @@ function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChang
<> <>
<CalendarRow <CalendarRow
> >
<CalendarSmallCell xs={cellSizes.smallCell} /> <CalendarSmallCell xs={1.2}>
<CalendarSmallCell xs={cellSizes.smallCell}/> <FormControlLabel
control={<Switch color="primary" checked={hourFormat} onChange={()=>{setHourFormat(()=>!hourFormat)}}/>}
label="1 час"
labelPlacement="end"
/>
</CalendarSmallCell>
{hoursInDay.map((hours, i)=>{ {hoursInDay.map((hours, i)=>{
return ( return (
<CalendarStandartCell key={i} xs={cellSizes.standarCell}> <CalendarStandartCell key={i} xs={cellSizes.standarCell}>
...@@ -79,6 +104,7 @@ function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChang ...@@ -79,6 +104,7 @@ function MonthCalendarBody({month, year, tasks, createTaskInCellHandler, onChang
tasks={tasks} tasks={tasks}
day={day} day={day}
hours={hours} hours={hours}
hourFormat={hourFormat}
/> />
</CalendarStandartCell> </CalendarStandartCell>
) )
......
...@@ -9,6 +9,7 @@ function MonthCalendar() { ...@@ -9,6 +9,7 @@ function MonthCalendar() {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { tasks } = useSelector(state => state.tasks); const { tasks } = useSelector(state => state.tasks);
const [hourFormat, setHourFormat] = useState(false);
const [month, setMonth] = useState('') const [month, setMonth] = useState('')
const [year, setYear] = useState('') const [year, setYear] = useState('')
const [worker, setWorker] = useState(''); const [worker, setWorker] = useState('');
...@@ -53,18 +54,29 @@ function MonthCalendar() { ...@@ -53,18 +54,29 @@ function MonthCalendar() {
}) })
} }
function dateToISOButLocal(date) { function dateToISOLikeButLocal(date) {
return date.toLocaleString('sv').replace(' ', 'T'); const offsetMs = date.getTimezoneOffset() * 60 * 1000;
} const msLocal = date.getTime() - offsetMs;
const dateLocal = new Date(msLocal);
const iso = dateLocal.toISOString();
return iso;
}
const createTaskInCellHandler = (dayNumber, dayHour) => { const createTaskInCellHandler = (dayNumber, dayHour) => {
const hour = parseInt(dayHour.split(':')[0]) const hour = parseInt(dayHour.split(':')[0])
let hourDue
if (hourFormat) {
hourDue = hour + 0
} else {
hourDue = hour + 1
}
const newTask = { const newTask = {
title:"Задача", title:"Задача",
description:"описание", description:"описание",
dateTimeStart: dateToISOButLocal(new Date(year, month, dayNumber, hour)), dateTimeStart: dateToISOLikeButLocal(new Date(year, month, dayNumber, hour, 0)),
dateTimeDue: dateToISOButLocal(new Date(year, month, dayNumber, hour + 2)), dateTimeDue: dateToISOLikeButLocal(new Date(year, month, dayNumber, hourDue, 59)),
} }
console.log(newTask)
dispatch(addTask(newTask)) dispatch(addTask(newTask))
setCurrentTask((newTask)) setCurrentTask((newTask))
} }
...@@ -97,6 +109,8 @@ function MonthCalendar() { ...@@ -97,6 +109,8 @@ function MonthCalendar() {
createTaskInCellHandler={createTaskInCellHandler} createTaskInCellHandler={createTaskInCellHandler}
onChangeCellTaskTitle={onChangeCellTaskTitle} onChangeCellTaskTitle={onChangeCellTaskTitle}
setCurrentTask={setCurrentTask} setCurrentTask={setCurrentTask}
hourFormat={hourFormat}
setHourFormat={setHourFormat}
/> />
</Container> </Container>
</> </>
......
...@@ -22,12 +22,16 @@ const tasksReduсer = (state = initialState, action) => { ...@@ -22,12 +22,16 @@ const tasksReduсer = (state = initialState, action) => {
const yearStartNumber = parseInt(dateStart.split('-')[0]) const yearStartNumber = parseInt(dateStart.split('-')[0])
const timeStartHour = parseInt(timeStart.split(':')[0]) const timeStartHour = parseInt(timeStart.split(':')[0])
const timeEndHour = parseInt(timeEnd.split(':')[0]) const timeEndHour = parseInt(timeEnd.split(':')[0])
const timeStartMinute = parseInt(timeStart.split(':')[1])
const timeEndMinute = parseInt(timeEnd.split(':')[1])
newArr.push({...task, infoForCell: { newArr.push({...task, infoForCell: {
startDay: dayStart, startDay: dayStart,
startHour: timeStartHour, startHour: timeStartHour,
startMonth: monthStartNumber, startMonth: monthStartNumber,
startYear: yearStartNumber, startYear: yearStartNumber,
startMinute: timeStartMinute,
endHour: timeEndHour, endHour: timeEndHour,
endMinute: timeEndMinute,
} }
} ) } )
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment