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

@@ -3,6 +3,7 @@ import { useAlert } from '../context/AlertContext'
import { useAuth } from '../context/AuthContext'
import { motion, AnimatePresence } from 'framer-motion'
import ConfirmModal from '../components/ConfirmModal'
import FormField from '../components/FormField'
import Forbidden from '../components/Forbidden'
import useModalLock from '../hooks/useModalLock'
@@ -408,8 +409,7 @@ export default function OffersCustomers() {
<div className="admin-modal-body">
<div className="admin-form">
<div className="admin-form-group">
<label className="admin-form-label required">Název</label>
<FormField label="Název" required>
<input
type="text"
value={form.name}
@@ -417,64 +417,58 @@ export default function OffersCustomers() {
className="admin-form-input"
placeholder="Název firmy / jméno"
/>
</div>
<div className="admin-form-group">
<label className="admin-form-label">Ulice</label>
</FormField>
<FormField label="Ulice">
<input
type="text"
value={form.street}
onChange={(e) => setForm(prev => ({ ...prev, street: e.target.value }))}
className="admin-form-input"
/>
</div>
</FormField>
<div className="admin-form-row">
<div className="admin-form-group">
<label className="admin-form-label">Město</label>
<FormField label="Město">
<input
type="text"
value={form.city}
onChange={(e) => setForm(prev => ({ ...prev, city: e.target.value }))}
className="admin-form-input"
/>
</div>
<div className="admin-form-group">
<label className="admin-form-label">PSČ</label>
</FormField>
<FormField label="PSČ">
<input
type="text"
value={form.postal_code}
onChange={(e) => setForm(prev => ({ ...prev, postal_code: e.target.value }))}
className="admin-form-input"
/>
</div>
</FormField>
</div>
<div className="admin-form-group">
<label className="admin-form-label">Země</label>
<FormField label="Země">
<input
type="text"
value={form.country}
onChange={(e) => setForm(prev => ({ ...prev, country: e.target.value }))}
className="admin-form-input"
/>
</div>
</FormField>
<div className="admin-form-row">
<div className="admin-form-group">
<label className="admin-form-label">IČO</label>
<FormField label="IČO">
<input
type="text"
value={form.company_id}
onChange={(e) => setForm(prev => ({ ...prev, company_id: e.target.value }))}
className="admin-form-input"
/>
</div>
<div className="admin-form-group">
<label className="admin-form-label">DIČ</label>
</FormField>
<FormField label="DIČ">
<input
type="text"
value={form.vat_id}
onChange={(e) => setForm(prev => ({ ...prev, vat_id: e.target.value }))}
className="admin-form-input"
/>
</div>
</FormField>
</div>
{/* Dynamic custom fields */}
@@ -483,8 +477,7 @@ export default function OffersCustomers() {
{customFields.map((field, idx) => (
<div key={field._key} style={{ marginBottom: 8 }}>
<div className="admin-form-row" style={{ marginBottom: 0, alignItems: 'flex-end' }}>
<div className="admin-form-group" style={{ flex: 1 }}>
{idx === 0 && <label className="admin-form-label" style={{ fontSize: '0.75rem' }}>Název</label>}
<FormField label={idx === 0 ? 'Název' : '\u00A0'} style={{ flex: 1 }}>
<input
type="text"
value={field.name}
@@ -496,9 +489,8 @@ export default function OffersCustomers() {
className="admin-form-input"
placeholder="Např. Kontakt"
/>
</div>
<div className="admin-form-group" style={{ flex: 1 }}>
{idx === 0 && <label className="admin-form-label" style={{ fontSize: '0.75rem' }}>Hodnota</label>}
</FormField>
<FormField label={idx === 0 ? 'Hodnota' : '\u00A0'} style={{ flex: 1 }}>
<div style={{ display: 'flex', gap: 4, alignItems: 'center' }}>
<input
type="text"
@@ -537,7 +529,7 @@ export default function OffersCustomers() {
</svg>
</button>
</div>
</div>
</FormField>
</div>
<label className="admin-form-checkbox" style={{ marginTop: 4 }}>
<input