diff --git a/MVMCoreUI/Atomic/Atoms/Views/Tilelet.swift b/MVMCoreUI/Atomic/Atoms/Views/Tilelet.swift index 75f8fd72..838f3d4f 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Tilelet.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Tilelet.swift @@ -13,7 +13,7 @@ import VDS /** This class expects its height and width to be equal. */ -open class Tilelet: VDS.Tilelet, VDSMoleculeViewProtocol { +open class Tilelet: VDS.Tilelet, VDSMoleculeViewProtocol{ //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -21,32 +21,33 @@ open class Tilelet: VDS.Tilelet, VDSMoleculeViewProtocol { public var delegateObject: MVMCoreUIDelegateObject? public var additionalData: [AnyHashable: Any]? - public var tapAction: ActionBlock? - //-------------------------------------------------- // MARK: - Initializers //-------------------------------------------------- public convenience required init() { self.init(frame: .zero) } - - open func updateView(_ size: CGFloat) {} - + open override func initialSetup() { + super.initialSetup() + publisher(for: .touchUpInside) + .sink {[weak self] control in + self?.executeAction() + }.store(in: &subscribers) + } + //-------------------------------------------------- - // MARK: - Actions + // MARK: - Private //-------------------------------------------------- - - open override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) { - super.sendAction(action, to: target, for: event) - tapAction?() - } - - open override func sendActions(for controlEvents: UIControl.Event) { - super.sendActions(for: controlEvents) - tapAction?() + private func executeAction(){ + if let action = viewModel.action { + MVMCoreUIActionHandler.performActionUnstructured(with: action, sourceModel: viewModel, additionalData: additionalData, delegateObject: delegateObject) + } } + //-------------------------------------------------- + // MARK: - Public + //-------------------------------------------------- public func viewModelDidUpdate() { color = viewModel.color padding = viewModel.padding @@ -59,23 +60,29 @@ open class Tilelet: VDS.Tilelet, VDSMoleculeViewProtocol { badgeModel = viewModel.badge descriptiveIconModel = viewModel.descriptiveIcon directionalIconModel = viewModel.directionalIcon - if let action = viewModel.action { - tapAction = { [weak self] in - guard let self = self else { return } - MVMCoreUIActionHandler.performActionUnstructured(with: action, sourceModel: self.viewModel, additionalData: self.additionalData, delegateObject: self.delegateObject) - } - } } - + + //-------------------------------------------------- + // MARK: - MVMCoreViewProtocol + //-------------------------------------------------- + open func updateView(_ size: CGFloat) {} + + //-------------------------------------------------- + // MARK: - MoleculeViewProtocol + //-------------------------------------------------- //since this is a class func, we can't reference it directly public static func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 100 } + //-------------------------------------------------- - // MARK: - Touch Event + // MARK: - Overrides //-------------------------------------------------- - - public override func touchesEnded(_ touches: Set, with event: UIEvent?) { - sendActions(for: .touchUpInside) + open override func layoutSubviews() { + super.layoutSubviews() + // Accounts for any collection size changes + DispatchQueue.main.async { + self.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self) + } } }