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