From 129a0e92411eef785faafa6639d907722d867094 Mon Sep 17 00:00:00 2001
From: "Arora, Prateek" <prateek.arora@one.verizon.com>
Date: Tue, 7 Jan 2020 12:34:29 +0530
Subject: [PATCH] New molecule -> headLineBodyCaretLinkImage

---
 MVMCoreUI.xcodeproj/project.pbxproj           |  4 +
 .../HeadLineBodyCaretLinkImage.swift          | 95 +++++++++++++++++++
 .../MVMCoreUIMoleculeMappingObject.m          |  3 +-
 3 files changed, 101 insertions(+), 1 deletion(-)
 create mode 100644 MVMCoreUI/Molecules/VerticalCombinationViews/HeadLineBodyCaretLinkImage.swift

diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj
index e8c26f4c..775b8b0d 100644
--- a/MVMCoreUI.xcodeproj/project.pbxproj
+++ b/MVMCoreUI.xcodeproj/project.pbxproj
@@ -32,6 +32,7 @@
 		943784F6236B77BB006A1E82 /* GraphViewAnimationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943784F4236B77BB006A1E82 /* GraphViewAnimationHandler.swift */; };
 		9455B19C234F8A0400A574DB /* MVMAnimationFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */; };
 		948DB67E2326DCD90011F916 /* MultiProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 948DB67D2326DCD90011F916 /* MultiProgress.swift */; };
+		C7192E7D23C301750050C2A0 /* HeadLineBodyCaretLinkImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7192E7C23C301750050C2A0 /* HeadLineBodyCaretLinkImage.swift */; };
 		D20A9A5E2243D3E300ADE781 /* TwoButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20A9A5D2243D3E300ADE781 /* TwoButtonView.swift */; };
 		D213347723843825008E41B3 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = D213347623843825008E41B3 /* Line.swift */; };
 		D224798A2314445E003FCCF9 /* LabelSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22479892314445E003FCCF9 /* LabelSwitch.swift */; };
@@ -233,6 +234,7 @@
 		943784F4236B77BB006A1E82 /* GraphViewAnimationHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GraphViewAnimationHandler.swift; sourceTree = "<group>"; };
 		9455B19B234F8A0400A574DB /* MVMAnimationFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MVMAnimationFramework.framework; path = ../SharedFrameworks/MVMAnimationFramework.framework; sourceTree = "<group>"; };
 		948DB67D2326DCD90011F916 /* MultiProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiProgress.swift; sourceTree = "<group>"; };
+		C7192E7C23C301750050C2A0 /* HeadLineBodyCaretLinkImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadLineBodyCaretLinkImage.swift; sourceTree = "<group>"; };
 		D20A9A5D2243D3E300ADE781 /* TwoButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwoButtonView.swift; sourceTree = "<group>"; };
 		D213347623843825008E41B3 /* Line.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = "<group>"; };
 		D22479892314445E003FCCF9 /* LabelSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelSwitch.swift; sourceTree = "<group>"; };
@@ -486,6 +488,7 @@
 				D2A638FC22CA98280052ED1F /* HeadlineBody.swift */,
 				D22479952316AF6D003FCCF9 /* HeadlineBodyTextButton.swift */,
 				D27CD40F2339057800C1DC07 /* EyebrowHeadlineBodyLink.swift */,
+				C7192E7C23C301750050C2A0 /* HeadLineBodyCaretLinkImage.swift */,
 			);
 			path = VerticalCombinationViews;
 			sourceTree = "<group>";
@@ -1175,6 +1178,7 @@
 				0198F7A82256A80B0066C936 /* MFRadioButton.m in Sources */,
 				D268C712238D6699007F2C1C /* DropDown.swift in Sources */,
 				0A41BA6E2344FCD400D4C0BC /* CATransaction+Extension.swift in Sources */,
+				C7192E7D23C301750050C2A0 /* HeadLineBodyCaretLinkImage.swift in Sources */,
 				D29DF13221E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.m in Sources */,
 				D29DF29C21E7ADB9003B2FB9 /* MFProgrammaticTableViewController.m in Sources */,
 				0105618E224BBE7700E1557D /* FormValidator+TextFields.swift in Sources */,
