diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index 28cadb8a..0356c108 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */; }; 445BA07829C07B3D0036A7C5 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BA07729C07B3D0036A7C5 /* Notification.swift */; }; 44604AD429CE186A00E62B51 /* NotificationButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD329CE186A00E62B51 /* NotificationButtonModel.swift */; }; 44604AD729CE196600E62B51 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD629CE196600E62B51 /* Line.swift */; }; @@ -168,6 +169,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIconBadgeIndicatorModel.swift; sourceTree = ""; }; 445BA07729C07B3D0036A7C5 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; 44604AD329CE186A00E62B51 /* NotificationButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationButtonModel.swift; sourceTree = ""; }; 44604AD629CE196600E62B51 /* Line.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = ""; }; @@ -671,6 +673,7 @@ isa = PBXGroup; children = ( EA81410A2A0E8E3C004F60D2 /* ButtonIcon.swift */, + 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */, ); path = ButtonIcon; sourceTree = ""; @@ -1060,6 +1063,7 @@ EA5E30532950DDA60082B959 /* TitleLockup.swift in Sources */, EAD062B02A3B873E0015965D /* BadgeIndicator.swift in Sources */, EAA5EEB528ECBFB4003B3210 /* ImageLabelAttribute.swift in Sources */, + 18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */, EA0B18062A9E2D2D00F2D0CD /* SelectorItemBase.swift in Sources */, EAB5FF0129424ACB00998C17 /* UIControl.swift in Sources */, EA985BF5296C60C000F2FF2E /* Icon.swift in Sources */, diff --git a/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift b/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift index 7a768c80..a15cef68 100644 --- a/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift +++ b/VDS/Components/Icon/ButtonIcon/ButtonIcon.swift @@ -99,14 +99,15 @@ open class ButtonIcon: Control { // MARK: - Public Properties //-------------------------------------------------- - ///BadgeIndicator object used to render for the ButtonIcon. + ///Badge Indicator object used to render for the ButtonIcon. open var badgeIndicator = BadgeIndicator().with { $0.translatesAutoresizingMaskIntoConstraints = false -// $0.hideBorder = true -// $0.borderWidth = 0 $0.size = .small } + /// If set, this is used to render the badge indicator. + open var badgeIndicatorModel: BadgeIndicatorModel? { didSet { setNeedsUpdate() } } + /// Icon object used to render out the Icon for this ButtonIcon. open var icon = Icon().with { $0.isUserInteractionEnabled = false } @@ -305,6 +306,8 @@ open class ButtonIcon: Control { //add the icon addSubview(icon) + + //add badgeIndicator addSubview(badgeIndicator) badgeIndicator.isHidden = !showBadge @@ -343,6 +346,7 @@ open class ButtonIcon: Control { // selectableIconName = nil showBadge = false selectable = false + badgeIndicatorModel = nil shouldUpdateView = true setNeedsUpdate() } @@ -361,6 +365,7 @@ open class ButtonIcon: Control { } else { icon.reset() } + updateBadgeIndicator() badgeIndicatorLeadingConstraint?.constant = badgeIndicatorOffset.x badgeIndicatorBottomConstraint?.constant = badgeIndicatorOffset.y setNeedsLayout() @@ -410,6 +415,29 @@ open class ButtonIcon: Control { } } + + //-------------------------------------------------- + // MARK: - Private Methods + //-------------------------------------------------- + private func updateBadgeIndicator() { + if let badgeIndicatorModel { + badgeIndicator.kind = badgeIndicatorModel.kind + badgeIndicator.fillColor = badgeIndicatorModel.fillColor + badgeIndicator.surface = badgeIndicatorModel.surface + badgeIndicator.size = badgeIndicatorModel.size + badgeIndicator.maximumDigits = badgeIndicatorModel.maximumDigits + badgeIndicator.width = badgeIndicatorModel.width + badgeIndicator.height = badgeIndicatorModel.height + badgeIndicator.number = badgeIndicatorModel.number + badgeIndicator.leadingCharacter = badgeIndicatorModel.leadingCharacter + badgeIndicator.trailingText = badgeIndicatorModel.trailingText + badgeIndicator.dotSize = badgeIndicatorModel.dotSize + badgeIndicator.verticalPadding = badgeIndicatorModel.verticalPadding + badgeIndicator.horizontalPadding = badgeIndicatorModel.horizontalPadding + badgeIndicator.hideDot = badgeIndicatorModel.hideDot + badgeIndicator.hideBorder = badgeIndicatorModel.hideBorder + } + } } // MARK: AppleGuidelinesTouchable diff --git a/VDS/Components/Icon/ButtonIcon/ButtonIconBadgeIndicatorModel.swift b/VDS/Components/Icon/ButtonIcon/ButtonIconBadgeIndicatorModel.swift new file mode 100644 index 00000000..b30e64e8 --- /dev/null +++ b/VDS/Components/Icon/ButtonIcon/ButtonIconBadgeIndicatorModel.swift @@ -0,0 +1,78 @@ +// +// ButtonIconBadgeIndicatorModel.swift +// VDS +// +// Created by Kanamarlapudi, Vasavi on 08/02/24. +// + +import Foundation + +extension ButtonIcon { + + //Model that represents the options available for the Badge Indicator + public struct BadgeIndicatorModel { + + /// Kind that will be used for the badge indicator. + public var kind: BadgeIndicator.Kind + + /// Fill color that will be used for the badge indicator. + public var fillColor: BadgeIndicator.FillColor + + /// Current Surface and this is used to pass down to child objects that implement Surfacable + public var surface: Surface + + /// Size that will be used for the badge indicator. + public var size: BadgeIndicator.Size + + /// Number of digits that will be used for the badge indicator. + public var maximumDigits: BadgeIndicator.MaximumDigits + + /// Max width that will be used for the badge indicator. + public var width: CGFloat? + + /// Max height that will be used for the badge indicator. + public var height: CGFloat? + + /// Number that will be used for the badge indicator. + public var number: Int? + + /// Leading Character that will be used for the badge indicator. + public var leadingCharacter: String? + + /// Trailing Text height that will be used for the badge indicator. + public var trailingText: String? + + /// Dot Size that will be used for the badge indicator. + public var dotSize: CGFloat? + + /// Vertical Padding that will be used for the badge indicator. + public var verticalPadding: CGFloat? + + /// Horizontal Padding that will be used for the badge indicator. + public var horizontalPadding: CGFloat? + + /// Hide Dot that will be used for the badge indicator. + public var hideDot: Bool = false + + /// Hide Border that will be used for the badge indicator. + public var hideBorder: Bool = false + + public init(kind: BadgeIndicator.Kind = .simple, fillColor: BadgeIndicator.FillColor = .red, surface: Surface = .light, size: BadgeIndicator.Size = .xxlarge, maximumDigits: BadgeIndicator.MaximumDigits = .two, width: CGFloat? = nil, height: CGFloat? = nil, number: Int? = nil, leadingCharacter: String = "", trailingText: String = "", dotSize: CGFloat? = nil, verticalPadding: CGFloat? = nil, horizontalPadding: CGFloat? = nil, hideDot: Bool = false, hideBorder: Bool = false) { + self.kind = kind + self.fillColor = fillColor + self.surface = surface + self.size = size + self.maximumDigits = maximumDigits + self.width = width + self.height = height + self.number = number + self.leadingCharacter = leadingCharacter + self.trailingText = trailingText + self.dotSize = dotSize + self.verticalPadding = verticalPadding + self.horizontalPadding = horizontalPadding + self.hideDot = hideDot + self.hideBorder = hideBorder + } + } +}