Files
divkit/client/ios/DivKitExtensions/ExtensionHandlers/InputAccessoryViewExtensionHandler.swift
T
pkurchatov 27a3472171 Enabled blankLinesBetweenImports swiftformat rule
commit_hash:84ea24cbdf21ef89741080f38ec5e583172a2458
2024-12-20 12:41:02 +03:00

54 lines
1.4 KiB
Swift

import DivKit
import LayoutKit
import UIKit
import VGSL
public protocol InputAccessoryViewProvider {
func getView(actions: [String: Action]) -> UIView
}
public final class InputAccessoryViewExtensionHandler: DivExtensionHandler {
public let id = "input_accessory_view"
private let viewProvider: InputAccessoryViewProvider
public init(viewProvider: InputAccessoryViewProvider) {
self.viewProvider = viewProvider
}
public func applyBeforeBaseProperties(
to block: Block,
div: DivBase,
context: DivBlockModelingContext
) -> Block {
guard let textInputBlock = block as? TextInputBlock else {
DivKitLogger.error("Invalid block for InputAccessoryViewExtension")
return block
}
var uiActions = [String: Action]()
let params = getExtensionParams(div)
if let actions = params["actions"] as? [String: [String: Any]] {
uiActions = actions.compactMapValues {
let action = DivTemplates
.empty
.parseValue(
type: DivActionTemplate.self, from: $0
).value?.uiAction(context: context)
if case let .divAction(params) = action?.payload {
return { [weak self] in
context.actionHandler?.handle(
params: params,
sender: self
)
}
}
return nil
}
}
let view = viewProvider.getView(actions: uiActions)
textInputBlock.accessoryView = view
return textInputBlock
}
}