jsoncreator_app/JSONCreator_iOS/JSONCreator/MF/buttimag.swift
Pfeil, Scott Robert ff21987c1e json
2021-08-16 14:19:12 -04:00

340 lines
14 KiB
Swift

//
// ButtonWithImage.swift
// MobileFirstFramework
//
// Created by Bandaru, Krishna Kishore on 23/02/21.
// Copyright © 2021 Verizon Wireless. All rights reserved.
//
import UIKit
import MVMCoreUI
public class ButtonWithImage: PillButton {
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let model = model as? ButtonWithImageModel, var buttonImage = MVMCoreCache.shared()?.getImageFromRegisteredBundles(model.image) else {
return
}
if let tintColor = model.tintColor {
buttonImage = buttonImage.withRenderingMode(.alwaysTemplate)
self.tintColor = tintColor.uiColor
}
setImage(buttonImage, for: .normal)
semanticContentAttribute = model.imagePosition == .left ? .forceLeftToRight : .forceRightToLeft
updateContentInsets(with: Padding.OneHalf)
}
//Adding space between image and text & content to be centered in container
public func updateContentInsets(with insetAmount: CGFloat) {
guard let imagePosition = (model as? ButtonWithImageModel)?.imagePosition else { return }
imageEdgeInsets = UIEdgeInsets(top: 0, left: imagePosition == .left ? -insetAmount: insetAmount, bottom: 0, right: imagePosition == .left ? insetAmount : -insetAmount)
titleEdgeInsets = UIEdgeInsets(top: 0, left: imagePosition == .left ? insetAmount : -insetAmount, bottom: 0, right: imagePosition == .left ? -insetAmount : insetAmount)
contentEdgeInsets = UIEdgeInsets(top: 0, left: insetAmount, bottom: 0, right: insetAmount)
}
}
//
// ButtonWithImageModel.swift
// MobileFirstFramework
//
// Created by Bandaru, Krishna Kishore on 23/02/21.
// Copyright © 2021 Verizon Wireless. All rights reserved.
//
public class ButtonWithImageModel: ButtonModel {
public enum ImagePosition: String, Codable {
case left, right
}
public override class var identifier: String {
"buttonWithImage"
}
let image: String
var imagePosition: ImagePosition
var tintColor: Color?
public init(with title: String, image: String, imagePosition: ImagePosition = .left, action: ActionModelProtocol) {
self.image = image
self.imagePosition = imagePosition
super.init(with: title, action: action)
}
public init(secondaryButtonWith title: String, image: String, imagePosition: ImagePosition = .left, action: ActionModelProtocol) {
self.image = image
self.imagePosition = imagePosition
super.init(secondaryButtonWith: title, action: action)
}
public init(primaryButtonWith title: String, image: String, imagePosition: ImagePosition = .left, action: ActionModelProtocol) {
self.image = image
self.imagePosition = imagePosition
super.init(primaryButtonWith: title, action: action)
}
private enum CodingKeys: String, CodingKey {
case image
case imagePosition
case tintColor
}
required public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
image = try container.decode(String.self, forKey: .image)
imagePosition = try container.decodeIfPresent(ImagePosition.self, forKey: .imagePosition) ?? .left
tintColor = try container.decodeIfPresent(Color.self, forKey: .tintColor)
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(image, forKey: .image)
try container.encode(imagePosition, forKey: .imagePosition)
try container.encodeIfPresent(tintColor, forKey: .tintColor)
try super.encode(to: encoder)
}
}
public class neViewModl: ListItemModel, MoleculeModelProtocol {
public static var identifier: String = "fios"
}
public class neView: TableViewCell {
public let voicemailReadView: View = {
let view = View()
view.backgroundColor = .mvmRed
view.heightAnchor.constraint(equalToConstant: 10).isActive = true
view.widthAnchor.constraint(equalToConstant: 10).isActive = true
view.layer.cornerRadius = 5
return view
}()
public let mdn: Label = {
let label = Label(fontStyle: .RegularBodySmall)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
return label
}()
public let contact: Label = {
let label = Label(fontStyle: .BoldBodySmall)
// label.setContentCompressionResistancePriority(.required, for: .horizontal)
// label.setContentCompressionResistancePriority(.required, for: .vertical)
// label.setContentHuggingPriority(.required, for: .horizontal)
return label
}()
public let shortDate: Label = {
let label = Label(fontStyle: .RegularBodySmall)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
label.textAlignment = .right
return label
}()
public let fullDate: Label = {
let label = Label(fontStyle: .RegularBodySmall)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
return label
}()
public let duration: Label = {
let label = Label(fontStyle: .RegularBodySmall)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
label.textAlignment = .right
return label
}()
public let callDetailsButton: ImageView = {
let button = ImageView()
button.heightAnchor.constraint(equalToConstant: 20).isActive = true
button.widthAnchor.constraint(equalToConstant: 20).isActive = true
button.contentMode = .scaleAspectFit
button.backgroundColor = .blue
return button
}()
public let callBackButton: PillButton = {
let button = PillButton()
return button
}()
public let sendTextButton: PillButton = {
let button = PillButton()
return button
}()
//
// public lazy var leftLabelStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [contact, mdn])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .vertical
// stack.alignment = .leading
// stack.distribution = .fill
// return stack
// }()
// public lazy var row1Stack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [voicemailReadView, contact, shortDate, callDetailsButton])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .horizontal
// stack.alignment = .center
// stack.distribution = .fill
// return stack
// }()
public lazy var row1Stack: Stack<StackModel> = {
Stack<StackModel>.createStack(with: [(view: voicemailReadView, model: StackItemModel()),
(view: contact, model: StackItemModel(horizontalAlignment: .leading)),
(view: shortDate, model: StackItemModel()),
(view: callDetailsButton, model: StackItemModel())],
axis: .horizontal, spacing: PaddingOne)
}()
// public lazy var row2Stack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [mdn, duration])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .horizontal
// stack.alignment = .center
// stack.distribution = .fill
// return stack
// }()
public lazy var row2Stack: Stack<StackModel> = {
Stack<StackModel>.createStack(with: [(view: mdn, model: StackItemModel(horizontalAlignment: .leading)),
(view: duration, model: StackItemModel())],
axis: .horizontal)
}()
// public lazy var leftTopStack: Stack<StackModel> = {
// Stack<StackModel>.createStack(with: [(view: voicemailReadView, model: StackItemModel()),
// (view: contact, model: StackItemModel())],
// axis: .horizontal)
// }()
// public lazy var leftStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [leftTopStack, mdn])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .vertical
// stack.alignment = .fill
// return stack
// }()
// public lazy var leftStack: Stack<StackModel> = {
// Stack<StackModel>.createStack(with: [(view: leftTopStack, model: StackItemModel(horizontalAlignment: .leading)),
// (view: mdn, model: StackItemModel(horizontalAlignment: .leading))],
// axis: .vertical)
// }()
// public lazy var rightStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [rightLabelStack, callDetailsButton])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .horizontal
// stack.alignment = .trailing
// return stack
// }()
//
// public lazy var rightStack: Stack<StackModel> = {
// Stack<StackModel>.createStack(with: [(view: rightLabelStack, model: StackItemModel(verticalAlignment: .leading)),
// (view: callDetailsButton, model: StackItemModel(verticalAlignment: .leading))],
// axis: .horizontal)
// }()
// public lazy var rightLabelStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [shortDate, duration])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .vertical
// stack.alignment = .fill
// return stack
// }()
//
// public lazy var rightLabelStack: Stack<StackModel> = {
// Stack<StackModel>.createStack(with: [(view: shortDate, model: StackItemModel()),
// (view: duration, model: StackItemModel())],
// axis: .vertical)
// }()
// public lazy var topStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [row1Stack, row2Stack])
// stack.translatesAutoresizingMaskIntoConstraints = false
// stack.axis = .vertical
// stack.alignment = .fill
// stack.distribution = .fill
// return stack
// }()
public lazy var topStack: Stack<StackModel> = {
Stack<StackModel>.createStack(with: [(view: row1Stack, model: StackItemModel()),
(view: row2Stack, model: StackItemModel())],
axis: .vertical, spacing: 0)
}()
//
// public lazy var topStack: Stack<StackModel> = {
// Stack<StackModel>.createStack(with: [(view: row1Stack, model: StackItemModel(verticalAlignment: .leading)),
// (view: row2Stack, model: StackItemModel(verticalAlignment: .leading))],
// axis: .horizontal)
// }()
// public lazy var mainStack: UIStackView = {
// let stack = UIStackView(arrangedSubviews: [leftHeadline, leftBody])
// stack.axis = .vertical
// stack.alignment = .leading
// return stack
// }()
open override func setupView() {
super.setupView()
addMolecule(topStack)
row1Stack.restack()
row2Stack.restack()
topStack.restack()
}
open override func updateView(_ size: CGFloat) {
super.updateView(size)
// leftLabelStack.updateView(size)
topStack.updateView(size)
}
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
let mdnModel: LabelModel? = LabelModel(text: "555-555-5555")
let contactModel: LabelModel? = LabelModel(text: "Unknown caller")
contactModel?.fontStyle = .BoldBodySmall
let shortDateModel: LabelModel? = LabelModel(text: "5/15/2020")
shortDateModel?.textAlignment = .right
let durationModel: LabelModel? = LabelModel(text: "34 sec")
durationModel?.textAlignment = .right
// voicemailReadView.isHidden = false
contact.setOptional(with: contactModel, delegateObject, additionalData)
mdn.setOptional(with: mdnModel, delegateObject, additionalData)
shortDate.setOptional(with: shortDateModel, delegateObject, additionalData)
duration.setOptional(with: durationModel, delegateObject, additionalData)
// fullDate.setOptional(with: nil, delegateObject, additionalData)
// audioPlayer.setOptional(with: model.audioPlayer, delegateObject, additionalData)
// callBackButton.setOptional(with: model.callBackButton, delegateObject, additionalData)
// sendTextButton.setOptional(with: model.sendTextButton, delegateObject, additionalData)
// callDetailsButton.setOptional(with: model.callDetailsImageButton, delegateObject, additionalData)
// voiceMailModel?.audioPlayer.messageID = model.messageID
//
// if let isHeard = model.isHeard, !isHeard, let messageNumber = model.messageID, !MFUtility.checkIfVoicemailExists(messageNumber){
// changeVoicemailReadStatus(isHeard: false)
// } else {
// changeVoicemailReadStatus(isHeard: true)
// }
}
public override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
200
}
}