diff --git a/resources/js/contexts/PopupContext.tsx b/resources/js/contexts/PopupContext.tsx new file mode 100644 index 0000000..3368310 --- /dev/null +++ b/resources/js/contexts/PopupContext.tsx @@ -0,0 +1,41 @@ +import React, { createContext, useState } from "react"; +import { MagicPopupType } from "../components/MagicPopupContainer"; +import MagicPopupContainer from "../components/MagicPopupContainer"; + +//гаврилов. передай значением по умолчанию null и спроси у ChatGPT (deepseek не справляется) почему при указании null возникает ошибка в аргументе value +export const PopupContext = createContext(''); + +/** + * Контекст для компонента всплывающих окон + */ +export const PopupProvider = ({ children }) => { + const [popupArrTestVar, setPopupArrTestVar] = useState( [] ); + + function addPopupTest (newPopupArrData: MagicPopupType[]) { + setPopupArrTestVar(prev => { + //Конкатенируем предыдущее состояние набора попапов и новые попапы, присваивая новому попапу параметр id с уникальным рандомным значением + return [...prev, ...newPopupArrData].map(popup => popup.id ? popup : {...popup, id: getRandomId()}) + }); + }; + + //Колбэк для удаления попапа из набора + function delPopupTest (popupDelKey: number) { + setPopupArrTestVar(prev => { + return prev.filter(popup => popup.id !== popupDelKey); + }); + }; + + function getRandomId(): number { return Date.now() - Math.random() }; + + const value = { + popupArrTest: popupArrTestVar, + //ГАВРИЛОВ. переименуй + addPopupArrTest: addPopupTest, + delPopupArrTest: delPopupTest, + }; + + return + {children} + + +}