add ideas
This commit is contained in:
		
							parent
							
								
									200b0172eb
								
							
						
					
					
						commit
						21dd8f01af
					
				@ -79,6 +79,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Безопасность" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Ваше предложение" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Войти" : {
 | 
			
		||||
      "localizations" : {
 | 
			
		||||
@ -89,6 +92,9 @@
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "Вы предложили: %@" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Выйти из аккаунта" : {
 | 
			
		||||
 | 
			
		||||
@ -185,6 +191,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Здесь не будут чаты" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Идеи" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Инвайт-код (необязательно)" : {
 | 
			
		||||
      "comment" : "Инвайт-код",
 | 
			
		||||
@ -213,6 +222,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Как связаться с поддержкой?" : {
 | 
			
		||||
      "comment" : "FAQ question: support"
 | 
			
		||||
    },
 | 
			
		||||
    "Какая вкладка вам нужна?" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Корзина" : {
 | 
			
		||||
      "comment" : "Cart",
 | 
			
		||||
@ -302,9 +314,15 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Мой профиль" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Мы планируем заменить вкладку. Поделитесь, что бы вы хотели видеть здесь чаще всего." : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Напишите нам через форму обратной связи в разделе \"Поддержка\"." : {
 | 
			
		||||
      "comment" : "FAQ answer: support"
 | 
			
		||||
    },
 | 
			
		||||
    "Например: закладки, друзья, активность..." : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Настройки" : {
 | 
			
		||||
      "comment" : "Settings",
 | 
			
		||||
@ -361,6 +379,12 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Отображаемое имя" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Отправить предложение" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Отправляем..." : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Ошибка авторизации" : {
 | 
			
		||||
 | 
			
		||||
@ -394,9 +418,6 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Подтверждение пароля" : {
 | 
			
		||||
      "comment" : "Подтверждение пароля"
 | 
			
		||||
    },
 | 
			
		||||
    "Поиск" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Помощь" : {
 | 
			
		||||
      "comment" : "Help Center",
 | 
			
		||||
@ -470,6 +491,9 @@
 | 
			
		||||
    },
 | 
			
		||||
    "Сменить пароль" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Спасибо!" : {
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    "Тёмная тема" : {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ struct CustomTabBar: View {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Tab 2: Search
 | 
			
		||||
            TabBarButton(systemName: "magnifyingglass", text: NSLocalizedString("Поиск", comment: ""), isSelected: selectedTab == 1) {
 | 
			
		||||
            TabBarButton(systemName: "lightbulb", text: NSLocalizedString("Идеи", comment: ""), isSelected: selectedTab == 1) {
 | 
			
		||||
                selectedTab = 1
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										118
									
								
								yobble/Views/Tab/FeedbackTab.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								yobble/Views/Tab/FeedbackTab.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,118 @@
 | 
			
		||||
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())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -17,7 +17,7 @@ struct MainView: View {
 | 
			
		||||
    private var tabTitle: String {
 | 
			
		||||
        switch selectedTab {
 | 
			
		||||
        case 0: return "Home"
 | 
			
		||||
        case 1: return "Search"
 | 
			
		||||
        case 1: return "Ideas"
 | 
			
		||||
        case 2: return "Chats"
 | 
			
		||||
        case 3: return "Profile"
 | 
			
		||||
        default: return "Home"
 | 
			
		||||
@ -45,7 +45,7 @@ struct MainView: View {
 | 
			
		||||
                        NewHomeTab()
 | 
			
		||||
                            .opacity(selectedTab == 0 ? 1 : 0)
 | 
			
		||||
                        
 | 
			
		||||
                        SearchTab()
 | 
			
		||||
                        FeedbackTab()
 | 
			
		||||
                            .opacity(selectedTab == 1 ? 1 : 0)
 | 
			
		||||
                        
 | 
			
		||||
                        ChatsTab()
 | 
			
		||||
 | 
			
		||||
@ -1,14 +0,0 @@
 | 
			
		||||
import SwiftUI
 | 
			
		||||
 | 
			
		||||
struct SearchTab: View {
 | 
			
		||||
    
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        VStack {
 | 
			
		||||
            Text("Здесь не будут чаты")
 | 
			
		||||
                .font(.title)
 | 
			
		||||
                .foregroundColor(.gray)
 | 
			
		||||
            
 | 
			
		||||
            Spacer()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user