Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Corner/UI/NewTaskField.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ struct NewTaskField: View {
var placeholder: LocalizedStringKey = "Agregar tarea…"
/// Tomar el foco al aparecer (campo de subtareas: se expande para escribir).
var autofocus: Bool = false
/// Esc: además de limpiar y soltar el foco, avisa a quien lo muestre
/// (para que un grupo de subtareas vacío pueda cerrarse).
var onCancel: (() -> Void)? = nil
let onSubmit: (String) -> Void

@State private var text = ""
Expand All @@ -30,6 +33,7 @@ struct NewTaskField: View {
// Esc limpia y suelta el foco; la segunda Esc cierra el panel.
text = ""
focused = false
onCancel?()
}
.onAppear {
if autofocus { focused = true }
Expand Down
13 changes: 11 additions & 2 deletions Corner/UI/TaskGroupRows.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ struct TaskGroupRows: View {
? nil
: (subtasks.filter(\.isDone).count, subtasks.count),
isExpanded: isExpanded,
onToggleExpand: subtasks.isEmpty ? nil : { toggleExpanded() },
// El chevron también aparece en un grupo expandido pero aún vacío:
// si no, tocar "+" y no escribir nada dejaba el campo abierto sin
// manera de cerrarlo (SPEC §4.2).
onToggleExpand: (subtasks.isEmpty && !isExpanded) ? nil : { toggleExpanded() },
onAddSubtask: { withAnimation(.snappy) { _ = expanded.insert(task.id) } },
moveDestinations: Self.labeledDestinations(store.moveDestinations(),
excluding: task.assignedDay),
Expand All @@ -50,7 +53,13 @@ struct TaskGroupRows: View {
.listRowSeparator(.hidden)
.moveDisabled(true)
}
NewTaskField(placeholder: "Agregar paso…", autofocus: true) { text in
NewTaskField(placeholder: "Agregar paso…", autofocus: true, onCancel: {
// Esc en un grupo que sigue vacío lo colapsa; con subtareas
// ya creadas, Esc solo suelta el campo (SPEC §4.2).
if store.subtasks(of: task).isEmpty {
withAnimation(.snappy) { expanded.remove(task.id) }
}
}) { text in
store.addSubtask(text, to: task)
}
.padding(.leading, 26)
Expand Down
3 changes: 3 additions & 0 deletions docs/SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ El panel se cierra cuando ocurre cualquiera de:
- **UI plegable:** el padre con subtareas muestra un chevron y un contador
"2/5". Expandir revela las subtareas indentadas + campo "Agregar paso…".
El estado expandido/colapsado es efímero (se colapsa al reabrir el panel).
El chevron también está disponible en un grupo **expandido pero aún vacío**,
y **Esc en su campo lo colapsa**: abrir el campo con "+" y no escribir nada
nunca deja una fila abierta sin forma de cerrarla.
- **Crear la primera subtarea:** botón "+" visible al hacer hover sobre la tarea
(junto a la ✕), o clic derecho → "Agregar subtarea". Ambos expanden la fila y
el campo "Agregar paso…" toma el foco listo para escribir.
Expand Down
Loading