ADD: added initial page with login
This commit is contained in:
107
frontend/src/pages/Players.tsx
Normal file
107
frontend/src/pages/Players.tsx
Normal file
@@ -0,0 +1,107 @@
|
||||
import React, { useState } from 'react';
|
||||
|
||||
interface Player {
|
||||
id: number;
|
||||
name: string;
|
||||
position: string;
|
||||
}
|
||||
|
||||
export default function PlayerManagement() {
|
||||
const [players, setPlayers] = useState<Player[]>([]);
|
||||
const [name, setName] = useState("");
|
||||
const [position, setPosition] = useState("");
|
||||
const [editingId, setEditingId] = useState<number | null>(null);
|
||||
|
||||
const handleAddOrUpdate = () => {
|
||||
if (!name || !position) return;
|
||||
|
||||
if (editingId !== null) {
|
||||
setPlayers(players.map(p =>
|
||||
p.id === editingId ? { ...p, name, position } : p
|
||||
));
|
||||
setEditingId(null);
|
||||
} else {
|
||||
const newPlayer: Player = {
|
||||
id: Date.now(),
|
||||
name,
|
||||
position,
|
||||
};
|
||||
setPlayers([...players, newPlayer]);
|
||||
}
|
||||
|
||||
setName("");
|
||||
setPosition("");
|
||||
};
|
||||
|
||||
const handleEdit = (player: Player) => {
|
||||
setName(player.name);
|
||||
setPosition(player.position);
|
||||
setEditingId(player.id);
|
||||
};
|
||||
|
||||
const handleDelete = (id: number) => {
|
||||
setPlayers(players.filter(p => p.id !== id));
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="max-w-2xl mx-auto p-6 bg-white rounded-xl shadow-md mt-6">
|
||||
<h1 className="text-2xl font-bold mb-4">🏐 Spielerverwaltung</h1>
|
||||
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-4">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Spielername"
|
||||
value={name}
|
||||
onChange={(e) => setName(e.target.value)}
|
||||
className="border p-2 rounded"
|
||||
/>
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Position (z. B. Zuspieler)"
|
||||
value={position}
|
||||
onChange={(e) => setPosition(e.target.value)}
|
||||
className="border p-2 rounded"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={handleAddOrUpdate}
|
||||
className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700"
|
||||
>
|
||||
{editingId !== null ? "Speichern" : "Hinzufügen"}
|
||||
</button>
|
||||
|
||||
<table className="w-full mt-6 table-auto border-collapse">
|
||||
<thead>
|
||||
<tr className="bg-gray-100 text-left">
|
||||
<th className="border px-4 py-2">Name</th>
|
||||
<th className="border px-4 py-2">Position</th>
|
||||
<th className="border px-4 py-2">Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{players.map(player => (
|
||||
<tr key={player.id}>
|
||||
<td className="border px-4 py-2">{player.name}</td>
|
||||
<td className="border px-4 py-2">{player.position}</td>
|
||||
<td className="border px-4 py-2 space-x-2">
|
||||
<button
|
||||
onClick={() => handleEdit(player)}
|
||||
className="bg-yellow-400 text-white px-2 py-1 rounded"
|
||||
>
|
||||
Bearbeiten
|
||||
</button>
|
||||
<button
|
||||
onClick={() => handleDelete(player.id)}
|
||||
className="bg-red-500 text-white px-2 py-1 rounded"
|
||||
>
|
||||
Löschen
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user