Phill Pover 7d2a754e72
All checks were successful
Music Collection CI Workflow / test (./backend) (push) Successful in 21s
Music Collection CI Workflow / test (./frontend) (push) Successful in 18s
Music Collection CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/msuic-collection-backend, ./backend) (push) Successful in 49s
Music Collection CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/music-collection-frontend, ./frontend) (push) Successful in 1m12s
Music Collection CI Workflow / deploy (push) Successful in 22s
Fixing layout styles
2025-04-05 09:23:41 +01:00

56 lines
1.6 KiB
TypeScript

'use client';
import { FormEvent, useState, useEffect } from 'react';
import Link from 'next/link';
import { Album } from '@/entities/album.entity';
import { createAlbum } from '@/app/actions';
import { useRouter } from 'next/navigation';
export default function Page() {
const [albums, setAlbums] = useState<Album[]>([]);
const router = useRouter();
useEffect(() => {
async function fetchAlbums() {
const response = await fetch('https://api.anatid.net/album');
const data = await response.json();
setAlbums(data);
}
fetchAlbums();
}, []);
if (!albums) return <div>Loading...</div>
async function onSubmit(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
const formData = new FormData(event.currentTarget);
const response = await createAlbum(formData);
await response.json();
router.refresh();
}
return (
<div className="container">
<ul>
{albums.map((album: Album) => (
<li key={album.id}>
<Link
href={{
pathname: `/album/${album.id}`
}}
>{album.title}
</Link> by {album.artist} ({album.genre})</li>
))}
</ul>
<form onSubmit={onSubmit}>
<span>Album Title</span><input type="text" name="title" /><br/>
<span>Artist</span><input type="text" name="artist" /><br/>
<span>Genre</span><input type="text" name="genre" /><br/>
<button type="submit">Create</button>
</form>
</div>
);
}