'use client'; import { FormEvent, MouseEvent, useState, useEffect } from 'react'; import Link from 'next/link'; import { Album } from '@/entities/album.entity'; import { createAlbum, deleteAlbum, getAlbum, getAlbums, updateAlbum } from '@/app/actions'; import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; import { IconButton } from '@mui/material'; import { AddCircleOutline, Delete, Edit } from '@mui/icons-material'; export default function Page() { const [albums, setAlbums] = useState([]); const [show, setShow] = useState(false); const handleClose = () => setShow(false); const handleShow = () => setShow(true); const [formAlbumId, setFormAlbumId] = useState(""); const [formAlbumTitle, setFormAlbumTitle] = useState(""); const [formAlbumArtist, setFormAlbumArtist] = useState(""); const [formAlbumGenre, setFormAlbumGenre] = useState(""); const [formModalTitle, setFormModalTitle] = useState("Add Album"); const [formModalButtonLabel, setFormModalButtonLabel] = useState("Add"); useEffect(() => { async function fetchAlbums() { try { const data = await getAlbums(); setAlbums(data); } catch (error) { console.error("Error getting albums: ", error); } } fetchAlbums(); }); const handleSubmit = async (event: FormEvent) => { event.preventDefault(); handleClose(); const formData = new FormData(event.currentTarget); try { console.log(formData); if (formData.get('id') === "") { await createAlbum(formData); } else { await updateAlbum(formData); } } catch (error) { console.error("Error creating Album: ", error); } } const handleCreate = async () => { setFormModalTitle("Add Album"); setFormModalButtonLabel("Add"); setFormAlbumId(""); setFormAlbumTitle(""); setFormAlbumArtist(""); setFormAlbumGenre(""); handleShow(); } const handleEdit = async (event: MouseEvent) => { const id = event.currentTarget.getAttribute('album-id'); if (id) { try { const data = await getAlbum(parseInt(id)); setFormModalTitle("Edit Album"); setFormModalButtonLabel("Save"); setFormAlbumId(data.id) setFormAlbumTitle(data.title); setFormAlbumArtist(data.artist); setFormAlbumGenre(data.genre); handleShow(); } catch (error) { console.error(`Error getting album with ID ${id}:`, error); } } else { console.error("Couldn't get ID of clicked element"); } } const handleDelete = async (event: MouseEvent) => { const id = event.currentTarget.getAttribute('album-id'); if (id) { try { await deleteAlbum(parseInt(id)); } catch (error) { console.error(`Error deleting album with ID ${id}:`, error); } } else { console.error("Couldn't get ID of clicked element"); } } if (!albums) return
Loading...
return ( <>
{albums.map((album: Album) => ( ))}
Title Artist Genre Controls
{album.title} {album.artist} {album.genre}
{formModalTitle}
); }