From 461087513bb0330c76de471eac0dc375f06d1893 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 23 Jan 2023 14:03:46 +0800 Subject: [PATCH] Fix hit testing on labels, fix initially selected labels in edit labels view --- .../App/Views/Labels/ApplyLabelsView.swift | 43 ++++++++++--------- .../App/Views/Labels/FilterByLabelsView.swift | 33 +++++++------- .../Sources/App/Views/Labels/LabelsView.swift | 2 +- .../App/Views/Labels/LabelsViewModel.swift | 16 ++++--- .../Views/WebReader/WebReaderContainer.swift | 2 +- 5 files changed, 51 insertions(+), 45 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift index d80959395..de91a4c18 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/ApplyLabelsView.swift @@ -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) } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift index 5f0eb21ce..cf1885a5d 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/FilterByLabelsView.swift @@ -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) diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsView.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsView.swift index e4266561d..c6f04bbc9 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsView.swift @@ -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: { diff --git a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift index 6fe2bf268..d3aa9d634 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Labels/LabelsViewModel.swift @@ -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 { diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 39649a71c..ad407de48 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -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 },