mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import UIKit
 | |
| import Combine
 | |
| import GRDB
 | |
| import DifferenceKit
 | |
| import SessionUIKit
 | |
| import SessionMessagingKit
 | |
| import SessionUtilitiesKit
 | |
| 
 | |
| protocol SessionTableViewModel: AnyObject, SectionedTableData {
 | |
|     var dependencies: Dependencies { get }
 | |
|     
 | |
|     var title: String { get }
 | |
|     var subtitle: String? { get }
 | |
|     var initialLoadMessage: String? { get }
 | |
|     var cellType: SessionTableViewCellType { get }
 | |
|     var emptyStateTextPublisher: AnyPublisher<String?, Never> { get }
 | |
|     var state: TableDataState<Section, TableItem> { get }
 | |
|     var footerView: AnyPublisher<UIView?, Never> { get }
 | |
|     var footerButtonInfo: AnyPublisher<SessionButton.Info?, Never> { get }
 | |
|     
 | |
|     // MARK: - Functions
 | |
|     
 | |
|     func canEditRow(at indexPath: IndexPath) -> Bool
 | |
|     func leadingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration?
 | |
|     func trailingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration?
 | |
| }
 | |
| 
 | |
| extension SessionTableViewModel {
 | |
|     var subtitle: String? { nil }
 | |
|     var initialLoadMessage: String? { nil }
 | |
|     var cellType: SessionTableViewCellType { .general }
 | |
|     var emptyStateTextPublisher: AnyPublisher<String?, Never> { Just(nil).eraseToAnyPublisher() }
 | |
|     var tableData: [SectionModel] { state.tableData }
 | |
|     var footerView: AnyPublisher<UIView?, Never> { Just(nil).eraseToAnyPublisher() }
 | |
|     var footerButtonInfo: AnyPublisher<SessionButton.Info?, Never> { Just(nil).eraseToAnyPublisher() }
 | |
|     
 | |
|     // MARK: - Functions
 | |
|     
 | |
|     func updateTableData(_ updatedData: [SectionModel]) { state.updateTableData(updatedData) }
 | |
|     
 | |
|     func canEditRow(at indexPath: IndexPath) -> Bool { false }
 | |
|     func leadingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration? { nil }
 | |
|     func trailingSwipeActionsConfiguration(forRowAt indexPath: IndexPath, in tableView: UITableView, of viewController: UIViewController) -> UISwipeActionsConfiguration? { nil }
 | |
| }
 | |
| 
 | |
| // MARK: - SessionTableViewCellType
 | |
| 
 | |
| enum SessionTableViewCellType: CaseIterable {
 | |
|     case general
 | |
|     case fullConversation
 | |
|     
 | |
|     var viewType: UITableViewCell.Type {
 | |
|         switch self {
 | |
|             case .general: return SessionCell.self
 | |
|             case .fullConversation: return FullConversationCell.self
 | |
|         }
 | |
|     }
 | |
| }
 |