72 lines
2.0 KiB
Swift
72 lines
2.0 KiB
Swift
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)
|
|
}
|
|
}
|