feat(todos): case à cocher «Pas de date» dans le formulaire todo
Cochée par défaut à la création (aucune date soumise). Décochée si la tâche éditée a déjà une date (champ date pré-rempli). Décocher affiche le sélecteur de date ; cocher le masque et efface la date. v0.4.14 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "homehub-frontend",
|
"name": "homehub-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.4.13",
|
"version": "0.4.14",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default function TodoForm({ onSubmit, onCancel, initialValues, submitLabe
|
|||||||
const [title, setTitle] = useState(initialValues?.title ?? '')
|
const [title, setTitle] = useState(initialValues?.title ?? '')
|
||||||
const [selectedDomains, setSelectedDomains] = useState<string[]>(initialValues?.domains ?? [])
|
const [selectedDomains, setSelectedDomains] = useState<string[]>(initialValues?.domains ?? [])
|
||||||
const [priority, setPriority] = useState<'low' | 'medium' | 'high'>(initialValues?.priority ?? 'medium')
|
const [priority, setPriority] = useState<'low' | 'medium' | 'high'>(initialValues?.priority ?? 'medium')
|
||||||
|
const [noDate, setNoDate] = useState(!initialValues?.due_date)
|
||||||
const [dueDate, setDueDate] = useState(
|
const [dueDate, setDueDate] = useState(
|
||||||
initialValues?.due_date ? initialValues.due_date.slice(0, 10) : today
|
initialValues?.due_date ? initialValues.due_date.slice(0, 10) : today
|
||||||
)
|
)
|
||||||
@@ -114,7 +115,7 @@ export default function TodoForm({ onSubmit, onCancel, initialValues, submitLabe
|
|||||||
title: title.trim(),
|
title: title.trim(),
|
||||||
domains: selectedDomains,
|
domains: selectedDomains,
|
||||||
priority,
|
priority,
|
||||||
due_date: dueDate ? new Date(dueDate).toISOString() : undefined,
|
due_date: noDate ? undefined : (dueDate ? new Date(dueDate).toISOString() : undefined),
|
||||||
body: body.trim() || undefined,
|
body: body.trim() || undefined,
|
||||||
url: url.trim() || undefined,
|
url: url.trim() || undefined,
|
||||||
tags: tags ? tags.split(',').map(t => t.trim()).filter(Boolean) : [],
|
tags: tags ? tags.split(',').map(t => t.trim()).filter(Boolean) : [],
|
||||||
@@ -201,13 +202,26 @@ export default function TodoForm({ onSubmit, onCancel, initialValues, submitLabe
|
|||||||
|
|
||||||
{/* Date objectif */}
|
{/* Date objectif */}
|
||||||
<div>
|
<div>
|
||||||
<div style={labelStyle}>Date objectif</div>
|
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 6 }}>
|
||||||
|
<label style={{ display: 'flex', alignItems: 'center', gap: 6, cursor: 'pointer', userSelect: 'none' }}>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
checked={noDate}
|
||||||
|
onChange={e => setNoDate(e.target.checked)}
|
||||||
|
style={{ width: 16, height: 16, accentColor: 'var(--accent)', cursor: 'pointer' }}
|
||||||
|
/>
|
||||||
|
<span style={{ ...labelStyle, marginBottom: 0 }}>Pas de date</span>
|
||||||
|
</label>
|
||||||
|
{!noDate && <span style={labelStyle}>Date objectif</span>}
|
||||||
|
</div>
|
||||||
|
{!noDate && (
|
||||||
<input
|
<input
|
||||||
style={inputStyle}
|
style={inputStyle}
|
||||||
type="date"
|
type="date"
|
||||||
value={dueDate}
|
value={dueDate}
|
||||||
onChange={e => setDueDate(e.target.value)}
|
onChange={e => setDueDate(e.target.value)}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Description */}
|
{/* Description */}
|
||||||
|
|||||||
Reference in New Issue
Block a user