From 1e9b2fbe03c7dfd9bcfac1abcd74ea52bcd244e4 Mon Sep 17 00:00:00 2001 From: Kakabay Date: Mon, 13 Mar 2023 18:07:05 +0500 Subject: [PATCH] calendar --- src/components/aside/Calendar.tsx | 64 +++++++++++++++++++++++++++++-- src/styles/_calendar.scss | 20 ++++++++++ 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/src/components/aside/Calendar.tsx b/src/components/aside/Calendar.tsx index 33d814d..aafdd29 100644 --- a/src/components/aside/Calendar.tsx +++ b/src/components/aside/Calendar.tsx @@ -1,14 +1,70 @@ // Modules -import { useState } from "react"; -import { Calendar as ReactCalendar } from "react-calendar"; -import { LazyLoadComponent } from "react-lazy-load-image-component"; +import { useState, useEffect, useCallback, useRef, useMemo } from 'react'; +import { Calendar as ReactCalendar } from 'react-calendar'; +import { LazyLoadComponent } from 'react-lazy-load-image-component'; +import { v4 as uuiv4 } from 'uuid'; + +// +import { Api } from '../../api/Api'; +import { url } from '../../url'; +import { IPostData } from '../../types/store.types'; +import Loader from '../global/Loader'; const Calendar = () => { const [value, onChange] = useState(new Date()); + + const [data, setData] = useState(); + const ref = useRef(false); + const popupRef = useRef(null); + + const valueMemo = useMemo(() => ({ value, onChange }), [value, onChange]); + const dataMemo = useMemo(() => ({ data, setData }), [data, setData]); + + const constructDateParam = useCallback(() => { + return `${value.getFullYear()}-${ + value.getDate().toString().length < 2 ? '0' + value.getDate() : value.getDate() + }-${ + (value.getMonth() + 1).toString().length < 2 + ? '0' + (value.getMonth() + 1) + : value.getMonth() + 1 + }`; + }, [valueMemo.value]); + + const api = new Api(url + `/posts`, [{ name: 'date', value: constructDateParam() }]); + useEffect(() => { + if (!ref.current) { + ref.current = true; + console.log(dataMemo.data); + return; + } + console.log(dataMemo.data); + api.get(dataMemo.data, dataMemo.setData); + }, [value]); + return (
+
+ {data ? ( + // data.map((el: any, index: number) => ( + //
+ //

{el.title}

+ //
+ // )) + data[0] ? ( +
+

{data[0].title}

+
+ ) : ( +
+

Нет событий

+
+ ) + ) : ( + + )} +
- +
); diff --git a/src/styles/_calendar.scss b/src/styles/_calendar.scss index 80a5fc1..98996d8 100644 --- a/src/styles/_calendar.scss +++ b/src/styles/_calendar.scss @@ -1,6 +1,7 @@ .calendar { display: flex; justify-content: center; + position: relative; } .react-calendar__navigation__label { @@ -106,6 +107,25 @@ } } +.calendar-popup { + position: absolute; + left: 0; + top: 0; + background: $main; + padding: 1.6rem; + color: $white; + font-weight: normal; + display: flex; + flex-direction: column; + gap: 0.8rem; + border-radius: 0.8rem; + + .calendar-popup-item { + font-weight: 400; + font-size: 1.6rem; + } +} + @media (max-width: 1024px) { .calendar { display: none;