'use client'; import Link from 'next/link'; import { useState } from 'react'; import { getAirport, getAirports } from '@/api/airport'; import { Autocomplete, Avatar, Button, Card, FileButton, Grid, Group, Menu, Text, UnstyledButton } from '@mantine/core'; import './header.css'; import { SetterOrUpdater, useRecoilState } from 'recoil'; import { setPicture } from '@/api/users'; import { useToggle } from '@mantine/hooks'; import { HeaderModal } from './HeaderModal'; import { coordinatesState } from '@/state/map'; import { User } from '@/api/auth.types'; import { usePathname, useRouter } from 'next/navigation'; import { FaMoon } from "react-icons/fa6"; import { FaSun } from "react-icons/fa6"; interface HeaderProps { user: User | undefined; profilePicture: File | undefined; setProfilePicture: SetterOrUpdater; login: ({ email, password }: { email: string, password: string }) => Promise; logout: () => Promise; register: ({ firstName, lastName, email, password }: { firstName: string, lastName: string, email: string, password: string }) => Promise; } export default function Header({ user, profilePicture, setProfilePicture, login, logout, register }: HeaderProps) { const [searchValue, setSearchValue] = useState(''); const [airports, setAirports] = useState<{ key: string; value: string; label: string }[]>([]); const [modalType, toggle] = useToggle([undefined, 'login', 'register', 'reset']); const [_, setCoordinates] = useRecoilState(coordinatesState); const pathname = usePathname(); const router = useRouter(); async function onChange(value: string) { setSearchValue(value); const airportData = await getAirports({ icaos: [value], name: value }); setAirports( airportData.data.map((airport) => ({ key: airport.icao, value: airport.icao, label: `${airport.icao} - ${airport.name}` })) ); } async function onClick(value: string) { setSearchValue(''); // Get current path if (pathname == '/') { const airport = await getAirport({ icao: value }); if (airport) { setCoordinates({ lat: airport.data.latitude, lon: airport.data.longitude }); } } else { router.push(`/airport/${value}`) } } return ( <> ); } interface UserSectionProps { user: User | undefined; profilePicture: File | undefined; setProfilePicture: SetterOrUpdater; toggle: (type: string) => void; logout: () => Promise; } function UserSection({ user, profilePicture, setProfilePicture, logout, toggle }: UserSectionProps) { return (
<> {/* */} {/* */} {/* */} {/* */} {user ? (
{user.first_name} {user.last_name} {user.role}
{ if (payload) { setPicture(payload).then((response) => { if (response) { setProfilePicture(payload); } }); } }} accept='image/png,image/jpeg,image/svg+xml,image/webp,image/gif,image/apng,image/avif' multiple={false} > {(props) => ( )} {user.first_name} {user.last_name} {user.role} {user.role == 'admin' && ( )}
) : ( )}
) }