"use client" import Navigation from "@/components/Navigation"; import { PlusIcon, CalendarIcon, MapPinIcon, TrashIcon } from "@heroicons/react/24/outline" import { CREATE_EVENT, CREATE_TTYPE, EVENT_GET, USER_INFO_ROUTE } from "@/routes/routes"; import axios from "axios"; import { format, toDate } from "date-fns" import Link from "next/link"; import { useEffect, useState } from "react"; import placeholder from "@/public/placeholder.svg" import { useAppStore } from "@/lib/store"; import { redirect, useRouter } from "next/navigation" import { TicketType } from "@prisma/client"; export default function Tickets(){ const [searchQuery, setSearchQuery] = useState("") const { user, events, setEvents, setUser } = useAppStore() const [title, setTitle] = useState("") const [loc, setLoc] = useState("") const [date, setDate] = useState("") const [image, setImage] = useState("") const [tType, setTtype] = useState([]) const handleAddTicket = () => { setTtype([...tType, { id: "", eventId: "", name: '', price: 0, qty: 0}]) } const handleDeleteTicket = (i: number) => { const newTickets = [...tType] newTickets.splice(i, 1) setTtype(newTickets) } const handleChange = (i:number, f: keyof TicketType, v: string | number) => { const newTickets = [...tType] newTickets[i][f] = v as never setTtype(newTickets) } const [eventAdd, setEventAdd] = useState(false) const router = useRouter() const filteredEvents = events.filter( (event) => event.title.toLowerCase().includes(searchQuery.toLowerCase()) || event.location.toLowerCase().includes(searchQuery.toLowerCase()), ) useEffect(() => { const fun = async() => { if(!user){ await axios.get(USER_INFO_ROUTE, { withCredentials: true }) .then((res) => { setUser(res.data) }) .catch((err) => { router.replace("/") }) } } fun(); },[user, setUser, router]) const handleSubmit = async(e: React.FormEvent) => { // izveidots jauns pasākums e.preventDefault(); const inputDate = new Date(date) inputDate.setHours(inputDate.getHours() + 3); const localTime = inputDate.toISOString() await axios.post(CREATE_EVENT, {title: title, location: loc, date: localTime, image: image}, { withCredentials: true }) .then( async(res) => { await Promise.all( tType.map(t => axios.post(CREATE_TTYPE, { eventId: res.data.id, name: t.name, price: Number(t.price), qty: Number(t.qty)}, { withCredentials: true }) ) ) setEventAdd(false) }) } return(

Events

setSearchQuery(e.target.value)}/> {user?.role === 1 && ( )}
{filteredEvents.length > 0 ? (
{filteredEvents.map((e) => (

{e.title}

{format(new Date(e.date), 'EEE dd.MM.yyyy HH:mm')}
{e.location}
))}
): (

No events Found

{searchQuery ? `No events matching "${searchQuery}"` : "There are no upcoming events at the moment."}

)}

Add event

setEventAdd(false)}>X

Title setTitle(e.target.value)}/>
Location setLoc(e.target.value)}/>
Date setDate(e.target.value)}/>
Image setImage(e.target.value)}/>
Ticket types

handleAddTicket()}>+

{tType.length > 0 && ( {tType.map((t, i) => ( ))}
Name Price Qty
handleChange(i, 'name', e.target.value)}/> handleChange(i, 'price', e.target.value)}/> handleChange(i, 'qty', e.target.value)}/> handleDeleteTicket(i)}/>
)}
) }