Remove all from ServerPicker (#690)
This commit is contained in:
parent
0675bdb7db
commit
f510cede33
|
@ -12,7 +12,6 @@ import MastodonLocalization
|
||||||
|
|
||||||
/// Note: update Equatable when change case
|
/// Note: update Equatable when change case
|
||||||
enum CategoryPickerItem {
|
enum CategoryPickerItem {
|
||||||
case all
|
|
||||||
case language(language: String?)
|
case language(language: String?)
|
||||||
case signupSpeed(manuallyReviewed: Bool?)
|
case signupSpeed(manuallyReviewed: Bool?)
|
||||||
case category(category: Mastodon.Entity.Category)
|
case category(category: Mastodon.Entity.Category)
|
||||||
|
@ -22,8 +21,6 @@ extension CategoryPickerItem {
|
||||||
|
|
||||||
var title: String {
|
var title: String {
|
||||||
switch self {
|
switch self {
|
||||||
case .all:
|
|
||||||
return L10n.Scene.ServerPicker.Button.Category.all
|
|
||||||
case .language(let language):
|
case .language(let language):
|
||||||
if let language {
|
if let language {
|
||||||
return language
|
return language
|
||||||
|
@ -74,8 +71,6 @@ extension CategoryPickerItem {
|
||||||
|
|
||||||
var accessibilityDescription: String {
|
var accessibilityDescription: String {
|
||||||
switch self {
|
switch self {
|
||||||
case .all:
|
|
||||||
return L10n.Scene.ServerPicker.Button.Category.allAccessiblityDescription
|
|
||||||
case .language(let language):
|
case .language(let language):
|
||||||
if let language {
|
if let language {
|
||||||
return language
|
return language
|
||||||
|
@ -128,8 +123,6 @@ extension CategoryPickerItem {
|
||||||
extension CategoryPickerItem: Equatable {
|
extension CategoryPickerItem: Equatable {
|
||||||
static func == (lhs: CategoryPickerItem, rhs: CategoryPickerItem) -> Bool {
|
static func == (lhs: CategoryPickerItem, rhs: CategoryPickerItem) -> Bool {
|
||||||
switch (lhs, rhs) {
|
switch (lhs, rhs) {
|
||||||
case (.all, .all):
|
|
||||||
return true
|
|
||||||
case (.category(let categoryLeft), .category(let categoryRight)):
|
case (.category(let categoryLeft), .category(let categoryRight)):
|
||||||
return categoryLeft.category.rawValue == categoryRight.category.rawValue
|
return categoryLeft.category.rawValue == categoryRight.category.rawValue
|
||||||
case (.language(let languageLeft), .language(let languageRight)):
|
case (.language(let languageLeft), .language(let languageRight)):
|
||||||
|
@ -145,8 +138,6 @@ extension CategoryPickerItem: Equatable {
|
||||||
extension CategoryPickerItem: Hashable {
|
extension CategoryPickerItem: Hashable {
|
||||||
func hash(into hasher: inout Hasher) {
|
func hash(into hasher: inout Hasher) {
|
||||||
switch self {
|
switch self {
|
||||||
case .all:
|
|
||||||
hasher.combine(String(describing: CategoryPickerItem.all.self))
|
|
||||||
case .language(let language):
|
case .language(let language):
|
||||||
if let language {
|
if let language {
|
||||||
return hasher.combine(language)
|
return hasher.combine(language)
|
||||||
|
|
|
@ -14,6 +14,7 @@ import MastodonAsset
|
||||||
import MastodonCore
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
import MastodonSDK
|
||||||
|
|
||||||
final class MastodonPickServerViewController: UIViewController, NeedsDependency {
|
final class MastodonPickServerViewController: UIViewController, NeedsDependency {
|
||||||
|
|
||||||
|
@ -390,14 +391,17 @@ extension MastodonPickServerViewController: UITableViewDelegate {
|
||||||
// MARK: - PickServerServerSectionTableHeaderViewDelegate
|
// MARK: - PickServerServerSectionTableHeaderViewDelegate
|
||||||
extension MastodonPickServerViewController: PickServerServerSectionTableHeaderViewDelegate {
|
extension MastodonPickServerViewController: PickServerServerSectionTableHeaderViewDelegate {
|
||||||
func pickServerServerSectionTableHeaderView(_ headerView: PickServerServerSectionTableHeaderView, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
func pickServerServerSectionTableHeaderView(_ headerView: PickServerServerSectionTableHeaderView, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||||
guard let diffableDataSource = headerView.diffableDataSource else { return }
|
guard let diffableDataSource = headerView.diffableDataSource,
|
||||||
let item = diffableDataSource.itemIdentifier(for: indexPath)
|
let item = diffableDataSource.itemIdentifier(for: indexPath),
|
||||||
|
let cell = collectionView.cellForItem(at: indexPath) as? PickServerCategoryCollectionViewCell else { return }
|
||||||
|
|
||||||
if case let .language(_) = item {
|
if case let .language(_) = item {
|
||||||
// is handled by the button
|
viewModel.didPressMenuButton(in: cell)
|
||||||
} else if case let .signupSpeed(_) = item {
|
} else if case let .signupSpeed(_) = item {
|
||||||
// gets also handled by button
|
// gets also handled by button
|
||||||
|
viewModel.didPressMenuButton(in: cell)
|
||||||
} else {
|
} else {
|
||||||
viewModel.selectCategoryItem.value = item ?? .all
|
viewModel.selectCategoryItem.value = item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonSDK
|
||||||
|
|
||||||
extension MastodonPickServerViewModel {
|
extension MastodonPickServerViewModel {
|
||||||
|
|
||||||
|
@ -27,8 +28,9 @@ extension MastodonPickServerViewModel {
|
||||||
serverSectionHeaderView.delegate = pickServerServerSectionTableHeaderViewDelegate
|
serverSectionHeaderView.delegate = pickServerServerSectionTableHeaderViewDelegate
|
||||||
serverSectionHeaderView.diffableDataSource?.apply(sectionHeaderSnapshot, animatingDifferences: false) { [weak self] in
|
serverSectionHeaderView.diffableDataSource?.apply(sectionHeaderSnapshot, animatingDifferences: false) { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
guard let indexPath = self.serverSectionHeaderView.diffableDataSource?.indexPath(for: .all) else { return }
|
guard let indexPath = self.serverSectionHeaderView.diffableDataSource?.indexPath(for: .category(category: .init(category: Mastodon.Entity.Category.Kind.general.rawValue, serversCount: 0))) else { return }
|
||||||
self.serverSectionHeaderView.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredHorizontally)
|
|
||||||
|
self.serverSectionHeaderView.collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .right)
|
||||||
}
|
}
|
||||||
|
|
||||||
// set tableView
|
// set tableView
|
||||||
|
|
|
@ -20,7 +20,7 @@ import MastodonLocalization
|
||||||
class MastodonPickServerViewModel: NSObject {
|
class MastodonPickServerViewModel: NSObject {
|
||||||
|
|
||||||
enum EmptyStateViewState {
|
enum EmptyStateViewState {
|
||||||
case none
|
case none
|
||||||
case loading
|
case loading
|
||||||
case badNetwork
|
case badNetwork
|
||||||
}
|
}
|
||||||
|
@ -35,11 +35,10 @@ class MastodonPickServerViewModel: NSObject {
|
||||||
var items: [CategoryPickerItem] = []
|
var items: [CategoryPickerItem] = []
|
||||||
items.append(.language(language: nil))
|
items.append(.language(language: nil))
|
||||||
items.append(.signupSpeed(manuallyReviewed: nil))
|
items.append(.signupSpeed(manuallyReviewed: nil))
|
||||||
items.append(.all)
|
|
||||||
items.append(contentsOf: APIService.stubCategories().map { CategoryPickerItem.category(category: $0) })
|
items.append(contentsOf: APIService.stubCategories().map { CategoryPickerItem.category(category: $0) })
|
||||||
return items
|
return items
|
||||||
}()
|
}()
|
||||||
let selectCategoryItem = CurrentValueSubject<CategoryPickerItem, Never>(.all)
|
let selectCategoryItem = CurrentValueSubject<CategoryPickerItem, Never>(.category(category: Mastodon.Entity.Category(category: Mastodon.Entity.Category.Kind.general.rawValue, serversCount: 0)))
|
||||||
let searchText = CurrentValueSubject<String, Never>("")
|
let searchText = CurrentValueSubject<String, Never>("")
|
||||||
let selectedLanguage = CurrentValueSubject<String?, Never>(nil)
|
let selectedLanguage = CurrentValueSubject<String?, Never>(nil)
|
||||||
let manualApprovalRequired = CurrentValueSubject<Bool?, Never>(nil)
|
let manualApprovalRequired = CurrentValueSubject<Bool?, Never>(nil)
|
||||||
|
@ -174,8 +173,6 @@ extension MastodonPickServerViewModel {
|
||||||
|
|
||||||
// Filter the indexed servers by category or search text
|
// Filter the indexed servers by category or search text
|
||||||
switch selectCategoryItem {
|
switch selectCategoryItem {
|
||||||
case .all:
|
|
||||||
return MastodonPickServerViewModel.filterServers(servers: indexedServers, language: filters.selectedLanguage, manualApprovalRequired: filters.manualApprovalRequired, category: nil, searchText: searchText)
|
|
||||||
case .language(_), .signupSpeed(_):
|
case .language(_), .signupSpeed(_):
|
||||||
return MastodonPickServerViewModel.filterServers(servers: indexedServers, language: filters.selectedLanguage, manualApprovalRequired: filters.manualApprovalRequired, category: nil, searchText: searchText)
|
return MastodonPickServerViewModel.filterServers(servers: indexedServers, language: filters.selectedLanguage, manualApprovalRequired: filters.manualApprovalRequired, category: nil, searchText: searchText)
|
||||||
case .category(let category):
|
case .category(let category):
|
||||||
|
@ -298,7 +295,7 @@ extension MastodonPickServerViewModel: PickServerCategoryCollectionViewCellDeleg
|
||||||
guard let item = cell.item else { return }
|
guard let item = cell.item else { return }
|
||||||
|
|
||||||
switch item {
|
switch item {
|
||||||
case .all, .category(_):
|
case .category(_):
|
||||||
return
|
return
|
||||||
case .language(_):
|
case .language(_):
|
||||||
guard allLanguages.value.isNotEmpty else { return }
|
guard allLanguages.value.isNotEmpty else { return }
|
||||||
|
|
Loading…
Reference in New Issue