jellyflood/Swiftfin/Views/AdminDashboardView/EditServerTaskView/Components/Sections/TriggersSection.swift

66 lines
2.2 KiB
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//
import JellyfinAPI
import SwiftUI
extension EditServerTaskView {
struct TriggersSection: View {
@EnvironmentObject
private var router: AdminDashboardCoordinator.Router
@ObservedObject
var observer: ServerTaskObserver
@State
private var isPresentingDeleteConfirmation: Bool = false
@State
private var selectedTrigger: TaskTriggerInfo?
var body: some View {
Section(L10n.triggers) {
if let triggers = observer.task.triggers, triggers.isNotEmpty {
ForEach(triggers, id: \.self) { trigger in
TriggerRow(taskTriggerInfo: trigger)
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
Button {
selectedTrigger = trigger
isPresentingDeleteConfirmation = true
} label: {
Label(L10n.delete, systemImage: "trash")
}
.tint(.red)
}
}
} else {
Button(L10n.addTrigger) {
router.route(to: \.addServerTaskTrigger, observer)
}
}
}
.confirmationDialog(
L10n.deleteTrigger,
isPresented: $isPresentingDeleteConfirmation,
titleVisibility: .visible
) {
Button(L10n.cancel, role: .cancel) {}
Button(L10n.delete, role: .destructive) {
if let selectedTrigger {
observer.send(.removeTrigger(selectedTrigger))
}
}
} message: {
Text(L10n.deleteTriggerConfirmationMessage)
}
}
}
}