Sha256: 9db2275d88382a226741b1f75b3476e754f91f10085eb433e4caaed6e17d8b1e
Contents?: true
Size: 1.95 KB
Versions: 14
Compression:
Stored size: 1.95 KB
Contents
import Foundation import Strada import UIKit final class MenuComponent: BridgeComponent { override class var name: String { "menu" } override func onReceive(message: Message) { guard let event = Event(rawValue: message.event) else { return } if event == .display { handleDisplayEvent(message: message) } } // MARK: Private private var viewController: UIViewController? { delegate.destination as? UIViewController } private func handleDisplayEvent(message: Message) { guard let data: MessageData = message.data() else { return } showAlertSheet(with: data.title, items: data.items) } private func showAlertSheet(with title: String, items: [Item]) { let alertController = UIAlertController(title: title, message: nil, preferredStyle: .actionSheet) for item in items { let action = UIAlertAction(title: item.title, style: .default) {[weak self] _ in self?.onItemSelected(item: item) } alertController.addAction(action) } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) alertController.addAction(cancelAction) viewController?.present(alertController, animated: true) } private func onItemSelected(item: Item) { reply(to: Event.display.rawValue, with: SelectionMessageData(selectedIndex: item.index)) } } // MARK: Events private extension MenuComponent { enum Event: String { case display } } // MARK: Message data private extension MenuComponent { struct MessageData: Decodable { let title: String let items: [Item] } struct Item: Decodable { let title: String let index: Int } struct SelectionMessageData: Encodable { let selectedIndex:Int } }
Version data entries
14 entries across 7 versions & 1 rubygems