fix mac app

This commit is contained in:
Satindar Dhillon
2022-04-27 11:29:58 -07:00
parent 45a6bca1bb
commit 461249db59
4 changed files with 38 additions and 29 deletions

View File

@ -14,6 +14,10 @@ import Views
@ObservedObject var viewModel: HomeFeedViewModel
func loadItems(isRefresh: Bool) {
Task { await viewModel.loadItems(dataService: dataService, isRefresh: isRefresh) }
}
var body: some View {
List {
Section {
@ -23,8 +27,18 @@ import Views
viewModel: viewModel
)
.contextMenu {
Button(
action: { viewModel.itemUnderLabelEdit = item },
label: { Label("Edit Labels", systemImage: "tag") }
)
Button(action: {
viewModel.setLinkArchived(dataService: dataService, linkId: item.id, archived: !item.isArchived)
withAnimation(.linear(duration: 0.4)) {
viewModel.setLinkArchived(
dataService: dataService,
objectID: item.objectID,
archived: !item.isArchived
)
}
}, label: {
Label(
item.isArchived ? "Unarchive" : "Archive",
@ -51,7 +65,7 @@ import Views
Button("Remove Link", role: .destructive) {
if let itemToRemove = itemToRemove {
withAnimation {
viewModel.removeLink(dataService: dataService, linkId: itemToRemove.id)
viewModel.removeLink(dataService: dataService, objectID: itemToRemove.objectID)
self.itemToRemove = nil
}
}
@ -81,16 +95,16 @@ import Views
.onChange(of: viewModel.searchTerm) { _ in
// Maybe we should debounce this, but
// it feels like it works ok without
viewModel.loadItems(dataService: dataService, isRefresh: true)
loadItems(isRefresh: true)
}
.onSubmit(of: .search) {
viewModel.loadItems(dataService: dataService, isRefresh: true)
loadItems(isRefresh: true)
}
.toolbar {
ToolbarItem {
Button(
action: {
viewModel.loadItems(dataService: dataService, isRefresh: true)
loadItems(isRefresh: true)
},
label: { Label("Refresh Feed", systemImage: "arrow.clockwise") }
)
@ -105,7 +119,7 @@ import Views
}
.onAppear {
if viewModel.items.isEmpty {
viewModel.loadItems(dataService: dataService, isRefresh: true)
loadItems(isRefresh: true)
}
}
}

View File

@ -91,7 +91,7 @@ struct NewsletterEmailsView: View {
#if os(macOS)
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.writeObjects([newsletterEmail.email as NSString])
pasteBoard.writeObjects([newsletterEmail.unwrappedEmail as NSString])
#endif
Snackbar.show(message: "Email copied")

View File

@ -1,11 +1,23 @@
import CoreData
import Foundation
public extension NewsletterEmail {
var unwrappedEmailId: String {
emailId ?? ""
}
var unwrappedEmailId: String { emailId ?? "" }
var unwrappedEmail: String {
email ?? ""
var unwrappedEmail: String { email ?? "" }
static func lookup(byID emailID: String, inContext context: NSManagedObjectContext) -> NewsletterEmail? {
let fetchRequest: NSFetchRequest<Models.NewsletterEmail> = NewsletterEmail.fetchRequest()
fetchRequest.predicate = NSPredicate(
format: "%K == %@", #keyPath(NewsletterEmail.emailId), emailID
)
var email: NewsletterEmail?
context.performAndWait {
email = (try? context.fetch(fetchRequest))?.first
}
return email
}
}

View File

@ -56,20 +56,3 @@ extension Sequence where Element == InternalNewsletterEmail {
return result
}
}
extension NewsletterEmail {
static func lookup(byID emailID: String, inContext context: NSManagedObjectContext) -> NewsletterEmail? {
let fetchRequest: NSFetchRequest<Models.NewsletterEmail> = NewsletterEmail.fetchRequest()
fetchRequest.predicate = NSPredicate(
format: "%K == %@", #keyPath(NewsletterEmail.emailId), emailID
)
var email: NewsletterEmail?
context.performAndWait {
email = (try? context.fetch(fetchRequest))?.first
}
return email
}
}