// // 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) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI import Stinsen import SwiftUI final class AdminDashboardCoordinator: NavigationCoordinatable { let stack = NavigationStack(initial: \AdminDashboardCoordinator.start) @Root var start = makeStart // MARK: - Route: User Activity @Route(.push) var activity = makeActivityLogs @Route(.push) var activityDetails = makeActivityDetails // MARK: - Route: Active Sessions @Route(.push) var activeSessions = makeActiveSessions @Route(.push) var activeDeviceDetails = makeActiveDeviceDetails // MARK: - Route: Devices @Route(.push) var devices = makeDevices @Route(.push) var deviceDetails = makeDeviceDetails // MARK: - Route: Server Tasks @Route(.push) var tasks = makeTasks @Route(.push) var editServerTask = makeEditServerTask @Route(.modal) var addServerTaskTrigger = makeAddServerTaskTrigger // MARK: - Route: Server Logs @Route(.push) var serverLogs = makeServerLogs // MARK: - Route: Users @Route(.push) var users = makeUsers @Route(.push) var userDetails = makeUserDetails @Route(.modal) var addServerUser = makeAddServerUser // MARK: - Route: User Policy @Route(.modal) var userDeviceAccess = makeUserDeviceAccess @Route(.modal) var userMediaAccess = makeUserMediaAccess @Route(.modal) var userLiveTVAccess = makeUserLiveTVAccess @Route(.modal) var userPermissions = makeUserPermissions @Route(.push) var quickConnectAuthorize = makeQuickConnectAuthorize @Route(.modal) var userParentalRatings = makeUserParentalRatings @Route(.modal) var resetUserPassword = makeResetUserPassword @Route(.push) var userEditAccessSchedules = makeUserEditAccessSchedules @Route(.modal) var userAddAccessSchedule = makeUserAddAccessSchedule @Route(.push) var userEditAccessTags = makeUserEditAccessTags @Route(.modal) var userAddAccessTag = makeUserAddAccessTag @Route(.modal) var userPhotoPicker = makeUserPhotoPicker // MARK: - Route: API Keys @Route(.push) var apiKeys = makeAPIKeys // MARK: - Views: User Activity @ViewBuilder func makeActivityLogs() -> some View { ServerActivityView() } @ViewBuilder func makeActivityDetails(viewModel: ServerActivityDetailViewModel) -> some View { ServerActivityDetailsView(viewModel: viewModel) } // MARK: - Views: Active Sessions @ViewBuilder func makeActiveSessions() -> some View { ActiveSessionsView() } @ViewBuilder func makeActiveDeviceDetails(box: BindingBox) -> some View { ActiveSessionDetailView(box: box) } // MARK: - Views: Server Tasks @ViewBuilder func makeTasks() -> some View { ServerTasksView() } @ViewBuilder func makeEditServerTask(observer: ServerTaskObserver) -> some View { EditServerTaskView(observer: observer) } func makeAddServerTaskTrigger(observer: ServerTaskObserver) -> NavigationViewCoordinator { NavigationViewCoordinator { AddTaskTriggerView(observer: observer) } } // MARK: - Views: Devices @ViewBuilder func makeDevices() -> some View { DevicesView() } @ViewBuilder func makeDeviceDetails(device: DeviceInfoDto) -> some View { DeviceDetailsView(device: device) } // MARK: - Views: Server Logs @ViewBuilder func makeServerLogs() -> some View { ServerLogsView() } // MARK: - Views: Users @ViewBuilder func makeUsers() -> some View { ServerUsersView() } @ViewBuilder func makeUserDetails(user: UserDto) -> some View { ServerUserDetailsView(user: user) } func makeUserPhotoPicker(viewModel: UserProfileImageViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator(UserProfileImageCoordinator(viewModel: viewModel)) } func makeAddServerUser() -> NavigationViewCoordinator { NavigationViewCoordinator { AddServerUserView() } } // MARK: - Views: User Policy func makeUserDeviceAccess(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { ServerUserDeviceAccessView(viewModel: viewModel) } } func makeUserMediaAccess(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { ServerUserMediaAccessView(viewModel: viewModel) } } func makeUserLiveTVAccess(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { ServerUserLiveTVAccessView(viewModel: viewModel) } } func makeUserPermissions(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { ServerUserPermissionsView(viewModel: viewModel) } } @ViewBuilder func makeUserEditAccessSchedules(viewModel: ServerUserAdminViewModel) -> some View { EditAccessScheduleView(viewModel: viewModel) } @ViewBuilder func makeUserEditAccessTags(viewModel: ServerUserAdminViewModel) -> some View { EditServerUserAccessTagsView(viewModel: viewModel) } func makeUserAddAccessTag(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { AddServerUserAccessTagsView(viewModel: viewModel) } } func makeUserAddAccessSchedule(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { AddAccessScheduleView(viewModel: viewModel) } } func makeUserParentalRatings(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { ServerUserParentalRatingView(viewModel: viewModel) } } func makeResetUserPassword(userID: String) -> NavigationViewCoordinator { NavigationViewCoordinator { ResetUserPasswordView(userID: userID, requiresCurrentPassword: false) } } @ViewBuilder func makeQuickConnectAuthorize(user: UserDto) -> some View { QuickConnectAuthorizeView(user: user) } // MARK: - Views: API Keys @ViewBuilder func makeAPIKeys() -> some View { APIKeysView() } // MARK: - Views: Dashboard @ViewBuilder func makeStart() -> some View { AdminDashboardView() } }