57 lines
1.4 KiB
Swift
57 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
final class NavigationSettings: ObservableObject, LocalizedItem {
|
|
|
|
/// 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
|
|
}
|
|
}
|
|
|
|
// MARK: Storage
|
|
|
|
extension NavigationSettings {
|
|
|
|
convenience init(context: LoadingContext, data: NavigationSettings.Data) {
|
|
self.init(
|
|
navigationItems: data.navigationItems.compactMap(context.item),
|
|
german: LocalizedNavigationSettings(data: data.german),
|
|
english: LocalizedNavigationSettings(data: data.english))
|
|
}
|
|
|
|
struct Data: Codable, Equatable {
|
|
let navigationItems: [ItemId]
|
|
let german: LocalizedNavigationSettings.Data
|
|
let english: LocalizedNavigationSettings.Data
|
|
}
|
|
|
|
var data: Data {
|
|
.init(
|
|
navigationItems: navigationItems.map { $0.itemId },
|
|
german: german.data,
|
|
english: english.data)
|
|
}
|
|
}
|
|
|
|
extension NavigationSettings {
|
|
|
|
static var `default`: NavigationSettings {
|
|
.init(navigationItems: [],
|
|
german: .default,
|
|
english: .default)
|
|
}
|
|
}
|