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.
		
		
		
		
		
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
 | 
						|
import UIKit
 | 
						|
import SessionUIKit
 | 
						|
import SessionMessagingKit
 | 
						|
 | 
						|
final class OpenGroupInvitationView: UIView {
 | 
						|
    private static let iconSize: CGFloat = 24
 | 
						|
    private static let iconImageViewSize: CGFloat = 48
 | 
						|
    
 | 
						|
    // MARK: - Lifecycle
 | 
						|
    
 | 
						|
    init(name: String, url: String, textColor: ThemeValue, isOutgoing: Bool) {
 | 
						|
        super.init(frame: CGRect.zero)
 | 
						|
        
 | 
						|
        setUpViewHierarchy(
 | 
						|
            name: name,
 | 
						|
            rawUrl: url,
 | 
						|
            textColor: textColor,
 | 
						|
            isOutgoing: isOutgoing
 | 
						|
        )
 | 
						|
    }
 | 
						|
    
 | 
						|
    override init(frame: CGRect) {
 | 
						|
        preconditionFailure("Use init(name:url:textColor:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    required init?(coder: NSCoder) {
 | 
						|
        preconditionFailure("Use init(name:url:textColor:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    private func setUpViewHierarchy(name: String, rawUrl: String, textColor: ThemeValue, isOutgoing: Bool) {
 | 
						|
        // Title
 | 
						|
        let titleLabel = UILabel()
 | 
						|
        titleLabel.font = .boldSystemFont(ofSize: Values.largeFontSize)
 | 
						|
        titleLabel.text = name
 | 
						|
        titleLabel.themeTextColor = textColor
 | 
						|
        titleLabel.lineBreakMode = .byTruncatingTail
 | 
						|
        
 | 
						|
        // Subtitle
 | 
						|
        let subtitleLabel = UILabel()
 | 
						|
        subtitleLabel.font = .systemFont(ofSize: Values.smallFontSize)
 | 
						|
        subtitleLabel.text = "communityInvitation".localized()
 | 
						|
        subtitleLabel.themeTextColor = textColor
 | 
						|
        subtitleLabel.lineBreakMode = .byTruncatingTail
 | 
						|
        
 | 
						|
        // URL
 | 
						|
        let urlLabel = UILabel()
 | 
						|
        urlLabel.font = .systemFont(ofSize: Values.verySmallFontSize)
 | 
						|
        urlLabel.text = {
 | 
						|
            if let range = rawUrl.range(of: "?public_key=") { // stringlint:disable
 | 
						|
                return String(rawUrl[..<range.lowerBound])
 | 
						|
            }
 | 
						|
 | 
						|
            return rawUrl
 | 
						|
        }()
 | 
						|
        urlLabel.themeTextColor = textColor
 | 
						|
        urlLabel.lineBreakMode = .byCharWrapping
 | 
						|
        urlLabel.numberOfLines = 0
 | 
						|
        
 | 
						|
        // Label stack
 | 
						|
        let labelStackView = UIStackView(arrangedSubviews: [ titleLabel, UIView.vSpacer(2), subtitleLabel, UIView.vSpacer(4), urlLabel ])
 | 
						|
        labelStackView.axis = .vertical
 | 
						|
        
 | 
						|
        // Icon
 | 
						|
        let iconSize = OpenGroupInvitationView.iconSize
 | 
						|
        let iconName = (isOutgoing ? "Globe" : "Plus") // stringlint:disable
 | 
						|
        let iconImageViewSize = OpenGroupInvitationView.iconImageViewSize
 | 
						|
        let iconImageView = UIImageView(
 | 
						|
            image: UIImage(named: iconName)?
 | 
						|
                .resized(to: CGSize(width: iconSize, height: iconSize))?
 | 
						|
                .withRenderingMode(.alwaysTemplate)
 | 
						|
        )
 | 
						|
        iconImageView.themeTintColor = (isOutgoing ? .messageBubble_outgoingText : .textPrimary)
 | 
						|
        iconImageView.contentMode = .center
 | 
						|
        iconImageView.layer.cornerRadius = iconImageViewSize / 2
 | 
						|
        iconImageView.layer.masksToBounds = true
 | 
						|
        iconImageView.themeBackgroundColor = (isOutgoing ? .messageBubble_overlay : .primary)
 | 
						|
        iconImageView.set(.width, to: iconImageViewSize)
 | 
						|
        iconImageView.set(.height, to: iconImageViewSize)
 | 
						|
        
 | 
						|
        // Main stack
 | 
						|
        let mainStackView = UIStackView(arrangedSubviews: [ iconImageView, labelStackView ])
 | 
						|
        mainStackView.axis = .horizontal
 | 
						|
        mainStackView.spacing = Values.mediumSpacing
 | 
						|
        mainStackView.alignment = .center
 | 
						|
        addSubview(mainStackView)
 | 
						|
        mainStackView.pin(to: self, withInset: Values.mediumSpacing)
 | 
						|
    }
 | 
						|
}
 |