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
|
||||
// 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.
|
||||
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)
|
||||
ScrollView {
|
||||
VStack(spacing: 16) {
|
||||
|
||||
@@ -78,9 +78,11 @@ struct JournalView: View {
|
||||
}
|
||||
} else {
|
||||
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)
|
||||
.tag(entry.date)
|
||||
.id(entry.date)
|
||||
.onAppear { currentVisibleMonth = entry.date }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,12 +74,20 @@ final class DuoLayoutUITests: XCTestCase {
|
||||
|
||||
openTab(app, "Journal")
|
||||
snap(app, "07_journal")
|
||||
let journalCells = app.cells
|
||||
if journalCells.count > 1 {
|
||||
journalCells.element(boundBy: 1).tap()
|
||||
Thread.sleep(forTimeInterval: 2.0)
|
||||
snap(app, "08_journal_detail")
|
||||
// Seeded data always has last month's check-in: select it by label.
|
||||
let formatter = DateFormatter()
|
||||
formatter.locale = Locale(identifier: "en_US")
|
||||
formatter.dateFormat = "MMM yyyy"
|
||||
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")
|
||||
snap(app, "09_settings")
|
||||
|
||||
Reference in New Issue
Block a user