From 68977678d9d10b1c7cda46c6dca443672799bc7a Mon Sep 17 00:00:00 2001 From: vasya Date: Sun, 22 Mar 2026 18:24:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D1=8E=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B2=D1=81=D0=BF=D0=BB=D1=8B=D0=B2=D0=B0=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D1=85=20=D0=BE=D0=BA=D0=BE=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D1=83?= =?UTF-8?q?=D0=BD=D0=B8=D0=B2=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0?= =?UTF-8?q?=20=D0=BA=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D1=83=20=D0=B8=D0=B7=20=D0=BB=D1=8E=D0=B1=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/contexts/PopupContext.tsx | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 resources/js/contexts/PopupContext.tsx 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} + + +}