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",
|
||||
"private": true,
|
||||
"version": "0.4.13",
|
||||
"version": "0.4.14",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -57,6 +57,7 @@ export default function TodoForm({ onSubmit, onCancel, initialValues, submitLabe
|
||||
const [title, setTitle] = useState(initialValues?.title ?? '')
|
||||
const [selectedDomains, setSelectedDomains] = useState<string[]>(initialValues?.domains ?? [])
|
||||
const [priority, setPriority] = useState<'low' | 'medium' | 'high'>(initialValues?.priority ?? 'medium')
|
||||
const [noDate, setNoDate] = useState(!initialValues?.due_date)
|
||||
const [dueDate, setDueDate] = useState(
|
||||
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(),
|
||||
domains: selectedDomains,
|
||||
priority,
|
||||
due_date: dueDate ? new Date(dueDate).toISOString() : undefined,
|
||||
due_date: noDate ? undefined : (dueDate ? new Date(dueDate).toISOString() : undefined),
|
||||
body: body.trim() || undefined,
|
||||
url: url.trim() || undefined,
|
||||
tags: tags ? tags.split(',').map(t => t.trim()).filter(Boolean) : [],
|
||||
@@ -201,13 +202,26 @@ export default function TodoForm({ onSubmit, onCancel, initialValues, submitLabe
|
||||
|
||||
{/* Date objectif */}
|
||||
<div>
|
||||
<div style={labelStyle}>Date objectif</div>
|
||||
<input
|
||||
style={inputStyle}
|
||||
type="date"
|
||||
value={dueDate}
|
||||
onChange={e => setDueDate(e.target.value)}
|
||||
/>
|
||||
<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
|
||||
style={inputStyle}
|
||||
type="date"
|
||||
value={dueDate}
|
||||
onChange={e => setDueDate(e.target.value)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Description */}
|
||||
|
||||
Reference in New Issue
Block a user