ios_app_v2/yobble/Views/Tab/FeedbackTab.swift
2025-10-06 04:03:21 +03:00

119 lines
4.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())
}
}