Transfer link preview images from other language
This commit is contained in:
parent
a5c692cb09
commit
864dc9a544
@ -7,13 +7,26 @@ struct OptionalImagePropertyView: View {
|
||||
@Binding
|
||||
var selectedImage: FileResource?
|
||||
|
||||
let transferImage: (language: ContentLanguage, image: FileResource)?
|
||||
|
||||
let footer: LocalizedStringKey
|
||||
|
||||
@State
|
||||
private var showSelectionSheet = false
|
||||
|
||||
var body: some View {
|
||||
GenericPropertyView(title: title, footer: footer) {
|
||||
VStack(alignment: .leading) {
|
||||
HStack {
|
||||
Text(title)
|
||||
.font(.headline)
|
||||
Spacer()
|
||||
if let transferImage {
|
||||
Button("From \(transferImage.language.shortText)") {
|
||||
selectedImage = transferImage.image
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let image = selectedImage {
|
||||
image.imageToDisplay
|
||||
.resizable()
|
||||
@ -21,6 +34,7 @@ struct OptionalImagePropertyView: View {
|
||||
.frame(maxHeight: 300)
|
||||
.cornerRadius(8)
|
||||
}
|
||||
|
||||
HStack {
|
||||
Text(selectedImage?.id ?? "No file selected")
|
||||
Spacer()
|
||||
@ -28,6 +42,9 @@ struct OptionalImagePropertyView: View {
|
||||
showSelectionSheet = true
|
||||
}
|
||||
}
|
||||
Text(footer)
|
||||
.foregroundStyle(.secondary)
|
||||
.padding(.bottom)
|
||||
}
|
||||
.sheet(isPresented: $showSelectionSheet) {
|
||||
FileSelectionView(selectedFile: $selectedImage, allowedType: .image)
|
||||
|
@ -7,6 +7,8 @@ struct LinkPreviewDetailView: View {
|
||||
|
||||
let fallbackTitle: String?
|
||||
|
||||
let transferImage: (language: ContentLanguage, image: FileResource)?
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
OptionalStringPropertyView(
|
||||
@ -18,6 +20,7 @@ struct LinkPreviewDetailView: View {
|
||||
OptionalImagePropertyView(
|
||||
title: "Preview Image",
|
||||
selectedImage: $linkPreview.image,
|
||||
transferImage: transferImage,
|
||||
footer: "The image to show in a link preview")
|
||||
|
||||
OptionalTextFieldPropertyView(
|
||||
|
@ -8,6 +8,8 @@ struct LocalizedPageDetailView: View {
|
||||
@ObservedObject
|
||||
var page: LocalizedPage
|
||||
|
||||
let transferImage: (language: ContentLanguage, image: FileResource)?
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
IdPropertyView(
|
||||
@ -30,12 +32,15 @@ struct LocalizedPageDetailView: View {
|
||||
}
|
||||
}
|
||||
|
||||
LinkPreviewDetailView(linkPreview: page.linkPreview, fallbackTitle: page.title)
|
||||
LinkPreviewDetailView(
|
||||
linkPreview: page.linkPreview,
|
||||
fallbackTitle: page.title,
|
||||
transferImage: transferImage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
LocalizedPageDetailView(isExternalPage: false, page: .english)
|
||||
LocalizedPageDetailView(isExternalPage: false, page: .english, transferImage: nil)
|
||||
.environmentObject(Content.mock)
|
||||
}
|
||||
|
@ -15,6 +15,10 @@ struct PageDetailView: View {
|
||||
@State
|
||||
private var showFileSelectionSheet = false
|
||||
|
||||
private var transferImage: (language: ContentLanguage, image: FileResource)? {
|
||||
page.localized(in: language.next).linkPreview.image.map { (language.next, $0) }
|
||||
}
|
||||
|
||||
init(page: Page) {
|
||||
self.page = page
|
||||
}
|
||||
@ -113,7 +117,8 @@ struct PageDetailView: View {
|
||||
|
||||
LocalizedPageDetailView(
|
||||
isExternalPage: page.isExternalUrl,
|
||||
page: page.localized(in: language))
|
||||
page: page.localized(in: language),
|
||||
transferImage: transferImage)
|
||||
.id(page.id + language.rawValue)
|
||||
}
|
||||
.padding()
|
||||
|
@ -5,6 +5,8 @@ struct LocalizedPostDetailView: View {
|
||||
@ObservedObject
|
||||
var post: LocalizedPost
|
||||
|
||||
let transferImage: (language: ContentLanguage, image: FileResource)?
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
OptionalStringPropertyView(
|
||||
@ -12,7 +14,10 @@ struct LocalizedPostDetailView: View {
|
||||
text: $post.pageLinkText,
|
||||
footer: "The custom text to show for the link to the linked page")
|
||||
|
||||
LinkPreviewDetailView(linkPreview: post.linkPreview, fallbackTitle: post.title)
|
||||
LinkPreviewDetailView(
|
||||
linkPreview: post.linkPreview,
|
||||
fallbackTitle: post.title,
|
||||
transferImage: transferImage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +43,10 @@ struct PostDetailView: View {
|
||||
self.post = post
|
||||
}
|
||||
|
||||
private var transferImage: (language: ContentLanguage, image: FileResource)? {
|
||||
post.localized(in: language.next).linkPreview.image.map { (language.next, $0) }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading) {
|
||||
@ -87,7 +91,9 @@ struct PostDetailView: View {
|
||||
}
|
||||
}
|
||||
|
||||
LocalizedPostDetailView(post: post.localized(in: language))
|
||||
LocalizedPostDetailView(
|
||||
post: post.localized(in: language),
|
||||
transferImage: transferImage)
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
|
@ -8,6 +8,10 @@ struct TagOverviewDetailView: View {
|
||||
@EnvironmentObject
|
||||
private var content: Content
|
||||
|
||||
private var transferImage: (language: ContentLanguage, image: FileResource)? {
|
||||
content.tagOverview?.localized(in: language.next).linkPreview.image.map { (language.next, $0) }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading) {
|
||||
@ -16,7 +20,9 @@ struct TagOverviewDetailView: View {
|
||||
text: "Configure the page showing all tags")
|
||||
|
||||
if let tag = content.tagOverview?.localized(in: language) {
|
||||
LocalizedTagDetailView(tag: tag)
|
||||
LocalizedTagDetailView(
|
||||
tag: tag,
|
||||
transferImage: transferImage)
|
||||
.id(language)
|
||||
} else {
|
||||
Button("Create", action: createTagOverviewPage)
|
||||
|
@ -10,7 +10,9 @@ struct LocalizedTagDetailView: View {
|
||||
|
||||
@State
|
||||
private var showImagePicker = false
|
||||
|
||||
|
||||
let transferImage: (language: ContentLanguage, image: FileResource)?
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
StringPropertyView(
|
||||
@ -31,11 +33,14 @@ struct LocalizedTagDetailView: View {
|
||||
}
|
||||
}
|
||||
|
||||
LinkPreviewDetailView(linkPreview: tag.linkPreview, fallbackTitle: tag.name)
|
||||
LinkPreviewDetailView(
|
||||
linkPreview: tag.linkPreview,
|
||||
fallbackTitle: tag.name,
|
||||
transferImage: transferImage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
LocalizedTagDetailView(tag: Tag.mock.english)
|
||||
LocalizedTagDetailView(tag: Tag.mock.english, transferImage: nil)
|
||||
}
|
||||
|
@ -9,6 +9,10 @@ struct TagDetailView: View {
|
||||
@ObservedObject
|
||||
var tag: Tag
|
||||
|
||||
private var transferImage: (language: ContentLanguage, image: FileResource)? {
|
||||
tag.localized(in: language.next).linkPreview.image.map { (language.next, $0) }
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading) {
|
||||
@ -30,7 +34,8 @@ struct TagDetailView: View {
|
||||
}
|
||||
|
||||
LocalizedTagDetailView(
|
||||
tag: tag.localized(in: language))
|
||||
tag: tag.localized(in: language),
|
||||
transferImage: transferImage)
|
||||
.id(tag.id + language.rawValue)
|
||||
}
|
||||
.padding()
|
||||
|
Loading…
x
Reference in New Issue
Block a user