mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
Adapt the HealthChat hooks to the upstream 26.09.1 screen APIs
The rebase onto release/26.09.1 moved three things the fork depends on. Upstream now owns a UserProfileScreenHook of its own (#5980), which rewrites a screen's view state rather than injecting a view. The fork's section hook keeps its behaviour under the fork-only name ExtendedProfileSectionHook, so both can live side by side and upstream's file stays untouched. Upstream's new @AppHook macro generates the same register<Name> methods, so registration is unchanged. UserProfileScreenCoordinatorParameters lost appSettings and reordered its arguments, and UserDetailsEditScreenCoordinator now publishes its own UserDetailsEditScreenCoordinatorAction instead of borrowing the room one (#5893). The members flow and the profile editor follow both. AppSettings.override gained oAuthClientURIPath (#5934), whose default appends apps/ios to the website URL. HealthChat passes nil to keep the registered client_uri at https://healthchat.ch exactly as the shipped build has it — changing what the app registers with MAS is not a side effect a rebase should have.
This commit is contained in:
@@ -43,7 +43,7 @@ final nonisolated class AppHooks: AppHooksProtocol {
|
||||
|
||||
@AppHook(default: DefaultUserProfileScreenHook())
|
||||
var userProfileScreenHook: UserProfileScreenHookProtocol
|
||||
|
||||
|
||||
@AppHook(default: DefaultExtendedProfileSectionHook())
|
||||
var extendedProfileSectionHook: ExtendedProfileSectionHookProtocol
|
||||
|
||||
@@ -52,7 +52,7 @@ final nonisolated class AppHooks: AppHooksProtocol {
|
||||
|
||||
@AppHook(default: DefaultUserDetailsEditScreenHook())
|
||||
var userDetailsEditScreenHook: UserDetailsEditScreenHookProtocol
|
||||
|
||||
|
||||
@AppHook(default: DefaultDeveloperOptionsScreenHook())
|
||||
var developerOptionsScreenHook: DeveloperOptionsScreenHookProtocol
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ struct HealthChatAppSettingsHook: AppSettingsHookProtocol {
|
||||
hideBrandChrome: false,
|
||||
pushGatewayBaseURL: "https://sygnal.healthchat.ch",
|
||||
oAuthRedirectURL: "ch.healthchat.element:/oauth/callback",
|
||||
// nil keeps the registered client_uri at the bare website URL, as shipped before upstream's `apps/ios` default.
|
||||
oAuthClientURIPath: nil,
|
||||
websiteURL: "https://healthchat.ch",
|
||||
logoURL: "https://app.healthchat.ch/themes/element/img/logos/element-logo.png",
|
||||
copyrightURL: appSettings.copyrightURL,
|
||||
|
||||
@@ -9,7 +9,7 @@ import SwiftUI
|
||||
|
||||
nonisolated protocol ExtendedProfileSectionHookProtocol: Sendable {
|
||||
@MainActor func configure(with userSession: UserSessionProtocol?) async
|
||||
|
||||
|
||||
/// An extra Form section rendered below the header on the user profile
|
||||
/// and room member details screens.
|
||||
@MainActor func extendedProfileSection(userID: String) -> AnyView?
|
||||
@@ -17,7 +17,7 @@ nonisolated protocol ExtendedProfileSectionHookProtocol: Sendable {
|
||||
|
||||
struct DefaultExtendedProfileSectionHook: ExtendedProfileSectionHookProtocol {
|
||||
func configure(with userSession: UserSessionProtocol?) async { }
|
||||
|
||||
|
||||
func extendedProfileSection(userID: String) -> AnyView? {
|
||||
nil
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import Combine
|
||||
import SwiftUI
|
||||
|
||||
@MainActor protocol UserDetailsEditCoordinatorProtocol: CoordinatorProtocol {
|
||||
var actions: AnyPublisher<RoomDetailsEditScreenCoordinatorAction, Never> { get }
|
||||
var actions: AnyPublisher<UserDetailsEditScreenCoordinatorAction, Never> { get }
|
||||
}
|
||||
|
||||
nonisolated protocol UserDetailsEditScreenHookProtocol: Sendable {
|
||||
|
||||
@@ -121,10 +121,9 @@ final class HealthChatMembersFlowCoordinator {
|
||||
let parameters = UserProfileScreenCoordinatorParameters(userID: userID,
|
||||
isPresentedModally: false,
|
||||
userSession: flowParameters.userSession,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
appHooks: flowParameters.appHooks,
|
||||
analytics: flowParameters.analytics,
|
||||
appSettings: flowParameters.appSettings,
|
||||
appHooks: flowParameters.appHooks)
|
||||
userIndicatorController: flowParameters.userIndicatorController)
|
||||
let coordinator = UserProfileScreenCoordinator(parameters: parameters)
|
||||
|
||||
coordinator.actionsPublisher.sink { [weak self] action in
|
||||
@@ -151,8 +150,7 @@ final class HealthChatMembersFlowCoordinator {
|
||||
userSession: flowParameters.userSession,
|
||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: flowParameters.appSettings),
|
||||
navigationStackCoordinator: navigationStackCoordinator,
|
||||
userIndicatorController: flowParameters.userIndicatorController,
|
||||
appSettings: flowParameters.appSettings)
|
||||
userIndicatorController: flowParameters.userIndicatorController)
|
||||
let coordinator = flowParameters.appHooks.userDetailsEditScreenHook.makeCoordinator(parameters: parameters)
|
||||
|
||||
coordinator.actions.sink { [weak self] action in
|
||||
|
||||
+2
-2
@@ -22,8 +22,8 @@ final class HealthChatProfileEditScreenCoordinator: CoordinatorProtocol, UserDet
|
||||
private let viewModel: HealthChatProfileEditScreenViewModelProtocol
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
|
||||
private let actionsSubject: PassthroughSubject<RoomDetailsEditScreenCoordinatorAction, Never> = .init()
|
||||
var actions: AnyPublisher<RoomDetailsEditScreenCoordinatorAction, Never> {
|
||||
private let actionsSubject: PassthroughSubject<UserDetailsEditScreenCoordinatorAction, Never> = .init()
|
||||
var actions: AnyPublisher<UserDetailsEditScreenCoordinatorAction, Never> {
|
||||
actionsSubject.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user