1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
import SwiftUI
private enum FocusFields {
case body
}
struct MessageBoardEditorView: View {
@Environment(\.controlActiveState) private var controlActiveState
@Environment(\.colorScheme) private var colorScheme
@Environment(\.dismiss) private var dismiss
@Environment(Hotline.self) private var model: Hotline
@State private var text: String = ""
@State private var sending: Bool = false
@FocusState private var focusedField: FocusFields?
func sendPost() async {
sending = true
let cleanedText = text.trimmingCharacters(in: .whitespacesAndNewlines)
model.postToMessageBoard(text: cleanedText)
let _ = await model.getMessageBoard()
// let success = await model.postNewsArticle(title: title, body: text, at: path, parentID: parentID)
// if success {
// await model.getNewsList(at: path)
// }
sending = false
}
var body: some View {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .center, spacing: 0) {
Button {
dismiss()
} label: {
Image(systemName: "xmark")
.resizable()
.scaledToFit()
.frame(width: 14, height: 14)
.opacity(0.5)
}
.buttonStyle(.plain)
.frame(width: 16, height: 16)
Spacer()
// Image("Message Board Post")
// .resizable()
// .scaledToFit()
// .frame(width: 16, height: 16)
// .padding(.trailing, 6)
Text("New Post")
.fontWeight(.semibold)
.lineLimit(1)
.truncationMode(.middle)
Spacer()
if sending {
ProgressView()
.controlSize(.small)
.frame(width: 22, height: 22)
}
else {
Button {
sending = true
model.postToMessageBoard(text: text)
Task {
let _ = await model.getMessageBoard()
Task { @MainActor in
sending = false
dismiss()
}
}
} label: {
Image(systemName: "arrow.up.circle.fill")
.resizable()
.renderingMode(.template)
.scaledToFit()
.foregroundColor(text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? .secondary : .accentColor)
}
.buttonStyle(.plain)
.frame(width: 22, height: 22)
.help("Post to Message Board")
.disabled(text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty)
}
}
.frame(maxWidth: .infinity)
.padding()
Divider()
BetterTextEditor(text: $text)
.betterEditorFont(NSFont.systemFont(ofSize: 14.0))
.betterEditorAutomaticSpellingCorrection(true)
.betterEditorTextInset(.init(width: 16, height: 18))
.lineSpacing(20)
.background(Color(nsColor: .textBackgroundColor))
.frame(maxWidth: .infinity, maxHeight: .infinity)
.focused($focusedField, equals: .body)
}
.frame(minWidth: 300, idealWidth: 450, maxWidth: .infinity, minHeight: 300, idealHeight: 500, maxHeight: .infinity)
.background(Color(nsColor: .textBackgroundColor))
.presentationCompactAdaptation(.sheet)
.onAppear {
focusedField = .body
}
.onDisappear {
dismiss()
}
}
}
|