// // EKAttributes+UserInteraction.swift // SwiftEntryKit // // Created by Daniel Huri on 4/21/18. // Copyright (c) 2018 huri000@gmail.com. All rights reserved. // import Foundation public extension EKAttributes { /** Describes the user interaction events that are triggered as the user taps the entry / screen */ struct UserInteraction { /** Code that is executed when the user taps the entry / screen */ public typealias Action = () -> () /** The default event that happens as the user interacts */ public enum Default { /** Absorbs touches. The entry / screen does nothing (Swallows the touch) */ case absorbTouches /** Touches delay the exit of the entry */ case delayExit(by: TimeInterval) /** Taps dismiss the entry immediately */ case dismissEntry /** Touches are forwarded to the lower window (In most cases it would be the application main window that will handle it */ case forward } var isResponsive: Bool { switch defaultAction { case .forward: return false default: return true } } var isDelayExit: Bool { switch defaultAction { case .delayExit: return true default: return false } } /** A default action that is executed when the entry or the screen are interacted by the user */ public var defaultAction: Default /** Additional actions that can be customized by the user */ public var customTapActions: [Action] public init(defaultAction: Default = .absorbTouches, customTapActions: [Action] = []) { self.defaultAction = defaultAction self.customTapActions = customTapActions } /** Dismiss action */ public static var dismiss: UserInteraction { return UserInteraction(defaultAction: .dismissEntry) } /** Forward action */ public static var forward: UserInteraction { return UserInteraction(defaultAction: .forward) } /** Absorb touches action */ public static var absorbTouches: UserInteraction { return UserInteraction(defaultAction: .absorbTouches) } /** Delay exit action */ public static func delayExit(by delay: TimeInterval) -> UserInteraction { return UserInteraction(defaultAction: .delayExit(by: delay)) } } }