ShowDirectory: Update view model and handle direct input of room id alias even non public.

This commit is contained in:
SBiOSoftWhare
2021-06-11 18:10:13 +02:00
parent 87b2940fc6
commit 4e3634185f
7 changed files with 291 additions and 71 deletions
@@ -62,6 +62,8 @@ final class ShowDirectoryViewController: UIViewController {
bar.delegate = self
return bar
}()
private var sections: [ShowDirectorySection] = []
// MARK: - Setup
@@ -171,10 +173,12 @@ final class ShowDirectoryViewController: UIViewController {
switch viewState {
case .loading:
self.renderLoading()
case .loaded:
self.renderLoaded()
case .loaded(let sections):
self.renderLoaded(sections: sections)
case .error(let error):
self.render(error: error)
case .loadedWithoutUpdate:
self.renderLoadedWithoutUpdate()
}
}
@@ -182,14 +186,22 @@ final class ShowDirectoryViewController: UIViewController {
addSpinnerFooterView()
}
private func renderLoaded() {
private func renderLoaded(sections: [ShowDirectorySection]) {
removeSpinnerFooterView()
self.sections = sections
self.mainTableView.reloadData()
}
private func renderLoadedWithoutUpdate() {
removeSpinnerFooterView()
}
private func render(error: Error) {
removeSpinnerFooterView()
self.errorPresenter.presentError(from: self, forError: error, animated: true, handler: nil)
self.errorPresenter.presentError(from: self, forError: error, animated: true) {
// If the join failed, reload the table view
self.mainTableView.reloadData()
}
}
// MARK: - Actions
@@ -209,17 +221,37 @@ final class ShowDirectoryViewController: UIViewController {
extension ShowDirectoryViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
return self.sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewModel.roomsCount
let directorySection = self.sections[section]
switch directorySection {
case .searchInput:
return 1
case.publicRoomsDirectory(let viewModel):
return viewModel.roomsCount
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let section = self.sections[indexPath.section]
let cellViewModel: DirectoryRoomTableViewCellVM?
switch section {
case .searchInput(let searchInputViewData):
cellViewModel = searchInputViewData
case.publicRoomsDirectory(let viewModel):
cellViewModel = viewModel.roomViewModel(at: indexPath.row)
}
let cell: DirectoryRoomTableViewCell = tableView.dequeueReusableCell(for: indexPath)
if let viewModel = viewModel.roomViewModel(at: indexPath) {
cell.configure(withViewModel: viewModel)
if let cellViewModel = cellViewModel {
cell.configure(withViewModel: cellViewModel)
}
cell.indexPath = indexPath
cell.delegate = self
@@ -255,16 +287,28 @@ extension ShowDirectoryViewController: UITableViewDelegate {
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard let view: DirectoryNetworkTableHeaderFooterView = tableView.dequeueReusableHeaderFooterView() else {
return nil
let sectionHeaderView: UIView?
let directorySection = self.sections[section]
switch directorySection {
case .searchInput:
sectionHeaderView = nil
case .publicRoomsDirectory(let viewModel):
guard let view: DirectoryNetworkTableHeaderFooterView = tableView.dequeueReusableHeaderFooterView() else {
return nil
}
if let name = viewModel.directoryServerDisplayname {
let title = VectorL10n.searchableDirectoryXNetwork(name)
view.configure(withViewModel: DirectoryNetworkVM(title: title))
}
view.update(theme: self.theme)
view.delegate = self
sectionHeaderView = view
}
if let name = self.viewModel.directoryServerDisplayname {
let title = VectorL10n.searchableDirectoryXNetwork(name)
view.configure(withViewModel: DirectoryNetworkVM(title: title))
}
view.update(theme: self.theme)
view.delegate = self
return view
return sectionHeaderView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
@@ -311,8 +355,4 @@ extension ShowDirectoryViewController: ShowDirectoryViewModelViewDelegate {
func showDirectoryViewModel(_ viewModel: ShowDirectoryViewModelType, didUpdateViewState viewSate: ShowDirectoryViewState) {
self.render(viewState: viewSate)
}
func showDirectoryViewModelDidUpdateDataSource(_ viewModel: ShowDirectoryViewModelType) {
self.mainTableView.reloadData()
}
}