Fix selección de mes en Diario y dashboard a 1 columna cuando hay panel lateral
- JournalView: el .id() extra sobre las filas envolvía el .tag y la selección de la List no navegaba (ni en compacto ni en regular). ForEach ya aporta la identidad que usa el ScrollViewReader. - DashboardView: masonry pasa a 1 columna por debajo de 600 pt (inspector de Quick Update abierto, Split View) en vez de apretar dos tarjetas. - DuoLayoutUITests: selecciona el mes anterior por etiqueta y comprueba que se abre el check-in. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
This commit is contained in:
@@ -287,7 +287,10 @@ struct DashboardView: View {
|
|||||||
GeometryReader { geo in
|
GeometryReader { geo in
|
||||||
// Scale column count with available width so a wide Mac window fills
|
// Scale column count with available width so a wide Mac window fills
|
||||||
// (3 columns) while an iPad stays at 2. Lead cards span full width.
|
// (3 columns) while an iPad stays at 2. Lead cards span full width.
|
||||||
let columnCount = geo.size.width >= 1250 ? 3 : 2
|
// Continuous sizing: 3 columns on a wide Mac window, 2 on an iPad /
|
||||||
|
// Duo inner screen, 1 when a side panel (Quick Update inspector,
|
||||||
|
// Split View) leaves too little room for two readable cards.
|
||||||
|
let columnCount = geo.size.width >= 1250 ? 3 : (geo.size.width >= 600 ? 2 : 1)
|
||||||
let columns = iPadContextColumns(count: columnCount)
|
let columns = iPadContextColumns(count: columnCount)
|
||||||
ScrollView {
|
ScrollView {
|
||||||
VStack(spacing: 16) {
|
VStack(spacing: 16) {
|
||||||
|
|||||||
@@ -78,9 +78,11 @@ struct JournalView: View {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ForEach(filteredMonthlyNotes) { entry in
|
ForEach(filteredMonthlyNotes) { entry in
|
||||||
|
// ForEach identity (MonthlyNoteItem.id == date) already serves
|
||||||
|
// ScrollViewReader; an extra .id() would wrap the .tag trait
|
||||||
|
// and break List selection.
|
||||||
monthlyNoteRow(entry)
|
monthlyNoteRow(entry)
|
||||||
.tag(entry.date)
|
.tag(entry.date)
|
||||||
.id(entry.date)
|
|
||||||
.onAppear { currentVisibleMonth = entry.date }
|
.onAppear { currentVisibleMonth = entry.date }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,12 +74,20 @@ final class DuoLayoutUITests: XCTestCase {
|
|||||||
|
|
||||||
openTab(app, "Journal")
|
openTab(app, "Journal")
|
||||||
snap(app, "07_journal")
|
snap(app, "07_journal")
|
||||||
let journalCells = app.cells
|
// Seeded data always has last month's check-in: select it by label.
|
||||||
if journalCells.count > 1 {
|
let formatter = DateFormatter()
|
||||||
journalCells.element(boundBy: 1).tap()
|
formatter.locale = Locale(identifier: "en_US")
|
||||||
Thread.sleep(forTimeInterval: 2.0)
|
formatter.dateFormat = "MMM yyyy"
|
||||||
snap(app, "08_journal_detail")
|
let lastMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())!
|
||||||
|
let monthRow = app.staticTexts[formatter.string(from: lastMonth)].firstMatch
|
||||||
|
if monthRow.waitForExistence(timeout: 3) {
|
||||||
|
monthRow.tap()
|
||||||
|
} else if app.cells.count > 1 {
|
||||||
|
app.cells.element(boundBy: 1).tap()
|
||||||
}
|
}
|
||||||
|
Thread.sleep(forTimeInterval: 2.0)
|
||||||
|
XCTAssertFalse(app.staticTexts["Select a Month"].exists, "Journal month selection did not open the check-in")
|
||||||
|
snap(app, "08_journal_detail")
|
||||||
|
|
||||||
openTab(app, "Settings")
|
openTab(app, "Settings")
|
||||||
snap(app, "09_settings")
|
snap(app, "09_settings")
|
||||||
|
|||||||
Reference in New Issue
Block a user