Digital ACT-191 ONEAPP-7013 story: Adjust slot width if scrollbar suppressed and/or based on peek value

This commit is contained in:
Vasavi Kanamarlapudi 2024-06-24 18:42:07 +05:30
parent 0b47d70352
commit 0840ed5ed3

View File

@ -247,7 +247,7 @@ open class Carousel: View {
internal var _paginationDisplay: PaginationDisplay = .none
internal var _paginationInset: CGFloat = UIDevice.isIPad ? VDSLayout.space3X : VDSLayout.space2X
internal var _gutter: Gutter = UIDevice.isIPad ? .twentyFourPX : .twelvePX
internal var _peek: Peek = .none
internal var _peek: Peek = .standard
internal var _numberOfSlides: Int = 1
private var _width: Width? = nil
@ -324,11 +324,17 @@ open class Carousel: View {
carouselScrollBar.position = (carouselScrollBar.position == 0 || carouselScrollBar.position > carouselScrollBar.numberOfSlides) ? 1 : carouselScrollBar.position
carouselScrollBar.isHidden = (totalPositions() <= 1) ? true : false
// When peek is set to none, pagination controls are automatically set to persistent.
// Mobile/Tablet layouts without peek - must show pagination controls.
// If peek is none, pagination controls should show. So set to persistent.
if peek == .none {
paginationDisplay = .persistent
}
// Minimum (Mobile only) Supported only on Mobile viewports. If a user passes Minimum for tablet carousel, the peek reverts to Standard.
if UIDevice.isIPad && peek == .minimum {
peek = .standard
}
containerViewHeightConstraint?.isActive = false
containerStackHeightConstraint?.isActive = false
updatePaginationControls()
@ -438,20 +444,26 @@ open class Carousel: View {
func getSlotWidth() {
let actualWidth = containerView.frame.size.width
minimumSlotWidth = actualWidth - (CGFloat(layout.value) * gutter.value)
switch peek {
case .standard:
// Supported for all Tablet viewports and layouts.
// Supported only for 1up layouts on Mobile viewports.
if UIDevice.isIPad {
minimumSlotWidth = minimumSlotWidth - (minimumSlotWidth/(CGFloat(layout.value) + 2))
} else if layout == .oneUP {
minimumSlotWidth = minimumSlotWidth - (minimumSlotWidth/4)
let isScrollbarSuppressed = data.count > 0 && layout.value == data.count
let isPeekMinimumOnTablet = UIDevice.isIPad && peek == .minimum
let isPeekNone: Bool = peek == .none
minimumSlotWidth = isScrollbarSuppressed || isPeekMinimumOnTablet || isPeekNone ? actualWidth - ((CGFloat(layout.value)-1) * gutter.value): actualWidth - (CGFloat(layout.value) * gutter.value)
if !isScrollbarSuppressed {
switch peek {
case .standard:
// Standard(Default) Peek - Supported for all Tablet viewports and layouts. Supported only for 1up layouts on Mobile viewports.
if UIDevice.isIPad {
minimumSlotWidth = minimumSlotWidth - (minimumSlotWidth/(CGFloat(layout.value) + 3))
} else if layout == .oneUP {
minimumSlotWidth = minimumSlotWidth - (minimumSlotWidth/4)
}
case .minimum:
// Peek Mimumum Width: 24px from edge of container (at the default view of the carousel with one peek visible)
// Minimum (Mobile only) Supported only on Mobile viewports. If a user passes Minimum for tablet carousel, the peek reverts to Standard.
minimumSlotWidth = isPeekMinimumOnTablet ? minimumSlotWidth : minimumSlotWidth - peekMinimum
case .none:
break
}
case .minimum:
minimumSlotWidth = minimumSlotWidth - peekMinimum
case .none:
break
}
minimumSlotWidth = minimumSlotWidth / CGFloat(layout.value)
}