добавляю контекст компонента всплывающих окон для универсального доступа к компоненту из любой точки приложения
This commit is contained in:
@@ -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<MagicPopupType[] | []>( [] );
|
||||||
|
|
||||||
|
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 <PopupContext.Provider value={value}>
|
||||||
|
{children}
|
||||||
|
<MagicPopupContainer />
|
||||||
|
</PopupContext.Provider>
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user