ChWebsiteApp/CHDataManagement/Model/LocalizedTag.swift
2025-01-05 17:18:23 +01:00

69 lines
1.7 KiB
Swift

import Foundation
final class LocalizedTag: ObservableObject {
unowned let content: Content
@Published
var urlComponent: String
/// A custom name, different from the tag id
@Published
var name: String
@Published
var linkPreviewTitle: String?
@Published
var linkPreviewDescription: String?
/// The image id of the thumbnail
@Published
var linkPreviewImage: FileResource?
/// The original url in the previous site layout
let originalUrl: String?
init(content: Content,
urlComponent: String,
name: String,
linkPreviewTitle: String? = nil,
linkPreviewDescription: String? = nil,
linkPreviewImage: FileResource? = nil,
originalUrl: String? = nil) {
self.content = content
self.urlComponent = urlComponent
self.name = name
self.linkPreviewTitle = linkPreviewTitle
self.linkPreviewDescription = linkPreviewDescription
self.linkPreviewImage = linkPreviewImage
self.originalUrl = originalUrl
}
func isValid(urlComponent: String) -> Bool {
content.isValidIdForTagOrPageOrPost(urlComponent) &&
!content.containsTag(withUrlComponent: urlComponent)
}
/// The title to display when considering multiple items of this tag
var title: String {
linkPreviewTitle ?? name
}
}
extension LocalizedTag: LinkPreviewItem {
}
extension LocalizedTag {
var tagFile: LocalizedTagFile {
.init(urlComponent: urlComponent,
name: name,
linkPreviewTitle: linkPreviewTitle,
linkPreviewDescription: linkPreviewDescription,
linkPreviewImage: linkPreviewImage?.id,
originalURL: originalUrl)
}
}