From 9af98c39211b0647535b11738dcb50c87f626965 Mon Sep 17 00:00:00 2001 From: fwcd <30873659+fwcd@users.noreply.github.com> Date: Mon, 29 Jul 2024 07:56:22 +0200 Subject: [PATCH] Add context menu and draggability to attachment image views (#2142) * Factor out MediaUIShareLink * Add share link to attachment image view * Make attachment image views draggable * Add copy actions to attachment image view --- .../MediaUI/MediaUIAttachmentImageView.swift | 17 +++++++++++++++++ .../Sources/MediaUI/MediaUIShareLink.swift | 16 ++++++++++++++++ .../Sources/MediaUI/ShareToolbarItem.swift | 8 +------- 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 Packages/MediaUI/Sources/MediaUI/MediaUIShareLink.swift diff --git a/Packages/MediaUI/Sources/MediaUI/MediaUIAttachmentImageView.swift b/Packages/MediaUI/Sources/MediaUI/MediaUIAttachmentImageView.swift index e29f1aaf..cc5f9921 100644 --- a/Packages/MediaUI/Sources/MediaUI/MediaUIAttachmentImageView.swift +++ b/Packages/MediaUI/Sources/MediaUI/MediaUIAttachmentImageView.swift @@ -22,6 +22,23 @@ struct MediaUIAttachmentImageView: View { .progressViewStyle(.circular) } } + .draggable(MediaUIImageTransferable(url: url)) + .contextMenu { + MediaUIShareLink(url: url, type: .image) + Button { + Task { + let transferable = MediaUIImageTransferable(url: url) + UIPasteboard.general.image = UIImage(data: await transferable.fetchData()) + } + } label: { + Label("status.media.contextmenu.copy", systemImage: "doc.on.doc") + } + Button { + UIPasteboard.general.url = url + } label: { + Label("status.action.copy-link", systemImage: "link") + } + } } } } diff --git a/Packages/MediaUI/Sources/MediaUI/MediaUIShareLink.swift b/Packages/MediaUI/Sources/MediaUI/MediaUIShareLink.swift new file mode 100644 index 00000000..54e0e1f6 --- /dev/null +++ b/Packages/MediaUI/Sources/MediaUI/MediaUIShareLink.swift @@ -0,0 +1,16 @@ +import SwiftUI + +struct MediaUIShareLink: View, @unchecked Sendable { + let url: URL + let type: DisplayType + + var body: some View { + if type == .image { + let transferable = MediaUIImageTransferable(url: url) + ShareLink(item: transferable, preview: .init("status.media.contextmenu.share", + image: transferable)) + } else { + ShareLink(item: url) + } + } +} diff --git a/Packages/MediaUI/Sources/MediaUI/ShareToolbarItem.swift b/Packages/MediaUI/Sources/MediaUI/ShareToolbarItem.swift index eab146fd..dd29973f 100644 --- a/Packages/MediaUI/Sources/MediaUI/ShareToolbarItem.swift +++ b/Packages/MediaUI/Sources/MediaUI/ShareToolbarItem.swift @@ -6,13 +6,7 @@ struct ShareToolbarItem: ToolbarContent, @unchecked Sendable { var body: some ToolbarContent { ToolbarItem(placement: .topBarTrailing) { - if type == .image { - let transferable = MediaUIImageTransferable(url: url) - ShareLink(item: transferable, preview: .init("status.media.contextmenu.share", - image: transferable)) - } else { - ShareLink(item: url) - } + MediaUIShareLink(url: url, type: type) } } }