diff --git a/MVMCoreUI/Molecules/VerticalCombinationViews/HeadLineBodyCaretLinkImage.swift b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadLineBodyCaretLinkImage.swift
new file mode 100644
index 00000000..107ca07f
--- /dev/null
+++ b/MVMCoreUI/Molecules/VerticalCombinationViews/HeadLineBodyCaretLinkImage.swift
@@ -0,0 +1,95 @@
+//
+//  HeadLineBodyCaretLinkImage.swift
+//  MVMCoreUI
+//
+//  Created by Arora, Prateek on 06/01/20.
+//  Copyright © 2020 Verizon Wireless. All rights reserved.
+//
+
+import Foundation
+@objcMembers public class HeadLineBodyCaretLinkImage: ViewConstrainingView {
+
+    let headlineBody = HeadlineBody(frame: .zero)
+    let caretButton = CaretButton(frame: .zero)
+    //let caretButton = MFTextButton(nil, constrainHeight: true, forWidth: MVMCoreUIUtility.getWidth())
+
+    let backgroundImageView = MFLoadImageView()
+    var spaceBetweenConstant: CGFloat = 104.0
+    var spaceBetweenViews: NSLayoutConstraint?
+    var leftConstant: CGFloat = 32.0
+    // MARK: - MVMCoreViewProtocol
+    open override func updateView(_ size: CGFloat) {
+        super.updateView(size)
+        headlineBody.updateView(size)
+        caretButton.updateView(size)
+        backgroundImageView.updateView(size)
+        setSpacing()
+    }
+    
+    open override func setupView() {
+        super.setupView()
+        guard subviews.count == 0 else {
+            return
+        }
+        let view = MVMCoreUICommonViewsUtility.commonView()
+        addSubview(view)
+        pinView(toSuperView: view)
+        
+        view.addSubview(headlineBody)
+        view.addSubview(caretButton)
+        
+        headlineBody.translatesAutoresizingMaskIntoConstraints = false
+        headlineBody.topAnchor.constraint(equalTo: view.topAnchor, constant: 24.0).isActive = true
+        headlineBody.leftAnchor.constraint(equalTo: view.leftAnchor, constant: leftConstant).isActive = true
+        var constraint = view.rightAnchor.constraint(equalTo: headlineBody.rightAnchor)
+        constraint.priority = .defaultHigh
+        constraint.isActive = true
+        
+        spaceBetweenViews = caretButton.topAnchor.constraint(equalTo: headlineBody.bottomAnchor, constant: spaceBetweenConstant)
+        spaceBetweenViews?.isActive = true
+        
+        caretButton.translatesAutoresizingMaskIntoConstraints = false
+        caretButton.leftAnchor.constraint(equalTo: view.leftAnchor, constant: leftConstant).isActive = true
+        view.bottomAnchor.constraint(equalTo: caretButton.bottomAnchor).isActive = true
+        view.rightAnchor.constraint(greaterThanOrEqualTo: caretButton.rightAnchor).isActive = true
+        constraint = view.rightAnchor.constraint(equalTo: caretButton.rightAnchor)
+        constraint.priority = .defaultHigh
+        constraint.isActive = true
+        
+        //Background image view
+        backgroundImageView.translatesAutoresizingMaskIntoConstraints = false
+        backgroundImageView.imageView.contentMode = .scaleAspectFill
+        view.addSubview(backgroundImageView)
+        NSLayoutConstraint.constraintPinSubview(toSuperview: backgroundImageView)
+        view.sendSubviewToBack(backgroundImageView)
+    }
+    
+    // MARK: - Constraining
+    public func setSpacing() {
+        if headlineBody.hasText() && (caretButton.titleLabel?.text?.count ?? 0) > 0 {
+            spaceBetweenViews?.constant = spaceBetweenConstant
+        } else {
+            spaceBetweenViews?.constant = 0
+        }
+    }
+    
+    // MARK: - MVMCoreUIMoleculeViewProtocol
+     open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
+        super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
+        if let imageJSON = json?.optionalDictionaryForKey("image") {
+            backgroundImageView.setWithJSON(imageJSON, delegateObject: delegateObject, additionalData: additionalData)
+        }
+            headlineBody.setWithJSON(json?.optionalDictionaryForKey("headlineBody"), delegateObject: delegateObject, additionalData: additionalData)
+            caretButton.setWithJSON(json?.optionalDictionaryForKey("caretLink"), delegateObject: delegateObject, additionalData: additionalData)
+        
+    }
+    
+    open override func reset() {
+        super.reset()
+        headlineBody.reset()
+    }
+    
+    public override class func estimatedHeight(forRow json: [AnyHashable : Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat {
+        return 320
+    }
+}
diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject.m b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject.m
index 9db7822d..ecad0fc7 100644
--- a/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject.m
+++ b/MVMCoreUI/OtherHandlers/MVMCoreUIMoleculeMappingObject.m
@@ -66,7 +66,8 @@
                      @"tabsListItem": TabsTableViewCell.class,
                      @"dropDownListItem": DropDownFilterTableViewCell.class,
                      @"headlineBodyButton": HeadlineBodyButton.class,
-                     @"eyebrowHeadlineBodyLink": EyebrowHeadlineBodyLink.class
+                     @"eyebrowHeadlineBodyLink": EyebrowHeadlineBodyLink.class,
+                     @"headLineBodyCaretLinkImage" : HeadLineBodyCaretLinkImage.class
                      } mutableCopy];
     });
     return mapping;
