@@ -9,39 +9,81 @@ import SwiftUI
9
9
10
10
struct SharingLinksSettingsView : View {
11
11
@Setting ( \. linkSharingMode) var linkSharingMode
12
-
12
+ @Setting ( \. showSettingsIcons) var showSettingsIcons
13
+
13
14
var body : some View {
14
15
Form {
15
- Section ( " Share links using... " ) {
16
- Picker ( " Share links using... " , selection: $linkSharingMode) {
17
- ForEach ( LinkSharingMode . allCases, id: \. self) { mode in
18
- Label ( String ( localized: mode. label) , systemImage: mode. systemImage)
19
- }
20
- }
21
- . labelsHidden ( )
22
- . pickerStyle ( . inline)
23
- }
16
+ SettingsHeaderView (
17
+ title: " Share Links " ,
18
+ // swiftlint:disable:next line_length
19
+ description: " In the Fediverse, many different links can point to the same piece of content. Choose which site to use when sharing content. " ,
20
+ systemImage: Icons . share
21
+ )
22
+ . tint ( . themedColorfulAccent( 3 ) )
23
+
24
+ pickerItemView (
25
+ mode: . myInstance,
26
+ title: " My Instance " ,
27
+ description: " Share links using the instance you are currently connected to. " ,
28
+ systemImage: Icons . instance
29
+ )
30
+
31
+ pickerItemView (
32
+ mode: . originalInstance,
33
+ title: " Original Instance " ,
34
+ description: " Share links using the instance that the content originated from. " ,
35
+ systemImage: " signature "
36
+ )
37
+
38
+ pickerItemView (
39
+ mode: . lemmyverse,
40
+ title: " Universal Link " ,
41
+ description: " Share links using \( " https://lemmyverse.link " ) . When someone opens the link, they can choose which instance to use. " ,
42
+ systemImage: " globe "
43
+ )
44
+ pickerItemView (
45
+ mode: . askEveryTime,
46
+ title: " Ask Every Time " ,
47
+ description: " Every time I share a link, show a popup asking which instance to use. " ,
48
+ systemImage: " questionmark.circle "
49
+ )
24
50
}
51
+ . contentMargins ( . top, 16 )
25
52
. labelStyle ( . conditional)
53
+ . animation ( . easeInOut( duration: 0.1 ) , value: linkSharingMode)
26
54
}
27
- }
28
-
29
- enum LinkSharingMode : String , Codable , CaseIterable {
30
- case myInstance, originalInstance, askEveryTime
31
55
32
- var label : LocalizedStringResource {
33
- switch self {
34
- case . myInstance: " My Instance "
35
- case . originalInstance: " Original Instance "
36
- case . askEveryTime: " Ask Every Time "
56
+ @ViewBuilder
57
+ func pickerItemView(
58
+ mode: LinkSharingMode ,
59
+ title: LocalizedStringResource ,
60
+ description: LocalizedStringResource ,
61
+ systemImage: String
62
+ ) -> some View {
63
+ HStack ( alignment: . top) {
64
+ if showSettingsIcons {
65
+ Image ( systemName: systemImage)
66
+ . foregroundStyle ( . themedAccent)
67
+ . frame ( width: 30 )
68
+ . padding ( . top, 2 )
69
+ }
70
+ VStack ( alignment: . leading) {
71
+ Text ( title)
72
+ Text ( description)
73
+ . font ( . footnote)
74
+ . foregroundStyle ( . themedSecondary)
75
+ }
76
+ . frame ( maxWidth: . infinity, alignment: . leading)
77
+ Checkbox ( isOn: linkSharingMode == mode)
37
78
}
38
- }
39
-
40
- var systemImage : String {
41
- switch self {
42
- case . myInstance: Icons . instance
43
- case . originalInstance: " signature "
44
- case . askEveryTime: " questionmark.circle "
79
+ . contentShape ( . rect)
80
+ . onTapGesture {
81
+ linkSharingMode = mode
45
82
}
83
+ . listRowInsets ( . init( top: 10 , leading: showSettingsIcons ? 10 : 16 , bottom: 10 , trailing: 16 ) )
46
84
}
47
85
}
86
+
87
+ enum LinkSharingMode : String , Codable , CaseIterable {
88
+ case myInstance, originalInstance, lemmyverse, askEveryTime
89
+ }
0 commit comments