Compare commits

...

1 Commits

Author SHA1 Message Date
Matt Bruce
26c2243d0d updated samples
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2023-01-12 10:07:11 -06:00
2 changed files with 253 additions and 17 deletions

View File

@ -123,5 +123,113 @@ extension AppDelegate: MVMCoreGlobalTopAlertDelegateProtocol {
extension AppDelegate {
func register(){
ModelRegistry.register(handler: TestToggle.self, for: TestToggleModel.self)
ModelRegistry.register(handler: DynamicHeadlineBodyToggle.self, for: DynamicHeadlineBodyToggleModel.self)
ModelRegistry.register(handler: BiometricLabelToggle.self, for: BiometricLabelToggleModel.self)
}
}
public class DynamicHeadlineBodyToggleModel: MoleculeModelProtocol {
public static var identifier: String = "dynamicHeadlineBodyToggle"
open var backgroundColor: Color?
public var moleculeName: String?
open var headlineBody: HeadlineBodyModel
open var toggle: ToggleModel?
public var switchOnText: LabelModel?
public var switchOffText: LabelModel?
}
@objcMembers public class DynamicHeadlineBodyToggle: HeadlineBodyToggle {
//MARK:Declaration
var delegate: MVMCoreUIDelegateObject?
//override the toggles.valueChangedCancellable
public override func setupView() {
super.setupView()
toggle.valueChangedSubscription = toggle.publisher(for: .valueChanged)
.sink { [weak self] changed in
guard let self = self,
let model = self.model as? DynamicHeadlineBodyToggleModel else { return }
self.updateDynamicHeadLine(model)
self.toggle.executeDefaultAction()
}
}
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let dynamicHeadlineBodyToggleModel = model as? DynamicHeadlineBodyToggleModel else { return }
delegate = delegateObject
self.model = model
toggle.setOptional(with: dynamicHeadlineBodyToggleModel.toggle, delegateObject, additionalData)
updateDynamicHeadLine(dynamicHeadlineBodyToggleModel)
}
func updateDynamicHeadLine(_ model: DynamicHeadlineBodyToggleModel) {
let headLineBodyModel: HeadlineBodyModel? = model.headlineBody
// check if toogle model present
// otherwise toggle should be hidden for member
if let _ = model.toggle {
if toggle.isOn, let switchOnText = model.switchOnText {
headLineBodyModel?.headline = switchOnText
} else if let switchOffText = model.switchOffText {
headLineBodyModel?.headline = switchOffText
}
} else {
toggle.isHidden = true
}
headlineBody.setOptional(with: headLineBodyModel, delegate, nil)
layoutIfNeeded()
}
}
public class BiometricLabelToggleModel: MoleculeModelProtocol {
public static var identifier: String = "biometricLabelToggle"
public var backgroundColor: Color?
public var touchId: LabelToggleModel
public var faceId: LabelToggleModel
}
@objc public protocol BiometricLabelToggleDelegate: NSObjectProtocol {
@objc func processBiometricID(_ toggle: MVMCoreUI.Toggle?)
@objc func setupBiometricID(_ toggle: MVMCoreUI.Toggle?)
}
@objcMembers public class BiometricLabelToggle: LabelToggle {
var biometricDelegate: BiometricLabelToggleDelegate?
// MARK: - MVMCoreViewProtocol
public override func setupView() {
super.setupView()
// alignment fix
label.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
trailingAnchor.constraint(equalTo: toggle.trailingAnchor).isActive = true
//overwrite the default logic for value changed
toggle.valueChangedSubscription = toggle
.publisher(for: .valueChanged)
.sink { [weak self] changed in
self?.biometricDelegate?.processBiometricID(changed)
}
}
// MARK:- MoleculeViewProtocol
public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
guard let model = model as? BiometricLabelToggleModel else { return }
biometricDelegate = delegateObject?.actionDelegate as? BiometricLabelToggleDelegate
// check device/server supports face id
if false {
// Load the face id label json
super.set(with: model.faceId, delegateObject, additionalData)
} else {
// if device/server supports touch Id
super.set(with: model.touchId, delegateObject, additionalData)
}
biometricDelegate?.setupBiometricID(toggle)
}
public class override func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
guard let model = model as? BiometricLabelToggleModel else { return nil }
return LabelToggle.estimatedHeight(with: model.faceId, delegateObject)
}
}

View File

@ -7,25 +7,156 @@
"suppressPostLaunchRequests": false,
"tabBarHidden": true,
"header": {
"moleculeName": "header",
"molecule": {
"moleculeName": "headlineBody",
"headline": {
"moleculeName": "label",
"text": "Zenkey"
}
"moleculeName": "header",
"molecule": {
"moleculeName": "headlineBody",
"headline": {
"moleculeName": "label",
"text": "Zenkey"
}
},
}
},
"stack": {
"moleculeName": "stack",
"molecules": [
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "toggle",
"fieldKey": "isActive"
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "toggle",
"fieldKey": "isActive"
}
},
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "labelToggle",
"label": {
"moleculeName": "label",
"text": "Enable touch id."
},
"toggle": {
"moleculeName": "toggle"
}
}
},
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "headlineBodyToggle",
"headlineBody": {
"moleculeName": "headlineBody",
"headline": {
"moleculeName": "label",
"text": "Business and Marketing Insights"
},
"body": {
"moleculeName": "label",
"text": "Allow use of information."
}
},
"toggle": {
"moleculeName": "toggle"
}
}
},
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "headlineBodyLinkToggle",
"headlineBodyLink": {
"moleculeName": "headlineBodyLink",
"headlineBody": {
"moleculeName": "headlineBody",
"headline": {
"moleculeName": "label",
"text": "Relevant Mobile Advertising"
},
"body": {
"moleculeName": "label",
"text": "Allow use of information."
}
},
"link": {
"moleculeName": "link",
"title": "Tell me more",
"action": {
"actionType": "openPage",
"pageType": "forgotPasswordPage"
}
}
},
"toggle": {
"moleculeName": "toggle"
}
}
},
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "dynamicHeadlineBodyToggle",
"toggle": {
"moleculeName": "toggle",
"fieldKey": "switchImei1",
"state": true
},
"headlineBody": {
"moleculeName": "headlineBody",
"headline": {
"moleculeName": "label",
"text": "Safety Mode is On",
"fontStyle": "H3"
},
"body": {
"moleculeName": "label",
"text": "Safety Mode protects you from overage fees and still lets you use data at reduced speeds, after you've done over monthly data limit.",
"fontStyle": "B2"
}
},
"switchOnText": {
"moleculeName": "label",
"text": "Safety Mode is On",
"fontStyle": "H3"
},
"switchOffText": {
"moleculeName": "label",
"text": "Safety Mode is Off",
"fontStyle": "H3"
},
"required": false
}
},
{
"moleculeName": "stackItem",
"molecule": {
"moleculeName": "biometricLabelToggle",
"faceId": {
"label": {
"moleculeName": "label",
"text": "Enable face ID"
},
"toggle": {
"moleculeName": "toggle",
"actionMap": {
"actionType": "openPage",
"pageType": "turnOnFaceId"
}
}
},
"touchId": {
"label": {
"moleculeName": "label",
"text": "Enable Touch ID"
},
"toggle": {
"moleculeName": "toggle",
"actionMap": {
"actionType": "openPage",
"pageType": "turnOnTouchId"
}
}
}
}
}
]
},
"footer": {
@ -50,11 +181,8 @@
"formRules": [
{
"groupName": "default",
"rules": [
]
"rules": []
}
]
}
}