(
task: VaultTask,
extra: { isActive?: boolean; buttonRef?: React.RefObject<HTMLDivElement> | null }
)
| 266 | } |
| 267 | |
| 268 | const renderTask = ( |
| 269 | task: VaultTask, |
| 270 | extra: { isActive?: boolean; buttonRef?: React.RefObject<HTMLDivElement> | null } |
| 271 | ): JSX.Element => |
| 272 | editingTaskId === task.id ? ( |
| 273 | <div key={task.id} className="flex items-center gap-2 rounded-md px-2 py-1"> |
| 274 | <span className="h-4 w-4 shrink-0 rounded border border-paper-400/70" /> |
| 275 | <input |
| 276 | autoFocus |
| 277 | value={editValue} |
| 278 | onChange={(e) => setEditValue(e.target.value)} |
| 279 | onKeyDown={(e) => { |
| 280 | if (e.key === 'Enter') { |
| 281 | e.preventDefault() |
| 282 | e.currentTarget.blur() |
| 283 | } else if (e.key === 'Escape') { |
| 284 | e.stopPropagation() |
| 285 | cancelEditRef.current = true |
| 286 | e.currentTarget.blur() |
| 287 | } |
| 288 | }} |
| 289 | onBlur={() => { |
| 290 | if (cancelEditRef.current) { |
| 291 | cancelEditRef.current = false |
| 292 | } else { |
| 293 | const text = editValue.trim() |
| 294 | if (text && text !== taskTail(task)) { |
| 295 | void applyTaskMutation(task, { kind: 'set-text', text }) |
| 296 | } |
| 297 | } |
| 298 | setEditingTaskId(null) |
| 299 | }} |
| 300 | className="min-w-0 flex-1 rounded border border-accent/60 bg-paper-100 px-1 py-0.5 text-sm outline-none" |
| 301 | spellCheck={false} |
| 302 | autoComplete="off" |
| 303 | /> |
| 304 | </div> |
| 305 | ) : ( |
| 306 | <CalendarTaskRow |
| 307 | key={task.id} |
| 308 | task={task} |
| 309 | isOverdue={isTaskOverdue(task, today)} |
| 310 | isActive={extra.isActive} |
| 311 | buttonRef={extra.buttonRef ?? null} |
| 312 | onToggle={() => onToggleTask(task)} |
| 313 | onOpen={() => { |
| 314 | if (suppressClickRef.current) { |
| 315 | suppressClickRef.current = false |
| 316 | return |
| 317 | } |
| 318 | onOpenTask(task) |
| 319 | }} |
| 320 | onContextMenu={(e) => openTaskMenu(e, task)} |
| 321 | onPointerDownTask={(e) => startPointerDrag(task, e)} |
| 322 | /> |
| 323 | ) |
| 324 | |
| 325 | // Reset the keyboard "active task" cursor whenever the selected day changes. |
no test coverage detected