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