LiTranslate-iOS/LiTranslate/Presentation/Component/Languages/LanguagesListView.swift
Viktor 5ac00486dc
release v1.1 (#1)
Now speech synthesizer works in silent mode.
Fixing iOS 16 compatibility:
- Speech syntesizer
- Colors
2022-10-24 20:52:38 +03:00

90 lines
3.2 KiB
Swift

//
// LanguagesListView.swift
// LiTranslate
//
// Created by Viktor Kalyniuk on 23.08.2022.
//
import SwiftUI
struct LanguagesListView: View {
@EnvironmentObject private var languages: LanguagesSelection
@EnvironmentObject private var recentlyUsedLanguages: RecentlyUsedLanguages
@Environment(\.dismiss) var dismissView
@State private var searchText: String = ""
@State private var languagesArray: [Languages] = Languages.allCases
@State private var listID: Int = Numbers.one
var textMethod: TextMethod
var body: some View {
List {
Section() {
SearchBarView(inputText: $searchText)
.listRowBackground(Colors.Background.primaryView)
}
if !recentlyUsedLanguages.array.isEmpty && searchText.isEmpty {
Section("Recently Used") {
ForEach(recentlyUsedLanguages.array) { language in
LanguageView(language: language, flagBorderColor: Colors.Background.primaryView)
.onTapGesture {
switch textMethod {
case .input:
languages.input = language
case .output:
languages.output = language
}
dismissView()
}
}
.listRowBackground(Colors.Background.primaryView)
}
.textCase(nil)
}
Section("All Languages") {
ForEach(languagesArray, id: \.self) { language in
LanguageView(language: language,
flagBorderColor: Colors.Background.primaryView)
.onTapGesture {
switch textMethod {
case .input:
languages.input = language
case .output:
languages.output = language
}
recentlyUsedLanguages.append(language: language)
dismissView()
}
}
.listRowBackground(Colors.Background.primaryView)
.onChange(of: searchText) { _ in
if searchText.isEmpty {
languagesArray = Languages.allCases
} else {
languagesArray = Languages.allCases.filter {
$0.getCountryName().contains(searchText)
}
}
}
}
.textCase(nil)
}
.modifier(ScrollContentBackgroundModifier())
.id(listID)
.background(Colors.Background.mainView)
.navigationBarTitleDisplayMode(.inline)
.onDisappear {
listID += Numbers.one
}
}
}
struct LanguagesListView_Previews: PreviewProvider {
static var previews: some View {
LanguagesListView(textMethod: .input)
.environmentObject(LanguagesSelection())
.environmentObject(RecentlyUsedLanguages())
}
}