Files
divkit/client/ios/DivKitExtensions/ExtensionHandlers/InputAccessoryViewExtensionHandler.swift
babaevmm 956c055cd8 update swiftformat, add organize rule
commit_hash:0f7ba811b37db6d2a9fc05efe5f94502feda4856
2025-08-04 16:24:48 +03:00

57 lines
1.5 KiB
Swift

#if os(iOS)
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
}
}
#endif