import Foundation final class NavigationSettings: ObservableObject { /// The items to show in the navigation bar @Published var navigationItems: [Item] @Published var german: LocalizedNavigationSettings @Published var english: LocalizedNavigationSettings init(navigationItems: [Item], german: LocalizedNavigationSettings, english: LocalizedNavigationSettings) { self.navigationItems = navigationItems self.german = german self.english = english } init(file: NavigationSettingsFile, tags: [String : Tag], pages: [String : Page], files: [String : FileResource], posts: [String : Post], tagOverview: TagOverviewPage?) { #warning("Notify about missing links") self.navigationItems = file.navigationItems.compactMap { raw in guard let type = ItemType(rawValue: raw, posts: posts, pages: pages, tags: tags) else { return nil } switch type { case .general: return nil case .post(let post): return post case .feed: return nil // TODO: Provide feed object case .page(let page): return page case .tagPage(let tag): return tag case .tagOverview: return tagOverview } } self.german = LocalizedNavigationSettings(file: file.german) self.english = LocalizedNavigationSettings(file: file.english) } var file: NavigationSettingsFile { .init( navigationItems: navigationItems.map { $0.itemType.id }, german: german.file, english: english.file) } } extension NavigationSettings: LocalizedItem { } extension NavigationSettings { static var `default`: NavigationSettings { .init(navigationItems: [], german: .default, english: .default) } }