"use client"; import React, { createContext, FC, useContext, useEffect, useState, } from "react"; import { useProjectsContext } from "@/app/deals/contexts/ProjectsContext"; import { BoardSchema } from "@/lib/client"; import useBoardsList from "@/hooks/useBoardsList"; type BoardsContextState = { boards: BoardSchema[]; setBoards: React.Dispatch>; selectedBoard: BoardSchema | null; setSelectedBoard: React.Dispatch>; refetchBoards: () => void; }; const BoardsContext = createContext(undefined); const useBoardsContextState = () => { const { selectedProject: project } = useProjectsContext(); const { boards, setBoards, refetch: refetchBoards } = useBoardsList({ projectId: project?.id }); const [selectedBoard, setSelectedBoard] = useState( null ); useEffect(() => { if (boards.length > 0 && selectedBoard === null) { setSelectedBoard(boards[0]); return; } if (selectedBoard) { let newBoard = boards.find(board => board.id === selectedBoard.id); if (!newBoard && boards.length > 0) { newBoard = boards[0]; } setSelectedBoard(newBoard ?? null); } }, [boards]); return { boards, setBoards, selectedBoard, setSelectedBoard, refetchBoards, }; }; type BoardsContextProviderProps = { children: React.ReactNode; }; export const BoardsContextProvider: FC = ({ children, }) => { const state = useBoardsContextState(); return ( {children} ); }; export const useBoardsContext = () => { const context = useContext(BoardsContext); if (!context) { throw new Error( "useBoardsContext must be used within a BoardsContextProvider" ); } return context; };