86 lines
1.5 KiB
Swift
86 lines
1.5 KiB
Swift
import Foundation
|
|
|
|
final class Post: ObservableObject {
|
|
|
|
@Published
|
|
var id: String
|
|
|
|
@Published
|
|
var isDraft: Bool
|
|
|
|
@Published
|
|
var createdDate: Date
|
|
|
|
@Published
|
|
var startDate: Date
|
|
|
|
@Published
|
|
var hasEndDate: Bool
|
|
|
|
@Published
|
|
var endDate: Date
|
|
|
|
@Published
|
|
var tags: [Tag]
|
|
|
|
@Published
|
|
var german: LocalizedPost
|
|
|
|
@Published
|
|
var english: LocalizedPost
|
|
|
|
/// The page linked to by this post
|
|
@Published
|
|
var linkedPage: Page?
|
|
|
|
init(id: String,
|
|
isDraft: Bool,
|
|
createdDate: Date,
|
|
startDate: Date,
|
|
endDate: Date?,
|
|
tags: [Tag],
|
|
german: LocalizedPost,
|
|
english: LocalizedPost,
|
|
linkedPage: Page? = nil) {
|
|
self.id = id
|
|
self.isDraft = isDraft
|
|
self.createdDate = createdDate
|
|
self.startDate = startDate
|
|
self.hasEndDate = endDate != nil
|
|
self.endDate = endDate ?? startDate
|
|
self.tags = tags
|
|
self.german = german
|
|
self.english = english
|
|
self.linkedPage = linkedPage
|
|
}
|
|
|
|
func localized(in language: ContentLanguage) -> LocalizedPost {
|
|
switch language {
|
|
case .english: return english
|
|
case .german: return german
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Post: Identifiable {
|
|
|
|
}
|
|
|
|
extension Post: Equatable {
|
|
|
|
static func == (lhs: Post, rhs: Post) -> Bool {
|
|
lhs.id == rhs.id
|
|
}
|
|
}
|
|
|
|
extension Post: Hashable {
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
}
|
|
}
|
|
|
|
extension Post: DateItem {
|
|
|
|
}
|