42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
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>
|
||
}
|