diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuCell.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuCell.swift index 2447ae918..d7a3d1fe0 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuCell.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuCell.swift @@ -17,5 +17,5 @@ import Foundation protocol SpaceMenuCell: Themable { - func fill(with viewData: SpaceMenuListItemViewData) + func update(with viewData: SpaceMenuListItemViewData) } diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListItemViewData.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListItemViewData.swift index 18a1f29bd..bae8bf13f 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListItemViewData.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListItemViewData.swift @@ -16,6 +16,14 @@ import Foundation +/// Possible action ID related to a `SpaceMenuListViewCell` view data +enum SpaceMenuListItemActionId { + case showAllRoomsInHomeSpace + case exploreSpaceMembers + case exploreSpaceRooms + case leaveSpace +} + /// Style of the `SpaceMenuListViewCell` enum SpaceMenuListItemStyle { case normal @@ -30,11 +38,11 @@ protocol SpaceMenuListItemViewDataDelegate: AnyObject { /// `SpaceMenuListViewCell` view data class SpaceMenuListItemViewData { - let actionId: String + let actionId: SpaceMenuListItemActionId let style: SpaceMenuListItemStyle let title: String? let icon: UIImage? - + /// Any value related to the type of data (e.g. `Bool` for `boolean` style, `nil` for `normal` and `destructive` style) var value: Any? { didSet { delegate?.spaceMenuItemValueDidChange(self) @@ -42,7 +50,7 @@ class SpaceMenuListItemViewData { } weak var delegate: SpaceMenuListItemViewDataDelegate? - init(actionId: String, style: SpaceMenuListItemStyle, title: String?, icon: UIImage?, value: Any?) { + init(actionId: SpaceMenuListItemActionId, style: SpaceMenuListItemStyle, title: String?, icon: UIImage?, value: Any?) { self.actionId = actionId self.style = style self.title = title diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListViewCell.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListViewCell.swift index 86bfe8805..bc8243a9a 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListViewCell.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuListViewCell.swift @@ -49,7 +49,7 @@ class SpaceMenuListViewCell: UITableViewCell, SpaceMenuCell, NibReusable { // MARK: - Public - func fill(with viewData: SpaceMenuListItemViewData) { + func update(with viewData: SpaceMenuListItemViewData) { self.iconView.image = viewData.icon self.titleLabel.text = viewData.title diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuPresenter.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuPresenter.swift index 697c65b43..dfc755675 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuPresenter.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuPresenter.swift @@ -101,13 +101,12 @@ extension SpaceMenuPresenter: SpaceMenuModelViewModelCoordinatorDelegate { self.dismiss(animated: true, completion: nil) } - func spaceMenuViewModel(_ viewModel: SpaceMenuViewModelType, didSelectItemWithId itemId: String) { - let actionId = SpaceMenuViewModel.ActionId(rawValue: itemId) - switch actionId { - case .leave: break - case .members: + func spaceMenuViewModel(_ viewModel: SpaceMenuViewModelType, didSelectItemWithId itemId: SpaceMenuListItemActionId) { + switch itemId { + case .leaveSpace: break + case .exploreSpaceMembers: self.delegate?.spaceMenuPresenter(self, didCompleteWith: .exploreMembers, forSpaceWithId: self.spaceId, with: self.session) - case .rooms: + case .exploreSpaceRooms: self.delegate?.spaceMenuPresenter(self, didCompleteWith: .exploreRooms, forSpaceWithId: self.spaceId, with: self.session) default: MXLog.error("[SpaceMenuPresenter] spaceListViewModel didSelectItemWithId: invalid itemId \(itemId)") diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuSwitchViewCell.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuSwitchViewCell.swift index 3887f668f..2d50e9df1 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuSwitchViewCell.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuSwitchViewCell.swift @@ -49,20 +49,10 @@ class SpaceMenuSwitchViewCell: UITableViewCell, SpaceMenuCell, NibReusable { // MARK: - Public - func fill(with viewData: SpaceMenuListItemViewData) { + func update(with viewData: SpaceMenuListItemViewData) { self.titleLabel.text = viewData.title self.switchView.isOn = (viewData.value as? Bool) ?? false - guard let theme = self.theme else { - return - } - - if viewData.style == .destructive { - self.titleLabel.textColor = theme.colors.alert - } else { - self.titleLabel.textColor = theme.colors.primaryContent - } - viewData.delegate = self } diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewController.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewController.swift index 83ab85bdf..32bc9a76f 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewController.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewController.swift @@ -253,7 +253,7 @@ extension SpaceMenuViewController: UITableViewDataSource { if let cell = cell as? SpaceMenuCell { cell.update(theme: self.theme) - cell.fill(with: viewData) + cell.update(with: viewData) } return cell diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModel.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModel.swift index 4d14eed4d..1150ff155 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModel.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModel.swift @@ -19,24 +19,15 @@ import Foundation /// View model used by `SpaceMenuViewController` class SpaceMenuViewModel: SpaceMenuViewModelType { - // MARK: - Enum - - enum ActionId: String { - case showAllRoomsInHome = "showAllRoomsInHome" - case members = "members" - case rooms = "rooms" - case leave = "leave" - } - // MARK: - Properties weak var coordinatorDelegate: SpaceMenuModelViewModelCoordinatorDelegate? weak var viewDelegate: SpaceMenuViewModelViewDelegate? private let spaceMenuItems: [SpaceMenuListItemViewData] = [ - SpaceMenuListItemViewData(actionId: ActionId.members.rawValue, style: .normal, title: VectorL10n.roomDetailsPeople, icon: Asset.Images.spaceMenuMembers.image, value: nil), - SpaceMenuListItemViewData(actionId: ActionId.rooms.rawValue, style: .normal, title: VectorL10n.spacesExploreRooms, icon: Asset.Images.spaceMenuRooms.image, value: nil), - SpaceMenuListItemViewData(actionId: ActionId.leave.rawValue, style: .destructive, title: VectorL10n.leave, icon: Asset.Images.spaceMenuLeave.image, value: nil) + SpaceMenuListItemViewData(actionId: .exploreSpaceMembers, style: .normal, title: VectorL10n.roomDetailsPeople, icon: Asset.Images.spaceMenuMembers.image, value: nil), + SpaceMenuListItemViewData(actionId: .exploreSpaceRooms, style: .normal, title: VectorL10n.spacesExploreRooms, icon: Asset.Images.spaceMenuRooms.image, value: nil), + SpaceMenuListItemViewData(actionId: .leaveSpace, style: .destructive, title: VectorL10n.leave, icon: Asset.Images.spaceMenuLeave.image, value: nil) ] var menuItems: [SpaceMenuListItemViewData] = [] @@ -54,7 +45,7 @@ class SpaceMenuViewModel: SpaceMenuViewModelType { self.menuItems = spaceMenuItems } else { self.menuItems = [ - SpaceMenuListItemViewData(actionId: ActionId.showAllRoomsInHome.rawValue, style: .boolean, title: VectorL10n.spaceHomeShowAllRooms, icon: nil, value: MXKAppSettings.standard().isShowAllRoomsInHomeEnabled) + SpaceMenuListItemViewData(actionId: .showAllRoomsInHomeSpace, style: .boolean, title: VectorL10n.spaceHomeShowAllRooms, icon: nil, value: MXKAppSettings.standard().showAllRoomsInHomeSpace) ] } } @@ -76,17 +67,16 @@ class SpaceMenuViewModel: SpaceMenuViewModelType { // MARK: - Private - private func processAction(with actionStringId: String, at indexPath: IndexPath) { - let actionId = ActionId(rawValue: actionStringId) + private func processAction(with actionId: SpaceMenuListItemActionId, at indexPath: IndexPath) { switch actionId { - case .showAllRoomsInHome: - MXKAppSettings.standard().isShowAllRoomsInHomeEnabled = !MXKAppSettings.standard().isShowAllRoomsInHomeEnabled - self.menuItems[indexPath.row].value = MXKAppSettings.standard().isShowAllRoomsInHomeEnabled + case .showAllRoomsInHomeSpace: + MXKAppSettings.standard().showAllRoomsInHomeSpace = !MXKAppSettings.standard().showAllRoomsInHomeSpace + self.menuItems[indexPath.row].value = MXKAppSettings.standard().showAllRoomsInHomeSpace self.viewDelegate?.spaceMenuViewModel(self, didUpdateViewState: .deselect) - case .leave: + case .leaveSpace: self.leaveSpace() default: - self.coordinatorDelegate?.spaceMenuViewModel(self, didSelectItemWithId: actionStringId) + self.coordinatorDelegate?.spaceMenuViewModel(self, didSelectItemWithId: actionId) } } diff --git a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModelType.swift b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModelType.swift index edaef39b3..dd55ebb26 100644 --- a/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModelType.swift +++ b/Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModelType.swift @@ -22,7 +22,7 @@ protocol SpaceMenuViewModelViewDelegate: AnyObject { protocol SpaceMenuModelViewModelCoordinatorDelegate: AnyObject { func spaceMenuViewModelDidDismiss(_ viewModel: SpaceMenuViewModelType) - func spaceMenuViewModel(_ viewModel: SpaceMenuViewModelType, didSelectItemWithId itemId: String) + func spaceMenuViewModel(_ viewModel: SpaceMenuViewModelType, didSelectItemWithId itemId: SpaceMenuListItemActionId) } /// Protocol describing the view model used by `SpaceMenuViewController`