62 lines
1.7 KiB
Swift
62 lines
1.7 KiB
Swift
import SwiftUI
|
|
|
|
struct PagePickerView: View {
|
|
|
|
@Binding var showPagePicker: Bool
|
|
|
|
@Binding var selectedPage: Page?
|
|
|
|
@EnvironmentObject
|
|
private var content: Content
|
|
|
|
@Environment(\.language)
|
|
private var language
|
|
|
|
@State
|
|
private var newSelection: Page?
|
|
|
|
init(showPagePicker: Binding<Bool>, selectedPage: Binding<Page?>) {
|
|
self._showPagePicker = showPagePicker
|
|
self._selectedPage = selectedPage
|
|
self.newSelection = selectedPage.wrappedValue
|
|
// TODO: Fix assignment not working
|
|
}
|
|
|
|
var body: some View {
|
|
VStack {
|
|
Text("Select a page to link to")
|
|
List(content.pages, selection: $newSelection) { page in
|
|
let loc = page.localized(in: language)
|
|
Text("\(loc.title) (\(page.id))")
|
|
.tag(page)
|
|
}
|
|
.frame(minHeight: 300)
|
|
HStack {
|
|
Button("Use selection") {
|
|
DispatchQueue.main.async {
|
|
self.selectedPage = self.newSelection
|
|
}
|
|
showPagePicker = false
|
|
}
|
|
Button("Remove page", role: .destructive) {
|
|
DispatchQueue.main.async {
|
|
self.selectedPage = nil
|
|
}
|
|
showPagePicker = false
|
|
}
|
|
Button("Cancel", role: .cancel) {
|
|
showPagePicker = false
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("Pick a page")
|
|
.padding()
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
PagePickerView(showPagePicker: .constant(true),
|
|
selectedPage: .constant(nil))
|
|
.environmentObject(Content.mock)
|
|
}
|