mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
52ccd56888
Прогнал форматтер на всех файлах.
87 lines
2.6 KiB
Swift
87 lines
2.6 KiB
Swift
import SwiftUI
|
|
|
|
struct UrlInputView: View {
|
|
@Environment(\.presentationMode)
|
|
var presentationMode: Binding<PresentationMode>
|
|
|
|
@AppStorage(UserPreferences.lastUrlKey)
|
|
private var urlString = ""
|
|
@AppStorage(UserPreferences.isQrScannerEnabledKey)
|
|
private var isQrScannerEnabled = UserPreferences.isQrScannerEnabledDefault
|
|
|
|
let divViewProvider: DivViewProvider
|
|
|
|
var body: some View {
|
|
let url = URL(string: urlString)
|
|
return ViewWithHeader(
|
|
"Playground",
|
|
background: ThemeColor.divKit,
|
|
presentationMode: presentationMode
|
|
) {
|
|
Text("Enter link or scan QR code to see your result")
|
|
.font(ThemeFont.text)
|
|
.foregroundColor(Color(red: 1, green: 1, blue: 1, opacity: 0.69))
|
|
.padding(EdgeInsets(top: 6, leading: 16, bottom: 26, trailing: 16))
|
|
.frame(maxWidth: .infinity, alignment: .leading)
|
|
.background(ThemeColor.divKit)
|
|
|
|
ZStack(alignment: .top) {
|
|
ThemeColor.divKit
|
|
.frame(height: ThemeSize.cornerRadius)
|
|
TextEditor(text: $urlString)
|
|
.font(ThemeFont.text)
|
|
.keyboardType(.URL)
|
|
.padding(EdgeInsets(top: 36, leading: 20, bottom: 20, trailing: 20))
|
|
.frame(maxHeight: .infinity, alignment: .top)
|
|
.background(Color.white)
|
|
.cornerRadius(ThemeSize.cornerRadius)
|
|
}
|
|
|
|
if isQrScannerEnabled {
|
|
ScannerView(result: $urlString)
|
|
.cornerRadius(ThemeSize.cornerRadius)
|
|
.frame(height: 260)
|
|
.padding(EdgeInsets(top: 0, leading: 20, bottom: 20, trailing: 20))
|
|
}
|
|
|
|
HStack(spacing: 10) {
|
|
Link(title: "load json", url: url) {
|
|
PlaygroundView(url: $0, divViewProvider: divViewProvider)
|
|
}
|
|
Link(title: "web preview", url: url) {
|
|
WebPreviewView(url: $0)
|
|
}
|
|
}
|
|
.padding(EdgeInsets(top: 0, leading: 20, bottom: 20, trailing: 20))
|
|
}
|
|
}
|
|
}
|
|
|
|
private struct Link<Destination>: View where Destination: View {
|
|
let title: String
|
|
let url: URL?
|
|
let destination: (URL) -> Destination
|
|
|
|
var body: some View {
|
|
NavigationLink(title) {
|
|
if let url = url {
|
|
destination(url)
|
|
}
|
|
}
|
|
.disabled(url == nil)
|
|
.buttonStyle(LinkStyle())
|
|
}
|
|
}
|
|
|
|
private struct LinkStyle: ButtonStyle {
|
|
func makeBody(configuration: Configuration) -> some View {
|
|
configuration.label
|
|
.font(ThemeFont.button)
|
|
.foregroundColor(.black)
|
|
.frame(maxWidth: .infinity, minHeight: 80)
|
|
.background(Color(red: 0xEB / 255, green: 0xEB / 255, blue: 0xEB / 255))
|
|
.cornerRadius(ThemeSize.cornerRadius)
|
|
.scaleEffect(configuration.isPressed ? 0.9 : 1.0)
|
|
}
|
|
}
|