Digital PCT265 story VZWYZDG-1866 - Added action for negating the gone property on molecules.
This commit is contained in:
parent
50b0280ba4
commit
f412fd70e1
@ -307,6 +307,9 @@
|
||||
AFA4932229E5EF2E001A9663 /* NotificationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA4932129E5EF2E001A9663 /* NotificationHandler.swift */; };
|
||||
AFA4933F29E874F0001A9663 /* MVMCoreUILoggingDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA4933E29E874F0001A9663 /* MVMCoreUILoggingDelegateProtocol.swift */; };
|
||||
AFA4935729EE3DCC001A9663 /* AlertDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA4935629EE3DCC001A9663 /* AlertDelegateProtocol.swift */; };
|
||||
AFB6336E2C65166E00791221 /* GoneableProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFB6336D2C65166E00791221 /* GoneableProtocol.swift */; };
|
||||
AFB633702C65175800791221 /* ActionNegateGone.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFB6336F2C65175800791221 /* ActionNegateGone.swift */; };
|
||||
AFB633722C653C0900791221 /* ActionNegateGoneModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFB633712C653C0900791221 /* ActionNegateGoneModel.swift */; };
|
||||
AFE4A1D627DFBB6F00C458D0 /* UINavigationController+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFE4A1D527DFBB6F00C458D0 /* UINavigationController+Extension.swift */; };
|
||||
B4CC8FBD29DF34680005D28B /* Badge.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CC8FBC29DF34680005D28B /* Badge.swift */; };
|
||||
B4CC8FBF29DF34730005D28B /* BadgeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CC8FBE29DF34730005D28B /* BadgeModel.swift */; };
|
||||
@ -931,6 +934,9 @@
|
||||
AFA4932129E5EF2E001A9663 /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = "<group>"; };
|
||||
AFA4933E29E874F0001A9663 /* MVMCoreUILoggingDelegateProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVMCoreUILoggingDelegateProtocol.swift; sourceTree = "<group>"; };
|
||||
AFA4935629EE3DCC001A9663 /* AlertDelegateProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertDelegateProtocol.swift; sourceTree = "<group>"; };
|
||||
AFB6336D2C65166E00791221 /* GoneableProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoneableProtocol.swift; sourceTree = "<group>"; };
|
||||
AFB6336F2C65175800791221 /* ActionNegateGone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionNegateGone.swift; sourceTree = "<group>"; };
|
||||
AFB633712C653C0900791221 /* ActionNegateGoneModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionNegateGoneModel.swift; sourceTree = "<group>"; };
|
||||
AFE4A1D527DFBB6F00C458D0 /* UINavigationController+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationController+Extension.swift"; sourceTree = "<group>"; };
|
||||
B4CC8FBC29DF34680005D28B /* Badge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Badge.swift; sourceTree = "<group>"; };
|
||||
B4CC8FBE29DF34730005D28B /* BadgeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeModel.swift; sourceTree = "<group>"; };
|
||||
@ -1287,6 +1293,7 @@
|
||||
27F6B08B26052AFF008529AA /* ParentMoleculeModelProtocol.swift */,
|
||||
27577DCC286CA959001EC47E /* MoleculeMaskingProtocol.swift */,
|
||||
58E7561C2BE04C320088BB5D /* MoleculeComparisonProtocol.swift */,
|
||||
AFB6336D2C65166E00791221 /* GoneableProtocol.swift */,
|
||||
);
|
||||
path = ModelProtocols;
|
||||
sourceTree = "<group>";
|
||||
@ -1598,6 +1605,8 @@
|
||||
AF1C33722885D481006B1001 /* MVMCoreUIActionOpenPageHandler.swift */,
|
||||
AF60A7F52892D2E300919EEB /* ActionDismissNotificationModel.swift */,
|
||||
AF60A7F72892D34D00919EEB /* ActionDismissNotificationHandler.swift */,
|
||||
AFB633712C653C0900791221 /* ActionNegateGoneModel.swift */,
|
||||
AFB6336F2C65175800791221 /* ActionNegateGone.swift */,
|
||||
);
|
||||
path = Actions;
|
||||
sourceTree = "<group>";
|
||||
@ -2844,6 +2853,7 @@
|
||||
D2E2A99423D8CCBC000B42E6 /* HeadlineBodyLinkModel.swift in Sources */,
|
||||
01004F3022721C3800991ECC /* RadioButton.swift in Sources */,
|
||||
D268C70E238C22D7007F2C1C /* DropDownFilterTableViewCell.swift in Sources */,
|
||||
AFB633702C65175800791221 /* ActionNegateGone.swift in Sources */,
|
||||
D236E5B7242007C500C38625 /* MVMControllerModelProtocol.swift in Sources */,
|
||||
AA71AD4024A32FE700ACA76F /* HeadersH2Link.swift in Sources */,
|
||||
D29DF11721E6805F003B2FB9 /* UIColor+MFConvenience.m in Sources */,
|
||||
@ -2893,6 +2903,7 @@
|
||||
D2E2A99D23DA3217000B42E6 /* UIStackViewAlignment+Extension.swift in Sources */,
|
||||
01EB369423609801006832FA /* HeadlineBodyModel.swift in Sources */,
|
||||
D2A92884241ACB25004E01C6 /* ProgrammaticScrollViewController.swift in Sources */,
|
||||
AFB633722C653C0900791221 /* ActionNegateGoneModel.swift in Sources */,
|
||||
EA985C3E2970938F00F2FF2E /* Tilelet.swift in Sources */,
|
||||
D23A90002612347A007E14CE /* PageBehaviorContainerModelProtocol.swift in Sources */,
|
||||
EAA78020290081320057DFDF /* VDSMoleculeViewProtocol.swift in Sources */,
|
||||
@ -3176,6 +3187,7 @@
|
||||
D2092355244FA0FD0044AD09 /* ThreeLayerTemplateModelProtocol.swift in Sources */,
|
||||
0AE14F64238315D2005417F8 /* TextField.swift in Sources */,
|
||||
0A51F3E22475CB73002E08B6 /* LoadingSpinnerModel.swift in Sources */,
|
||||
AFB6336E2C65166E00791221 /* GoneableProtocol.swift in Sources */,
|
||||
D2169303251E53D9002A6324 /* SectionListTemplateModel.swift in Sources */,
|
||||
EA6642932BCDA97D00D81DC4 /* TileContainerModel.swift in Sources */,
|
||||
AF7E509929E477C1009DC2AD /* AlertController.swift in Sources */,
|
||||
|
||||
38
MVMCoreUI/Atomic/Actions/ActionNegateGone.swift
Normal file
38
MVMCoreUI/Atomic/Actions/ActionNegateGone.swift
Normal file
@ -0,0 +1,38 @@
|
||||
//
|
||||
// ActionToggleGone.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 8/8/24.
|
||||
// Copyright © 2024 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import MVMCore
|
||||
|
||||
public struct ActionNegateGone: MVMCoreActionHandlerProtocol {
|
||||
|
||||
public enum ActionNegateGoneError: MVMError {
|
||||
case moleculeNotFound(id: String)
|
||||
}
|
||||
|
||||
public init() {}
|
||||
|
||||
public func execute(with model: any MVMCore.ActionModelProtocol, delegateObject: MVMCore.DelegateObject?, additionalData: [AnyHashable : Any]?) async throws {
|
||||
guard let model = model as? ActionNegateGoneModel else { return }
|
||||
guard let goneableModels: [GoneableProtocol & MoleculeModelProtocol] = (delegateObject as? MVMCoreUIDelegateObject)?.moleculeDelegate?.getRootMolecules().allMoleculesOfType(),
|
||||
var goneableModel = goneableModels.first(where: { goneableModel in
|
||||
goneableModel.id == model.id
|
||||
}) else { throw ActionNegateGoneError.moleculeNotFound(id: model.id) }
|
||||
goneableModel.gone = !goneableModel.gone
|
||||
await (delegateObject as? MVMCoreUIDelegateObject)?.moleculeDelegate?.updateUI(for: [goneableModel])
|
||||
}
|
||||
}
|
||||
|
||||
extension ActionNegateGone.ActionNegateGoneError: CustomStringConvertible {
|
||||
public var description: String {
|
||||
switch self {
|
||||
case .moleculeNotFound(id: let id):
|
||||
"Unable to negate gone for molecule with id: \(id)"
|
||||
}
|
||||
}
|
||||
}
|
||||
24
MVMCoreUI/Atomic/Actions/ActionNegateGoneModel.swift
Normal file
24
MVMCoreUI/Atomic/Actions/ActionNegateGoneModel.swift
Normal file
@ -0,0 +1,24 @@
|
||||
//
|
||||
// ActionToggleGoneModel.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 8/8/24.
|
||||
// Copyright © 2024 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import MVMCore
|
||||
|
||||
public struct ActionNegateGoneModel: ActionModelProtocol {
|
||||
public static var identifier: String = "toggleGone"
|
||||
public var actionType: String = ActionNegateGoneModel.identifier
|
||||
public var extraParameters: JSONValueDictionary?
|
||||
public var analyticsData: JSONValueDictionary?
|
||||
public var id: String
|
||||
|
||||
public init(id: String, extraParameters: JSONValueDictionary? = nil, analyticsData: JSONValueDictionary? = nil) {
|
||||
self.id = id
|
||||
self.extraParameters = extraParameters
|
||||
self.analyticsData = analyticsData
|
||||
}
|
||||
}
|
||||
@ -7,8 +7,7 @@
|
||||
//
|
||||
|
||||
|
||||
public protocol StackItemModelProtocol {
|
||||
public protocol StackItemModelProtocol: GoneableProtocol {
|
||||
var spacing: CGFloat? { get set }
|
||||
var percent: Int? { get set }
|
||||
var gone: Bool { get set }
|
||||
}
|
||||
|
||||
@ -7,9 +7,8 @@
|
||||
//
|
||||
|
||||
|
||||
public protocol CarouselItemModelProtocol: FormFieldProtocol, ContainerModelProtocol {
|
||||
public protocol CarouselItemModelProtocol: FormFieldProtocol, ContainerModelProtocol, GoneableProtocol {
|
||||
var analyticsData: JSONValueDictionary? { get set }
|
||||
var gone: Bool { get set }
|
||||
}
|
||||
|
||||
public extension CarouselItemModelProtocol {
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
//
|
||||
// GoneableProtocol.swift
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Scott Pfeil on 8/8/24.
|
||||
// Copyright © 2024 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol GoneableProtocol {
|
||||
var gone: Bool { get set }
|
||||
}
|
||||
@ -15,12 +15,11 @@ public enum ListItemStyle: String, Codable {
|
||||
case none
|
||||
}
|
||||
|
||||
public protocol ListItemModelProtocol: ContainerModelProtocol, AccessibilityModelProtocol {
|
||||
public protocol ListItemModelProtocol: ContainerModelProtocol, AccessibilityModelProtocol, GoneableProtocol {
|
||||
var line: LineModel? { get set }
|
||||
var action: ActionModelProtocol? { get set }
|
||||
var hideArrow: Bool? { get set }
|
||||
var style: ListItemStyle? { get set }
|
||||
var gone: Bool { get set }
|
||||
}
|
||||
|
||||
// Not a strict requirement.
|
||||
|
||||
@ -21,6 +21,10 @@ public protocol MoleculeDelegateProtocol: AnyObject {
|
||||
|
||||
/// Notifies the delegate that the molecule layout update. Should be called when the layout may change due to an async method. Mainly used for list or collections.
|
||||
func moleculeLayoutUpdated(_ molecule: MoleculeViewProtocol) //optional
|
||||
|
||||
/// Updates the UI for the updated models.
|
||||
@MainActor
|
||||
func updateUI(for molecules: [MoleculeModelProtocol]?)
|
||||
}
|
||||
|
||||
extension MoleculeDelegateProtocol {
|
||||
|
||||
@ -148,7 +148,7 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
|
||||
}
|
||||
|
||||
open func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||
return (getMoleculeInfo(for: indexPath)?.molecule as? ListItemModelProtocol)?.gone == true ? 0 : UITableView.automaticDimension
|
||||
return (getMoleculeInfo(for: indexPath)?.molecule as? GoneableProtocol)?.gone == true ? 0 : UITableView.automaticDimension
|
||||
}
|
||||
|
||||
open func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||
@ -168,7 +168,7 @@ open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol
|
||||
guard let moleculeInfo = getMoleculeInfo(for: indexPath),
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: moleculeInfo.identifier)
|
||||
else { return UITableViewCell() }
|
||||
cell.isHidden = (getMoleculeInfo(for: indexPath)?.molecule as? ListItemModelProtocol)?.gone == true
|
||||
cell.isHidden = (getMoleculeInfo(for: indexPath)?.molecule as? GoneableProtocol)?.gone == true
|
||||
(cell as? MoleculeViewProtocol)?.reset()
|
||||
(cell as? MoleculeListCellProtocol)?.setLines(with: templateModel?.line, delegateObject: delegateObjectIVar, additionalData: nil, indexPath: indexPath)
|
||||
if let moleculeView = cell as? MoleculeViewProtocol {
|
||||
|
||||
@ -249,6 +249,7 @@ open class CoreUIModelMapping: ModelMapping {
|
||||
ModelRegistry.register(handler: ActionOpenPanelHandler.self, for: ActionOpenPanelModel.self)
|
||||
ModelRegistry.register(handler: ActionTopNotificationHandler.self, for: ActionTopNotificationModel.self)
|
||||
ModelRegistry.register(handler: MVMCoreUIActionOpenPageHandler.self, for: ActionOpenPageModel.self, allowsReplace: true)
|
||||
ModelRegistry.register(handler: ActionNegateGone.self, for: ActionNegateGoneModel.self)
|
||||
}
|
||||
|
||||
open class func registerRules() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user