Skip to content

Commit

Permalink
Add view associated type to Event
Browse files Browse the repository at this point in the history
  • Loading branch information
wtmoose committed Jan 14, 2022
1 parent 1e49de7 commit b29dd21
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 10 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Change Log
All notable changes to this project will be documented in this file.

## 9.0.6

### Features

* Add `UIView` associated type to `Event`, e.g. `willShow(UIView)` so that event listeners can inspect the view.
* Add `Event.id: String?` property so that event listeners can reason about the view's ID.

## 9.0.5

### Fixes
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ config.preferredStatusBarStyle = .lightContent

// Specify one or more event listeners to respond to show and hide events.
config.eventListeners.append() { event in
if case .didHide = event { print("yep") }
if case .didHide = event {
print("yep id=\(String(describing: event.id)")
}
}
SwiftMessages.show(config: config, view: view)
Expand Down
2 changes: 1 addition & 1 deletion SwiftMessages.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'SwiftMessages'
spec.version = '9.0.5'
spec.version = '9.0.6'
spec.license = { :type => 'MIT' }
spec.homepage = 'https://github.com/SwiftKickMobile/SwiftMessages'
spec.authors = { 'Timothy Moose' => 'tim@swiftkick.it' }
Expand Down
8 changes: 4 additions & 4 deletions SwiftMessages/Presenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class Presenter: NSObject {
func show(completion: @escaping AnimationCompletion) throws {
try presentationContext = getPresentationContext()
install()
self.config.eventListeners.forEach { $0(.willShow) }
self.config.eventListeners.forEach { $0(.willShow(self.view)) }
showAnimation() { completed in
completion(completed)
if completed {
Expand All @@ -128,7 +128,7 @@ class Presenter: NSObject {
} else {
self.showAccessibilityAnnouncement()
}
self.config.eventListeners.forEach { $0(.didShow) }
self.config.eventListeners.forEach { $0(.didShow(self.view)) }
}
}
}
Expand Down Expand Up @@ -181,15 +181,15 @@ class Presenter: NSObject {

func hide(animated: Bool, completion: @escaping AnimationCompletion) {
isHiding = true
self.config.eventListeners.forEach { $0(.willHide) }
self.config.eventListeners.forEach { $0(.willHide(self.view)) }
let context = animationContext()
let action = {
if let viewController = self.presentationContext.viewControllerValue() as? WindowViewController {
viewController.uninstall()
}
self.maskingView.removeFromSuperview()
completion(true)
self.config.eventListeners.forEach { $0(.didHide) }
self.config.eventListeners.forEach { $0(.didHide(self.view)) }
}
guard animated else {
action()
Expand Down
21 changes: 17 additions & 4 deletions SwiftMessages/SwiftMessages.swift
Original file line number Diff line number Diff line change
Expand Up @@ -219,10 +219,23 @@ open class SwiftMessages {
Specifies events in the message lifecycle.
*/
public enum Event {
case willShow
case didShow
case willHide
case didHide
case willShow(UIView)
case didShow(UIView)
case willHide(UIView)
case didHide(UIView)

public var view: UIView {
switch self {
case .willShow(let view): return view
case .didShow(let view): return view
case .willHide(let view): return view
case .didHide(let view): return view
}
}

public var id: String? {
return (view as? Identifiable)?.id
}
}

/**
Expand Down

0 comments on commit b29dd21

Please sign in to comment.