From ff5c8c0c6a446ad05a331af016a0a409445b7ad6 Mon Sep 17 00:00:00 2001 From: "Nandi, Dhamodaram" Date: Mon, 15 Feb 2021 05:21:45 -0500 Subject: [PATCH 01/24] Fix for CXTDT-155147 --- .../ListRightVariableRightCaretAlltextAndLinks.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift index 3b6a5b76..d7954f96 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift @@ -22,7 +22,7 @@ public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { // Fill for left vertical alignment because bottom constraint was breaking with leading. CXTDT-145456 - stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .fill)), (view: rightLabel, model: StackItemModel(horizontalAlignment:.fill, verticalAlignment: .leading))], axis: .horizontal) + stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .top)), (view: rightLabel, model: StackItemModel(horizontalAlignment: .trailing, verticalAlignment: .top))], axis: .horizontal) super.init(style: style, reuseIdentifier: reuseIdentifier) } @@ -37,6 +37,7 @@ open override func setupView() { super.setupView() rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal) + rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 900), for: .horizontal) addMolecule(stack) stack.restack() } From 069db3c913188f44092933e7883894038bea2cf7 Mon Sep 17 00:00:00 2001 From: "Nandi, Dhamodaram" Date: Mon, 15 Feb 2021 05:31:14 -0500 Subject: [PATCH 02/24] discarded vertical alignment changes --- .../ListRightVariableRightCaretAlltextAndLinks.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift index d7954f96..943a11da 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift @@ -22,7 +22,7 @@ public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { // Fill for left vertical alignment because bottom constraint was breaking with leading. CXTDT-145456 - stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .top)), (view: rightLabel, model: StackItemModel(horizontalAlignment: .trailing, verticalAlignment: .top))], axis: .horizontal) + stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .fill)), (view: rightLabel, model: StackItemModel(horizontalAlignment: .trailing, verticalAlignment: .top))], axis: .horizontal) super.init(style: style, reuseIdentifier: reuseIdentifier) } From e91faf857fc98521cfb110d3a1cbb0c1c2e8d798 Mon Sep 17 00:00:00 2001 From: "Nandi, Dhamodaram" Date: Mon, 15 Feb 2021 09:43:43 -0500 Subject: [PATCH 03/24] updated --- .../ListRightVariableRightCaretAlltextAndLinks.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift index 943a11da..12f11b9e 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift @@ -22,7 +22,7 @@ public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { // Fill for left vertical alignment because bottom constraint was breaking with leading. CXTDT-145456 - stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .fill)), (view: rightLabel, model: StackItemModel(horizontalAlignment: .trailing, verticalAlignment: .top))], axis: .horizontal) + stack = Stack.createStack(with: [(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading, verticalAlignment: .fill)), (view: rightLabel, model: StackItemModel(horizontalAlignment: .trailing, verticalAlignment: .leading))], axis: .horizontal) super.init(style: style, reuseIdentifier: reuseIdentifier) } From a1b7e81dfc7805bfb5a68e1996799c8a11860606 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Tue, 16 Feb 2021 07:24:36 +0530 Subject: [PATCH 04/24] Added number of lines for rightlabel. --- .../ListRightVariableRightCaretAlltextAndLinks.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift index 12f11b9e..3a342b6a 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableRightCaretAlltextAndLinks.swift @@ -38,6 +38,7 @@ super.setupView() rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal) rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 900), for: .horizontal) + rightLabel.numberOfLines = 1 addMolecule(stack) stack.restack() } From 88ff5b2b9dc7d671db35b96ea83b27c4c8c34b4c Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Tue, 16 Feb 2021 23:24:42 +0530 Subject: [PATCH 05/24] Carousel form changes --- .../Atomic/Molecules/Items/CarouselItem.swift | 5 +++ .../Molecules/Items/CarouselItemModel.swift | 4 +++ .../Atomic/Organisms/Carousel/Carousel.swift | 12 +++++++ .../Organisms/Carousel/CarouselModel.swift | 33 +++++++++++++++++-- 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift b/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift index a37fe016..235e1f58 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift @@ -8,12 +8,17 @@ import Foundation +@objc public protocol CarouselItemSelected: class { + func itemSelected(fieldValue: String?, index: Int) +} + open class CarouselItem: MoleculeCollectionViewCell, CarouselItemProtocol { open var allowsPeaking = false var peakingLeftArrow = UIImageView(image: MVMCoreUIUtility.imageNamed("peakingRightArrow")?.withRenderingMode(.alwaysTemplate)) var peakingRightArrow = UIImageView(image: MVMCoreUIUtility.imageNamed("peakingRightArrow")?.withRenderingMode(.alwaysTemplate)) var peakingCover = MVMCoreUICommonViewsUtility.commonView() + @objc public weak var carouselDelegate: CarouselItemSelected? open override func addMolecule(_ molecule: MoleculeViewProtocol) { super.addMolecule(molecule) diff --git a/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift b/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift index be67bfca..163909cb 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift @@ -21,6 +21,7 @@ import Foundation public var peakingUI: Bool? public var peakingArrowColor: Color? public var analyticsData: JSONValueDictionary? + public var fieldValue: String? //-------------------------------------------------- // MARK: - Keys @@ -30,6 +31,7 @@ import Foundation case peakingUI case peakingArrowColor case analyticsData + case fieldValue } //-------------------------------------------------- @@ -41,6 +43,7 @@ import Foundation peakingUI = try typeContainer.decodeIfPresent(Bool.self, forKey: .peakingUI) peakingArrowColor = try typeContainer.decodeIfPresent(Color.self, forKey: .peakingArrowColor) analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData) + fieldValue = try typeContainer.decodeIfPresent(String.self, forKey: .fieldValue) try super.init(from: decoder) } @@ -50,5 +53,6 @@ import Foundation try container.encodeIfPresent(peakingUI, forKey: .peakingUI) try container.encodeIfPresent(peakingArrowColor, forKey: .peakingArrowColor) try container.encodeIfPresent(analyticsData, forKey: .analyticsData) + try container.encodeIfPresent(fieldValue, forKey: .fieldValue) } } diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift index 31222828..d13d8294 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift @@ -167,6 +167,7 @@ open class Carousel: View { registerCells(with: carouselModel, delegateObject: delegateObject) prepareMolecules(with: carouselModel) + FormValidator.setupValidation(for: carouselModel, delegate: delegateObject?.formHolderDelegate) setupPagingMolecule(carouselModel.pagingMolecule, delegateObject: delegateObject) @@ -385,6 +386,7 @@ extension Carousel: UICollectionViewDataSource { protocolCell.set(with: moleculeInfo.molecule, delegateObject, nil) } (cell as? MVMCoreViewProtocol)?.updateView(size ?? collectionView.bounds.width) + (cell as? CarouselItem)?.carouselDelegate = self setAccessiblity(cell, index: indexPath.row) return cell } @@ -624,3 +626,13 @@ class CarouselAccessibilityElement: UIAccessibilityElement { return false } } + +extension Carousel: CarouselItemSelected { + public func itemSelected(fieldValue: String?, index: Int) { + if fieldValue != nil { + (model as? CarouselModel)?.selectedIndex = fieldValue + } else { + (model as? CarouselModel)?.selectedIndex = String(index) + } + } +} diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift index ca0a4a10..caa9f844 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift @@ -9,7 +9,8 @@ import UIKit -@objcMembers public class CarouselModel: MoleculeModelProtocol { +@objcMembers public class CarouselModel: MoleculeModelProtocol, FormFieldProtocol { + //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -33,11 +34,30 @@ import UIKit public var leftPadding: CGFloat? public var rightPadding: CGFloat? public var accessibilityText: String? - + public var selectedIndex: String? + public var baseValue: AnyHashable? + public var fieldKey: String? + public var groupName: String = FormValidator.defaultGroupName + public init(molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]) { self.molecules = molecules } + public func formFieldValue() -> AnyHashable? { + var carouselItemFieldValue: AnyHashable? + guard let visibleCarouselItem = molecules[index] as? CarouselItemModel else { + return nil + } + if selectedIndex != nil { + //For selectableCarouselItem + carouselItemFieldValue = selectedIndex + } else { + //For carouselItem + carouselItemFieldValue = (visibleCarouselItem.fieldValue != nil) ? visibleCarouselItem.fieldValue : String(index) + } + return carouselItemFieldValue + } + //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- @@ -59,6 +79,8 @@ import UIKit case leftPadding case rightPadding case accessibilityText + case groupName + case fieldKey } //-------------------------------------------------- @@ -86,6 +108,11 @@ import UIKit leftPadding = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .leftPadding) rightPadding = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .rightPadding) accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText) + fieldKey = try typeContainer.decodeIfPresent(String.self, forKey: .fieldKey) + if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) { + self.groupName = groupName + } + baseValue = formFieldValue() } public func encode(to encoder: Encoder) throws { @@ -105,5 +132,7 @@ import UIKit try container.encodeIfPresent(leftPadding, forKey: .leftPadding) try container.encodeIfPresent(rightPadding, forKey: .rightPadding) try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText) + try container.encodeIfPresent(fieldKey, forKey: .fieldKey) + try container.encode(groupName, forKey: .groupName) } } From d0326a9b3031744dd355442d7f23f9e9230a89bd Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Wed, 17 Feb 2021 17:57:19 +0530 Subject: [PATCH 06/24] infinite loop crash fix in setting up bottom progress bar --- .../SplitViewController/MVMCoreUISplitViewController.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 7377701b..86cc08eb 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -824,14 +824,14 @@ CGFloat const PanelAnimationDuration = 0.2; [MVMCoreDispatchUtility performBlockOnMainThread:^{ if (self.bottomProgressBarHeightConstraint.constant != PaddingOne) { self.bottomProgressBarHeightConstraint.constant = PaddingOne; - [self.bottomProgressBar.superview layoutIfNeeded]; + [self.bottomProgressBar updateConstraintsIfNeeded]; } if (progress > 0.05) { self.bottomProgressBar.progress = progress; } else { self.bottomProgressBarHeightConstraint.constant = 0; - [self.bottomProgressBar.superview layoutIfNeeded]; + [self.bottomProgressBar updateConstraintsIfNeeded]; } }]; } From 76031200fa024ab3440967a35a39b455d869bf7a Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Thu, 18 Feb 2021 23:45:26 +0530 Subject: [PATCH 07/24] reverting code which was added for infinite loop crash only in ipads and force crash --- .../SplitViewController/MVMCoreUISplitViewController.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 86cc08eb..7377701b 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -824,14 +824,14 @@ CGFloat const PanelAnimationDuration = 0.2; [MVMCoreDispatchUtility performBlockOnMainThread:^{ if (self.bottomProgressBarHeightConstraint.constant != PaddingOne) { self.bottomProgressBarHeightConstraint.constant = PaddingOne; - [self.bottomProgressBar updateConstraintsIfNeeded]; + [self.bottomProgressBar.superview layoutIfNeeded]; } if (progress > 0.05) { self.bottomProgressBar.progress = progress; } else { self.bottomProgressBarHeightConstraint.constant = 0; - [self.bottomProgressBar updateConstraintsIfNeeded]; + [self.bottomProgressBar.superview layoutIfNeeded]; } }]; } From 028341aa41f4f99e0bfce6a2e89b9099dca9fe07 Mon Sep 17 00:00:00 2001 From: Krishna Kishore Bandaru Date: Tue, 23 Feb 2021 17:16:54 +0530 Subject: [PATCH 08/24] changed access specifier public to open for Button model and static property to class property --- MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift b/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift index 52ade755..641d995c 100644 --- a/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift @@ -11,12 +11,14 @@ import UIKit public typealias FacadeElements = (fill: UIColor?, text: UIColor?, border: UIColor?) -public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupWatcherFieldProtocol, EnableableModelProtocol { +open class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupWatcherFieldProtocol, EnableableModelProtocol { //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- - - public static var identifier: String = "button" + //Making static property as class property so that subclasses can override getter function of the property + open class var identifier: String { + "button" + } public var backgroundColor: Color? public var accessibilityIdentifier: String? public var title: String @@ -247,7 +249,7 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW } } - public func encode(to encoder: Encoder) throws { + open func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(moleculeName, forKey: .moleculeName) try container.encode(title, forKey: .title) From 8a861077dd824a3af4a6c162ceefa56ac4f8d991 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 23 Feb 2021 14:56:23 -0500 Subject: [PATCH 09/24] styler additon. label width value --- .../Atomic/Atoms/Views/Label/Label.swift | 4 +++- MVMCoreUI/Styles/Styler.swift | 24 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 7e902d435..8838966c 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -594,7 +594,6 @@ public typealias ActionBlock = () -> () attributedText = attributedString } - @objc public func updateView(_ size: CGFloat) { scaleSize = size as NSNumber @@ -624,6 +623,9 @@ public typealias ActionBlock = () -> () } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { font = font.updateSize(sizeObject.getValueBased(onSize: size)) } + + // Provide the label additional size information to help calculate its intrinsic content. + preferredMaxLayoutWidth = Styler.maxAvailableLayoutWidth(size: size) } @objc public func setFont(_ font: UIFont, scale: Bool) { diff --git a/MVMCoreUI/Styles/Styler.swift b/MVMCoreUI/Styles/Styler.swift index c0dd6792..b2614f04 100644 --- a/MVMCoreUI/Styles/Styler.swift +++ b/MVMCoreUI/Styles/Styler.swift @@ -209,7 +209,29 @@ open class Styler { } open class func sizeFontGeneric(forCurrentDevice size: CGFloat) -> CGFloat { - return sizeObjectGeneric(forCurrentDevice: size)?.getValueBasedOnApplicationWidth() ?? size + sizeObjectGeneric(forCurrentDevice: size)?.getValueBasedOnApplicationWidth() ?? size + } + + open class func defaultHorizontalPadding(for size: CGFloat) -> CGFloat { + sizeObject(withScalingStandardSize: CGFloat(Padding.Component.horizontalPaddingForApplicationWidth)).getValueBased(onSize: size) + } + + open class func defaultVerticalPadding(for size: CGFloat) -> CGFloat { + sizeObject(withScalingStandardSize: CGFloat(Padding.Component.verticalPaddingForApplicationWidth)).getValueBased(onSize: size) + } + + open class func sizeObject(withScalingStandardSize standardSize: CGFloat) -> MFSizeObject { + let object = MFSizeObject() + object.standardSize = standardSize + object.scaleStandardSize = true + return object + } + + /// Provide additional size information to help calculate its intrinsic height. + /// - Returns: The available spacing that can be used for intrinsic content width. + open class func maxAvailableLayoutWidth(size: CGFloat) -> CGFloat { + // The 2 is the product of both sides of padding. + size - (defaultHorizontalPadding(for: size) * 2) } //-------------------------------------------------- From cd94f99f6076eb3ae816e4a78e55dfe35f3df458 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 23 Feb 2021 15:33:03 -0500 Subject: [PATCH 10/24] error check. --- MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 8838966c..3d57d0aa 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -836,7 +836,10 @@ extension Label { fileprivate func setActionAttributes(range: NSRange) { - guard let attributedText = attributedText else { return } + guard let attributedText = attributedText, + range.length > 0, + range.length <= attributedText.length + else { return } let mutableAttributedString = NSMutableAttributedString(attributedString: attributedText) addActionAttributes(range: range, string: mutableAttributedString) From f20895627f6c8649a309b8df1595fc1c65149d7a Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 23 Feb 2021 15:34:28 -0500 Subject: [PATCH 11/24] undo --- MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 8838966c..7e902d435 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -594,6 +594,7 @@ public typealias ActionBlock = () -> () attributedText = attributedString } + @objc public func updateView(_ size: CGFloat) { scaleSize = size as NSNumber @@ -623,9 +624,6 @@ public typealias ActionBlock = () -> () } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { font = font.updateSize(sizeObject.getValueBased(onSize: size)) } - - // Provide the label additional size information to help calculate its intrinsic content. - preferredMaxLayoutWidth = Styler.maxAvailableLayoutWidth(size: size) } @objc public func setFont(_ font: UIFont, scale: Bool) { From 55217c21c3e29321f91982ccdfeed3ea0c3ee072 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 24 Feb 2021 10:14:05 -0500 Subject: [PATCH 12/24] undo --- MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 91521b9b..511fb4dc 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -624,6 +624,9 @@ public typealias ActionBlock = () -> () } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { font = font.updateSize(sizeObject.getValueBased(onSize: size)) } + + // Provide the label additional size information to help calculate its intrinsic content. + preferredMaxLayoutWidth = Styler.maxAvailableLayoutWidth(size: size) } @objc public func setFont(_ font: UIFont, scale: Bool) { @@ -834,10 +837,7 @@ extension Label { fileprivate func setActionAttributes(range: NSRange) { - guard let attributedText = attributedText, - range.length > 0, - range.length <= attributedText.length - else { return } + guard let attributedText = attributedText else { return } let mutableAttributedString = NSMutableAttributedString(attributedString: attributedText) addActionAttributes(range: range, string: mutableAttributedString) From 10a91bd1ed38e052f8e59e52d0386f391e161c1d Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 24 Feb 2021 11:19:31 -0500 Subject: [PATCH 13/24] revised --- MVMCoreUI/Styles/Padding.swift | 10 ++++------ MVMCoreUI/Styles/Styler.swift | 17 +---------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 0dd9ff6e..480896a0 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -6,8 +6,6 @@ // Copyright © 2020 Verizon Wireless. All rights reserved. // -import Foundation - /// Padding is a multiple based on the number 4. public struct Padding { @@ -30,19 +28,19 @@ public struct Padding { public static let VerticalMarginSpacing: CGFloat = 24 public static var horizontalPaddingForApplicationWidth: CGFloat { - return MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? HorizontalMarginSpacing + MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? HorizontalMarginSpacing } public static var verticalPaddingForApplicationWidth: CGFloat { - return MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? VerticalMarginSpacing + MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? VerticalMarginSpacing } public static func horizontalPaddingForSize(_ size: CGFloat) -> CGFloat { - return MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBased(onSize: size) ?? HorizontalMarginSpacing + MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBased(onSize: size) ?? HorizontalMarginSpacing } public static func verticalPaddingForSize(_ size: CGFloat) -> CGFloat { - return MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBased(onSize: size) ?? VerticalMarginSpacing + MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBased(onSize: size) ?? VerticalMarginSpacing } } } diff --git a/MVMCoreUI/Styles/Styler.swift b/MVMCoreUI/Styles/Styler.swift index b2614f04..77402295 100644 --- a/MVMCoreUI/Styles/Styler.swift +++ b/MVMCoreUI/Styles/Styler.swift @@ -212,26 +212,11 @@ open class Styler { sizeObjectGeneric(forCurrentDevice: size)?.getValueBasedOnApplicationWidth() ?? size } - open class func defaultHorizontalPadding(for size: CGFloat) -> CGFloat { - sizeObject(withScalingStandardSize: CGFloat(Padding.Component.horizontalPaddingForApplicationWidth)).getValueBased(onSize: size) - } - - open class func defaultVerticalPadding(for size: CGFloat) -> CGFloat { - sizeObject(withScalingStandardSize: CGFloat(Padding.Component.verticalPaddingForApplicationWidth)).getValueBased(onSize: size) - } - - open class func sizeObject(withScalingStandardSize standardSize: CGFloat) -> MFSizeObject { - let object = MFSizeObject() - object.standardSize = standardSize - object.scaleStandardSize = true - return object - } - /// Provide additional size information to help calculate its intrinsic height. /// - Returns: The available spacing that can be used for intrinsic content width. open class func maxAvailableLayoutWidth(size: CGFloat) -> CGFloat { // The 2 is the product of both sides of padding. - size - (defaultHorizontalPadding(for: size) * 2) + size - (Padding.Component.horizontalPaddingForSize(size) * 2) } //-------------------------------------------------- From 1c2cd9ff6487669b9cede0a84cef93cf12905338 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Fri, 26 Feb 2021 21:30:10 +0530 Subject: [PATCH 14/24] Code changes after review comment. --- .../Atomic/Molecules/Items/CarouselItem.swift | 5 ----- .../Atomic/Organisms/Carousel/Carousel.swift | 21 ++++++++----------- .../CollectionTemplateItemProtocol.swift | 9 ++++++++ .../BaseClasses/CollectionViewCell.swift | 5 +++++ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift b/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift index 235e1f58..a37fe016 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/CarouselItem.swift @@ -8,17 +8,12 @@ import Foundation -@objc public protocol CarouselItemSelected: class { - func itemSelected(fieldValue: String?, index: Int) -} - open class CarouselItem: MoleculeCollectionViewCell, CarouselItemProtocol { open var allowsPeaking = false var peakingLeftArrow = UIImageView(image: MVMCoreUIUtility.imageNamed("peakingRightArrow")?.withRenderingMode(.alwaysTemplate)) var peakingRightArrow = UIImageView(image: MVMCoreUIUtility.imageNamed("peakingRightArrow")?.withRenderingMode(.alwaysTemplate)) var peakingCover = MVMCoreUICommonViewsUtility.commonView() - @objc public weak var carouselDelegate: CarouselItemSelected? open override func addMolecule(_ molecule: MoleculeViewProtocol) { super.addMolecule(molecule) diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift index d13d8294..b9475938 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift @@ -386,7 +386,6 @@ extension Carousel: UICollectionViewDataSource { protocolCell.set(with: moleculeInfo.molecule, delegateObject, nil) } (cell as? MVMCoreViewProtocol)?.updateView(size ?? collectionView.bounds.width) - (cell as? CarouselItem)?.carouselDelegate = self setAccessiblity(cell, index: indexPath.row) return cell } @@ -394,7 +393,15 @@ extension Carousel: UICollectionViewDataSource { extension Carousel: UICollectionViewDelegate { open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - (collectionView.cellForItem(at: indexPath) as? CollectionTemplateItemProtocol)?.didSelectCell(at: indexPath, delegateObject: delegateObject, additionalData: nil) + guard let cell = collectionView.cellForItem(at: indexPath) as? CollectionTemplateItemProtocol else { + return + } + cell.didSelectCell(at: indexPath, delegateObject: delegateObject, additionalData: nil) + //Check for selectable carousel item + guard let carouselModel = model as? CarouselModel, let selectedCarouselItem = carouselModel.molecules[indexPath.row] as? CarouselItemModel, cell.shouldSelect(at: indexPath, delegateObject: delegateObject, additionalData: nil) else { + return + } + carouselModel.selectedIndex = selectedCarouselItem.fieldValue ?? String(indexPath.row) } } @@ -626,13 +633,3 @@ class CarouselAccessibilityElement: UIAccessibilityElement { return false } } - -extension Carousel: CarouselItemSelected { - public func itemSelected(fieldValue: String?, index: Int) { - if fieldValue != nil { - (model as? CarouselModel)?.selectedIndex = fieldValue - } else { - (model as? CarouselModel)?.selectedIndex = String(index) - } - } -} diff --git a/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift b/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift index 55db2c6d..98c9754e 100644 --- a/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift +++ b/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift @@ -19,6 +19,10 @@ public protocol CollectionTemplateItemProtocol: UICollectionViewCell { /// Called when the cell will display. func willDisplay() + + /// Handle the selection of cell + func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) -> Bool + } // Default implementation does nothing @@ -26,4 +30,9 @@ extension CollectionTemplateItemProtocol { public func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {} public func willDisplay() {} + + public func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) -> Bool { + return false + } + } diff --git a/MVMCoreUI/BaseClasses/CollectionViewCell.swift b/MVMCoreUI/BaseClasses/CollectionViewCell.swift index 4ac48dfc..aff6dffb 100644 --- a/MVMCoreUI/BaseClasses/CollectionViewCell.swift +++ b/MVMCoreUI/BaseClasses/CollectionViewCell.swift @@ -132,4 +132,9 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo autoLayoutAttributes.frame = newFrame return autoLayoutAttributes } + + // Set default to false + open func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) -> Bool { + return false + } } From 8465208d0b8f663d57490b0d5bf1f19353993d8e Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 1 Mar 2021 12:41:54 -0500 Subject: [PATCH 15/24] Changes for form validator to work --- .../Molecules/Items/CarouselItemModel.swift | 2 ++ .../Atomic/Organisms/Carousel/Carousel.swift | 28 ++++++++++++++----- .../Organisms/Carousel/CarouselModel.swift | 28 ++++++++++--------- .../CarouselItemModelProtocol.swift | 3 ++ .../CollectionTemplateItemProtocol.swift | 2 -- .../BaseClasses/CollectionViewCell.swift | 15 +++++----- 6 files changed, 48 insertions(+), 30 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift b/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift index 163909cb..19348070 100644 --- a/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift +++ b/MVMCoreUI/Atomic/Molecules/Items/CarouselItemModel.swift @@ -23,6 +23,8 @@ import Foundation public var analyticsData: JSONValueDictionary? public var fieldValue: String? + public func formFieldValue() -> AnyHashable? { return fieldValue } + //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift index b9475938..a671726c 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/Carousel.swift @@ -174,6 +174,10 @@ open class Carousel: View { pageIndex = carouselModel.index pagingView?.currentIndex = carouselModel.index collectionView.reloadData() + if let selectedIndex = carouselModel.selectedIndex { + let adjustedIndex = loop ? selectedIndex + 2 : selectedIndex + collectionView.selectItem(at: IndexPath(row: adjustedIndex, section: 0), animated: false, scrollPosition: []) + } } //-------------------------------------------------- @@ -392,16 +396,25 @@ extension Carousel: UICollectionViewDataSource { } extension Carousel: UICollectionViewDelegate { + public func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { + guard let cell = collectionView.cellForItem(at: indexPath) as? CollectionTemplateItemProtocol else { return false } + return cell.shouldSelect(at: indexPath, delegateObject: delegateObject, additionalData: nil) + } + open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let cell = collectionView.cellForItem(at: indexPath) as? CollectionTemplateItemProtocol else { - return + // Set the selection in the model + if let model = model as? CarouselModel { + // Adjust for looping + var adjustedIndex = loop ? indexPath.row - 2 : indexPath.row + if adjustedIndex < 0 { + adjustedIndex = adjustedIndex + numberOfPages + } + model.selectedIndex = adjustedIndex } - cell.didSelectCell(at: indexPath, delegateObject: delegateObject, additionalData: nil) - //Check for selectable carousel item - guard let carouselModel = model as? CarouselModel, let selectedCarouselItem = carouselModel.molecules[indexPath.row] as? CarouselItemModel, cell.shouldSelect(at: indexPath, delegateObject: delegateObject, additionalData: nil) else { - return + if let cell = collectionView.cellForItem(at: indexPath) as? CollectionTemplateItemProtocol { + cell.didSelectCell(at: indexPath, delegateObject: delegateObject, additionalData: nil) } - carouselModel.selectedIndex = selectedCarouselItem.fieldValue ?? String(indexPath.row) + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } } @@ -423,6 +436,7 @@ extension Carousel: UIScrollViewDelegate { if !animated { scrollViewDidEndScrollingAnimation(collectionView) } + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } /// Adjusts the current contentOffset if we are going onto buffer cells while looping to help with the endless scrolling appearance. diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift index caa9f844..96e7e3f0 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift @@ -22,6 +22,7 @@ import UIKit public var backgroundColor: Color? public var molecules: [MoleculeModelProtocol & CarouselItemModelProtocol] public var index: Int = 0 + public var selectedIndex: Int? public var spacing: CGFloat? public var border: Bool? public var loop: Bool? @@ -34,7 +35,6 @@ import UIKit public var leftPadding: CGFloat? public var rightPadding: CGFloat? public var accessibilityText: String? - public var selectedIndex: String? public var baseValue: AnyHashable? public var fieldKey: String? public var groupName: String = FormValidator.defaultGroupName @@ -44,18 +44,12 @@ import UIKit } public func formFieldValue() -> AnyHashable? { - var carouselItemFieldValue: AnyHashable? - guard let visibleCarouselItem = molecules[index] as? CarouselItemModel else { - return nil + let indexForForm = selectedIndex ?? index + let item = molecules[indexForForm] + guard let value = item.formFieldValue() else { + return indexForForm } - if selectedIndex != nil { - //For selectableCarouselItem - carouselItemFieldValue = selectedIndex - } else { - //For carouselItem - carouselItemFieldValue = (visibleCarouselItem.fieldValue != nil) ? visibleCarouselItem.fieldValue : String(index) - } - return carouselItemFieldValue + return value } //-------------------------------------------------- @@ -67,6 +61,7 @@ import UIKit case backgroundColor case molecules case index + case selectedIndex case spacing case border case loop @@ -91,6 +86,7 @@ import UIKit let typeContainer = try decoder.container(keyedBy: CodingKeys.self) molecules = try typeContainer.decodeModels(codingKey: .molecules) index = try typeContainer.decodeIfPresent(Int.self, forKey: .index) ?? 0 + selectedIndex = try typeContainer.decodeIfPresent(Int.self, forKey: .selectedIndex) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) border = try typeContainer.decodeIfPresent(Bool.self, forKey: .border) @@ -112,7 +108,13 @@ import UIKit if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) { self.groupName = groupName } - baseValue = formFieldValue() + if let value = formFieldValue() { + baseValue = value + } else if let value = selectedIndex { + baseValue = value + } else { + baseValue = index + } } public func encode(to encoder: Encoder) throws { diff --git a/MVMCoreUI/Atomic/Protocols/ModelProtocols/CarouselItemModelProtocol.swift b/MVMCoreUI/Atomic/Protocols/ModelProtocols/CarouselItemModelProtocol.swift index c2ade02d..2ed2ca5a 100644 --- a/MVMCoreUI/Atomic/Protocols/ModelProtocols/CarouselItemModelProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/ModelProtocols/CarouselItemModelProtocol.swift @@ -11,11 +11,14 @@ import Foundation public protocol CarouselItemModelProtocol: ContainerModelProtocol { var analyticsData: JSONValueDictionary? { get set } + func formFieldValue() -> AnyHashable? } + public extension CarouselItemModelProtocol { var analyticsData: JSONValueDictionary? { get { return nil } set { analyticsData = newValue } } + func formFieldValue() -> AnyHashable? { return nil } } diff --git a/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift b/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift index 98c9754e..4e9ae26d 100644 --- a/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift +++ b/MVMCoreUI/Atomic/Templates/CollectionTemplateItemProtocol.swift @@ -22,7 +22,6 @@ public protocol CollectionTemplateItemProtocol: UICollectionViewCell { /// Handle the selection of cell func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) -> Bool - } // Default implementation does nothing @@ -34,5 +33,4 @@ extension CollectionTemplateItemProtocol { public func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) -> Bool { return false } - } diff --git a/MVMCoreUI/BaseClasses/CollectionViewCell.swift b/MVMCoreUI/BaseClasses/CollectionViewCell.swift index aff6dffb..2b4d81d8 100644 --- a/MVMCoreUI/BaseClasses/CollectionViewCell.swift +++ b/MVMCoreUI/BaseClasses/CollectionViewCell.swift @@ -116,11 +116,15 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo // MARK: - Override - open func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) { - guard let action = model?.action else { return } - Button.performButtonAction(with: action, button: self, delegateObject: delegateObject, additionalData: additionalData) + open func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) -> Bool { + if let action = model?.action { + Button.performButtonAction(with: action, button: self, delegateObject: delegateObject, additionalData: additionalData) + } + return true } + open func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {} + // Column logic, set width. override open func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes { let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes) @@ -132,9 +136,4 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo autoLayoutAttributes.frame = newFrame return autoLayoutAttributes } - - // Set default to false - open func shouldSelect(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) -> Bool { - return false - } } From 9b9b7750708e13db8569ba3936b8678a1ece1dae Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 1 Mar 2021 12:58:32 -0500 Subject: [PATCH 16/24] undo testing change --- MVMCoreUI/BaseClasses/CollectionViewCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/BaseClasses/CollectionViewCell.swift b/MVMCoreUI/BaseClasses/CollectionViewCell.swift index 2b4d81d8..cfbe4ac7 100644 --- a/MVMCoreUI/BaseClasses/CollectionViewCell.swift +++ b/MVMCoreUI/BaseClasses/CollectionViewCell.swift @@ -120,7 +120,7 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo if let action = model?.action { Button.performButtonAction(with: action, button: self, delegateObject: delegateObject, additionalData: additionalData) } - return true + return false } open func didSelectCell(at index: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable : Any]?) {} From 7aab88c5ecbb0625070c9bdd6b93cc852ad8a39d Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 1 Mar 2021 14:42:58 -0500 Subject: [PATCH 17/24] added selectable flag to match how android validates --- .../Organisms/Carousel/CarouselModel.swift | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift index 96e7e3f0..5bf0728c 100644 --- a/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift +++ b/MVMCoreUI/Atomic/Organisms/Carousel/CarouselModel.swift @@ -22,7 +22,6 @@ import UIKit public var backgroundColor: Color? public var molecules: [MoleculeModelProtocol & CarouselItemModelProtocol] public var index: Int = 0 - public var selectedIndex: Int? public var spacing: CGFloat? public var border: Bool? public var loop: Bool? @@ -39,17 +38,25 @@ import UIKit public var fieldKey: String? public var groupName: String = FormValidator.defaultGroupName + public var selectable = false + public var selectedIndex: Int? + public init(molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]) { self.molecules = molecules } public func formFieldValue() -> AnyHashable? { - let indexForForm = selectedIndex ?? index - let item = molecules[indexForForm] - guard let value = item.formFieldValue() else { - return indexForForm + guard selectable else { + // Use visible item value, else index + if let fieldValue = molecules[index].formFieldValue() { + return fieldValue + } + return index } - return value + // Use selected item value, else index + guard let selectedIndex = selectedIndex else { return nil } + guard let fieldValue = molecules[selectedIndex].formFieldValue() else { return selectedIndex } + return fieldValue } //-------------------------------------------------- @@ -61,7 +68,6 @@ import UIKit case backgroundColor case molecules case index - case selectedIndex case spacing case border case loop @@ -76,6 +82,8 @@ import UIKit case accessibilityText case groupName case fieldKey + case selectable + case selectedIndex } //-------------------------------------------------- @@ -86,6 +94,7 @@ import UIKit let typeContainer = try decoder.container(keyedBy: CodingKeys.self) molecules = try typeContainer.decodeModels(codingKey: .molecules) index = try typeContainer.decodeIfPresent(Int.self, forKey: .index) ?? 0 + selectable = try typeContainer.decodeIfPresent(Bool.self, forKey: .selectable) ?? false selectedIndex = try typeContainer.decodeIfPresent(Int.self, forKey: .selectedIndex) backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) @@ -108,13 +117,7 @@ import UIKit if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) { self.groupName = groupName } - if let value = formFieldValue() { - baseValue = value - } else if let value = selectedIndex { - baseValue = value - } else { - baseValue = index - } + baseValue = formFieldValue() } public func encode(to encoder: Encoder) throws { @@ -136,5 +139,8 @@ import UIKit try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText) try container.encodeIfPresent(fieldKey, forKey: .fieldKey) try container.encode(groupName, forKey: .groupName) + try container.encode(index, forKey: .index) + try container.encode(selectable, forKey: .selectable) + try container.encode(selectedIndex, forKey: .selectedIndex) } } From 20778a49860ce86e74f3861ea61b5e244771ea2d Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Tue, 2 Mar 2021 17:32:58 +0530 Subject: [PATCH 18/24] Added keyboardtype in default case. --- .../Atomic/Atoms/FormFields/TextFields/TextEntryField.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift index 6ff196c7..785c986d 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift @@ -350,7 +350,9 @@ import UIKit case .phone: textField.keyboardType = .phonePad - default: break + default: + textField.keyboardType = .default + break } // Override the preset keyboard set in type. From fae969fd1f0435f07daef88f019cdb87a52bad7a Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Fri, 5 Mar 2021 11:53:13 -0500 Subject: [PATCH 19/24] validator check --- MVMCoreUI/Atomic/Atoms/FormFields/TextFields/EntryField.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/EntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/EntryField.swift index cc410404..04eeed02 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/EntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/EntryField.swift @@ -319,12 +319,14 @@ import UIKit model.updateUIDynamicError = { [weak self] in MVMCoreDispatchUtility.performBlock(onMainThread: { guard let self = self else { return } + let validState = model.isValid ?? false - self.updateValidation(validState) if !validState && model.shouldClearText { self.text = "" model.shouldClearText = false } + _ = FormValidator.validate(delegate: self.delegateObject?.formHolderDelegate) + self.updateValidation(validState) }) } From 80d184753171af45aa3c6d7680f1906ad18e2a3c Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Mon, 8 Mar 2021 10:38:21 -0500 Subject: [PATCH 20/24] revised --- .../Atoms/FormFields/TextFields/MdnEntryField.swift | 10 ++++++++++ .../Atoms/FormFields/TextFields/TextEntryField.swift | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/MdnEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/MdnEntryField.swift index fe2c483c..db3c28c4 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/MdnEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/MdnEntryField.swift @@ -147,6 +147,16 @@ import MVMCore MVMCoreNavigationHandler.shared()?.present(picker, animated: true) } + //-------------------------------------------------- + // MARK: - MoleculeViewProtocol + //-------------------------------------------------- + + public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { + super.set(with: model, delegateObject, additionalData) + + textField.keyboardType = .phonePad + } + //-------------------------------------------------- // MARK: - Contact Picker Delegate //-------------------------------------------------- diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift index 785c986d..76b70b80 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift @@ -352,7 +352,6 @@ import UIKit default: textField.keyboardType = .default - break } // Override the preset keyboard set in type. From e18152174c749a2d14b5e9ad63ecf3d6bd1cf056 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Tue, 9 Mar 2021 16:07:07 +0530 Subject: [PATCH 21/24] Added isSecureTextEntry as false for number keyboard type. --- .../Atomic/Atoms/FormFields/TextFields/TextEntryField.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift index 76b70b80..536e3364 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift @@ -342,6 +342,7 @@ import UIKit textField.keyboardType = .numberPad case .number: + textField.isSecureTextEntry = false textField.keyboardType = .numberPad case .email: From 3395be059224cd8cd8cbcb4bf71cdaa3cc040e75 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Tue, 9 Mar 2021 13:17:55 -0500 Subject: [PATCH 22/24] fix --- MVMCoreUI/BaseControllers/ViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index ecb4089a..a2d82952 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -461,7 +461,7 @@ import UIKit open func handleOpenPage(for requestParameters: MVMCoreRequestParameters, actionInformation: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) { addFormParams(requestParameters) requestParameters.parentPageType = loadObject?.pageJSON?.optionalStringForKey("parentPageType") - MVMCoreActionHandler.defaultHandleOpenPage(for: requestParameters, additionalData: additionalData, delegateObject: delegateObject()) + MVMCoreActionHandler.defaultHandleOpenPage(for: requestParameters, actionInformation: actionInformation, additionalData: additionalData, delegateObject: delegateObject()) } open func logAction(withActionInformation actionInformation: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) { From 4f12ad2f67a05da5b1ef7f8fe862bfefa6a5890f Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 10 Mar 2021 12:24:50 -0500 Subject: [PATCH 23/24] undo label --- MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift | 3 --- 1 file changed, 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift index 511fb4dc..7e902d435 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/Label/Label.swift @@ -624,9 +624,6 @@ public typealias ActionBlock = () -> () } else if !MVMCoreGetterUtility.fequal(a: Float(standardFontSize), b: 0.0), let sizeObject = sizeObject ?? MFStyler.sizeObjectGeneric(forCurrentDevice: standardFontSize) { font = font.updateSize(sizeObject.getValueBased(onSize: size)) } - - // Provide the label additional size information to help calculate its intrinsic content. - preferredMaxLayoutWidth = Styler.maxAvailableLayoutWidth(size: size) } @objc public func setFont(_ font: UIFont, scale: Bool) { From 4a997ad801ea0d853cca5d50350f2551e9b35115 Mon Sep 17 00:00:00 2001 From: Lekshmi S Date: Thu, 11 Mar 2021 16:23:20 +0530 Subject: [PATCH 24/24] Moved isSecureTextEntry as false to reset method. --- .../Atomic/Atoms/FormFields/TextFields/TextEntryField.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift index 536e3364..3d1b1534 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/TextEntryField.swift @@ -200,6 +200,7 @@ import UIKit open override func reset() { super.reset() + textField.isSecureTextEntry = false textField.font = Styler.Font.RegularBodyLarge.getFont() } @@ -342,7 +343,6 @@ import UIKit textField.keyboardType = .numberPad case .number: - textField.isSecureTextEntry = false textField.keyboardType = .numberPad case .email: