Skip to content

Commit 909222e

Browse files
committed
Add "Invite people" to the space menu in the left panel and update menu order #5810
- done
1 parent 1ddae2b commit 909222e

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

Riot/Modules/SideMenu/SideMenuCoordinator.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,36 @@ final class SideMenuCoordinator: NSObject, SideMenuCoordinatorType {
320320
self.spaceSettingsCoordinator = coordinator
321321
}
322322

323+
func showSpaceInvite(spaceId: String, session: MXSession) {
324+
guard let space = session.spaceService.getSpace(withId: spaceId), let spaceRoom = space.room else {
325+
MXLog.error("[SideMenuCoordinator] showSpaceInvite: failed to find space with id \(spaceId)")
326+
return
327+
}
328+
329+
spaceRoom.state { [weak self] roomState in
330+
guard let self = self else { return }
331+
332+
guard let powerLevels = roomState?.powerLevels, let userId = session.myUserId else {
333+
MXLog.error("[SpaceMembersCoordinator] spaceMemberListCoordinatorShowInvite: failed to find powerLevels for room")
334+
return
335+
}
336+
let userPowerLevel = powerLevels.powerLevelOfUser(withUserID: userId)
337+
338+
guard userPowerLevel >= powerLevels.invite else {
339+
let alert = UIAlertController(title: VectorL10n.spacesInvitePeople, message: VectorL10n.spaceInviteNotEnoughPermission, preferredStyle: .alert)
340+
alert.addAction(UIAlertAction(title: VectorL10n.ok, style: .default, handler: nil))
341+
self.sideMenuViewController.present(alert, animated: true)
342+
return
343+
}
344+
345+
let coordinator = ContactsPickerCoordinator(session: session, room: spaceRoom, initialSearchText: nil, actualParticipants: nil, invitedParticipants: nil, userParticipant: nil)
346+
coordinator.delegate = self
347+
coordinator.start()
348+
self.add(childCoordinator: coordinator)
349+
self.sideMenuViewController.present(coordinator.toPresentable(), animated: true)
350+
}
351+
}
352+
323353
private func resetExploringSpaceIfNeeded() {
324354
if sideMenuNavigationViewController.presentedViewController == nil {
325355
Analytics.shared.exploringSpace = nil
@@ -437,6 +467,8 @@ extension SideMenuCoordinator: SpaceMenuPresenterDelegate {
437467
} else {
438468
AppDelegate.theDelegate().showAlert(withTitle: VectorL10n.settingsTitle, message: VectorL10n.spacesComingSoonDetail(AppInfo.current.displayName))
439469
}
470+
case .invite:
471+
self.showSpaceInvite(spaceId: spaceId, session: session)
440472
}
441473
}
442474
}
@@ -511,6 +543,19 @@ extension SideMenuCoordinator: CreateRoomCoordinatorDelegate {
511543
}
512544
}
513545

546+
// MARK: - ContactsPickerCoordinatorDelegate
547+
extension SideMenuCoordinator: ContactsPickerCoordinatorDelegate {
548+
func contactsPickerCoordinatorDidStartLoading(_ coordinator: ContactsPickerCoordinatorProtocol) {
549+
}
550+
551+
func contactsPickerCoordinatorDidEndLoading(_ coordinator: ContactsPickerCoordinatorProtocol) {
552+
}
553+
554+
func contactsPickerCoordinatorDidClose(_ coordinator: ContactsPickerCoordinatorProtocol) {
555+
remove(childCoordinator: coordinator)
556+
}
557+
}
558+
514559
// MARK: - UIAdaptivePresentationControllerDelegate
515560
extension SideMenuCoordinator: UIAdaptivePresentationControllerDelegate {
516561

Riot/Modules/Spaces/SpaceMenu/SpaceMenuListItemViewData.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ enum SpaceMenuListItemAction {
2525
case addSpace
2626
case settings
2727
case leaveSpace
28+
case invite
2829
}
2930

3031
/// Style of the `SpaceMenuListViewCell`

Riot/Modules/Spaces/SpaceMenu/SpaceMenuPresenter.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class SpaceMenuPresenter: NSObject {
2727
case addRoom
2828
case addSpace
2929
case settings
30+
case invite
3031
}
3132

3233
// MARK: - Properties
@@ -117,6 +118,8 @@ extension SpaceMenuPresenter: SpaceMenuModelViewModelCoordinatorDelegate {
117118
self.delegate?.spaceMenuPresenter(self, didCompleteWith: .addSpace, forSpaceWithId: self.spaceId, with: self.session)
118119
case .settings:
119120
self.delegate?.spaceMenuPresenter(self, didCompleteWith: .settings, forSpaceWithId: self.spaceId, with: self.session)
121+
case .invite:
122+
self.delegate?.spaceMenuPresenter(self, didCompleteWith: .invite, forSpaceWithId: self.spaceId, with: self.session)
120123
default:
121124
MXLog.error("[SpaceMenuPresenter] spaceListViewModel didSelectItem: invalid action \(action)")
122125
}

Riot/Modules/Spaces/SpaceMenu/SpaceMenuViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ class SpaceMenuViewModel: SpaceMenuViewModelType {
2525
weak var viewDelegate: SpaceMenuViewModelViewDelegate?
2626

2727
private let spaceMenuItems: [SpaceMenuListItemViewData] = [
28+
SpaceMenuListItemViewData(action: .invite, style: .normal, title: VectorL10n.spacesInvitePeople, icon: Asset.Images.spaceInviteUser.image, value: nil),
2829
SpaceMenuListItemViewData(action: .exploreSpaceMembers, style: .normal, title: VectorL10n.roomDetailsPeople, icon: Asset.Images.spaceMenuMembers.image, value: nil),
30+
SpaceMenuListItemViewData(action: .settings, style: .normal, title: VectorL10n.sideMenuActionSettings, icon: Asset.Images.sideMenuActionIconSettings.image, value: nil),
2931
SpaceMenuListItemViewData(action: .exploreSpaceRooms, style: .normal, title: VectorL10n.spacesExploreRooms, icon: Asset.Images.spaceMenuRooms.image, value: nil),
3032
SpaceMenuListItemViewData(action: .addRoom, style: .normal, title: VectorL10n.spacesAddRoom, icon: Asset.Images.spaceMenuPlusIcon.image, value: nil),
3133
SpaceMenuListItemViewData(action: .addSpace, style: .normal, title: VectorL10n.spacesAddSpace, icon: Asset.Images.spaceMenuPlusIcon.image, value: nil, isBeta: true),
32-
SpaceMenuListItemViewData(action: .settings, style: .normal, title: VectorL10n.sideMenuActionSettings, icon: Asset.Images.sideMenuActionIconSettings.image, value: nil),
3334
SpaceMenuListItemViewData(action: .leaveSpace, style: .destructive, title: VectorL10n.leave, icon: Asset.Images.spaceMenuLeave.image, value: nil)
3435
]
3536

changelog.d/5810.change

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add "Invite people" to the space menu in the left panel and update menu order

0 commit comments

Comments
 (0)