Knock Requests List Screen (#3533)

* created the basic navigation and files

* updated the logic

so that the buttons that do not have permissions won't show

* added the empty state

* progress in making the list UI

* update tests

* UI improvements

* fixed an issue with media provider

* update button style

* fixed a navigation bug

* pr suggestions

* pr suggestions
This commit is contained in:
Mauro
2024-11-21 20:14:05 +01:00
committed by GitHub
parent 7e1476d973
commit e315451448
85 changed files with 701 additions and 145 deletions
@@ -413,6 +413,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
return .presentingChild(childRoomID: roomID, previousState: fromState)
case (.presentingChild(_, let previousState), .dismissChildFlow):
return previousState
case (.roomDetails, .presentKnockRequestsListScreen):
return .knockRequestsList
case (.knockRequestsList, .dismissKnockRequestsListScreen):
return .roomDetails(isRoot: false)
default:
return nil
@@ -565,6 +570,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
presentResolveSendFailure(failure: failure, sendHandle: sendHandle)
case (.resolveSendFailure, .dismissResolveSendFailure, .room):
break
case (.roomDetails, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList()
case (.knockRequestsList, .dismissKnockRequestsListScreen, .roomDetails):
break
// Child flow
case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild):
@@ -837,6 +847,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
actionsSubject.send(.presentCallScreen(roomProxy: roomProxy))
case .presentPinnedEventsTimeline:
stateMachine.tryEvent(.presentPinnedEventsTimeline)
case .presentKnockingRequestsListScreen:
stateMachine.tryEvent(.presentKnockRequestsListScreen)
}
}
.store(in: &cancellables)
@@ -883,6 +895,20 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
}
}
private func presentKnockRequestsList() {
let parameters = KnockRequestsListScreenCoordinatorParameters(roomProxy: roomProxy, mediaProvider: userSession.mediaProvider)
let coordinator = KnockRequestsListScreenCoordinator(parameters: parameters)
coordinator.actionsPublisher
.sink { [weak self] _ in
}
.store(in: &cancellables)
navigationStackCoordinator.push(coordinator) { [weak self] in
self?.stateMachine.tryEvent(.dismissKnockRequestsListScreen)
}
}
private func presentRoomDetailsEditScreen() {
let stackCoordinator = NavigationStackCoordinator()
@@ -1546,6 +1572,7 @@ private extension RoomFlowCoordinator {
case rolesAndPermissions
case pinnedEventsTimeline(previousState: PinnedEventsTimelineSource)
case resolveSendFailure
case knockRequestsList
/// A child flow is in progress.
case presentingChild(childRoomID: String, previousState: State)
@@ -1624,6 +1651,9 @@ private extension RoomFlowCoordinator {
// Child room flow events
case startChildFlow(roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint)
case dismissChildFlow
case presentKnockRequestsListScreen
case dismissKnockRequestsListScreen
}
}