mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
Opened DefaultTooltipManager
commit_hash:e8aca9562e2a0bb604ace36cbf31ea4b4198b4d1
This commit is contained in:
@@ -154,26 +154,11 @@ public final class DivKitComponents {
|
||||
self.patchProvider = patchProvider
|
||||
?? DivPatchDownloader(requestPerformer: requestPerformer)
|
||||
|
||||
weak var weakTimerStorage: DivTimerStorage?
|
||||
weak var weakActionHandler: DivActionHandler?
|
||||
|
||||
#if os(iOS)
|
||||
self.tooltipManager = tooltipManager ?? DefaultTooltipManager(
|
||||
shownTooltips: .init(),
|
||||
handleAction: {
|
||||
switch $0.payload {
|
||||
case let .divAction(params: params):
|
||||
weakActionHandler?.handle(params: params, sender: nil)
|
||||
default: break
|
||||
}
|
||||
}
|
||||
)
|
||||
#else
|
||||
self.tooltipManager = tooltipManager ?? DefaultTooltipManager()
|
||||
#endif
|
||||
|
||||
functionsStorage = DivFunctionsStorage(reporter: reporter)
|
||||
|
||||
weak var weakTimerStorage: DivTimerStorage?
|
||||
actionHandler = DivActionHandler(
|
||||
stateUpdater: stateManagement,
|
||||
blockStateStorage: blockStateStorage,
|
||||
@@ -213,11 +198,21 @@ public final class DivKitComponents {
|
||||
reporter: reporter
|
||||
)
|
||||
|
||||
weakActionHandler = actionHandler
|
||||
weakTimerStorage = timerStorage
|
||||
variablesStorage.changeEvents.addObserver { [weak self] event in
|
||||
self?.onVariablesChanged(event: event)
|
||||
}.dispose(in: disposePool)
|
||||
|
||||
#if os(iOS)
|
||||
self.tooltipManager.setHandler { [weak self] in
|
||||
switch $0.payload {
|
||||
case let .divAction(params):
|
||||
self?.actionHandler.handle(params: params, sender: nil)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public func reset() {
|
||||
|
||||
@@ -274,7 +274,7 @@ extension UserInterfaceAction.Payload {
|
||||
|
||||
public var divActionParams: UserInterfaceAction.DivActionParams? {
|
||||
switch self {
|
||||
case let .divAction(params: params):
|
||||
case let .divAction(params):
|
||||
return params
|
||||
case .empty, .menu, .url:
|
||||
return nil
|
||||
|
||||
@@ -53,9 +53,16 @@ public protocol TooltipManager: AnyObject, TooltipActionPerformer, RenderingDele
|
||||
|
||||
/// Removes all tooltips.
|
||||
func reset()
|
||||
|
||||
/// Sets handler for the tooltip view UI events.
|
||||
func setHandler(_ handler: @escaping (UIActionEvent) -> Void)
|
||||
}
|
||||
|
||||
public final class DefaultTooltipManager: TooltipManager {
|
||||
extension TooltipManager {
|
||||
public func setHandler(_: @escaping (UIActionEvent) -> Void) {}
|
||||
}
|
||||
|
||||
public class DefaultTooltipManager: TooltipManager {
|
||||
public struct Tooltip {
|
||||
public let id: String
|
||||
public let duration: Duration
|
||||
@@ -64,15 +71,15 @@ public final class DefaultTooltipManager: TooltipManager {
|
||||
|
||||
public var shownTooltips: Property<Set<String>>
|
||||
|
||||
private let handleAction: (UIActionEvent) -> Void
|
||||
private var handleAction: (UIActionEvent) -> Void
|
||||
private var existingAnchorViews = WeakCollection<TooltipAnchorView>()
|
||||
private var showingTooltips = [String: TooltipContainerView]()
|
||||
private var tooltipWindow: UIWindow?
|
||||
private var previousOrientation = UIDevice.current.orientation
|
||||
|
||||
public init(
|
||||
shownTooltips: Property<Set<String>>,
|
||||
handleAction: @escaping (UIActionEvent) -> Void
|
||||
shownTooltips: Property<Set<String>> = Property(),
|
||||
handleAction: @escaping (UIActionEvent) -> Void = { _ in }
|
||||
) {
|
||||
self.handleAction = handleAction
|
||||
self.shownTooltips = shownTooltips
|
||||
@@ -140,6 +147,10 @@ public final class DefaultTooltipManager: TooltipManager {
|
||||
tooltipWindow = nil
|
||||
}
|
||||
|
||||
public func setHandler(_ handler: @escaping (UIActionEvent) -> Void) {
|
||||
handleAction = handler
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user