Files
divkit/client/ios/DivKit/Extensions/DivContainer/DivContainerSizeModifier.swift
T
pkurchatov f53e06c541 Fixed warnings for empty containers
commit_hash:a787cf0d48bcd5e06c394050aebebf50bfa0099d
2024-10-08 12:20:20 +03:00

81 lines
2.4 KiB
Swift

import LayoutKit
struct DivContainerSizeModifier: DivSizeModifier {
private static let fallbackSize: DivSize =
.divWrapContentSize(DivWrapContentSize(constrained: .value(true)))
private let shouldOverrideWidth: Bool
private let shouldOverrideHeight: Bool
init(
context: DivBlockModelingContext,
container: DivContainer,
orientation: DivContainer.Orientation
) {
let items = container.nonNilItems
if items.isEmpty {
shouldOverrideWidth = false
shouldOverrideHeight = false
return
}
let isWrapContentWidth = container.getTransformedWidth(context).isIntrinsic
switch orientation {
case .horizontal:
if isWrapContentWidth, items.hasHorizontallyMatchParent {
context.addWarning(
message: "Horizontal DivContainer with wrap_content width contains item with match_parent width"
)
shouldOverrideWidth = true
} else {
shouldOverrideWidth = false
}
case .vertical, .overlap:
if isWrapContentWidth, items.allHorizontallyMatchParent {
context.addWarning(
message: "All items in DivContainer with wrap_content width has match_parent width"
)
shouldOverrideWidth = true
} else {
shouldOverrideWidth = false
}
}
let isWrapContentHeight = container.getTransformedHeight(context).isIntrinsic
switch orientation {
case .vertical:
if isWrapContentHeight, items.hasVerticallyMatchParent {
context.addWarning(
message: "Vertical DivContainer with wrap_content height contains item with match_parent height"
)
shouldOverrideHeight = true
} else {
shouldOverrideHeight = false
}
case .horizontal, .overlap:
if isWrapContentHeight, items.allVerticallyMatchParent {
context.addWarning(
message: "All items in DivContainer with wrap_content height has match_parent height"
)
shouldOverrideHeight = true
} else {
shouldOverrideHeight = false
}
}
}
func transformWidth(_ width: DivSize) -> DivSize {
if shouldOverrideWidth, case .divMatchParentSize = width {
return Self.fallbackSize
}
return width
}
func transformHeight(_ height: DivSize) -> DivSize {
if shouldOverrideHeight, case .divMatchParentSize = height {
return Self.fallbackSize
}
return height
}
}