ChWebsiteApp/CHDataManagement/Model/Settings/NavigationSettings.swift
2025-01-02 11:56:51 +01:00

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)
}
}