Skip to content

Commit b7800ca

Browse files
committed
Introduces a basic ShareLink implementation
1 parent e05c689 commit b7800ca

8 files changed

Lines changed: 264 additions & 171 deletions

File tree

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
1-
import SwiftUI
2-
3-
@available(iOS, deprecated: 16)
4-
@available(macOS, deprecated: 13)
5-
@available(watchOS, deprecated: 9)
6-
@available(tvOS, unavailable)
7-
public extension Backport.ShareLink where Wrapped == Any {
8-
init<S: StringProtocol>(_ title: S, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
9-
where Data.Element: BackportTransferable, Label == DefaultShareLinkLabel
10-
{
11-
self.label = .init(title)
12-
self.data = items
13-
self.subject = subject
14-
self.message = message
15-
self.preview = preview
16-
}
17-
18-
init(_ titleKey: LocalizedStringKey, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
19-
where Data.Element: BackportTransferable, Label == DefaultShareLinkLabel
20-
{
21-
self.label = .init(titleKey)
22-
self.data = items
23-
self.subject = subject
24-
self.message = message
25-
self.preview = preview
26-
}
27-
28-
init(_ title: Text, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
29-
where Data.Element: BackportTransferable, Label == DefaultShareLinkLabel
30-
{
31-
self.label = .init(title)
32-
self.data = items
33-
self.subject = subject
34-
self.message = message
35-
self.preview = preview
36-
}
37-
}
1+
//import SwiftUI
2+
//
3+
//@available(iOS, deprecated: 16)
4+
//@available(macOS, deprecated: 13)
5+
//@available(watchOS, deprecated: 9)
6+
//@available(tvOS, unavailable)
7+
//public extension Backport.ShareLink where Wrapped == Any {
8+
// init<S: StringProtocol>(_ title: S, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
9+
// where Data.Element: Shareable, Label == DefaultShareLinkLabel
10+
// {
11+
// self.label = .init(title)
12+
// self.data = items
13+
// self.subject = subject
14+
// self.message = message
15+
// self.preview = preview
16+
// }
17+
//
18+
// init(_ titleKey: LocalizedStringKey, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
19+
// where Data.Element: Shareable, Label == DefaultShareLinkLabel
20+
// {
21+
// self.label = .init(titleKey)
22+
// self.data = items
23+
// self.subject = subject
24+
// self.message = message
25+
// self.preview = preview
26+
// }
27+
//
28+
// init(_ title: Text, items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
29+
// where Data.Element: Shareable, Label == DefaultShareLinkLabel
30+
// {
31+
// self.label = .init(title)
32+
// self.data = items
33+
// self.subject = subject
34+
// self.message = message
35+
// self.preview = preview
36+
// }
37+
//}
Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
import SwiftUI
2-
3-
@available(iOS, deprecated: 16)
4-
@available(macOS, deprecated: 13)
5-
@available(watchOS, deprecated: 9)
6-
@available(tvOS, unavailable)
7-
public extension Backport.ShareLink where Wrapped == Any {
8-
init(items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
9-
where Data.Element: BackportTransferable, Label == DefaultShareLinkLabel {
10-
self.label = .init()
11-
self.data = items
12-
self.subject = subject
13-
self.message = message
14-
self.preview = preview
15-
}
16-
17-
init(items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>, @ViewBuilder label: () -> Label)
18-
where Data.Element: BackportTransferable {
19-
self.label = label()
20-
self.data = items
21-
self.subject = subject
22-
self.message = message
23-
self.preview = preview
24-
}
25-
}
1+
//import SwiftUI
2+
//
3+
//@available(iOS, deprecated: 16)
4+
//@available(macOS, deprecated: 13)
5+
//@available(watchOS, deprecated: 9)
6+
//@available(tvOS, unavailable)
7+
//public extension Backport.ShareLink where Wrapped == Any {
8+
// init(items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>)
9+
// where Data.Element: Shareable, Label == DefaultShareLinkLabel {
10+
// self.label = .init()
11+
// self.data = items
12+
// self.subject = subject
13+
// self.message = message
14+
// self.preview = preview
15+
// }
16+
//
17+
// init(items: Data, subject: String? = nil, message: String? = nil, preview: @escaping (Data.Element) -> SharePreview<PreviewImage, PreviewIcon>, @ViewBuilder label: () -> Label)
18+
// where Data.Element: Shareable {
19+
// self.label = label()
20+
// self.data = items
21+
// self.subject = subject
22+
// self.message = message
23+
// self.preview = preview
24+
// }
25+
//}

Sources/SwiftUIBackports/Shared/ShareLink/ShareLink.swift

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import LinkPresentation
66
@available(watchOS, deprecated: 9)
77
@available(tvOS, unavailable)
88
public extension Backport where Wrapped == Any {
9-
struct ShareLink<Data, PreviewImage, PreviewIcon, Label>: View where Data: RandomAccessCollection, Data.Element: BackportTransferable, Label: View {
9+
struct ShareLink<Data, PreviewImage, PreviewIcon, Label>: View where Data: RandomAccessCollection, Data.Element: Shareable, Label: View {
1010
@State private var activity: ActivityItem<Data>?
1111

1212
let label: Label
@@ -17,7 +17,7 @@ public extension Backport where Wrapped == Any {
1717

1818
public var body: some View {
1919
Button {
20-
20+
activity = ActivityItem(data: data)
2121
} label: {
2222
label
2323
}
@@ -26,42 +26,42 @@ public extension Backport where Wrapped == Any {
2626
}
2727
}
2828

29-
final class TransferableActivityProvider<Data, Image: View, Icon: View>: UIActivityItemProvider where Data: BackportTransferable {
30-
let title: String?
31-
let subject: String?
32-
let message: String?
33-
let image: Image?
34-
let icon: Icon?
35-
let data: Data
36-
37-
init(data: Data, title: String?, subject: String?, message: String?, image: Image?, icon: Icon?) {
38-
self.title = title
39-
self.subject = subject
40-
self.message = message
41-
self.image = image
42-
self.icon = icon
43-
self.data = data
44-
45-
let url = URL(fileURLWithPath: NSTemporaryDirectory())
46-
.appendingPathComponent("tmp")
47-
.appendingPathExtension(data.pathExtension)
48-
49-
super.init(placeholderItem: url)
50-
}
51-
52-
override var item: Any {
53-
data.itemProvider as Any
54-
}
55-
56-
override func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
57-
let metadata = LPLinkMetadata()
58-
metadata.title = title
59-
// let icon = ImageRenderer(content: activity.icon)
60-
// metadata.iconProvider = NSItemProvider(object: UIImage())
61-
// metadata.imageProvider = NSItemProvider(object: UIImage())
62-
return metadata
63-
}
64-
65-
override func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String { subject ?? "" }
66-
67-
}
29+
//final class TransferableActivityProvider<Data: Shareable, Image: View, Icon: View>: UIActivityItemProvider {
30+
// let title: String?
31+
// let subject: String?
32+
// let message: String?
33+
// let image: Image?
34+
// let icon: Icon?
35+
// let data: Data
36+
//
37+
// init(data: Data, title: String?, subject: String?, message: String?, image: Image?, icon: Icon?) {
38+
// self.title = title
39+
// self.subject = subject
40+
// self.message = message
41+
// self.image = image
42+
// self.icon = icon
43+
// self.data = data
44+
//
45+
// let url = URL(fileURLWithPath: NSTemporaryDirectory())
46+
// .appendingPathComponent("tmp")
47+
// .appendingPathExtension(data.pathExtension)
48+
//
49+
// super.init(placeholderItem: url)
50+
// }
51+
//
52+
// override var item: Any {
53+
// data.itemProvider as Any
54+
// }
55+
//
56+
// override func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
57+
// let metadata = LPLinkMetadata()
58+
// metadata.title = title
59+
//// let icon = ImageRenderer(content: activity.icon)
60+
//// metadata.iconProvider = NSItemProvider(object: UIImage())
61+
//// metadata.imageProvider = NSItemProvider(object: UIImage())
62+
// return metadata
63+
// }
64+
//
65+
// override func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String { subject ?? "" }
66+
//
67+
//}

Sources/SwiftUIBackports/Shared/ShareLink/ShareSheet.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import SwiftUI
22

33
extension View {
44
@ViewBuilder
5-
func shareSheet<Data>(item activityItems: Binding<ActivityItem<Data>?>) -> some View where Data: RandomAccessCollection, Data.Element: BackportTransferable {
5+
func shareSheet<Data>(item activityItems: Binding<ActivityItem<Data>?>) -> some View where Data: RandomAccessCollection, Data.Element: Shareable {
66
#if os(macOS)
77
background(ShareSheet(item: activityItems))
88
#elseif os(iOS)
@@ -13,7 +13,7 @@ extension View {
1313

1414
#if os(macOS)
1515

16-
private struct ShareSheet: NSViewRepresentable where Data: RandomAccessCollection, Data.Element: BackportTransferable {
16+
private struct ShareSheet: NSViewRepresentable where Data: RandomAccessCollection, Data.Element: Shareable {
1717
@Binding var item: ActivityItem<Data>?
1818

1919
public func makeNSView(context: Context) -> SourceView {
@@ -86,7 +86,7 @@ private struct ShareSheet: NSViewRepresentable where Data: RandomAccessCollectio
8686

8787
#elseif os(iOS)
8888

89-
private struct ShareSheet<Data>: UIViewControllerRepresentable where Data: RandomAccessCollection, Data.Element: BackportTransferable {
89+
private struct ShareSheet<Data>: UIViewControllerRepresentable where Data: RandomAccessCollection, Data.Element: Shareable {
9090
@Binding var item: ActivityItem<Data>?
9191

9292
init(item: Binding<ActivityItem<Data>?>) {
Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
1-
import SwiftUI
2-
3-
@available(iOS, deprecated: 16)
4-
@available(macOS, deprecated: 13)
5-
@available(watchOS, deprecated: 9)
6-
@available(tvOS, unavailable)
7-
public extension Backport.ShareLink where Wrapped == Any {
8-
init<S: StringProtocol, I: BackportTransferable>(_ title: S, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
9-
where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
10-
self.label = .init(title)
11-
self.data = .init(item)
12-
self.subject = subject
13-
self.message = message
14-
self.preview = { _ in preview }
15-
}
16-
17-
init<I: BackportTransferable>(_ titleKey: LocalizedStringKey, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
18-
where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
19-
self.label = .init(titleKey)
20-
self.data = .init(item)
21-
self.subject = subject
22-
self.message = message
23-
self.preview = { _ in preview }
24-
}
25-
26-
init<I: BackportTransferable>(_ title: Text, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
27-
where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
28-
self.label = .init(title)
29-
self.data = .init(item)
30-
self.subject = subject
31-
self.message = message
32-
self.preview = { _ in preview }
33-
}
34-
}
1+
//import SwiftUI
2+
//
3+
//@available(iOS, deprecated: 16)
4+
//@available(macOS, deprecated: 13)
5+
//@available(watchOS, deprecated: 9)
6+
//@available(tvOS, unavailable)
7+
//public extension Backport.ShareLink where Wrapped == Any {
8+
// init<S: StringProtocol, I: Shareable>(_ title: S, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
9+
// where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
10+
// self.label = .init(title)
11+
// self.data = .init(item)
12+
// self.subject = subject
13+
// self.message = message
14+
// self.preview = { _ in preview }
15+
// }
16+
//
17+
// init<I: Shareable>(_ titleKey: LocalizedStringKey, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
18+
// where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
19+
// self.label = .init(titleKey)
20+
// self.data = .init(item)
21+
// self.subject = subject
22+
// self.message = message
23+
// self.preview = { _ in preview }
24+
// }
25+
//
26+
// init<I: Shareable>(_ title: Text, item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
27+
// where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
28+
// self.label = .init(title)
29+
// self.data = .init(item)
30+
// self.subject = subject
31+
// self.message = message
32+
// self.preview = { _ in preview }
33+
// }
34+
//}
Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
import SwiftUI
2-
3-
@available(iOS, deprecated: 16)
4-
@available(macOS, deprecated: 13)
5-
@available(watchOS, deprecated: 9)
6-
@available(tvOS, unavailable)
7-
public extension Backport.ShareLink where Wrapped == Any {
8-
init<I: BackportTransferable>(item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
9-
where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
10-
self.label = .init()
11-
self.data = .init(item)
12-
self.subject = subject
13-
self.message = message
14-
self.preview = { _ in preview }
15-
}
16-
17-
init<I: BackportTransferable>(item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>, @ViewBuilder label: () -> Label)
18-
where Data == CollectionOfOne<I> {
19-
self.label = label()
20-
self.data = .init(item)
21-
self.subject = subject
22-
self.message = message
23-
self.preview = { _ in preview }
24-
}
25-
}
1+
//import SwiftUI
2+
//
3+
//@available(iOS, deprecated: 16)
4+
//@available(macOS, deprecated: 13)
5+
//@available(watchOS, deprecated: 9)
6+
//@available(tvOS, unavailable)
7+
//public extension Backport.ShareLink where Wrapped == Any {
8+
// init<I: Shareable>(item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>)
9+
// where Data == CollectionOfOne<I>, Label == DefaultShareLinkLabel {
10+
// self.label = .init()
11+
// self.data = .init(item)
12+
// self.subject = subject
13+
// self.message = message
14+
// self.preview = { _ in preview }
15+
// }
16+
//
17+
// init<I: Shareable>(item: I, subject: String? = nil, message: String? = nil, preview: SharePreview<PreviewImage, PreviewIcon>, @ViewBuilder label: () -> Label)
18+
// where Data == CollectionOfOne<I> {
19+
// self.label = label()
20+
// self.data = .init(item)
21+
// self.subject = subject
22+
// self.message = message
23+
// self.preview = { _ in preview }
24+
// }
25+
//}

0 commit comments

Comments
 (0)