diff --git a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListCard.swift b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListCard.swift index be1857d6f..efa1cd851 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListCard.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListCard.swift @@ -10,16 +10,29 @@ struct HighlightsListCard: View { let highlightParams: HighlightListItemParams @Binding var hasHighlightMutations: Bool let onSaveAnnotation: (String) -> Void + let onDeleteHighlight: () -> Void var contextMenuView: some View { Group { Button( - action: {}, - label: { Label("Stubby One", systemImage: "highlighter") } + action: { + #if os(iOS) + UIPasteboard.general.string = highlightParams.quote + #endif + + #if os(macOS) + let pasteBoard = NSPasteboard.general + pasteBoard.clearContents() + pasteBoard.writeObjects([highlightParams.quote as NSString]) + #endif + + Snackbar.show(message: "Highlight copied") + }, + label: { Label("Copy", systemImage: "doc.on.doc") } ) Button( - action: {}, - label: { Label("Stubby Two", systemImage: "textbox") } + action: onDeleteHighlight, + label: { Label("Delete", systemImage: "trash") } ) } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListView.swift b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListView.swift index ac23279f6..b16a0c3bf 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListView.swift @@ -18,14 +18,23 @@ struct HighlightsListView: View { ForEach(viewModel.highlightItems) { highlightParams in HighlightsListCard( highlightParams: highlightParams, - hasHighlightMutations: $hasHighlightMutations - ) { newAnnotation in - viewModel.updateAnnotation( - highlightID: highlightParams.highlightID, - annotation: newAnnotation, - dataService: dataService - ) - } + hasHighlightMutations: $hasHighlightMutations, + onSaveAnnotation: { + viewModel.updateAnnotation( + highlightID: highlightParams.highlightID, + annotation: $0, + dataService: dataService + ) + }, + onDeleteHighlight: { + hasHighlightMutations = true + + viewModel.deleteHighlight( + highlightID: highlightParams.highlightID, + dataService: dataService + ) + } + ) } } } diff --git a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListViewModel.swift index 791d85c29..6eca3b4e9 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Highlights/HighlightsListViewModel.swift @@ -34,6 +34,11 @@ struct HighlightListItemParams: Identifiable { } } + func deleteHighlight(highlightID: String, dataService: DataService) { + dataService.deleteHighlight(highlightID: highlightID) + highlightItems.removeAll { $0.highlightID == highlightID } + } + private func loadHighlights(item: LinkedItem) { let unsortedHighlights = item.highlights.asArray(of: Highlight.self)