|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import UIKit | 
					
						
							|  |  |  | import SessionUIKit | 
					
						
							|  |  |  | import SessionMessagingKit | 
					
						
							|  |  |  | import SignalUtilitiesKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | final class SimplifiedConversationCell: UITableViewCell { | 
					
						
							|  |  |  |     // MARK: - Initialization | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | 
					
						
							|  |  |  |         super.init(style: style, reuseIdentifier: reuseIdentifier) | 
					
						
							|  |  |  |         setUpViewHierarchy() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     required init?(coder: NSCoder) { | 
					
						
							|  |  |  |         super.init(coder: coder) | 
					
						
							|  |  |  |         setUpViewHierarchy() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - UI | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private lazy var stackView: UIStackView = { | 
					
						
							|  |  |  |         let stackView: UIStackView = UIStackView() | 
					
						
							|  |  |  |         stackView.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |         stackView.axis = .horizontal | 
					
						
							|  |  |  |         stackView.alignment = .center | 
					
						
							|  |  |  |         stackView.spacing = Values.mediumSpacing | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return stackView | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private lazy var accentLineView: UIView = { | 
					
						
							|  |  |  |         let result = UIView() | 
					
						
							|  |  |  |         result.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |         result.themeBackgroundColor = .danger | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private lazy var profilePictureView: ProfilePictureView = { | 
					
						
							|  |  |  |         let view: ProfilePictureView = ProfilePictureView(size: .list) | 
					
						
							|  |  |  |         view.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return view | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private lazy var displayNameLabel: UILabel = { | 
					
						
							|  |  |  |         let result = UILabel() | 
					
						
							|  |  |  |         result.font = .boldSystemFont(ofSize: Values.mediumFontSize) | 
					
						
							|  |  |  |         result.themeTextColor = .textPrimary | 
					
						
							|  |  |  |         result.lineBreakMode = .byTruncatingTail | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Initialization | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private func setUpViewHierarchy() { | 
					
						
							|  |  |  |         themeBackgroundColor = .conversationButton_background | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         let selectedBackgroundView = UIView() | 
					
						
							|  |  |  |         selectedBackgroundView.themeBackgroundColor = .highlighted(.conversationButton_background) | 
					
						
							|  |  |  |         self.selectedBackgroundView = selectedBackgroundView | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         addSubview(stackView) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         stackView.addArrangedSubview(accentLineView) | 
					
						
							|  |  |  |         stackView.addArrangedSubview(profilePictureView) | 
					
						
							|  |  |  |         stackView.addArrangedSubview(displayNameLabel) | 
					
						
							|  |  |  |         stackView.addArrangedSubview(UIView.hSpacer(0)) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         setupLayout() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Layout | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private func setupLayout() { | 
					
						
							|  |  |  |         accentLineView.set(.width, to: Values.accentLineThickness) | 
					
						
							|  |  |  |         accentLineView.set(.height, to: 68) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         stackView.pin(to: self) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Updating | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public func update(with cellViewModel: SessionThreadViewModel) { | 
					
						
							|  |  |  |         accentLineView.alpha = (cellViewModel.threadIsBlocked == true ? 1 : 0) | 
					
						
							|  |  |  |         profilePictureView.update( | 
					
						
							|  |  |  |             publicKey: cellViewModel.threadId, | 
					
						
							|  |  |  |             threadVariant: cellViewModel.threadVariant, | 
					
						
							|  |  |  |             customImageData: cellViewModel.openGroupProfilePictureData, | 
					
						
							|  |  |  |             profile: cellViewModel.profile, | 
					
						
							|  |  |  |             additionalProfile: cellViewModel.additionalProfile | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         displayNameLabel.text = cellViewModel.displayName | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |