montana/Русский/Сайт/MontanaApp/Montana/Sources/Views/SettingsView.swift

118 lines
4.5 KiB
Swift
Raw Permalink 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 SettingsView: View {
@EnvironmentObject var appState: AppState
@State private var showLogoutAlert = false
var body: some View {
NavigationView {
List {
// Account Section
Section {
HStack(spacing: 14) {
Text("Ɉ")
.font(.title)
.foregroundColor(Color("Background"))
.frame(width: 56, height: 56)
.background(
LinearGradient(
colors: [Color("Gold"), Color(hex: "FFA500")],
startPoint: .topLeading,
endPoint: .bottomTrailing
)
)
.clipShape(Circle())
VStack(alignment: .leading, spacing: 4) {
Text(appState.user?.phone ?? "")
.font(.headline)
Text("Номер телефона")
.font(.caption)
.foregroundColor(.secondary)
}
}
.padding(.vertical, 8)
}
.listRowBackground(Color("Card"))
// Stats Section
Section("Статистика") {
HStack {
Label("Баланс", systemImage: "creditcard")
Spacer()
Text("\(appState.balance.formatted()) Ɉ")
.foregroundColor(Color("Gold"))
}
HStack {
Label("Присутствие сегодня", systemImage: "clock")
Spacer()
Text(formatTime(appState.presenceSeconds))
.foregroundColor(Color("Success"))
}
HStack {
Label("Контактов", systemImage: "person.2")
Spacer()
Text("\(appState.contacts.count)")
.foregroundColor(.secondary)
}
}
.listRowBackground(Color("Card"))
// About Section
Section("О приложении") {
HStack {
Label("Montana Protocol", systemImage: "sun.max.fill")
Spacer()
Text("v1.0.0")
.foregroundColor(.secondary)
}
Link(destination: URL(string: "https://t.me/junomontanaagibot")!) {
HStack {
Label("Telegram бот", systemImage: "paperplane.fill")
Spacer()
Text("@junomontanaagibot")
.foregroundColor(.secondary)
Image(systemName: "chevron.right")
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.listRowBackground(Color("Card"))
// Logout Section
Section {
Button(action: { showLogoutAlert = true }) {
HStack {
Spacer()
Text("Выйти")
.foregroundColor(.red)
Spacer()
}
}
}
.listRowBackground(Color("Card"))
}
.scrollContentBackground(.hidden)
.background(Color("Background").ignoresSafeArea())
.navigationTitle("Настройки")
.alert("Выйти из аккаунта?", isPresented: $showLogoutAlert) {
Button("Отмена", role: .cancel) {}
Button("Выйти", role: .destructive) {
appState.logout()
}
}
}
}
private func formatTime(_ seconds: Int) -> String {
let h = seconds / 3600
let m = (seconds % 3600) / 60
let s = seconds % 60
return String(format: "%02d:%02d:%02d", h, m, s)
}
}