@@ -729,6 +729,8 @@ struct FilePreviewView: View {
729
729
@State private var fileNameText = " "
730
730
@State private var fileToRename : DFFile ? = nil
731
731
732
+ @State private var showingShareSheet = false
733
+
732
734
var body : some View {
733
735
ZStack {
734
736
if redirectURLs [ file. raw] == nil {
@@ -881,8 +883,7 @@ struct FilePreviewView: View {
881
883
. menuStyle ( . button)
882
884
883
885
Button ( action: {
884
- ShareSheet . present ( items: [ URL ( string: file. url) ?? " " ] )
885
-
886
+ showingShareSheet = true
886
887
} ) {
887
888
Image ( systemName: " square.and.arrow.up " )
888
889
. font ( . system( size: 20 ) )
@@ -891,6 +892,12 @@ struct FilePreviewView: View {
891
892
}
892
893
. buttonStyle ( . borderless)
893
894
. padding ( . leading, 1 )
895
+ . sheet ( isPresented: $showingShareSheet) {
896
+ if let url = URL ( string: file. url) {
897
+ ShareSheet ( url: url)
898
+ . presentationDetents ( [ . medium] )
899
+ }
900
+ }
894
901
Spacer ( )
895
902
}
896
903
. background ( . ultraThinMaterial)
@@ -902,26 +909,6 @@ struct FilePreviewView: View {
902
909
}
903
910
}
904
911
905
- struct ShareSheet {
906
- static func present( items: [ Any ] ) {
907
- guard let rootVC = UIApplication . shared. connectedScenes
908
- . compactMap ( { ( $0 as? UIWindowScene ) ? . keyWindow } )
909
- . first? . rootViewController else {
910
- return
911
- }
912
-
913
- let activityVC = UIActivityViewController ( activityItems: items, applicationActivities: nil )
914
-
915
- // Find the topmost presented view controller
916
- var topVC = rootVC
917
- while let presented = topVC. presentedViewController {
918
- topVC = presented
919
- }
920
-
921
- topVC. present ( activityVC, animated: true )
922
- }
923
- }
924
-
925
912
@MainActor
926
913
private func loadRedirectURL( for file: DFFile ) async {
927
914
guard redirectURLs [ file. raw] == nil ,
@@ -1162,4 +1149,24 @@ struct PDFView: UIViewRepresentable {
1162
1149
}
1163
1150
}
1164
1151
1152
+ struct ShareSheet : View {
1153
+ let url : URL
1154
+ @Environment ( \. dismiss) private var dismiss
1155
+
1156
+ var body : some View {
1157
+ ActivityViewController ( activityItems: [ url] )
1158
+ }
1159
+ }
1160
+
1161
+ struct ActivityViewController : UIViewControllerRepresentable {
1162
+ let activityItems : [ Any ]
1163
+
1164
+ func makeUIViewController( context: Context ) -> UIActivityViewController {
1165
+ let controller = UIActivityViewController ( activityItems: activityItems, applicationActivities: nil )
1166
+ return controller
1167
+ }
1168
+
1169
+ func updateUIViewController( _ uiViewController: UIActivityViewController , context: Context ) { }
1170
+ }
1171
+
1165
1172
0 commit comments