aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/BroadcastMessageSheet.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
commit213710bf5bd6413c747bf126db50816ef5de5a6e (patch)
tree912f8cf87955a08077c92fea8ad934f50b7ab975 /Hotline/macOS/BroadcastMessageSheet.swift
parentf466b21dc02f78c984ba6748e703f6780a7a0db4 (diff)
parent6a95b53616a4abfa306ddce43151cf4fefbd20ed (diff)
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'Hotline/macOS/BroadcastMessageSheet.swift')
-rw-r--r--Hotline/macOS/BroadcastMessageSheet.swift66
1 files changed, 66 insertions, 0 deletions
diff --git a/Hotline/macOS/BroadcastMessageSheet.swift b/Hotline/macOS/BroadcastMessageSheet.swift
new file mode 100644
index 0000000..b3bd7ea
--- /dev/null
+++ b/Hotline/macOS/BroadcastMessageSheet.swift
@@ -0,0 +1,66 @@
+import SwiftUI
+
+fileprivate let CHARACTER_LIMIT: Int = 255
+
+struct BroadcastMessageSheet: 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)
+ }
+ }
+ }
+}