Files
divkit/client/ios/DivKitExtensions/Shimmer/ShimmerImagePreviewExtensions.swift
denlvovich e001d74afe Update to VGSL6.0
4f8b5f480ade3f347d5f0a2d01a1618069bcb846
2024-07-12 20:33:42 +03:00

56 lines
1.4 KiB
Swift

import Foundation
import UIKit
import DivKit
import LayoutKit
import VGSL
public final class ShimmerImagePreviewExtension: DivExtensionHandler {
public let id: String = extensionID
private let effectBeginTime = CACurrentMediaTime()
public init() {}
public func applyBeforeBaseProperties(
to block: Block,
div: DivBase,
context: DivBlockModelingContext
) -> Block {
guard
let block = block as? ImageBlock,
let div = div as? DivImage
else {
return block
}
let expressionResolver = context.expressionResolver
let shimmerViewProvider = ShimmerViewProvider(
style: div.resolveShimmerStyle(expressionResolver) ?? .default,
effectBeginTime: effectBeginTime,
path: context.parentPath
)
let imageHolder = context.imageHolderFactory.make(
div.resolveImageUrl(expressionResolver),
.view(shimmerViewProvider)
)
return block.makeCopy(with: imageHolder)
}
}
extension DivBase {
fileprivate func resolveShimmerStyle(
_ expressionResolver: ExpressionResolver
) -> ShimmerStyle? {
guard let shimmerExtensionsParams = extensions?.first(where: { $0.id == extensionID })?.params,
let style = try? ShimmerStyle(
dictionary: shimmerExtensionsParams,
expressionResolver: expressionResolver
) else {
return nil
}
return style
}
}
private let extensionID = "shimmer"