mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
Room's details edit screen (#956)
* Add RoomDetailsEditScreen template * Add navigation to the edit screen * Delete template code * Start RoomDetailsEditScreen UI * Manage power levels in RoomDetailsScreen * Start RoomDetailsEditScreenViewModel logic * Inject initial room state * Add cancel action * Expose set name/topic APIs in RoomProxy * Refine RoomDetailsEditScreen UI * Add save logic * Add localisations * Fix avatar image * Update localisations * Add “Add topic” button * Add feature flag * Add dismiss on save logic * Reduce throttling * Improve form logic * Fix UT build errors * Add media sheet * Add media preprocessing * Add LoadableEditableAvatarImage * Add condition on delete image * Add avatar save button logic * Add remove avatar logic * Cleanup * Fix edit bug in DM * Add upload avatar * Add focus * Add RoomDetailsViewModel UTs * Fix button style * Add UTs * Add empty topic ui test * Fix iPad sheet presentation * Revert topic appearance in room’s details * Address PR comments * Add UI tests
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// Copyright 2022 New Vector Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum RoomDetailsEditScreenViewModelAction {
|
||||
case cancel
|
||||
case saveFinished
|
||||
case displayCameraPicker
|
||||
case displayMediaPicker
|
||||
}
|
||||
|
||||
struct RoomDetailsEditScreenViewStateBindings {
|
||||
var name: String
|
||||
var topic: String
|
||||
var showMediaSheet = false
|
||||
}
|
||||
|
||||
struct RoomDetailsEditScreenViewState: BindableState {
|
||||
let roomID: String
|
||||
let initialAvatarURL: URL?
|
||||
let initialName: String
|
||||
let initialTopic: String
|
||||
let canEditAvatar: Bool
|
||||
let canEditName: Bool
|
||||
let canEditTopic: Bool
|
||||
var avatarURL: URL?
|
||||
var localMedia: MediaInfo?
|
||||
|
||||
var bindings: RoomDetailsEditScreenViewStateBindings
|
||||
|
||||
var nameDidChange: Bool {
|
||||
bindings.name != initialName
|
||||
}
|
||||
|
||||
var topicDidChange: Bool {
|
||||
bindings.topic != initialTopic
|
||||
}
|
||||
|
||||
var avatarDidChange: Bool {
|
||||
localMedia != nil || avatarURL != initialAvatarURL
|
||||
}
|
||||
|
||||
var canSave: Bool {
|
||||
!bindings.name.isEmpty && (avatarDidChange || nameDidChange || topicDidChange)
|
||||
}
|
||||
|
||||
var showDeleteImageAction: Bool {
|
||||
localMedia != nil || avatarURL != nil
|
||||
}
|
||||
}
|
||||
|
||||
enum RoomDetailsEditScreenViewAction {
|
||||
case cancel
|
||||
case save
|
||||
case presentMediaSource
|
||||
case displayCameraPicker
|
||||
case displayMediaPicker
|
||||
case removeImage
|
||||
}
|
||||
Reference in New Issue
Block a user