From a3b53485ed3aa1276143263fb3ed38454749f987 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 25 Nov 2022 14:42:56 +0800 Subject: [PATCH] Allow editing author on iOS --- .../Share/ShareExtensionViewModel.swift | 3 ++- .../Sources/App/Views/Home/HomeFeedViewIOS.swift | 4 ++-- .../Sources/App/Views/Home/HomeFeedViewMac.swift | 4 ++-- .../Sources/App/Views/LinkItemDetailView.swift | 4 ++-- ...ew.swift => LinkedItemMetadataEditView.swift} | 16 ++++++++++++++-- .../App/Views/WebReader/WebReaderContainer.swift | 4 ++-- .../Sources/Models/DataModels/FeedItem.swift | 5 +++++ .../Mutations/UpdateLinkedItemTitle.swift | 5 +++-- .../Sources/Views/FeedItem/GridCard.swift | 2 +- 9 files changed, 33 insertions(+), 14 deletions(-) rename apple/OmnivoreKit/Sources/App/Views/{LinkedItemTitleEditView.swift => LinkedItemMetadataEditView.swift} (87%) diff --git a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift index 9f1e6bbc5..d97021a33 100644 --- a/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionViewModel.swift @@ -55,7 +55,8 @@ public class ShareExtensionViewModel: ObservableObject { dataService.updateLinkedItemTitleAndDescription( itemID: itemID, title: title, - description: description + description: description, + author: nil ) } diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index c94991fd8..414508ec6 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -62,7 +62,7 @@ import Views ApplyLabelsView(mode: .item(item), onSave: nil) } .sheet(item: $viewModel.itemUnderTitleEdit) { item in - LinkedItemTitleEditView(item: item) + LinkedItemMetadataEditView(item: item) } .sheet(item: $viewModel.itemForHighlightsView) { item in HighlightsListView(itemObjectID: item.objectID, hasHighlightMutations: $hasHighlightMutations) @@ -279,7 +279,7 @@ import Views } Button( action: { viewModel.itemUnderTitleEdit = item }, - label: { Label("Edit Title/Description", systemImage: "textbox") } + label: { Label("Edit Metadata", systemImage: "textbox") } ) Button( action: { viewModel.itemUnderLabelEdit = item }, diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift index 7a58090ba..788131c4c 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift @@ -46,7 +46,7 @@ import Views // TODO: add highlights view button Button( action: { viewModel.itemUnderTitleEdit = item }, - label: { Label("Edit Title/Description", systemImage: "textbox") } + label: { Label("Edit Metadata", systemImage: "textbox") } ) Button( action: { viewModel.itemUnderLabelEdit = item }, @@ -143,7 +143,7 @@ import Views ApplyLabelsView(mode: .item(item), onSave: nil) } .sheet(item: $viewModel.itemUnderTitleEdit) { item in - LinkedItemTitleEditView(item: item) + LinkedItemMetadataEditView(item: item) } // TODO: add highlights view sheet .task { diff --git a/apple/OmnivoreKit/Sources/App/Views/LinkItemDetailView.swift b/apple/OmnivoreKit/Sources/App/Views/LinkItemDetailView.swift index a55bbd7d6..0401a052f 100644 --- a/apple/OmnivoreKit/Sources/App/Views/LinkItemDetailView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/LinkItemDetailView.swift @@ -150,7 +150,7 @@ struct LinkItemDetailView: View { Group { Button( action: { showTitleEdit = true }, - label: { Label("Edit Title/Description", systemImage: "textbox") } + label: { Label("Edit Metadata", systemImage: "textbox") } ) Button( action: { viewModel.handleArchiveAction(dataService: dataService) }, @@ -188,7 +188,7 @@ struct LinkItemDetailView: View { } .sheet(isPresented: $showTitleEdit) { if let item = viewModel.item { - LinkedItemTitleEditView(item: item) + LinkedItemMetadataEditView(item: item) } } } diff --git a/apple/OmnivoreKit/Sources/App/Views/LinkedItemTitleEditView.swift b/apple/OmnivoreKit/Sources/App/Views/LinkedItemMetadataEditView.swift similarity index 87% rename from apple/OmnivoreKit/Sources/App/Views/LinkedItemTitleEditView.swift rename to apple/OmnivoreKit/Sources/App/Views/LinkedItemMetadataEditView.swift index 913eec01a..821b8cf67 100644 --- a/apple/OmnivoreKit/Sources/App/Views/LinkedItemTitleEditView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/LinkedItemMetadataEditView.swift @@ -6,9 +6,11 @@ import Views @MainActor final class LinkedItemTitleEditViewModel: ObservableObject { @Published var title = "" @Published var description = "" + @Published var author = "" func load(item: LinkedItem) { title = item.unwrappedTitle + author = item.author ?? "" description = item.descriptionText ?? "" } @@ -16,12 +18,14 @@ import Views dataService.updateLinkedItemTitleAndDescription( itemID: item.unwrappedID, title: title, - description: description + description: description, + // Don't set author to an empty string + author: author.isEmpty ? nil : author ) } } -struct LinkedItemTitleEditView: View { +struct LinkedItemMetadataEditView: View { @EnvironmentObject var dataService: DataService @Environment(\.presentationMode) private var presentationMode @StateObject var viewModel = LinkedItemTitleEditViewModel() @@ -39,6 +43,14 @@ struct LinkedItemTitleEditView: View { .textFieldStyle(StandardTextFieldStyle(textColor: .appGrayTextContrast)) } + VStack(alignment: .leading, spacing: 6) { + Text("Author") + .font(.appFootnote) + .foregroundColor(.appGrayTextContrast) + TextField("", text: $viewModel.author) + .textFieldStyle(StandardTextFieldStyle(textColor: .appGrayTextContrast)) + } + VStack(alignment: .leading, spacing: 6) { Text("Description") .font(.appFootnote) diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index f4bc6bc11..f9f1e09cc 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -165,7 +165,7 @@ struct WebReaderContainerView: View { } Button( action: { showTitleEdit = true }, - label: { Label("Edit Title/Description", systemImage: "textbox") } + label: { Label("Edit Metadata", systemImage: "textbox") } ) Button( action: editLabels, @@ -272,7 +272,7 @@ struct WebReaderContainerView: View { ApplyLabelsView(mode: .item(item), onSave: { _ in showLabelsModal = false }) } .sheet(isPresented: $showTitleEdit) { - LinkedItemTitleEditView(item: item) + LinkedItemMetadataEditView(item: item) } .sheet(isPresented: $showHighlightsView, onDismiss: onHighlightListViewDismissal) { HighlightsListView( diff --git a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift index 4905c350a..0459d5b59 100644 --- a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift +++ b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift @@ -179,6 +179,7 @@ public extension LinkedItem { newIsArchivedValue: Bool? = nil, newTitle: String? = nil, newDescription: String? = nil, + newAuthor: String? = nil, listenPositionIndex: Int? = nil, listenPositionOffset: Double? = nil, listenPositionTime: Double? = nil @@ -204,6 +205,10 @@ public extension LinkedItem { self.descriptionText = newDescription } + if let newAuthor = newAuthor { + self.author = newAuthor + } + if let listenPositionIndex = listenPositionIndex { self.listenPositionIndex = Int64(listenPositionIndex) } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateLinkedItemTitle.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateLinkedItemTitle.swift index 3f2884436..09b859c28 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateLinkedItemTitle.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateLinkedItemTitle.swift @@ -4,7 +4,7 @@ import Models import SwiftGraphQL extension DataService { - public func updateLinkedItemTitleAndDescription(itemID: String, title: String, description: String) { + public func updateLinkedItemTitleAndDescription(itemID: String, title: String, description: String, author: String?) { backgroundContext.perform { [weak self] in guard let self = self else { return } guard let linkedItem = LinkedItem.lookup(byID: itemID, inContext: self.backgroundContext) else { return } @@ -12,7 +12,8 @@ extension DataService { linkedItem.update( inContext: self.backgroundContext, newTitle: title, - newDescription: description + newDescription: description, + newAuthor: author ) // Send update to server diff --git a/apple/OmnivoreKit/Sources/Views/FeedItem/GridCard.swift b/apple/OmnivoreKit/Sources/Views/FeedItem/GridCard.swift index c30663b1b..82e1cf53a 100644 --- a/apple/OmnivoreKit/Sources/Views/FeedItem/GridCard.swift +++ b/apple/OmnivoreKit/Sources/Views/FeedItem/GridCard.swift @@ -53,7 +53,7 @@ public struct GridCard: View { } Button( action: { menuActionHandler(.editTitle) }, - label: { Label("Edit Title/Description", systemImage: "textbox") } + label: { Label("Edit Metadata", systemImage: "textbox") } ) Button( action: { menuActionHandler(.editLabels) },