// // PaginationButton.swift // VDS // // Created by Bandaru, Krishna Kishore on 05/03/24. // import UIKit import VDSColorTokens open class PaginationButton: ButtonBase { private let buttonTintColorConfiguration = SurfaceColorConfiguration(VDSColor.paletteBlack, VDSColor.paletteWhite) private let buttonTextColorConfiguration = SurfaceColorConfiguration(VDSColor.paletteBlack, VDSColor.paletteWhite) @available(iOS 15.0, *) var buttonConfiguration: Button.Configuration { var configuration = ButtonBase.Configuration.plain() configuration.imagePadding = VDSLayout.Spacing.space2X.value configuration.imagePlacement = type == .next ? .trailing : .leading configuration.titleAlignment = type == .next ? .trailing : .leading configuration.contentInsets = .zero return configuration } open override var textStyle: TextStyle { TextStyle.boldBodySmall } open override var textColor: UIColor { buttonTextColorConfiguration.getColor(surface) } private var type: Type = .next init(type: Type) { self.type = type super.init() } required public init() { super.init() } public required init?(coder: NSCoder) { super.init(coder: coder) } open override func initialSetup() { super.initialSetup() if #available(iOS 15.0, *) { configuration = buttonConfiguration } else { semanticContentAttribute = type == .next ? .forceRightToLeft : .forceLeftToRight imageEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: VDSLayout.Spacing.space2X.value) } contentHorizontalAlignment = type == .next ? .trailing : .leading } open override func updateView() { text = type.title setImage(type.image, for: .normal) tintColor = buttonTintColorConfiguration.getColor(surface) super.updateView() } } extension PaginationButton { enum `Type` { case previous, next var title: String { switch self { case .next: "Next" case .previous: "Previous" } } var image: UIImage? { switch self { case .previous: BundleManager.shared.image(for: "pagination-arrow-left")?.withRenderingMode(.alwaysTemplate) case .next: BundleManager.shared.image(for: "pagination-arrow-right")?.withRenderingMode(.alwaysTemplate) } } } }