@@ -120,6 +120,9 @@ private final class JoinAffiliateProgramScreenComponent: Component {
120120
121121 private var currentTargetPeer : EnginePeer ?
122122
123+ private var possibleTargetPeers : [ EnginePeer ] = [ ]
124+ private var possibleTargetPeersDisposable : Disposable ?
125+
123126 private var cachedCloseImage : UIImage ?
124127
125128 override init ( frame: CGRect ) {
@@ -189,6 +192,10 @@ private final class JoinAffiliateProgramScreenComponent: Component {
189192 fatalError ( " init(coder:) has not been implemented " )
190193 }
191194
195+ deinit {
196+ self . possibleTargetPeersDisposable? . dispose ( )
197+ }
198+
192199 func scrollViewDidScroll( _ scrollView: UIScrollView ) {
193200 if !self . ignoreScrolling {
194201 self . updateScrolling ( transition: . immediate)
@@ -338,9 +345,9 @@ private final class JoinAffiliateProgramScreenComponent: Component {
338345
339346 let presentationData = component. context. sharedContext. currentPresentationData. with ( { $0 } )
340347
341- let peers : [ EnginePeer ] = [
348+ let peers : [ EnginePeer ] = self . possibleTargetPeers . isEmpty ? [
342349 join. initialTargetPeer
343- ]
350+ ] : self . possibleTargetPeers
344351
345352 let avatarSize = CGSize ( width: 30.0 , height: 30.0 )
346353
@@ -383,11 +390,24 @@ private final class JoinAffiliateProgramScreenComponent: Component {
383390 let sideInset : CGFloat = 16.0 + environment. safeInsets. left
384391
385392 if self . component == nil {
393+ var loadPossibleTargetPeers = false
386394 switch component. mode {
387395 case let . join( join) :
388396 self . currentTargetPeer = join. initialTargetPeer
397+ loadPossibleTargetPeers = join. canSelectTargetPeer
389398 case let . active( active) :
390399 self . currentTargetPeer = active. targetPeer
400+ loadPossibleTargetPeers = true
401+ }
402+
403+ if loadPossibleTargetPeers {
404+ self . possibleTargetPeersDisposable = ( component. context. engine. peers. getPossibleStarRefBotTargets ( )
405+ |> deliverOnMainQueue) . startStrict ( next: { [ weak self] result in
406+ guard let self else {
407+ return
408+ }
409+ self . possibleTargetPeers = result
410+ } )
391411 }
392412 }
393413
@@ -701,6 +721,7 @@ private final class JoinAffiliateProgramScreenComponent: Component {
701721 isTargetPeerSelectable = join. canSelectTargetPeer
702722 case . active:
703723 displayTargetPeer = true
724+ isTargetPeerSelectable = true
704725 }
705726
706727 if displayTargetPeer {
@@ -1154,7 +1175,7 @@ private final class PeerBadgeComponent: Component {
11541175 if let current = self . avatarNode {
11551176 avatarNode = current
11561177 } else {
1157- avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: 15.0 ) )
1178+ avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: floor ( avatarDiameter * 0.5 ) ) )
11581179 avatarNode. isUserInteractionEnabled = false
11591180 avatarNode. displaysAsynchronously = false
11601181 self . avatarNode = avatarNode
@@ -1252,18 +1273,13 @@ private final class AvatarComponent: Component {
12521273 }
12531274
12541275 final class View : UIView {
1255- private let avatarNode : AvatarNode
1276+ private var avatarNode : AvatarNode ?
12561277
12571278 private var component : AvatarComponent ?
12581279 private weak var state : EmptyComponentState ?
12591280
12601281 override init ( frame: CGRect ) {
1261- self . avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: 18.0 ) )
1262- self . avatarNode. displaysAsynchronously = false
1263-
12641282 super. init ( frame: frame)
1265-
1266- self . addSubnode ( self . avatarNode)
12671283 }
12681284
12691285 required init ? ( coder: NSCoder ) {
@@ -1276,14 +1292,24 @@ private final class AvatarComponent: Component {
12761292
12771293 let size = component. size ?? availableSize
12781294
1279- self . avatarNode. frame = CGRect ( origin: CGPoint ( ) , size: size)
1280- self . avatarNode. setPeer (
1295+ let avatarNode : AvatarNode
1296+ if let current = self . avatarNode {
1297+ avatarNode = current
1298+ } else {
1299+ avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: floor ( size. width * 0.5 ) ) )
1300+ avatarNode. displaysAsynchronously = false
1301+ self . avatarNode = avatarNode
1302+ self . addSubview ( avatarNode. view)
1303+ }
1304+ avatarNode. frame = CGRect ( origin: CGPoint ( ) , size: size)
1305+ avatarNode. setPeer (
12811306 context: component. context,
12821307 theme: component. context. sharedContext. currentPresentationData. with ( { $0 } ) . theme,
12831308 peer: component. peer,
12841309 synchronousLoad: true ,
12851310 displayDimensions: size
12861311 )
1312+ avatarNode. updateSize ( size: size)
12871313
12881314 return size
12891315 }
@@ -1634,8 +1660,8 @@ final class BotSectionSortButtonComponent: Component {
16341660 switch component. sortMode {
16351661 case . date:
16361662 sortByString = " SORT BY [DATE]() "
1637- case . commission :
1638- sortByString = " SORT BY [COMMISSION ]() "
1663+ case . profitability :
1664+ sortByString = " SORT BY [PROFITABILITY ]() "
16391665 case . revenue:
16401666 sortByString = " SORT BY [REVENUE]() "
16411667 }
@@ -1732,7 +1758,7 @@ final class PeerBadgeAvatarComponent: Component {
17321758 }
17331759
17341760 final class View : UIView {
1735- private let avatarNode : AvatarNode
1761+ private var avatarNode : AvatarNode ?
17361762
17371763 private let badgeBackground = UIImageView ( )
17381764 private let badgeIcon = UIImageView ( )
@@ -1744,12 +1770,7 @@ final class PeerBadgeAvatarComponent: Component {
17441770 private static let badgeIconImage = generateTintedImage ( image: UIImage ( bundleImageName: " Chat/Links/Link " ) , color: . white) ? . withRenderingMode ( . alwaysTemplate)
17451771
17461772 override init ( frame: CGRect ) {
1747- self . avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: 15.0 ) )
1748- self . avatarNode. displaysAsynchronously = false
1749-
17501773 super. init ( frame: frame)
1751-
1752- self . addSubnode ( self . avatarNode)
17531774 }
17541775
17551776 required init ? ( coder: NSCoder ) {
@@ -1765,8 +1786,18 @@ final class PeerBadgeAvatarComponent: Component {
17651786
17661787 let badgeFrame = CGRect ( origin: CGPoint ( x: size. width - badgeSize, y: size. height - badgeSize) , size: CGSize ( width: badgeSize, height: badgeSize) )
17671788
1768- self . avatarNode. frame = CGRect ( origin: CGPoint ( ) , size: size)
1769- self . avatarNode. setPeer (
1789+ let avatarNode : AvatarNode
1790+ if let current = self . avatarNode {
1791+ avatarNode = current
1792+ } else {
1793+ avatarNode = AvatarNode ( font: avatarPlaceholderFont ( size: floor ( size. width * 0.5 ) ) )
1794+ avatarNode. displaysAsynchronously = false
1795+ self . avatarNode = avatarNode
1796+ self . addSubview ( avatarNode. view)
1797+ }
1798+
1799+ avatarNode. frame = CGRect ( origin: CGPoint ( ) , size: size)
1800+ avatarNode. setPeer (
17701801 context: component. context,
17711802 theme: component. context. sharedContext. currentPresentationData. with ( { $0 } ) . theme,
17721803 peer: component. peer,
0 commit comments