119 lines
4.8 KiB
Swift
119 lines
4.8 KiB
Swift
import SwiftUI
|
||
|
||
struct FeedbackTab: View {
|
||
@State private var suggestion: String = ""
|
||
@State private var submittedSuggestion: String? = nil
|
||
@State private var isSubmitting: Bool = false
|
||
@State private var showSubmissionMessage: Bool = false
|
||
|
||
var body: some View {
|
||
ScrollView {
|
||
VStack(alignment: .leading, spacing: 20) {
|
||
Text(NSLocalizedString("Какая вкладка вам нужна?", comment: ""))
|
||
.font(.title2)
|
||
.fontWeight(.semibold)
|
||
|
||
Text(NSLocalizedString(
|
||
"Мы планируем заменить вкладку. Поделитесь, что бы вы хотели видеть здесь чаще всего.",
|
||
comment: ""
|
||
))
|
||
.foregroundColor(.secondary)
|
||
|
||
VStack(alignment: .leading, spacing: 12) {
|
||
Text(NSLocalizedString("Ваше предложение", comment: ""))
|
||
.font(.headline)
|
||
|
||
TextEditor(text: $suggestion)
|
||
.frame(minHeight: 120)
|
||
.padding(12)
|
||
.background(
|
||
RoundedRectangle(cornerRadius: 12)
|
||
.fill(Color(.systemGray6))
|
||
)
|
||
.overlay(
|
||
RoundedRectangle(cornerRadius: 12)
|
||
.stroke(Color(.systemGray4))
|
||
)
|
||
.overlay(
|
||
Group {
|
||
if suggestion.isEmpty {
|
||
Text(NSLocalizedString("Например: закладки, друзья, активность...", comment: ""))
|
||
.foregroundColor(.secondary)
|
||
.padding(18)
|
||
.allowsHitTesting(false)
|
||
}
|
||
}
|
||
)
|
||
.disableAutocorrection(true)
|
||
}
|
||
|
||
Button(action: submitSuggestion) {
|
||
HStack {
|
||
if isSubmitting {
|
||
ProgressView()
|
||
.progressViewStyle(CircularProgressViewStyle())
|
||
}
|
||
Text(isSubmitting
|
||
? NSLocalizedString("Отправляем...", comment: "")
|
||
: NSLocalizedString("Отправить предложение", comment: ""))
|
||
.fontWeight(.semibold)
|
||
}
|
||
.frame(maxWidth: .infinity)
|
||
.padding()
|
||
.background(suggestionIsValid ? Color.accentColor : Color(.systemGray4))
|
||
.foregroundColor(.white)
|
||
.cornerRadius(14)
|
||
}
|
||
.disabled(!suggestionIsValid || isSubmitting)
|
||
|
||
if let submittedSuggestion, showSubmissionMessage {
|
||
VStack(alignment: .leading, spacing: 8) {
|
||
Text(NSLocalizedString("Спасибо!", comment: ""))
|
||
.font(.headline)
|
||
Text(String(format: NSLocalizedString("Вы предложили: %@", comment: ""), submittedSuggestion))
|
||
.foregroundColor(.secondary)
|
||
}
|
||
.transition(.opacity)
|
||
}
|
||
|
||
Spacer(minLength: 24)
|
||
|
||
// Text(NSLocalizedString(
|
||
// "Позже мы добавим отправку на сервер, чтобы собрать статистику, и расскажем о результатах в обновлениях.",
|
||
// comment: ""
|
||
// ))
|
||
// .font(.footnote)
|
||
// .foregroundColor(.secondary)
|
||
}
|
||
.padding(.horizontal, 20)
|
||
.padding(.vertical, 32)
|
||
}
|
||
}
|
||
|
||
private var suggestionIsValid: Bool {
|
||
!suggestion.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|
||
}
|
||
|
||
private func submitSuggestion() {
|
||
guard suggestionIsValid else { return }
|
||
let trimmed = suggestion.trimmingCharacters(in: .whitespacesAndNewlines)
|
||
|
||
isSubmitting = true
|
||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.7) { // имитируем сетевой вызов
|
||
submittedSuggestion = trimmed
|
||
suggestion = ""
|
||
withAnimation {
|
||
showSubmissionMessage = true
|
||
}
|
||
isSubmitting = false
|
||
}
|
||
}
|
||
}
|
||
|
||
struct FeedbackTab_Previews: PreviewProvider {
|
||
static var previews: some View {
|
||
FeedbackTab()
|
||
.environmentObject(ThemeManager())
|
||
}
|
||
}
|