Reworking create form
All checks were successful
Music Collection CI Workflow / test (./backend) (push) Successful in 22s
Music Collection CI Workflow / test (./frontend) (push) Successful in 20s
Music Collection CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/msuic-collection-backend, ./backend) (push) Successful in 50s
Music Collection CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/music-collection-frontend, ./frontend) (push) Successful in 1m14s
Music Collection CI Workflow / deploy (push) Successful in 22s

This commit is contained in:
Phill Pover 2025-04-03 14:10:40 +01:00
parent 7945c44782
commit 6d1b996368
4 changed files with 24 additions and 15 deletions

View File

@ -4,7 +4,7 @@ export async function createAlbum(formData: FormData) {
const title = formData.get('title'); const title = formData.get('title');
const artist = formData.get('artist'); const artist = formData.get('artist');
const genre = formData.get('genre'); const genre = formData.get('genre');
await fetch("https://api.anatid.net/album", { return await fetch("https://api.anatid.net/album", {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ body: JSON.stringify({

View File

@ -1,12 +1,15 @@
'use client'; 'use client';
import { useState, useEffect } from 'react'; import { FormEvent, useState, useEffect } from 'react';
import Link from 'next/link'; import Link from 'next/link';
import { Album } from '@/entities/album.entity'; import { Album } from '@/entities/album.entity';
import { CreateAlbumForm } from '@/app/ui/form'; // import { CreateAlbumForm } from '@/app/ui/form';
import { createAlbum } from '@/app/actions';
// import { useRouter } from 'next/navigation';
export default function Page() { export default function Page() {
const [albums, setAlbums] = useState<Album[]>([]); const [albums, setAlbums] = useState<Album[]>([]);
// const router = useRouter();
useEffect(() => { useEffect(() => {
async function fetchAlbums() { async function fetchAlbums() {
@ -19,6 +22,16 @@ export default function Page() {
if (!albums) return <div>Loading...</div> 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);
const data = await response.json()
setAlbums(data);
}
return ( return (
<div> <div>
<ul> <ul>
@ -32,7 +45,12 @@ export default function Page() {
</Link> by {album.artist} ({album.genre})</li> </Link> by {album.artist} ({album.genre})</li>
))} ))}
</ul> </ul>
{CreateAlbumForm()} <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> </div>
); );
} }

View File

@ -1,7 +0,0 @@
'use client'
import { createAlbum } from '@/app/actions'
export function CreateAlbumButton() {
return <button formAction={createAlbum}>Create</button>
}

View File

@ -1,8 +1,6 @@
import { createAlbum } from '@/app/actions' export function CreateAlbumForm(formAction: string) {
export function CreateAlbumForm() {
return ( return (
<form action={createAlbum}> <form action={formAction}>
<input type="text" name="title" /> <input type="text" name="title" />
<input type="text" name="artist" /> <input type="text" name="artist" />
<input type="text" name="genre" /> <input type="text" name="genre" />