mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-01 18:23:03 +00:00
f040964d3f
This will send the item to the rooms in order they were chosen and only deep link into the target room if single, otherwise it will just dismiss the forwarding screen after sending.
59 lines
1.5 KiB
Swift
59 lines
1.5 KiB
Swift
//
|
|
// Copyright 2025 Element Creations Ltd.
|
|
// Copyright 2022-2025 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import Foundation
|
|
import MatrixRustSDK
|
|
|
|
enum MessageForwardingScreenViewModelAction {
|
|
case dismiss
|
|
case sent(roomIDs: [String])
|
|
}
|
|
|
|
struct MessageForwardingScreenViewState: BindableState {
|
|
var rooms: [MessageForwardingRoom] = []
|
|
var selectedRoomIDs = [String]()
|
|
var bindings = MessageForwardingScreenViewStateBindings()
|
|
}
|
|
|
|
struct MessageForwardingScreenViewStateBindings {
|
|
var searchQuery = ""
|
|
}
|
|
|
|
enum MessageForwardingScreenViewAction {
|
|
case cancel
|
|
case send
|
|
case selectRoom(roomID: String)
|
|
case reachedTop
|
|
case reachedBottom
|
|
}
|
|
|
|
struct MessageForwardingRoom: Identifiable, Equatable {
|
|
let id: String
|
|
let title: String
|
|
let description: String
|
|
let avatar: RoomAvatar
|
|
}
|
|
|
|
struct MessageForwardingItem: Hashable {
|
|
/// The source item's timeline ID. Only necessary for a rough Hashable conformance.
|
|
let id: TimelineItemIdentifier
|
|
/// The source item's room ID.
|
|
let roomID: String
|
|
/// The item's content to be forwarded.
|
|
let content: RoomMessageEventContentWithoutRelation
|
|
|
|
static func == (lhs: MessageForwardingItem, rhs: MessageForwardingItem) -> Bool {
|
|
lhs.id == rhs.id && lhs.roomID == rhs.roomID
|
|
}
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
hasher.combine(roomID)
|
|
}
|
|
}
|