mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Fix hit testing on labels, fix initially selected labels in edit labels view
This commit is contained in:
parent
57289cb0c4
commit
461087513b
5 changed files with 51 additions and 45 deletions
|
|
@ -66,7 +66,7 @@ struct ApplyLabelsView: View {
|
|||
},
|
||||
label: {
|
||||
HStack {
|
||||
TextChip(feedItemLabel: label)
|
||||
TextChip(feedItemLabel: label).allowsHitTesting(false)
|
||||
Spacer()
|
||||
if isSelected(label) {
|
||||
Image(systemName: "checkmark")
|
||||
|
|
@ -81,31 +81,32 @@ struct ApplyLabelsView: View {
|
|||
}
|
||||
createLabelButton
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
.listStyle(PlainListStyle())
|
||||
.navigationTitle(mode.navTitle)
|
||||
#if os(iOS)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
cancelButton
|
||||
}
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
saveItemChangesButton
|
||||
}
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.navigationTitle(mode.navTitle)
|
||||
#if os(iOS)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
cancelButton
|
||||
}
|
||||
#else
|
||||
.toolbar {
|
||||
ToolbarItemGroup {
|
||||
cancelButton
|
||||
saveItemChangesButton
|
||||
}
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
saveItemChangesButton
|
||||
}
|
||||
#endif
|
||||
.sheet(isPresented: $viewModel.showCreateLabelModal) {
|
||||
CreateLabelView(viewModel: viewModel, newLabelName: viewModel.labelSearchFilter)
|
||||
}
|
||||
#else
|
||||
.toolbar {
|
||||
ToolbarItemGroup {
|
||||
cancelButton
|
||||
saveItemChangesButton
|
||||
}
|
||||
}
|
||||
#endif
|
||||
.sheet(isPresented: $viewModel.showCreateLabelModal) {
|
||||
CreateLabelView(viewModel: viewModel, newLabelName: viewModel.labelSearchFilter)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,30 +23,31 @@ struct FilterByLabelsView: View {
|
|||
var innerBody: some View {
|
||||
List {
|
||||
ForEach(viewModel.labels.applySearchFilter(viewModel.labelSearchFilter), id: \.self) { label in
|
||||
HStack {
|
||||
TextChip(feedItemLabel: label, negated: isNegated(label))
|
||||
Spacer()
|
||||
Button(action: {
|
||||
Button(
|
||||
action: {
|
||||
if isSelected(label) {
|
||||
viewModel.negatedLabels.append(label)
|
||||
viewModel.selectedLabels.removeAll(where: { $0.id == label.id })
|
||||
} else if isNegated(label) {
|
||||
viewModel.negatedLabels.removeAll(where: { $0.id == label.id })
|
||||
} else {
|
||||
viewModel.selectedLabels.append(label)
|
||||
}
|
||||
}, label: {
|
||||
if isNegated(label) {
|
||||
Image(systemName: "circle.slash")
|
||||
},
|
||||
label: {
|
||||
HStack {
|
||||
TextChip(feedItemLabel: label).allowsHitTesting(false)
|
||||
Spacer()
|
||||
if isSelected(label) {
|
||||
Image(systemName: "checkmark")
|
||||
}
|
||||
}
|
||||
if isSelected(label) {
|
||||
Image(systemName: "checkmark")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
.padding(.vertical, 5)
|
||||
#if os(macOS)
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
#endif
|
||||
}
|
||||
}
|
||||
.listStyle(.plain)
|
||||
.listStyle(PlainListStyle())
|
||||
.navigationTitle("Filter by Label")
|
||||
#if os(iOS)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ struct LabelsView: View {
|
|||
Section(header: Text(LocalText.labelsGeneric)) {
|
||||
ForEach(viewModel.labels, id: \.id) { label in
|
||||
HStack {
|
||||
TextChip(feedItemLabel: label)
|
||||
TextChip(feedItemLabel: label).allowsHitTesting(false)
|
||||
Spacer()
|
||||
Button(
|
||||
action: {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,14 @@ import Views
|
|||
isLoading = true
|
||||
|
||||
await loadLabelsFromStore(dataService: dataService)
|
||||
let selLabels = initiallySelectedLabels ?? item?.sortedLabels ?? []
|
||||
for label in labels {
|
||||
if selLabels.contains(label) {
|
||||
selectedLabels.append(label)
|
||||
} else {
|
||||
unselectedLabels.append(label)
|
||||
}
|
||||
}
|
||||
|
||||
Task.detached(priority: .userInitiated) {
|
||||
if let labelIDs = try? await dataService.labels() {
|
||||
|
|
@ -80,12 +88,8 @@ import Views
|
|||
try? fetchRequest.execute()
|
||||
}
|
||||
|
||||
if fetchedLabels?.count == 0 {
|
||||
await fetchLabelsFromNetwork(dataService: dataService)
|
||||
} else {
|
||||
setLabels(fetchedLabels ?? [])
|
||||
unselectedLabels = fetchedLabels ?? []
|
||||
}
|
||||
setLabels(fetchedLabels ?? [])
|
||||
unselectedLabels = fetchedLabels ?? []
|
||||
}
|
||||
|
||||
func fetchLabelsFromNetwork(dataService: DataService) async {
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ struct WebReaderContainerView: View {
|
|||
}
|
||||
|
||||
func menuItems(for item: LinkedItem) -> some View {
|
||||
let hasLabels = item.labels?.count == 0
|
||||
let hasLabels = item.labels?.count != 0
|
||||
return Group {
|
||||
Button(
|
||||
action: { showHighlightsView = true },
|
||||
|
|
|
|||
Loading…
Reference in a new issue