mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
6797545374
commit_hash:8ab26a6d1a605474126fdbc3cc4314923edbc77f
41 lines
1.0 KiB
Swift
41 lines
1.0 KiB
Swift
import LayoutKit
|
|
import VGSL
|
|
|
|
extension [Div] {
|
|
func makeBlocks<T>(
|
|
context: DivBlockModelingContext,
|
|
sizeModifier: DivSizeModifier? = nil,
|
|
mappedBy modificator: (Div, Block, DivBlockModelingContext) -> T
|
|
) -> [T] {
|
|
iterativeFlatMap { div, index in
|
|
let itemContext = context.modifying(
|
|
pathSuffix: String(index),
|
|
sizeModifier: sizeModifier
|
|
)
|
|
do {
|
|
return try modifyError({
|
|
DivBlockModelingError($0.message, path: itemContext.path)
|
|
}) {
|
|
let block = try div.value.makeBlock(context: itemContext)
|
|
return modificator(div, block, itemContext)
|
|
}
|
|
} catch {
|
|
context.addError(error: error)
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func makeBlocks(context: DivBlockModelingContext) -> [Block] {
|
|
makeBlocks(context: context, mappedBy: { _, block, _ in block })
|
|
}
|
|
}
|
|
|
|
extension Array where Element: Hashable {
|
|
var nonUniqueElements: [Element] {
|
|
countElements()
|
|
.filter { $0.value > 1 }
|
|
.map(\.key)
|
|
}
|
|
}
|