|
7 | 7 |
|
8 | 8 | import UIKit |
9 | 9 |
|
10 | | -final class GroupInfoView: BaseView { |
11 | | - var delegate: MainDelegate? { |
12 | | - didSet { |
13 | | - groupNameStackView.addTapAction { [weak self] in |
14 | | - guard let self else { return } |
15 | | - delegate?.updateBottomSheetVisibleAction(isShowSheet: true) |
16 | | - } |
17 | | - |
18 | | - joinCodeStackView.addTapAction { [weak self] in |
19 | | - guard let self else { return } |
20 | | - delegate?.inviteAction() |
21 | | - } |
22 | | - } |
| 10 | +import RxSwift |
| 11 | +import RxRelay |
| 12 | +import RxCocoa |
| 13 | + |
| 14 | +struct GroupInfoEvent { |
| 15 | + enum Action { |
| 16 | + case openGroupSelector |
| 17 | + case invite |
23 | 18 | } |
| 19 | + |
| 20 | + let action: Action |
| 21 | + let group: ChallengeGroupInfo |
| 22 | +} |
| 23 | + |
| 24 | +final class GroupInfoView: BaseView { |
| 25 | +// var delegate: MainDelegate? { |
| 26 | +// didSet { |
| 27 | +// groupNameStackView.addTapAction { [weak self] in |
| 28 | +// guard let self else { return } |
| 29 | +// delegate?.updateBottomSheetVisibleAction(isShowSheet: true) |
| 30 | +// } |
| 31 | +// |
| 32 | +// joinCodeStackView.addTapAction { [weak self] in |
| 33 | +// guard let self else { return } |
| 34 | +// delegate?.inviteAction() |
| 35 | +// } |
| 36 | +// } |
| 37 | +// } |
| 38 | + |
| 39 | + // ✅ 외부 노출용 이벤트 스트림 |
| 40 | + var event: Signal<GroupInfoEvent> { _eventRelay.asSignal() } |
| 41 | + |
| 42 | + private let _eventRelay = PublishRelay<GroupInfoEvent>() |
| 43 | + private let disposeBag = DisposeBag() |
24 | 44 |
|
25 | 45 | private let hasCopyImage: Bool |
26 | 46 | private(set) var challengeGroupInfo: ChallengeGroupInfo |
@@ -121,7 +141,27 @@ final class GroupInfoView: BaseView { |
121 | 141 | durationProgressView.transform = CGAffineTransform(translationX: 0, y: 1) // MARK: 디자인 디테일 반영 |
122 | 142 | } |
123 | 143 |
|
124 | | - override func configureAction() { } |
| 144 | + override func configureAction() { |
| 145 | + groupNameStackView.addTapAction { [weak self] in |
| 146 | + guard let self else { return } |
| 147 | + _eventRelay.accept( |
| 148 | + GroupInfoEvent( |
| 149 | + action: .openGroupSelector, |
| 150 | + group: challengeGroupInfo |
| 151 | + ) |
| 152 | + ) |
| 153 | + } |
| 154 | + |
| 155 | + joinCodeStackView.addTapAction { [weak self] in |
| 156 | + guard let self else { return } |
| 157 | + _eventRelay.accept( |
| 158 | + GroupInfoEvent( |
| 159 | + action: .invite, |
| 160 | + group: challengeGroupInfo |
| 161 | + ) |
| 162 | + ) |
| 163 | + } |
| 164 | + } |
125 | 165 |
|
126 | 166 | override func configureHierarchy() { |
127 | 167 | [dosikImageView, groupNameStackView, groupInfoStackView, durationStackView].forEach { self.addSubview($0) } |
|
0 commit comments