refactor: migrace vsech formularu na FormField komponentu + JWT upgrade

- FormField.jsx: pridana podpora style prop
- 23 stranek migrovano na FormField (166 vyskytu, -246 radku)
- firebase/php-jwt upgrade v6.11 -> v7.0.3 (security advisory fix)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 19:33:36 +01:00
parent 37122579d0
commit 2328ba2840
26 changed files with 366 additions and 612 deletions

View File

@@ -8,6 +8,7 @@ import { motion, AnimatePresence } from 'framer-motion'
import ConfirmModal from '../components/ConfirmModal'
import AdminDatePicker from '../components/AdminDatePicker'
import FormField from '../components/FormField'
import useModalLock from '../hooks/useModalLock'
import { formatDate } from '../utils/attendanceHelpers'
import { formatKm } from '../utils/formatters'
@@ -302,24 +303,21 @@ export default function TripsAdmin() {
>
<div className="admin-card-body">
<div className="admin-form-row admin-form-row-4">
<div className="admin-form-group" style={{ marginBottom: 0 }}>
<label className="admin-form-label">Od</label>
<FormField label="Od" style={{ marginBottom: 0 }}>
<AdminDatePicker
mode="date"
value={dateFrom}
onChange={(val) => setDateFrom(val)}
/>
</div>
<div className="admin-form-group" style={{ marginBottom: 0 }}>
<label className="admin-form-label">Do</label>
</FormField>
<FormField label="Do" style={{ marginBottom: 0 }}>
<AdminDatePicker
mode="date"
value={dateTo}
onChange={(val) => setDateTo(val)}
/>
</div>
<div className="admin-form-group" style={{ marginBottom: 0 }}>
<label className="admin-form-label">Vozidlo</label>
</FormField>
<FormField label="Vozidlo" style={{ marginBottom: 0 }}>
<select
value={filterVehicleId}
onChange={(e) => setFilterVehicleId(e.target.value)}
@@ -332,9 +330,8 @@ export default function TripsAdmin() {
</option>
))}
</select>
</div>
<div className="admin-form-group" style={{ marginBottom: 0 }}>
<label className="admin-form-label">Řidič</label>
</FormField>
<FormField label="Řidič" style={{ marginBottom: 0 }}>
<select
value={filterUserId}
onChange={(e) => setFilterUserId(e.target.value)}
@@ -347,7 +344,7 @@ export default function TripsAdmin() {
</option>
))}
</select>
</div>
</FormField>
</div>
</div>
</motion.div>
@@ -527,8 +524,7 @@ export default function TripsAdmin() {
<div className="admin-modal-body">
<div className="admin-form">
<div className="admin-form-row">
<div className="admin-form-group">
<label className="admin-form-label">Vozidlo</label>
<FormField label="Vozidlo">
<select
value={editForm.vehicle_id}
onChange={(e) => setEditForm({ ...editForm, vehicle_id: e.target.value })}
@@ -540,21 +536,19 @@ export default function TripsAdmin() {
</option>
))}
</select>
</div>
</FormField>
<div className="admin-form-group">
<label className="admin-form-label">Datum jízdy</label>
<FormField label="Datum jízdy">
<AdminDatePicker
mode="date"
value={editForm.trip_date}
onChange={(val) => setEditForm({ ...editForm, trip_date: val })}
/>
</div>
</FormField>
</div>
<div className="admin-form-row">
<div className="admin-form-group">
<label className="admin-form-label">Počáteční stav km</label>
<FormField label="Počáteční stav km">
<input
type="number"
inputMode="numeric"
@@ -563,10 +557,9 @@ export default function TripsAdmin() {
className="admin-form-input"
min="0"
/>
</div>
</FormField>
<div className="admin-form-group">
<label className="admin-form-label">Konečný stav km</label>
<FormField label="Konečný stav km">
<input
type="number"
inputMode="numeric"
@@ -575,10 +568,9 @@ export default function TripsAdmin() {
className="admin-form-input"
min="0"
/>
</div>
</FormField>
<div className="admin-form-group">
<label className="admin-form-label">Vzdálenost</label>
<FormField label="Vzdálenost">
<input
type="text"
value={`${formatKm(calculateDistance())} km`}
@@ -586,33 +578,30 @@ export default function TripsAdmin() {
readOnly
disabled
/>
</div>
</FormField>
</div>
<div className="admin-form-row">
<div className="admin-form-group">
<label className="admin-form-label">Místo odjezdu</label>
<FormField label="Místo odjezdu">
<input
type="text"
value={editForm.route_from}
onChange={(e) => setEditForm({ ...editForm, route_from: e.target.value })}
className="admin-form-input"
/>
</div>
</FormField>
<div className="admin-form-group">
<label className="admin-form-label">Místo příjezdu</label>
<FormField label="Místo příjezdu">
<input
type="text"
value={editForm.route_to}
onChange={(e) => setEditForm({ ...editForm, route_to: e.target.value })}
className="admin-form-input"
/>
</div>
</FormField>
</div>
<div className="admin-form-group">
<label className="admin-form-label">Typ jízdy</label>
<FormField label="Typ jízdy">
<select
value={editForm.is_business}
onChange={(e) => setEditForm({ ...editForm, is_business: parseInt(e.target.value) })}
@@ -621,17 +610,16 @@ export default function TripsAdmin() {
<option value={1}>Služební</option>
<option value={0}>Soukromá</option>
</select>
</div>
</FormField>
<div className="admin-form-group">
<label className="admin-form-label">Poznámky</label>
<FormField label="Poznámky">
<textarea
value={editForm.notes}
onChange={(e) => setEditForm({ ...editForm, notes: e.target.value })}
className="admin-form-textarea"
rows={2}
/>
</div>
</FormField>
</div>
</div>