Commit 7843e98f authored by Ermolaev Timur's avatar Ermolaev Timur

#100 Разделил логику более в правильном виде, чуть поправил красоту кода

parent d4298065
...@@ -2,24 +2,16 @@ import { Grid } from "@mui/material"; ...@@ -2,24 +2,16 @@ import { Grid } from "@mui/material";
import CalendarRow from "../../../MonthCalendar/MonthCalendarBody/CalendarRow/CalendarRow"; import CalendarRow from "../../../MonthCalendar/MonthCalendarBody/CalendarRow/CalendarRow";
import CalendarStandartCell from "../../../MonthCalendar/MonthCalendarBody/CalendarStandartCell.js/CalendarStandartCell"; import CalendarStandartCell from "../../../MonthCalendar/MonthCalendarBody/CalendarStandartCell.js/CalendarStandartCell";
function CalendarRowDayWeek({week, hoursInDay}) { function CalendarRowDayWeek({ week, hoursInDay }) {
return ( <> return (<>
<Grid item xs={11.005}> {hoursInDay?.map((hour, i) => {
<CalendarRow week={true}> return (
{week?.map((weekDay, i)=>{ <CalendarStandartCell key={i} week={true}>
return (
<Grid item key={i} xs={12/week.length}> </CalendarStandartCell>)
{hoursInDay?.map((hour, i)=>{ })}
return (
<CalendarStandartCell key={i} week={true}> </>);
</CalendarStandartCell>)
})}
</Grid>)
})}
</CalendarRow>
</Grid>
</> );
} }
export default CalendarRowDayWeek; export default CalendarRowDayWeek;
\ No newline at end of file
export const getCurrentWeekDayString = (dayNumber) => { export const getCurrentWeekDayString = (dayNumber) => {
if (dayNumber <= 6 && dayNumber >= 0) { if (dayNumber <= 6 && dayNumber >= 0) {
return ["ПН","ВТ","СР","ЧТ","ПТ","СБ","ВС"][dayNumber]; return ["ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ", "ВС"][dayNumber];
} else { } else {
return null return null
} }
......
...@@ -6,36 +6,36 @@ import CalendarStandartCell from "../../MonthCalendar/MonthCalendarBody/Calendar ...@@ -6,36 +6,36 @@ import CalendarStandartCell from "../../MonthCalendar/MonthCalendarBody/Calendar
import CalendarRowDayWeek from "./CalendarRowDayWeek/CalendarRowDayWeek"; import CalendarRowDayWeek from "./CalendarRowDayWeek/CalendarRowDayWeek";
import { getCurrentWeekDayString } from "./Helpers"; import { getCurrentWeekDayString } from "./Helpers";
function WeekCalendarBody({week, hoursInDay, hourFormat, setHourFormat,}) { function WeekCalendarBody({ week, hoursInDay, hourFormat, setHourFormat, }) {
return ( return (
<> <>
<Box style={{marginBottom: '30px'}}> <Box style={{ marginBottom: '30px' }}>
<Box style={{position: 'sticky', top: '0px', zIndex: '10', backgroundColor: 'lightgrey'}}> <Box style={{ position: 'sticky', top: '0px', zIndex: '10', backgroundColor: 'lightgrey' }}>
<CalendarRow <CalendarRow
> >
<CalendarSmallCell xs={1}> <CalendarSmallCell xs={1}>
<FormControlLabel <FormControlLabel
control={<Switch color="primary" checked={hourFormat} onChange={()=>{setHourFormat(()=>!hourFormat)}}/>} control={<Switch color="primary" checked={hourFormat} onChange={() => { setHourFormat(() => !hourFormat) }} />}
label="1 час" label="1 час"
labelPlacement="end" labelPlacement="end"
/> />
</CalendarSmallCell> </CalendarSmallCell>
{week?.map((weekDay, i)=>{ {week?.map((weekDay, i) => {
return ( return (
<CalendarStandartCell key={i} xs={11/week.length}> <CalendarStandartCell key={i} xs={11 / week.length}>
<span style={{display: 'block', fontWeight: "600"}}>{weekDay}</span> <span style={{ display: 'block', fontWeight: "600" }}>{weekDay}</span>
<span style={{marginBottom: '10px'}}>{getCurrentWeekDayString(i)}</span> <span style={{ marginBottom: '10px' }}>{getCurrentWeekDayString(i)}</span>
</CalendarStandartCell> </CalendarStandartCell>
) )
})} })}
</CalendarRow> </CalendarRow>
</Box> </Box>
<Grid container> <Grid container>
<CalendarRow week={true}> <CalendarRow week={true}>
<Grid item xs={0.995} flexDirection='column'> <Grid item xs={0.995} flexDirection='column'>
{hoursInDay?.map((hour, i)=>{ {hoursInDay?.map((hour, i) => {
return ( return (
<CalendarSmallCell key={i} week={true}> <CalendarSmallCell key={i} week={true}>
{hour} {hour}
...@@ -43,14 +43,23 @@ function WeekCalendarBody({week, hoursInDay, hourFormat, setHourFormat,}) { ...@@ -43,14 +43,23 @@ function WeekCalendarBody({week, hoursInDay, hourFormat, setHourFormat,}) {
})} })}
</Grid> </Grid>
<CalendarRowDayWeek <Grid item xs={11.005}>
week={week} <CalendarRow week={true}>
hoursInDay={hoursInDay} {week?.map((weekDay, i) => {
/> return (
<Grid item key={i} xs={12 / week.length}>
<CalendarRowDayWeek
hoursInDay={hoursInDay}
/>
</Grid>
)
})}
</CalendarRow>
</Grid>
</CalendarRow> </CalendarRow>
</Grid> </Grid>
</Box> </Box>
</> </>
); );
} }
......
import { AppBar, Toolbar} from '@mui/material'; import { AppBar, Toolbar } from '@mui/material';
import { Box } from '@mui/system'; import { Box } from '@mui/system';
import WeekCalendarHeaderInfo from './WeekCalendarHeaderInfo/WeekCalendarHeaderInfo'; import WeekCalendarHeaderInfo from './WeekCalendarHeaderInfo/WeekCalendarHeaderInfo';
function WeekCalendarHeader({decrementWeek, incrementWeek, weekInfo}) { function WeekCalendarHeader({ decrementWeek, incrementWeek, weekInfo }) {
return ( return (
<> <>
<Box sx={{ flexGrow: 1 }}> <Box sx={{ flexGrow: 1 }}>
<AppBar position="static"> <AppBar position="static">
<Toolbar> <Toolbar>
<WeekCalendarHeaderInfo <WeekCalendarHeaderInfo
decrementWeek={decrementWeek} decrementWeek={decrementWeek}
incrementWeek={incrementWeek} incrementWeek={incrementWeek}
weekInfo={weekInfo} weekInfo={weekInfo}
/> />
</Toolbar> </Toolbar>
</AppBar> </AppBar>
</Box> </Box>
</> </>
); );
} }
......
import ArrowDecrementButton from '../../../UI/ArrowDecrementButton/ArrowDecrementButton'; import ArrowDecrementButton from '../../../UI/ArrowDecrementButton/ArrowDecrementButton';
import ArrowIncrementButton from '../../../UI/ArrowIncrementButton/ArrowIncrementButton'; import ArrowIncrementButton from '../../../UI/ArrowIncrementButton/ArrowIncrementButton';
import { Box } from '@mui/system'; import { Box } from '@mui/system';
import {Typography} from '@mui/material'; import { Typography } from '@mui/material';
function WeekCalendarHeaderInfo({decrementWeek, incrementWeek, weekInfo}) { function WeekCalendarHeaderInfo({ decrementWeek, incrementWeek, weekInfo }) {
return ( return (
<> <>
<Box sx={{width: '40%', marginBottom: '15px'}}> <Box sx={{ width: '40%', marginBottom: '15px' }}>
<h2>Цель недели: Наладить режим сна</h2> <h2>Цель недели: Наладить режим сна</h2>
<Box sx={{display: 'flex', alignItems: 'center'}}> <Box sx={{ display: 'flex', alignItems: 'center' }}>
<ArrowDecrementButton <ArrowDecrementButton
onClick={()=>{decrementWeek()}} onClick={() => { decrementWeek() }}
/> />
<Typography <Typography
variant="h6" variant="h6"
sx={{ sx={{
flexBasis: '250px', flexBasis: '250px',
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'center',
}} }}
> >
{weekInfo} {weekInfo}
</Typography> </Typography>
<ArrowIncrementButton <ArrowIncrementButton
onClick={()=>{incrementWeek()}} onClick={() => { incrementWeek() }}
/> />
</Box>
</Box> </Box>
</Box>
</> </>
); );
} }
......
import moment from 'moment'; import moment from 'moment';
import { useEffect, useState, useMemo, useCallback } from 'react'; import { useEffect, useState, useMemo, useCallback } from 'react';
import WeekCalendarBody from '../../components/WeekCalendar/WeekCalendarBody/WeekCalendarBody'; import WeekCalendarBody from '../../components/WeekCalendar/WeekCalendarBody/WeekCalendarBody';
import WeekCalendarHeader from '../../components/WeekCalendar/WeekCalendarHeader/WeekCalendarHeader' import WeekCalendarHeader from '../../components/WeekCalendar/WeekCalendarHeader/WeekCalendarHeader'
import { getWeekInfoString, getWeekFromCurrentDate } from '../../helpers/CalendarHelpers'; import { getWeekInfoString, getWeekFromCurrentDate } from '../../helpers/CalendarHelpers';
...@@ -7,48 +7,48 @@ import { getWeekInfoString, getWeekFromCurrentDate } from '../../helpers/Calenda ...@@ -7,48 +7,48 @@ import { getWeekInfoString, getWeekFromCurrentDate } from '../../helpers/Calenda
function WeekCalendar() { function WeekCalendar() {
const [date, setDate] = useState({year: '', month: '', currentDay: ''}) const [date, setDate] = useState({ year: '', month: '', currentDay: '' })
const [hourFormat, setHourFormat] = useState(false); const [hourFormat, setHourFormat] = useState(false);
useEffect(()=>{ useEffect(() => {
const year = new Date().getFullYear() const year = new Date().getFullYear()
const month = new Date().getMonth() const month = new Date().getMonth()
const currentDay = moment().date() const currentDay = moment().date()
setDate({year: year, month: month, currentDay: currentDay}) setDate({ year: year, month: month, currentDay: currentDay })
}, []) }, [])
const hoursInDay = useMemo(()=>{ const hoursInDay = useMemo(() => {
let arr let arr
if (hourFormat) { if (hourFormat) {
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'] 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']
} else { } else {
arr = ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00'] arr = ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00']
} }
return arr return arr
}, [hourFormat]) }, [hourFormat])
const week = useMemo(()=>{ const week = useMemo(() => {
return getWeekFromCurrentDate(date.year, date.month, date.currentDay) return getWeekFromCurrentDate(date.year, date.month, date.currentDay)
}, [date]) }, [date])
const incrementWeek = useCallback(() => { const incrementWeek = useCallback(() => {
setDate((prevState)=>{ setDate((prevState) => {
const newDate = new Date(prevState.year, prevState.month, prevState.currentDay + 7) const newDate = new Date(prevState.year, prevState.month, prevState.currentDay + 7)
return {year: newDate.getFullYear(), month: newDate.getMonth(), currentDay: moment(newDate).date()} return { year: newDate.getFullYear(), month: newDate.getMonth(), currentDay: moment(newDate).date() }
}) })
}, []) }, [])
const decrementWeek = useCallback(() => { const decrementWeek = useCallback(() => {
setDate((prevState)=>{ setDate((prevState) => {
const newDate = new Date(prevState.year, prevState.month, prevState.currentDay - 7) const newDate = new Date(prevState.year, prevState.month, prevState.currentDay - 7)
return {year: newDate.getFullYear(), month: newDate.getMonth(), currentDay: moment(newDate).date()} return { year: newDate.getFullYear(), month: newDate.getMonth(), currentDay: moment(newDate).date() }
}) })
}, []) }, [])
const weekInfo = useMemo(()=>{ const weekInfo = useMemo(() => {
return getWeekInfoString(week, date) return getWeekInfoString(week, date)
}, [date, week]) }, [date, week])
return ( return (
<> <>
<WeekCalendarHeader <WeekCalendarHeader
......
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