merging
This commit is contained in:
commit
2022a65ef0
@ -21,6 +21,10 @@
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
0184D3DB24B7D5A600A05369 /* ActionAlertModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0184D3DA24B7D5A600A05369 /* ActionAlertModel.swift */; };
|
||||
0184D3E324B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0184D3E224B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift */; };
|
||||
0184D3FD24BE54A300A05369 /* UIAlertActionStyle+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0184D3FC24BE54A300A05369 /* UIAlertActionStyle+Codable.swift */; };
|
||||
0184D3FF24BE554A00A05369 /* AlertModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0184D3FE24BE554A00A05369 /* AlertModel.swift */; };
|
||||
01C851CF23CF7B260021F976 /* JSONMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C851CE23CF7B260021F976 /* JSONMap.swift */; };
|
||||
01C851D123CF97FE0021F976 /* ActionBackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C851D023CF97FE0021F976 /* ActionBackModel.swift */; };
|
||||
01DF561421F90ADC00CC099B /* Dictionary+MFConvenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DF561321F90ADC00CC099B /* Dictionary+MFConvenience.swift */; };
|
||||
@ -31,7 +35,6 @@
|
||||
01F2A05223A8325100D954D8 /* ModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F2A05123A8325100D954D8 /* ModelMapping.swift */; };
|
||||
0A42538F23F3414800554656 /* Codable+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A42538E23F3414800554656 /* Codable+Helpers.swift */; };
|
||||
0A6173B724C09315005FB46A /* ActionSheetModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A6173B624C09315005FB46A /* ActionSheetModel.swift */; };
|
||||
0AD93AA424C0CD8300E56A97 /* ActionAlertModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD93AA324C0CD8300E56A97 /* ActionAlertModel.swift */; };
|
||||
0AFF597A23FC6E60005C24E8 /* ActionShareModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AFF597923FC6E60005C24E8 /* ActionShareModel.swift */; };
|
||||
30349BF11FCCA78A00546A1E /* MVMCoreSessionTimeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 30349BEF1FCCA78A00546A1E /* MVMCoreSessionTimeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
30349BF21FCCA78A00546A1E /* MVMCoreSessionTimeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 30349BF01FCCA78A00546A1E /* MVMCoreSessionTimeHandler.m */; };
|
||||
@ -171,6 +174,10 @@
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0184D3DA24B7D5A600A05369 /* ActionAlertModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionAlertModel.swift; sourceTree = "<group>"; };
|
||||
0184D3E224B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MVMCoreAlertObject+Swift.swift"; sourceTree = "<group>"; };
|
||||
0184D3FC24BE54A300A05369 /* UIAlertActionStyle+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIAlertActionStyle+Codable.swift"; sourceTree = "<group>"; };
|
||||
0184D3FE24BE554A00A05369 /* AlertModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertModel.swift; sourceTree = "<group>"; };
|
||||
01C851CE23CF7B260021F976 /* JSONMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONMap.swift; sourceTree = "<group>"; };
|
||||
01C851D023CF97FE0021F976 /* ActionBackModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionBackModel.swift; sourceTree = "<group>"; };
|
||||
01DF561321F90ADC00CC099B /* Dictionary+MFConvenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Dictionary+MFConvenience.swift"; sourceTree = "<group>"; };
|
||||
@ -183,7 +190,6 @@
|
||||
0A11030C20864F9A008ADD90 /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
0A42538E23F3414800554656 /* Codable+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Codable+Helpers.swift"; sourceTree = "<group>"; };
|
||||
0A6173B624C09315005FB46A /* ActionSheetModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetModel.swift; sourceTree = "<group>"; };
|
||||
0AD93AA324C0CD8300E56A97 /* ActionAlertModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionAlertModel.swift; sourceTree = "<group>"; };
|
||||
0AFF597923FC6E60005C24E8 /* ActionShareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionShareModel.swift; sourceTree = "<group>"; };
|
||||
30349BEF1FCCA78A00546A1E /* MVMCoreSessionTimeHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreSessionTimeHandler.h; sourceTree = "<group>"; };
|
||||
30349BF01FCCA78A00546A1E /* MVMCoreSessionTimeHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreSessionTimeHandler.m; sourceTree = "<group>"; };
|
||||
@ -462,6 +468,8 @@
|
||||
01F2A03523A80A7300D954D8 /* ActionModelProtocol.swift */,
|
||||
946EE1BB237B691A0036751F /* ActionOpenPageModel.swift */,
|
||||
01F2A03823A812DD00D954D8 /* ActionOpenUrlModel.swift */,
|
||||
0184D3DA24B7D5A600A05369 /* ActionAlertModel.swift */,
|
||||
0184D3FC24BE54A300A05369 /* UIAlertActionStyle+Codable.swift */,
|
||||
01F2A04B23A82B1B00D954D8 /* ActionCallModel.swift */,
|
||||
01F2A04D23A82CF500D954D8 /* ActionPopupModel.swift */,
|
||||
01C851D023CF97FE0021F976 /* ActionBackModel.swift */,
|
||||
@ -470,8 +478,8 @@
|
||||
94C014D2242119E6005811A9 /* ActionPreviousSubmitModel.swift */,
|
||||
94C014D424211AF0005811A9 /* ActionCancelModel.swift */,
|
||||
94C014D824212360005811A9 /* ActionSettingModel.swift */,
|
||||
0184D3FE24BE554A00A05369 /* AlertModel.swift */,
|
||||
0A6173B624C09315005FB46A /* ActionSheetModel.swift */,
|
||||
0AD93AA324C0CD8300E56A97 /* ActionAlertModel.swift */,
|
||||
);
|
||||
path = ActionType;
|
||||
sourceTree = "<group>";
|
||||
@ -616,6 +624,7 @@
|
||||
AFBB967F1FBA3A9A0008D868 /* MVMCoreAlertHandler.m */,
|
||||
AFBB96801FBA3A9A0008D868 /* MVMCoreAlertObject.h */,
|
||||
AFBB96811FBA3A9A0008D868 /* MVMCoreAlertObject.m */,
|
||||
0184D3E224B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift */,
|
||||
AFBB96821FBA3A9A0008D868 /* MVMCoreAlertOperation.h */,
|
||||
AFBB96831FBA3A9A0008D868 /* MVMCoreAlertOperation.m */,
|
||||
AFBB96841FBA3A9A0008D868 /* MVMCoreTopAlertAnimationDelegateProtocol.h */,
|
||||
@ -898,6 +907,7 @@
|
||||
01F2A03623A80A7300D954D8 /* ActionModelProtocol.swift in Sources */,
|
||||
AFBB96991FBA3A9A0008D868 /* MVMCoreAlertController.m in Sources */,
|
||||
881D26941FCC9D180079C521 /* MVMCoreOperation.m in Sources */,
|
||||
0184D3FD24BE54A300A05369 /* UIAlertActionStyle+Codable.swift in Sources */,
|
||||
AFED77A41FCCA29400BAE689 /* MVMCoreViewControllerMappingObject.m in Sources */,
|
||||
01C851CF23CF7B260021F976 /* JSONMap.swift in Sources */,
|
||||
01F2A04C23A82B1B00D954D8 /* ActionCallModel.swift in Sources */,
|
||||
@ -906,6 +916,7 @@
|
||||
AFBB96BA1FBA3CEC0008D868 /* MVMCoreActionHandler.m in Sources */,
|
||||
AFBB96ED1FBA4A260008D868 /* MFHardCodedServerResponse.m in Sources */,
|
||||
AF43A74D1FC6109F008E9347 /* MVMCoreSessionObject.m in Sources */,
|
||||
0184D3E324B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift in Sources */,
|
||||
D282AAB62240085300C46919 /* MVMCoreGetterUtility+Extension.swift in Sources */,
|
||||
AFBB965F1FBA3A570008D868 /* MFFreebeeOperation.m in Sources */,
|
||||
AFBB96901FBA3A9A0008D868 /* MVMCoreNavigationObject.m in Sources */,
|
||||
@ -919,6 +930,7 @@
|
||||
30349BF21FCCA78A00546A1E /* MVMCoreSessionTimeHandler.m in Sources */,
|
||||
D2DEDCB923C6400600C44CC4 /* UnitInterval.swift in Sources */,
|
||||
94C014D3242119E6005811A9 /* ActionPreviousSubmitModel.swift in Sources */,
|
||||
0184D3FF24BE554A00A05369 /* AlertModel.swift in Sources */,
|
||||
8876D5E91FB50AB000EB2E3D /* NSArray+MFConvenience.m in Sources */,
|
||||
946EE1B2237B5F260036751F /* JSONValue.swift in Sources */,
|
||||
AFBB96971FBA3A9A0008D868 /* MVMCorePresentViewControllerOperation.m in Sources */,
|
||||
@ -928,6 +940,7 @@
|
||||
AFBB96691FBA3A570008D868 /* MVMCoreRequestParameters.m in Sources */,
|
||||
AFED77A31FCCA29400BAE689 /* MVMCoreViewControllerNibMappingObject.m in Sources */,
|
||||
8876D5EB1FB50AB000EB2E3D /* NSDecimalNumber+MFConvenience.m in Sources */,
|
||||
0184D3DB24B7D5A600A05369 /* ActionAlertModel.swift in Sources */,
|
||||
AFBB96A41FBA3A9A0008D868 /* MVMCoreTopAlertObject.m in Sources */,
|
||||
0A6173B724C09315005FB46A /* ActionSheetModel.swift in Sources */,
|
||||
01F2A03923A812DD00D954D8 /* ActionOpenUrlModel.swift in Sources */,
|
||||
@ -955,7 +968,6 @@
|
||||
AF43A6FF1FBE3252008E9347 /* Reachability.m in Sources */,
|
||||
01C851D123CF97FE0021F976 /* ActionBackModel.swift in Sources */,
|
||||
AFBB96921FBA3A9A0008D868 /* MVMCoreNavigationOperation.m in Sources */,
|
||||
0AD93AA424C0CD8300E56A97 /* ActionAlertModel.swift in Sources */,
|
||||
AFBB96611FBA3A570008D868 /* MVMCoreLoadObject.m in Sources */,
|
||||
946EE1B4237B619D0036751F /* Encoder.swift in Sources */,
|
||||
AFBB96941FBA3A9A0008D868 /* MVMCorePresentAnimationOperation.m in Sources */,
|
||||
|
||||
@ -50,9 +50,12 @@ extern NSString * _Nonnull const KeyActionTypeOpen;
|
||||
// Makes the previous request, needs the delegate for this
|
||||
- (void)previousSubmitAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject;
|
||||
|
||||
// Shows a popup
|
||||
// Shows a popup alert by grabbing the content from the page map.
|
||||
- (void)popupAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject;
|
||||
|
||||
// Shows popup alert from the alert object in the action map. The actionType of the action is 'alert'
|
||||
- (void)showAlert:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject;
|
||||
|
||||
// Shows a top alert
|
||||
- (void)topAlertAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject;
|
||||
|
||||
|
||||
@ -95,6 +95,9 @@ NSString * const KeyActionTypeOpen = @"openPage";
|
||||
} else if ([actionType isEqualToString:KeyActionTypeCollapseNotification]) {
|
||||
[self collapseNotificationAction:actionInformation additionalData:additionalData delegateObject:delegateObject];
|
||||
|
||||
} else if ([actionType isEqualToString:KeyActionTypeAlert]) {
|
||||
[self showAlert:actionInformation additionalData:additionalData delegateObject:delegateObject];
|
||||
|
||||
} else if (![self handleOtherActions:actionType actionInformation:actionInformation additionalData:additionalData delegateObject:delegateObject]) {
|
||||
// not a known action type.
|
||||
[self unknownAction:actionType actionInformation:actionInformation additionalData:additionalData delegateObject:delegateObject];
|
||||
@ -342,6 +345,22 @@ NSString * const KeyActionTypeOpen = @"openPage";
|
||||
}
|
||||
}
|
||||
|
||||
- (void)showAlert:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {
|
||||
|
||||
MVMCoreErrorObject *error = nil;
|
||||
MVMCoreAlertObject *alertObject = [MVMCoreAlertObject alertObjectWithAction:actionInformation additionalData:additionalData delegateObject:delegateObject error:&error];
|
||||
if ([delegateObject.actionDelegate respondsToSelector:@selector(willShowPopupWithAlertObject:alertJson:)]) {
|
||||
[delegateObject.actionDelegate willShowPopupWithAlertObject:alertObject alertJson:actionInformation];
|
||||
}
|
||||
|
||||
if (alertObject) {
|
||||
[[MVMCoreAlertHandler sharedAlertHandler] showAlertWithAlertObject:alertObject];
|
||||
} else {
|
||||
[self handleActionError:error actionInformation:actionInformation additionalData:additionalData delegateObject:delegateObject];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (BOOL)handleOtherActions:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData delegateObject:(nullable DelegateObject *)delegateObject {
|
||||
return NO;
|
||||
}
|
||||
|
||||
37
MVMCore/MVMCore/AlertHandling/MVMCoreAlertObject+Swift.swift
Normal file
37
MVMCore/MVMCore/AlertHandling/MVMCoreAlertObject+Swift.swift
Normal file
@ -0,0 +1,37 @@
|
||||
//
|
||||
// MVMCoreAlertObject+Swift.swift
|
||||
// MVMCore
|
||||
//
|
||||
// Created by Suresh, Kamlesh on 7/10/20.
|
||||
// Copyright © 2020 myverizon. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
public extension MVMCoreAlertObject {
|
||||
|
||||
@objc static func alertObjectWith(action actionJson: [AnyHashable : Any]?, additionalData: [AnyHashable : Any]?, delegateObject: DelegateObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject?>?) -> MVMCoreAlertObject? {
|
||||
|
||||
guard let alertJson = actionJson?.optionalDictionaryForKey("alert"),
|
||||
(alertJson.optionalStringForKey(KeyTitle) != nil || alertJson.optionalStringForKey(KeyMessage) != nil),
|
||||
let actionsList = alertJson.optionalArrayForKey("alertActions") as? [[AnyHashable : Any]] else {
|
||||
error?.pointee = MVMCoreErrorObject(title: nil, message: MVMCoreGetterUtility.hardcodedString(withKey: HardcodedErrorUnableToProcess), code: ErrorCode.popupFailed.rawValue, domain: ErrorDomainNative, location: String(describing: self))
|
||||
return nil
|
||||
}
|
||||
|
||||
var actionsForAlert: [UIAlertAction] = []
|
||||
for actionJson in actionsList {
|
||||
let style = UIAlertAction.Style(rawValue: actionJson.stringForkey("style"))
|
||||
let alertAction = UIAlertAction(title: actionJson.optionalStringForKey(KeyTitle), style: style) { (action) in
|
||||
MVMCoreActionHandler.shared()?.handleAction(with: actionJson.optionalDictionaryForKey("action"), additionalData: additionalData, delegateObject: delegateObject)
|
||||
}
|
||||
actionsForAlert.append(alertAction)
|
||||
}
|
||||
|
||||
let alert = MVMCoreAlertObject(popupAlertWithTitle: alertJson.optionalStringForKey(KeyTitle),
|
||||
message: alertJson.optionalStringForKey(KeyMessage),
|
||||
actions: actionsForAlert,
|
||||
isGreedy: false)
|
||||
return alert
|
||||
}
|
||||
}
|
||||
@ -299,5 +299,4 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@ -42,6 +42,7 @@ extern NSString * const KeyActionTypeRedirect;
|
||||
extern NSString * const KeyActionTypeTopAlert;
|
||||
extern NSString * const KeyActionTypeSettings;
|
||||
extern NSString * const KeyActionTypeCollapseNotification;
|
||||
extern NSString * const KeyActionTypeAlert;
|
||||
extern NSString * const KeyActionInformation;
|
||||
extern NSString * const KeyLinkAwayAppURL;
|
||||
extern NSString * const KeyLinkAwayURL;
|
||||
|
||||
@ -42,6 +42,7 @@ NSString * const KeyActionTypeRedirect = @"switchApp";
|
||||
NSString * const KeyActionTypeTopAlert = @"topAlert";
|
||||
NSString * const KeyActionTypeSettings = @"openSettings";
|
||||
NSString * const KeyActionTypeCollapseNotification = @"collapseNotification";
|
||||
NSString * const KeyActionTypeAlert = @"alert";
|
||||
NSString * const KeyActionInformation = @"actionInformation";
|
||||
NSString * const KeyLinkAwayAppURL = @"appURL";
|
||||
NSString * const KeyLinkAwayURL = @"browserUrl";
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
//
|
||||
// ActionAlertModel.swift
|
||||
// MVMCore
|
||||
// MVMCoreUI
|
||||
//
|
||||
// Created by Kevin Christiano on 7/16/20.
|
||||
// Copyright © 2020 myverizon. All rights reserved.
|
||||
// Created by Suresh, Kamlesh on 7/9/20.
|
||||
// Copyright © 2020 Verizon Wireless. All rights reserved.
|
||||
//
|
||||
|
||||
|
||||
@ -12,46 +12,9 @@
|
||||
// MARK: - Properties
|
||||
//--------------------------------------------------
|
||||
|
||||
public static var identifier: String = "actionAlert"
|
||||
public static var identifier: String = "alert"
|
||||
public var actionType: String = ActionAlertModel.identifier
|
||||
public var alert: AlertModel
|
||||
public var extraParameters: JSONValueDictionary?
|
||||
public var analyticsData: JSONValueDictionary?
|
||||
public var title: String?
|
||||
public var action: ActionModelProtocol
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Keys
|
||||
//--------------------------------------------------
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case actionType
|
||||
case action
|
||||
case title
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(action: ActionAlertModel, _ extraParameters: JSONValueDictionary? = nil, _ analyticsData: JSONValueDictionary? = nil) {
|
||||
self.extraParameters = extraParameters
|
||||
self.analyticsData = analyticsData
|
||||
self.action = action
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Codec
|
||||
//--------------------------------------------------
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
action = try typeContainer.decodeModel(codingKey: .action)
|
||||
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
|
||||
}
|
||||
|
||||
public func encode(to encoder: Encoder) throws {
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encodeModel(action, forKey: .action)
|
||||
try container.encodeIfPresent(title, forKey: .title)
|
||||
}
|
||||
}
|
||||
|
||||
75
MVMCore/MVMCore/Models/ActionType/AlertModel.swift
Normal file
75
MVMCore/MVMCore/Models/ActionType/AlertModel.swift
Normal file
@ -0,0 +1,75 @@
|
||||
//
|
||||
// AlertModel.swift
|
||||
// MVMCore
|
||||
//
|
||||
// Created by Suresh, Kamlesh on 7/14/20.
|
||||
// Copyright © 2020 myverizon. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
|
||||
public class AlertButtonModel: Codable {
|
||||
public var title: String
|
||||
public var action: ActionModelProtocol
|
||||
public var style: UIAlertAction.Style = .default
|
||||
public init(_ title: String,_ action: ActionModelProtocol,_ style: UIAlertAction.Style = .default) {
|
||||
self.title = title
|
||||
self.action = action
|
||||
self.style = style
|
||||
}
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case title
|
||||
case action
|
||||
case style
|
||||
}
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
title = try typeContainer.decode(String.self, forKey: .title)
|
||||
|
||||
if let style = try? typeContainer.decodeIfPresent(String.self, forKey: .style) {
|
||||
self.style = UIAlertAction.Style(rawValue: style)
|
||||
}
|
||||
action = try typeContainer.decodeModel(codingKey: .action)
|
||||
}
|
||||
|
||||
open func encode(to encoder: Encoder) throws {
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(title, forKey: .title)
|
||||
try container.encode(style.rawValueString, forKey: .style)
|
||||
try container.encodeModel(action, forKey: .action)
|
||||
}
|
||||
}
|
||||
|
||||
public class AlertModel: Codable {
|
||||
public var title: String
|
||||
public var message: String
|
||||
public var alertActions: [AlertButtonModel]
|
||||
public init(_ title: String,_ message: String,_ alertActions: [AlertButtonModel]) {
|
||||
self.title = title
|
||||
self.message = message
|
||||
self.alertActions = alertActions
|
||||
}
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case title
|
||||
case message
|
||||
case alertActions
|
||||
}
|
||||
|
||||
required public init(from decoder: Decoder) throws {
|
||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||
title = try typeContainer.decode(String.self, forKey: .title)
|
||||
message = try typeContainer.decode(String.self, forKey: .message)
|
||||
alertActions = try typeContainer.decode([AlertButtonModel].self, forKey: .alertActions)
|
||||
}
|
||||
|
||||
open func encode(to encoder: Encoder) throws {
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
try container.encode(title, forKey: .title)
|
||||
try container.encode(message, forKey: .message)
|
||||
try container.encode(alertActions, forKey: .alertActions)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
//
|
||||
// UIAlertActionStyle+Codable.swift
|
||||
// MVMCore
|
||||
//
|
||||
// Created by Suresh, Kamlesh on 7/14/20.
|
||||
// Copyright © 2020 myverizon. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension UIAlertAction.Style: Codable {
|
||||
|
||||
init(rawValue: String) {
|
||||
switch rawValue {
|
||||
case "default":
|
||||
self = .default
|
||||
case "cancel":
|
||||
self = .cancel
|
||||
case "destructive":
|
||||
self = .destructive
|
||||
default:
|
||||
self = .default
|
||||
}
|
||||
}
|
||||
|
||||
var rawValueString: String {
|
||||
switch self {
|
||||
case .default:
|
||||
return "default"
|
||||
case .cancel:
|
||||
return "cancel"
|
||||
case .destructive:
|
||||
return "destructive"
|
||||
@unknown default:
|
||||
return "default"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user