CodeEdit/Features/InspectorArea/InternalDevelopmentInspector/InternalDevelopmentNotificationsView.swift
Rama main · réplica de lectura del repositorio original.
//
// InternalDevelopmentNotificationsView.swift
// CodeEdit
//
// Created by Austin Condiff on 2/19/24.
//
import SwiftUI
struct InternalDevelopmentNotificationsView: View {
enum IconType: String, CaseIterable {
case symbol = "Symbol"
case image = "Image"
case text = "Text"
case emoji = "Emoji"
}
@State private var delay: Bool = false
@State private var sticky: Bool = false
@State private var selectedIconType: IconType = .symbol
@State private var actionButtonText: String = "View"
@State private var notificationTitle: String = "Test Notification"
@State private var notificationDescription: String = "This is a test notification."
// Icon selection states
@State private var selectedSymbol: String?
@State private var selectedEmoji: String?
@State private var selectedText: String?
@State private var selectedImage: String?
@State private var selectedColor: Color?
private let availableSymbols = [
"bell.fill", "bell.badge.fill", "exclamationmark.triangle.fill",
"info.circle.fill", "checkmark.seal.fill", "xmark.octagon.fill",
"bubble.left.fill", "envelope.fill", "phone.fill", "megaphone.fill",
"clock.fill", "calendar", "flag.fill", "bookmark.fill", "bolt.fill",
"shield.lefthalf.fill", "gift.fill", "heart.fill", "star.fill",
"curlybraces"
]
private let availableEmojis = [
"🔔", "🚨", "⚠️", "👋", "😍", "😎", "😘", "😜", "😝", "😀", "😁",
"😂", "🤣", "😃", "😄", "😅", "😆", "😇", "😉", "😊", "😋", "😌"
]
private let availableImages = [
"GitHubIcon", "BitBucketIcon", "GitLabIcon"
]
private let availableColors: [(String, Color)] = [
("Red", .red), ("Orange", .orange), ("Yellow", .yellow),
("Green", .green), ("Mint", .mint), ("Cyan", .cyan),
("Teal", .teal), ("Blue", .blue), ("Indigo", .indigo),
("Purple", .purple), ("Pink", .pink), ("Gray", .gray)
]
var body: some View {
Section("Notifications") {
Toggle("Delay 5s", isOn: $delay)
Toggle("Sticky", isOn: $sticky)
Picker("Icon Type", selection: $selectedIconType) {
ForEach(IconType.allCases, id: \.self) { type in
Text(type.rawValue).tag(type)
}
}
Group {
switch selectedIconType {
case .symbol:
Picker("Symbol", selection: $selectedSymbol) {
Label("Random", systemImage: "dice").tag(nil as String?)
Divider()
ForEach(availableSymbols, id: \.self) { symbol in
Label(symbol, systemImage: symbol).tag(symbol as String?)
}
}
case .emoji:
Picker("Emoji", selection: $selectedEmoji) {
Label("Random", systemImage: "dice").tag(nil as String?)
Divider()
ForEach(availableEmojis, id: \.self) { emoji in
Text(emoji).tag(emoji as String?)
}
}
case .text:
Picker("Text", selection: $selectedText) {
Label("Random", systemImage: "dice").tag(nil as String?)
Divider()
ForEach("ABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) }, id: \.self) { letter in
Text(letter).tag(letter as String?)
}
}
case .image:
Picker("Image", selection: $selectedImage) {
Label("Random", systemImage: "dice").tag(nil as String?)
Divider()
ForEach(availableImages, id: \.self) { image in
Text(image).tag(image as String?)
}
}
}
if selectedIconType == .symbol || selectedIconType == .text || selectedIconType == .emoji {
Picker("Icon Color", selection: $selectedColor) {
Label("Random", systemImage: "dice").tag(nil as Color?)
Divider()
ForEach(availableColors, id: \.0) { name, color in
HStack {
Circle()
.fill(color)
.frame(width: 12, height: 12)
Text(name)
}.tag(color as Color?)
}
}
}
}
TextField("Title", text: $notificationTitle)
TextField("Description", text: $notificationDescription, axis: .vertical)
.lineLimit(1...5)
TextField("Action Button", text: $actionButtonText)
Button("Add Notification") {
let action = {
switch selectedIconType {
case .symbol:
let iconSymbol = selectedSymbol ?? availableSymbols.randomElement() ?? "bell.fill"
let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue
NotificationManager.shared.post(
iconSymbol: iconSymbol,
iconColor: iconColor,
title: notificationTitle,
description: notificationDescription,
actionButtonTitle: actionButtonText,
action: {
print("Test notification action triggered")
},
isSticky: sticky
)
case .image:
let imageName = selectedImage ?? availableImages.randomElement() ?? "GitHubIcon"
NotificationManager.shared.post(
iconImage: Image(imageName),
title: notificationTitle,
description: notificationDescription,
actionButtonTitle: actionButtonText,
action: {
print("Test notification action triggered")
},
isSticky: sticky
)
case .text:
let text = selectedText ?? randomLetter()
let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue
NotificationManager.shared.post(
iconText: text,
iconTextColor: .white,
iconColor: iconColor,
title: notificationTitle,
description: notificationDescription,
actionButtonTitle: actionButtonText,
action: {
print("Test notification action triggered")
},
isSticky: sticky
)
case .emoji:
let emoji = selectedEmoji ?? availableEmojis.randomElement() ?? "🔔"
let iconColor = selectedColor ?? availableColors.randomElement()?.1 ?? .blue
NotificationManager.shared.post(
iconText: emoji,
iconTextColor: .white,
iconColor: iconColor,
title: notificationTitle,
description: notificationDescription,
actionButtonTitle: actionButtonText,
action: {
print("Test notification action triggered")
},
isSticky: sticky
)
}
}
if delay {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
action()
}
} else {
action()
}
}
}
}
private func randomLetter() -> String {
let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) }
return letters.randomElement() ?? "A"
}
}