Fix black row text after moving to a folder, remove duplicate chevron
Pin conversation row title text to .foregroundStyle(.primary) instead of the implicit default — under List's sidebar/source-list style, AppKit's row highlighting could resolve default text to black on a just-interacted-with row (e.g. right after a drag/context-menu move), making it unreadable. Also drop Section(isExpanded:), which was rendering its own native disclosure chevron on the right in addition to the custom one already in the header on the left; folder collapse now works purely off the existing collapsedFolders state with a plain Section, so only the intended left-side chevron remains.
This commit is contained in:
@@ -131,9 +131,11 @@ struct SidebarView: View {
|
|||||||
ForEach(folders) { folder in
|
ForEach(folders) { folder in
|
||||||
let folderConversations = conversationsByFolder[folder.id] ?? []
|
let folderConversations = conversationsByFolder[folder.id] ?? []
|
||||||
if !folderConversations.isEmpty || searchText.isEmpty {
|
if !folderConversations.isEmpty || searchText.isEmpty {
|
||||||
Section(isExpanded: isExpandedBinding(for: folder.id)) {
|
Section {
|
||||||
ForEach(folderConversations) { conversation in
|
if !collapsedFolders.contains(folder.id) {
|
||||||
conversationRow(conversation)
|
ForEach(folderConversations) { conversation in
|
||||||
|
conversationRow(conversation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
folderHeader(folder)
|
folderHeader(folder)
|
||||||
@@ -204,19 +206,6 @@ struct SidebarView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func isExpandedBinding(for folderId: UUID) -> Binding<Bool> {
|
|
||||||
Binding(
|
|
||||||
get: { !collapsedFolders.contains(folderId) },
|
|
||||||
set: { isExpanded in
|
|
||||||
if isExpanded {
|
|
||||||
collapsedFolders.remove(folderId)
|
|
||||||
} else {
|
|
||||||
collapsedFolders.insert(folderId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func handleDrop(_ items: [String], toFolder folderId: UUID?) -> Bool {
|
private func handleDrop(_ items: [String], toFolder folderId: UUID?) -> Bool {
|
||||||
var moved = false
|
var moved = false
|
||||||
for idString in items {
|
for idString in items {
|
||||||
@@ -423,6 +412,7 @@ struct SidebarConversationRow: View {
|
|||||||
VStack(alignment: .leading, spacing: 2) {
|
VStack(alignment: .leading, spacing: 2) {
|
||||||
Text(conversation.name)
|
Text(conversation.name)
|
||||||
.font(.system(size: 13, weight: .medium))
|
.font(.system(size: 13, weight: .medium))
|
||||||
|
.foregroundStyle(.primary)
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
Text("^[\(conversation.messageCount) message](inflect: true)")
|
Text("^[\(conversation.messageCount) message](inflect: true)")
|
||||||
|
|||||||
@@ -221,9 +221,11 @@ struct ConversationListView: View {
|
|||||||
ForEach(folders) { folder in
|
ForEach(folders) { folder in
|
||||||
let folderConversations = conversationsByFolder[folder.id] ?? []
|
let folderConversations = conversationsByFolder[folder.id] ?? []
|
||||||
if !folderConversations.isEmpty || searchText.isEmpty {
|
if !folderConversations.isEmpty || searchText.isEmpty {
|
||||||
Section(isExpanded: isExpandedBinding(for: folder.id)) {
|
Section {
|
||||||
ForEach(folderConversations) { conversation in
|
if !collapsedFolders.contains(folder.id) {
|
||||||
conversationRow(conversation)
|
ForEach(folderConversations) { conversation in
|
||||||
|
conversationRow(conversation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
folderHeader(folder)
|
folderHeader(folder)
|
||||||
@@ -443,19 +445,6 @@ struct ConversationListView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func isExpandedBinding(for folderId: UUID) -> Binding<Bool> {
|
|
||||||
Binding(
|
|
||||||
get: { !collapsedFolders.contains(folderId) },
|
|
||||||
set: { isExpanded in
|
|
||||||
if isExpanded {
|
|
||||||
collapsedFolders.remove(folderId)
|
|
||||||
} else {
|
|
||||||
collapsedFolders.insert(folderId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func handleDrop(_ items: [String], toFolder folderId: UUID?) -> Bool {
|
private func handleDrop(_ items: [String], toFolder folderId: UUID?) -> Bool {
|
||||||
var moved = false
|
var moved = false
|
||||||
for idString in items {
|
for idString in items {
|
||||||
@@ -696,6 +685,7 @@ struct ConversationRow: View {
|
|||||||
VStack(alignment: .leading, spacing: 4) {
|
VStack(alignment: .leading, spacing: 4) {
|
||||||
Text(conversation.name)
|
Text(conversation.name)
|
||||||
.font(.system(size: 15, weight: .semibold))
|
.font(.system(size: 15, weight: .semibold))
|
||||||
|
.foregroundStyle(.primary)
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
|
|
||||||
HStack(spacing: 6) {
|
HStack(spacing: 6) {
|
||||||
|
|||||||
Reference in New Issue
Block a user