Files
element-x-ios/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenModels.swift
T
Stefan Ceriu f040964d3f Allow the user to forward the same message to multiple rooms at once
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.
2026-05-29 14:27:42 +03:00

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)
}
}