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
56 lines
1.6 KiB
TypeScript
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>
|
|
);
|
|
}
|