blob: a5f6fd2d4d75059c0b9799106ae55d51fe4d1f17 (
plain)
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
|
import SwiftUI
fileprivate let CHARACTER_LIMIT: Int = 255
struct BroadcastMessageView: View {
@Environment(HotlineState.self) private var model: HotlineState
@Environment(\.dismiss) private var dismiss
@State private var sending: Bool = false
private var message: String {
self.model.broadcastMessage.trimmingCharacters(in: .whitespacesAndNewlines)
}
var body: some View {
@Bindable var model = self.model
VStack {
TextField("Write a message...", text: $model.broadcastMessage, axis: .vertical)
.textFieldStyle(.plain)
.lineLimit(5, reservesSpace: true)
}
.padding(.leading, 32)
.padding(.top, 2)
.overlay(alignment: .topLeading) {
Image("Server Message")
}
.padding(16)
.frame(width: 400)
.toolbar {
if self.sending {
ToolbarItem {
ProgressView()
.controlSize(.small)
}
}
ToolbarItem(placement: .cancellationAction) {
Button("Cancel") {
self.dismiss()
}
}
ToolbarItem(placement: .confirmationAction) {
Button("Broadcast") {
let message = self.message
model.broadcastMessage = ""
guard !message.isBlank else {
return
}
Task {
self.sending = true
defer { self.sending = false }
try await model.sendBroadcast(message)
self.dismiss()
}
}
.disabled(self.message.isEmpty)
}
}
}
}
|