diff --git a/src/app/context/data-context.tsx b/src/app/context/data-context.tsx new file mode 100644 index 0000000..0310ea5 --- /dev/null +++ b/src/app/context/data-context.tsx @@ -0,0 +1,43 @@ +'use client' + +import { createContext, useContext, ReactNode } from 'react' + +interface Data { + id: number + name: string + family: string +} + +interface DataContextType { + dataContext: Data | null + isLoading: boolean + error: string | null +} + +const DataContext = createContext(undefined) + +export function DataProvider({ + children, + dataContext +}: { + children: ReactNode + dataContext: any +}) { + return ( + + {children} + + ) +} + +export function useDataContext() { + const context = useContext(DataContext) + if (context === undefined) { + throw new Error('useDataContext must be used within a DataProvider') + } + return context +} \ No newline at end of file diff --git a/src/app/lib/action.ts b/src/app/lib/action.ts index 521131c..9f8a9a4 100644 --- a/src/app/lib/action.ts +++ b/src/app/lib/action.ts @@ -14,6 +14,17 @@ export async function fetchFruits() { } } +export async function fetchFruit(id: number) { + try { + const response = await fetch(FRUITS_URL + id, { 'method': 'GET' }); + let parsed = await response.json(); + return parsed; + } catch (error) { + console.error('Error:', error); + throw new Error('Failed to fetch fruits data.'); + } +} + export async function testConnect() { try { const response = await fetch('http://localhost:8080/api/auth/register', { diff --git a/src/app/pages/layout.tsx b/src/app/pages/layout.tsx index 1ef3c00..075eba4 100644 --- a/src/app/pages/layout.tsx +++ b/src/app/pages/layout.tsx @@ -1,17 +1,26 @@ import NavLinks from '@/app/ui/nav-links' import styles from '@/app/page.module.scss' import HeaderPanel from '../ui/header/headerPanel'; +import { DataProvider } from '@/app/context/data-context'; +import { fetchFruit } from '@/app/lib/action'; +import { getSessionToken } from '@/app/lib/session'; + +export default async function Layout({ children }: { children: React.ReactNode }) { + + const fruitsData = await fetchFruit(100); + const token = await getSessionToken(); -export default function Layout({ children }: { children: React.ReactNode }) { return ( -
- -
- -
- {children} -
+ +
+ +
+ +
+ {children} +
+
-
+ ); } \ No newline at end of file diff --git a/src/app/ui/header/notificationsButton.tsx b/src/app/ui/header/notificationsButton.tsx index 53b1402..0238da8 100644 --- a/src/app/ui/header/notificationsButton.tsx +++ b/src/app/ui/header/notificationsButton.tsx @@ -12,7 +12,6 @@ export default function NotificationsButton() { const [error, setError] = useState(null); const menuRef = useRef(null); - useClickOutside(menuRef, () => { setIsOpen(false); }); diff --git a/src/app/ui/header/userMenuButton.tsx b/src/app/ui/header/userMenuButton.tsx index 1f31572..2eb63be 100644 --- a/src/app/ui/header/userMenuButton.tsx +++ b/src/app/ui/header/userMenuButton.tsx @@ -1,12 +1,14 @@ 'use client' import { useState, useRef } from 'react'; - import { useClickOutside } from '@/app/hooks/useClickOutside'; import Link from 'next/link'; +import { useDataContext } from '@/app/context/data-context'; + export default function UserMenuButton() { const [isOpen, setIsOpen] = useState(false); const menuRef = useRef(null); + const { dataContext } = useDataContext() useClickOutside(menuRef, () => { @@ -15,6 +17,7 @@ export default function UserMenuButton() { const handleButtonClick = () => { if (!isOpen) { + console.log(dataContext); setIsOpen(true); } else { setIsOpen(false);