From f1bed66dc95bae296da1189d77d4e84eb1825a64 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 2 Oct 2024 09:37:08 -0500 Subject: [PATCH] added for project testing Signed-off-by: Matt Bruce --- .../JSONCreator.xcodeproj/project.pbxproj | 52 + .../JSON/Samples/A_IssuesSample.json | 156 ++ .../JSON/Samples/FormContactInfo.json | 3 +- .../JSON/Samples/MVA3.0/carousel.json | 325 +++- .../JSONCreator/JSON/Samples/Testing.json | 488 ++--- .../JSONCreator/JSON/Samples/Testing2.json | 944 +++++++--- .../JSONCreator/JSON/Samples/Testing3.json | 378 +++- .../JSON/Samples/TileleListSample.json | 1658 +++++++---------- .../JSON/Samples/TileletSample.json | 16 +- .../JSON/Samples/ToggleSample.json | 60 - .../JSONCreator/JSON/Samples/VDSCheckbox.json | 272 +++ .../JSON/Samples/VDSSample-List.json | 517 +++++ .../JSON/Samples/VDSSample-Stack.json | 381 ++++ .../JSON/Samples/callUsOptionsLanding.json | 18 +- .../MF/ActionBiometricStateHandler.swift | 49 + .../MF/ActionBiometricStateModel.swift | 56 + .../MF/ActionRegisterFidoHandler.swift | 39 + .../MF/ActionRegisterFidoModel.swift | 65 + .../ActionRegisterPushNotificationModel.swift | 40 + .../MF/BiometricSetupBehavior.swift | 113 ++ ...lientParameterBiometricStatusHandler.swift | 127 ++ .../ClientParameterBiometricStatusModel.swift | 15 + .../MF/ClientParameterBiometricType.swift | 28 + .../ClientParameterBiometricTypeModel.swift | 17 + ...entParameterBiometricsEnabledHandler.swift | 26 + ...lientParameterBiometricsEnabledModel.swift | 15 + .../MF/JSONCreatorActionHandler.swift | 347 ++++ ...egisterPushNotificationActionHandler.swift | 38 + 28 files changed, 4620 insertions(+), 1623 deletions(-) create mode 100644 JSONCreator_iOS/JSONCreator/JSON/Samples/A_IssuesSample.json delete mode 100644 JSONCreator_iOS/JSONCreator/JSON/Samples/ToggleSample.json create mode 100644 JSONCreator_iOS/JSONCreator/JSON/Samples/VDSCheckbox.json create mode 100644 JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-List.json create mode 100644 JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-Stack.json create mode 100644 JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateHandler.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoHandler.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ActionRegisterPushNotificationModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/BiometricSetupBehavior.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusHandler.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricType.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricTypeModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledHandler.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledModel.swift create mode 100644 JSONCreator_iOS/JSONCreator/MF/RegisterPushNotificationActionHandler.swift diff --git a/JSONCreator_iOS/JSONCreator.xcodeproj/project.pbxproj b/JSONCreator_iOS/JSONCreator.xcodeproj/project.pbxproj index 1672500..61c3f94 100644 --- a/JSONCreator_iOS/JSONCreator.xcodeproj/project.pbxproj +++ b/JSONCreator_iOS/JSONCreator.xcodeproj/project.pbxproj @@ -47,6 +47,19 @@ EA5B696F2866BC1000B17D2E /* MVMCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA5B696C2866BC1000B17D2E /* MVMCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; EA5B69702866BC1000B17D2E /* MVMCoreUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA5B696D2866BC1000B17D2E /* MVMCoreUI.framework */; }; EA5B69712866BC1000B17D2E /* MVMCoreUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA5B696D2866BC1000B17D2E /* MVMCoreUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + EA62997B2C9B7BCA008980E3 /* ClientParameterBiometricTypeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299712C9B7BCA008980E3 /* ClientParameterBiometricTypeModel.swift */; }; + EA62997C2C9B7BCA008980E3 /* ActionRegisterFidoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299722C9B7BCA008980E3 /* ActionRegisterFidoModel.swift */; }; + EA62997D2C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299732C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift */; }; + EA62997E2C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299742C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift */; }; + EA62997F2C9B7BCA008980E3 /* ActionBiometricStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299752C9B7BCA008980E3 /* ActionBiometricStateModel.swift */; }; + EA6299802C9B7BCA008980E3 /* ActionBiometricStateHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299762C9B7BCA008980E3 /* ActionBiometricStateHandler.swift */; }; + EA6299812C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299772C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift */; }; + EA6299822C9B7BCA008980E3 /* ClientParameterBiometricType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299782C9B7BCA008980E3 /* ClientParameterBiometricType.swift */; }; + EA6299832C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299792C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift */; }; + EA6299842C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA62997A2C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift */; }; + EA6299882C9B7C54008980E3 /* RegisterPushNotificationActionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299852C9B7C53008980E3 /* RegisterPushNotificationActionHandler.swift */; }; + EA6299892C9B7C54008980E3 /* ActionRegisterPushNotificationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299862C9B7C53008980E3 /* ActionRegisterPushNotificationModel.swift */; }; + EA62998A2C9B7C54008980E3 /* BiometricSetupBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6299872C9B7C54008980E3 /* BiometricSetupBehavior.swift */; }; EAC58C022BEAB7AB00BA39FA /* VDSCoreTokens.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAC58C012BEAB7AB00BA39FA /* VDSCoreTokens.xcframework */; }; EAC58C032BEAB7AB00BA39FA /* VDSCoreTokens.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EAC58C012BEAB7AB00BA39FA /* VDSCoreTokens.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ @@ -92,6 +105,19 @@ EA3361FA2891D54A0071C351 /* VDSTypographyTokens.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = VDSTypographyTokens.xcframework; path = ../SharedFrameworks/VDSTypographyTokens.xcframework; sourceTree = ""; }; EA5B696C2866BC1000B17D2E /* MVMCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MVMCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EA5B696D2866BC1000B17D2E /* MVMCoreUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MVMCoreUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EA6299712C9B7BCA008980E3 /* ClientParameterBiometricTypeModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricTypeModel.swift; sourceTree = ""; }; + EA6299722C9B7BCA008980E3 /* ActionRegisterFidoModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterFidoModel.swift; sourceTree = ""; }; + EA6299732C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricStatusHandler.swift; sourceTree = ""; }; + EA6299742C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterFidoHandler.swift; sourceTree = ""; }; + EA6299752C9B7BCA008980E3 /* ActionBiometricStateModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionBiometricStateModel.swift; sourceTree = ""; }; + EA6299762C9B7BCA008980E3 /* ActionBiometricStateHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionBiometricStateHandler.swift; sourceTree = ""; }; + EA6299772C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricStatusModel.swift; sourceTree = ""; }; + EA6299782C9B7BCA008980E3 /* ClientParameterBiometricType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricType.swift; sourceTree = ""; }; + EA6299792C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricsEnabledHandler.swift; sourceTree = ""; }; + EA62997A2C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricsEnabledModel.swift; sourceTree = ""; }; + EA6299852C9B7C53008980E3 /* RegisterPushNotificationActionHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterPushNotificationActionHandler.swift; sourceTree = ""; }; + EA6299862C9B7C53008980E3 /* ActionRegisterPushNotificationModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterPushNotificationModel.swift; sourceTree = ""; }; + EA6299872C9B7C54008980E3 /* BiometricSetupBehavior.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BiometricSetupBehavior.swift; sourceTree = ""; }; EA7E676927582F2200ABF773 /* MVMCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MVMCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EA7E676A27582F2200ABF773 /* MVMCoreUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MVMCoreUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EAA658142875FA5E00484A7D /* VDSFormControlsTokens.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = VDSFormControlsTokens.xcframework; path = ../SharedFrameworks/VDSFormControlsTokens.xcframework; sourceTree = ""; }; @@ -118,6 +144,19 @@ D288D69B26CAE26900A5C365 /* MF */ = { isa = PBXGroup; children = ( + EA6299862C9B7C53008980E3 /* ActionRegisterPushNotificationModel.swift */, + EA6299872C9B7C54008980E3 /* BiometricSetupBehavior.swift */, + EA6299852C9B7C53008980E3 /* RegisterPushNotificationActionHandler.swift */, + EA6299762C9B7BCA008980E3 /* ActionBiometricStateHandler.swift */, + EA6299752C9B7BCA008980E3 /* ActionBiometricStateModel.swift */, + EA6299742C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift */, + EA6299722C9B7BCA008980E3 /* ActionRegisterFidoModel.swift */, + EA6299792C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift */, + EA62997A2C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift */, + EA6299732C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift */, + EA6299772C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift */, + EA6299782C9B7BCA008980E3 /* ClientParameterBiometricType.swift */, + EA6299712C9B7BCA008980E3 /* ClientParameterBiometricTypeModel.swift */, D29C557725BF1F340082E7D6 /* JSONCreatorActionHandler.swift */, ); path = MF; @@ -301,10 +340,23 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + EA6299812C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift in Sources */, + EA62997C2C9B7BCA008980E3 /* ActionRegisterFidoModel.swift in Sources */, + EA62997D2C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift in Sources */, + EA62997B2C9B7BCA008980E3 /* ClientParameterBiometricTypeModel.swift in Sources */, + EA6299832C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift in Sources */, D2B1E3F722F4A68F0065F95C /* DetailViewController.swift in Sources */, + EA6299822C9B7BCA008980E3 /* ClientParameterBiometricType.swift in Sources */, D2B1E3F522F4A68F0065F95C /* MasterViewController.swift in Sources */, + EA6299802C9B7BCA008980E3 /* ActionBiometricStateHandler.swift in Sources */, + EA6299842C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift in Sources */, + EA62997E2C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift in Sources */, D2B1E3F322F4A68F0065F95C /* AppDelegate.swift in Sources */, + EA62998A2C9B7C54008980E3 /* BiometricSetupBehavior.swift in Sources */, + EA6299882C9B7C54008980E3 /* RegisterPushNotificationActionHandler.swift in Sources */, + EA62997F2C9B7BCA008980E3 /* ActionBiometricStateModel.swift in Sources */, D29C557825BF1F340082E7D6 /* JSONCreatorActionHandler.swift in Sources */, + EA6299892C9B7C54008980E3 /* ActionRegisterPushNotificationModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/A_IssuesSample.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/A_IssuesSample.json new file mode 100644 index 0000000..85a5db5 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/A_IssuesSample.json @@ -0,0 +1,156 @@ + +{ + "Page": { + "header": { + "headlineBody": { + "headline": { + "moleculeName": "label", + "text": "About Face ID" + }, + "body": { + "moleculeName": "label", + "text": "Setting up Face ID only takes a couple of minutes." + } + }, + "moleculeName": "headerH2" + }, + "pageType": "learnMoreFaceID", + "hideFabOverlay": true, + "tabBarHidden": true, + "stack": { + "moleculeName": "stack", + "molecules": [ + { + "moleculeName": "stackItem", + "molecule": { + "fontStyle": "RegularBodyLarge", + "moleculeName": "label", + "attributes": [ + { + "length": 6, + "style": "BoldBodyLarge", + "type": "font", + "location": 0 + } + ], + "text": "Step 1 Follow the prompt to set up Face ID in the iOS settings." + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "fontStyle": "RegularBodyLarge", + "moleculeName": "label", + "attributes": [ + { + "length": 6, + "style": "BoldBodyLarge", + "type": "font", + "location": 0 + } + ], + "text": "Step 2 Select Set Up Face ID and follow the instructions to scan your face." + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "fontStyle": "RegularBodyLarge", + "moleculeName": "label", + "attributes": [ + { + "length": 6, + "style": "BoldBodyLarge", + "type": "font", + "location": 0 + } + ], + "text": "Step 3 When finished, return to the Verizon app." + } + }, + { + "spacing": 48, + "moleculeName": "stackItem", + "molecule": { + "fontStyle": "BoldBodyLarge", + "moleculeName": "label", + "accessibilityTraits": [ + "header" + ], + "text": "How does Face ID work?" + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "label", + "text": "Face ID is a technology that maps the unique geometry of your face and uses it to authenticate you on apps and services. It adapts to changes, such as makeup and facial hair, and works with hats, scarves, glasses, etc.", + "fontStyle": "RegularBodyLarge" + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "label", + "text": "Once your Face ID is stored, you can use it to access your Verizon account.", + "fontStyle": "RegularBodyLarge" + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "fontStyle": "RegularBodyLarge", + "moleculeName": "label", + "attributes": [ + { + "length": 7, + "type": "action", + "location": 78, + "action": { + "actionType": "openURL", + "browserUrl": "https://support.apple.com/en-us/HT208109" + } + }, + { + "length": 14, + "type": "action", + "location": 87, + "action": { + "actionType": "openURL", + "browserUrl": "https://www.apple.com/privacy/control/#:~:text=Touch%20ID%20and%20Face%20ID&text=Your%20fingerprint%20or%20face%20data,extraordinary%20measures%20to%20protect%20it" + } + }, + { + "length": 15, + "type": "action", + "location": 106, + "action": { + "actionType": "openURL", + "browserUrl": "https://support.apple.com/en-us/HT208108" + } + } + ], + "text": "To learn more about using Face ID on your device, please visit Apple's pages: Support, Privacy Policy and Security Guides." + } + } + ] + }, + "hideWishList": true, + "hideShopCart": true, + "template": "stack", + "navigationBar": { + "moleculeName": "navigationBar", + "backButton": { + "image": "nav_close", + "moleculeName": "navigationImageButton", + "action": { + "analyticsData": { + "vzwi.mvmapp.LinkName": "close" + }, + "actionType": "back" + } + }, + "title": "Face ID" + } + } +} diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/FormContactInfo.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/FormContactInfo.json index 6319fb3..71cae3d 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/FormContactInfo.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/FormContactInfo.json @@ -131,7 +131,8 @@ "fields": [ "emailID", "firstName", - "lastName" + "lastName", + "zipcode" ] } ] diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/MVA3.0/carousel.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/MVA3.0/carousel.json index 6ca2520..ecfa05c 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/MVA3.0/carousel.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/MVA3.0/carousel.json @@ -1,91 +1,260 @@ { - "ResponseInfo" : { - "type" : "Success", - "code" : "00000" + "ResponseInfo": { + "type": "Success", + "code": "00000" }, - "Page" : { - "template" : "list", - "pageType" : "x", - "formRules": [{ - "groupName": "default", - "rules": [{ - "type": "anyValueChanged", - "fields": [ - "c1" - ] - }] - }], - "header" : { - "moleculeName" : "header", - "molecule" : { - "moleculeName" : "headlineBody", - "headline" : { - "moleculeName" : "label", - "text" : "x" + "Page": { + "template": "list", + "pageType": "x", + "formRules": [ + { + "groupName": "default", + "rules": [ + { + "type": "anyValueChanged", + "fields": [ + "c1" + ] + } + ] + } + ], + "header": { + "moleculeName": "header", + "molecule": { + "moleculeName": "headlineBody", + "headline": { + "moleculeName": "label", + "text": "Title" }, - "body" : { - "moleculeName" : "label", - "text" : "y" + "body": { + "moleculeName": "label", + "text": "body" } } }, - "molecules" : [{ - "moleculeName":"listItem", - "molecule":{ - "moleculeName" : "carousel", - "accessibilityText":"carousel", - "fieldKey": "c1", - "selectedIndex": 2, - "loop":true, - "pagingMolecule": { - "moleculeName":"numericCarouselIndicator" - }, - "molecules" : [ - { - "moleculeName" : "carouselItem", - "backgroundColor":"red", - "molecule" : { - "moleculeName" : "label", - "text" : "1" - } - }, - { - "moleculeName" : "carouselItem", - "backgroundColor":"blue", - "molecule" : { - "moleculeName" : "label", - "text" : "2" - } - }, -{ - "moleculeName" : "carouselItem", - "backgroundColor":"green", - "molecule" : { - "moleculeName" : "label", - "text" : "3" - } + "molecules": [ + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "carousel", + "accessibilityText": "carousel", + "fieldKey": "c1", + "selectedIndex": 2, + "loop": true, + "pagingMolecule": { + "moleculeName": "numericCarouselIndicator" + }, + "molecules": [ + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 1", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 2", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 3", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 4", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 5", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + } + ], + "height": 150 } - ], - "height" : 300 - }}], - "footer" : { - "moleculeName" : "footer", - "molecule" : { - "moleculeName" : "twoButtonView", - "primaryButton" : { - "moleculeName" : "button", - "title" : "x", + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "carousel", + "accessibilityText": "carousel", + "fieldKey": "c1", + "selectedIndex": 2, + "loop": true, + "pagingMolecule": { + "moleculeName": "barsCarouselIndicator" + }, + "molecules": [ + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 1", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 2", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 3", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 4", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + }, + { + "moleculeName": "carouselItem", + "molecule": { + "moleculeName": "tilelet", + "color": "#000000", + "showDropShadow": true, + "title": { + "moleculeName": "label", + "text": "Title Goes Here - 5", + "textColor": "#ffffff" + }, + "subTitle": { + "text": "Subtitle goes here", + "textColor": "#ffffff" + } + } + } + ], + "height": 150 + } + } + ], + "footer": { + "moleculeName": "footer", + "molecule": { + "moleculeName": "twoButtonView", + "primaryButton": { + "moleculeName": "button", + "title": "Button 1", "groupName": "default", - "action" : { - "actionType" : "openPage", - "pageType" : "verifyZip" + "action": { + "actionType": "openPage", + "pageType": "verifyZip" } }, - "secondaryButton" : { - "moleculeName" : "button", - "title" : "x", - "action" : { - "actionType" : "back" + "secondaryButton": { + "moleculeName": "button", + "title": "Button 2", + "action": { + "actionType": "back" } } } diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing.json index ca169b7..7bffcdd 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing.json @@ -1,235 +1,265 @@ { - "ResponseInfo": {}, - "Page": { - "pageType": "contactUs", - "screenHeading": "Select an international plan", - "template": "list", - "molecules": [{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\ndafsdssfafs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "alwaysReset":true, - "video": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"6", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - + "ResponseInfo":{ + "type":"Success", + "code":"00000" + }, + "Page":{ + "pageType":"onboardingBiometric", + "template":"threeLayerFillMiddle", + "hideFabOverlay":true, + "tabBarHidden":true, + "navigationBar":{ + "moleculeName":"navigationBar", + "hidden":true + }, + "behaviors":[ + { + "behaviorName":"biometricSetup" + } + ], + "formRules":[ + { + "groupName":"default", + "rules":[ + { + "type":"allRequired", + "fields":[ + "t&c" + ] + } + ] + } + ], + "middle":{ + "moleculeName":"stack", + "useHorizontalMargins":true, + "verticalAlignment":"trailing", + "molecules":[ + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "molecule":{ + "moleculeName":"image", + "image":"face_id_logo", + "height":68 + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "spacing":48, + "molecule":{ + "moleculeName":"label", + "text":"Turn on Face ID", + "fontStyle":"RegularTitleLarge", + "textAlignment":"center" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "molecule":{ + "moleculeName":"label", + "text":"Use facial recognition instead of your password for quick and secure sign in.", + "textAlignment":"center" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "molecule":{ + "moleculeName":"label", + "text":"Your biometric information will only be stored on your device. Verizon will not store or have access to this information.", + "textAlignment":"center" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "molecule":{ + "moleculeName":"label", + "text":"Face ID can be turned on or off at any time from your app settings.", + "textAlignment":"center" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "molecule":{ + "moleculeName":"link", + "title":"Learn more about Face ID", + "action":{ + "actionType":"openPage", + "pageType":"learnMoreFaceID" } - } - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "alwaysReset":true, - "video": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"9", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "alwaysReset":true, - "video": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"12", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } - } - }], - "middle": { - "moleculeName": "bgVideoImageContainer", - "verticalAlignment": "trailing", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"x", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"center", + "spacing":32, + "molecule":{ + "moleculeName":"checkboxLabel", + "label":{ + "moleculeName":"label", + "text":"I accept the Terms and Conditions that will force the screen to ameke a asd wer", + "fontStyle":"RegularBodySmall", + "attributes":[ + { + "length":20, + "location":13, + "type":"action", + "action":{ + "analyticsData":{ + "vzdl.page.id":"turnOnFaceIdConfirmationPage", + "vzdl.page.name":"enable biometric faceid", + "vzdl.page.displayChannel":"mva", + "vzdl.target.engagement.intent":"biometric", + "vzdl.page.linkName":"tnc", + "vzdl.page.sourceChannel":"mva" + }, + "presentationStyle":"push", + "pageType":"biometricTnC", + "actionType":"openPage" + } + } + ] }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } + "subTitle":{ + "moleculeName":"label", + "text":"I accept the Terms and Conditions that will force the screen to ameke a asd wer" + }, + "checkbox":{ + "moleculeName":"checkbox", + "groupName":"default", + "required":true, + "fieldKey":"t&c" } - - } - } + } + } + ] + }, + "footer":{ + "moleculeName":"footer", + "molecule":{ + "moleculeName":"buttonGroup", + "rowQuantityPhone":1, + "rowQuantityTablet":1, + "childWidthPercentage":100, + "buttons":[ + { + "moleculeName":"button", + "title":"Turn on", + "style":"secondary", + "groupName":"default", + "action":{ + "actionType":"biometricState", + "biometricsDeniedAction":{ + "requestURL":"https:\/\/mobile-exp-qa1-west-2.vzw.com\/mobile\/nsa\/psecure\/gw\/launchapp\/continueFaceId", + "extraParameters":{ + "referrer":"SOE" + }, + "actionType":"openPage", + "presentationStyle":"replace", + "pageType":"continueFaceId" + }, + "biometricsDisabledAction":{ + "alert":{ + "title":"Face ID must be enabled in iOS", + "message":"Please navigate to iOS Settings > Face ID & Passcode > Set up Face ID", + "alertActions":[ + { + "style":"cancel", + "action":{ + "analyticsData":{ + "vzdl.page.id":"turnOnFaceIdConfirmationPage_V2", + "vzdl.page.sourceChannel":"mva", + "vzdl.page.displayChannel":"mva", + "vzdl.page.name":"enable biometric faceid V2", + "vzdl.page.linkName":"done popup", + "vzdl.page.pageTypeLinkname":"turnOnFaceIdConfirmationPage_V2|done popup" + }, + "actionType":"cancel" + }, + "title":"OK" + } + ] + }, + "actionType":"alert" + }, + "biometricsEnabledAction":{ + "actionType":"registerFIDO", + "fidoGuid":"4496d0b1-8ec2-4f58-b32a-8828f898f544", + "userIdentifier":"2243219982", + "fidoRegistrationError":"Failed to setup biometric, please try again later.", + "accessToken":"rX9mo77dAGpcatTM8V7Me9dHLpmiLSLT1r5Ogucqbmt56FqbF8ziQzQ7DpSEHZqcwd4TpCknfzITgEbnUA5le4OVMvrrGCXUFn6f", + "onSuccess":{ + "actions":[ + { + "topNotification":{ + "analyticsData":{ + "vzdl.page.sourceChannel":"mva", + "vzdl.page.pageTypeLinkname":"turnOnFaceIdConfirmationPage_V2|notification:Face ID enabled", + "vzdl.page.linkName":"notification:Face ID enabled", + "vzdl.page.displayChannel":"mva", + "vzdl.events.shownInAppMsg":"1", + "vzdl.page.id":"turnOnFaceIdConfirmationPage_V2", + "vzdl.page.name":"enable biometric faceid V2" + }, + "type":"biometricConfirmation", + "molecule":{ + "body":{ + "moleculeName":"label", + "text":"You can use Face ID next time your sign in to this app." + }, + "closeButton":{ + "moleculeName":"notificationXButton" + }, + "moleculeName":"notification", + "style":"success", + "headline":{ + "moleculeName":"label", + "text":"Face ID enabled" + } + } + }, + "actionType":"topNotification" + }, + { + "requestURL":"https:\/\/mobile-exp-qa1-west-2.vzw.com\/mobile\/nsa\/psecure\/gw\/launchapp\/continueFaceId", + "analyticsData":{ + "vzdl.page.id":"turnOnFaceIdConfirmationPage_V2", + "vzdl.page.sourceChannel":"mva", + "vzdl.page.displayChannel":"mva", + "vzdl.page.name":"enable biometric faceid V2", + "vzdl.page.linkName":"turn on", + "vzdl.page.pageTypeLinkname":"turnOnFaceIdConfirmationPage_V2|turn on" + }, + "extraParameters":{ + "referrer":"SOE" + }, + "actionType":"openPage", + "presentationStyle":"replace", + "pageType":"continueFaceId" + } + ], + "actionType":"actions" + } + } + } + }, + { + "moleculeName":"link", + "title":"Skip", + "style":"secondary", + "groupName":"nonForm", + "action":{ + "actionType":"openPage", + "pageType":"biometricSkip" + } + } + ] + } } - } + } } diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing2.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing2.json index bbfc3e0..01d6c1a 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing2.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing2.json @@ -1,232 +1,720 @@ { - "ResponseInfo": {}, - "Page": { - "pageType": "contactUs", - "screenHeading": "Select an international plan", - "template": "list", - "molecules": [{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\ndafsdssfafs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://mobile.vzw.com/hybridClient/is/content/VerizonWireless/AKQA%20Assets/AKQA%20Assets%20(12_17%20onward)/PIB_Flow_opening.mp4" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"6", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://ss7.vzw.com/is/content/VerizonWireless/5g-home/gemini/4_speedtest/430_speedtest_on.mp4" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"9", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafaf\n\nadsfa\nadfs" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "label", - "text": "afa\ndasfdsa\nadfadfda\nasadfsafa\nafsafsa\nafsadfas\nadffafafttttt" - } - },{ - "moleculeName":"listItem", - "molecule": { - "moleculeName": "bgVideoImageContainer", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://ss7.vzw.com/is/content/VerizonWireless/5g-home/gemini/3_mount/360_swivel.mp4" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"12", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } - } - }], - "middle": { - "moleculeName": "bgVideoImageContainer", - "verticalAlignment": "trailing", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://mobile.vzw.com/hybridClient/is/content/VerizonWireless/AKQA%20Assets/AKQA%20Assets%20(12_17%20onward)/PIB_Flow_opening.mp4" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"x", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "rtlVisitUs" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } - } + "ResponseInfo" : { + "appSessionExtended" : true, + "timeStamp" : "575", + "mdn" : "7324270455", + "message" : "0", + "correlationId" : "4f030dfd-90c0-416a-bae3-1ac7be8dd79d", + "server" : "144-70-50-10.vpc.verizon.com-mf_postpayss01", + "topAlertTime" : 0, + "locale" : "EN", + "type" : "Success", + "requestId" : "4f030dfd-90c0-416a-bae3-1ac7be8dd79d", + "code" : "00000", + "buildNumber" : "1120", + "userMessage" : "0" + }, + "Page" : { + "header" : { + "moleculeName" : "header", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Set privacy preferences.", + "accessibilityText" : "Set privacy preferences, heading level 1" + } } + }, + "pageType" : "privacyPreferences", + "molecules" : [ + { + "moleculeName" : "listItem", + "molecule" : { + "moleculeName" : "stack", + "axis" : "vertical", + "molecules" : [ + { + "moleculeName" : "stackItem", + "molecule" : { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Customer Proprietary Network Info", + "accessibilityTraits" : [ + "header" + ] + }, + "body" : { + "moleculeName" : "label", + "text" : "Allow Sharing" + } + }, + "moleculeName" : "headlineBodyToggle", + "toggle" : { + "accessibilityText" : "Customer Proprietary Network Info", + "id" : "cust_1001", + "state" : false, + "moleculeName" : "toggle", + "enabled" : true, + "action" : { + "actionType" : "openPage", + "pageType" : "updatePrivacyPreferences", + "extraParameters" : { + "id" : "cust_1001", + "cpniIndicator" : "Y", + "selectedMdn" : "7324270455" + }, + "presentationStyle" : "push", + "openInWebview" : true, + "tryToReplaceFirst" : false, + "openOauthWebView" : false, + "showNativeNavigation" : false + } + } + } + }, + { + "moleculeName" : "stackItem", + "molecule" : { + "accessibilityText" : "Tell me more about Customer Proprietary Network Info", + "title" : "Tell me more", + "moleculeName" : "link", + "action" : { + "actionType" : "openPage", + "pageType" : "cpniInformation" + } + } + } + ] + } + }, + { + "moleculeName" : "listItem", + "molecule" : { + "moleculeName" : "stack", + "axis" : "vertical", + "molecules" : [ + { + "moleculeName" : "stackItem", + "molecule" : { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Business and Marketing Insights", + "accessibilityTraits" : [ + "header" + ] + }, + "body" : { + "moleculeName" : "label", + "text" : "Allow use of information" + } + }, + "moleculeName" : "headlineBodyToggle", + "toggle" : { + "accessibilityText" : "Business and Marketing Insights", + "id" : "cust_1002", + "state" : false, + "moleculeName" : "toggle", + "enabled" : true, + "action" : { + "actionType" : "openPage", + "pageType" : "updatePrivacyPreferences", + "extraParameters" : { + "id" : "cust_1002", + "bmrIndicator" : "Y", + "selectedMdn" : "7324270455" + }, + "presentationStyle" : "push", + "openInWebview" : true, + "tryToReplaceFirst" : false, + "openOauthWebView" : false, + "showNativeNavigation" : false + } + } + } + }, + { + "moleculeName" : "stackItem", + "molecule" : { + "accessibilityText" : "Tell me more about Business and Marketing Insights", + "title" : "Tell me more", + "moleculeName" : "link", + "action" : { + "actionType" : "openPage", + "pageType" : "bmrInformation" + } + } + } + ] + } + }, + { + "moleculeName" : "listItem", + "molecule" : { + "moleculeName" : "stack", + "axis" : "vertical", + "molecules" : [ + { + "moleculeName" : "stackItem", + "molecule" : { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Custom Experience", + "accessibilityTraits" : [ + "header" + ] + } + }, + "moleculeName" : "headlineBodyToggle", + "toggle" : { + "accessibilityText" : "Custom Experience", + "id" : "cust_1003", + "state" : false, + "moleculeName" : "toggle", + "enabled" : true, + "action" : { + "actionType" : "openPage", + "pageType" : "updatePrivacyPreferences", + "extraParameters" : { + "id" : "cust_1003", + "oeIndicator" : "Y", + "selectedMdn" : "7324270455" + }, + "presentationStyle" : "push", + "openInWebview" : true, + "tryToReplaceFirst" : false, + "openOauthWebView" : false, + "showNativeNavigation" : false + } + } + } + }, + { + "spacing" : 0, + "moleculeName" : "stackItem", + "molecule" : { + "accessibilityText" : "Tell me more about Custom Experience", + "title" : "Tell me more", + "moleculeName" : "link", + "action" : { + "actionType" : "openPage", + "pageType" : "oeInformation" + } + } + } + ] + } + }, + { + "moleculeName" : "listItem", + "molecule" : { + "moleculeName" : "stack", + "axis" : "vertical", + "molecules" : [ + { + "moleculeName" : "stackItem", + "molecule" : { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Custom Experience Plus", + "accessibilityTraits" : [ + "header" + ] + } + }, + "moleculeName" : "headlineBodyToggle", + "toggle" : { + "accessibilityText" : "Custom Experience Plus", + "id" : "cust_1004", + "state" : false, + "moleculeName" : "toggle", + "enabled" : true, + "action" : { + "actionType" : "openPage", + "pageType" : "participationAgreement", + "presentationStyle" : "push", + "openInWebview" : true, + "tryToReplaceFirst" : false, + "openOauthWebView" : false, + "showNativeNavigation" : false + } + } + } + }, + { + "spacing" : 0, + "moleculeName" : "stackItem", + "molecule" : { + "accessibilityText" : "Tell me more about Custom Experience Plus", + "title" : "Tell me more", + "moleculeName" : "link", + "action" : { + "actionType" : "openPage", + "pageType" : "oepInformation" + } + } + } + ] + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "body" : { + "moleculeName" : "label", + "text" : "Custom Experience Settings", + "fontStyle" : "B1" + } + }, + "moleculeName" : "list1CFWBdy", + "action" : { + "disabled" : false, + "extraParameters" : { + "selectedMdn" : "7324270455" + }, + "actionType" : "openPage", + "pageType" : "vzwSelects" + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "body" : { + "moleculeName" : "label", + "text" : "Identity Verification Settings", + "fontStyle" : "B1" + } + }, + "moleculeName" : "list1CFWBdy", + "action" : { + "disabled" : false, + "extraParameters" : { + "selectedMdn" : "7324270455" + }, + "actionType" : "openPage", + "pageType" : "cdiFraudSettings" + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "body" : { + "moleculeName" : "label", + "text" : "Privacy policy", + "fontStyle" : "B1" + } + }, + "moleculeName" : "list1CFWBdy", + "action" : { + "disabled" : false, + "browserUrl" : "https:\/\/www.verizon.com\/about\/privacy\/privacy-policy-summary", + "actionType" : "openURL", + "pageType" : "privacyPolicy" + } + }, + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Not seeing your updates?", + "accessibilityText" : "Not seeing your updates?, heading level 2" + }, + "body" : { + "moleculeName" : "label", + "text" : "Changes may take up to 15 minutes to appear." + } + } + } + ], + "suppressPostLaunchRequests" : false, + "tabBarHidden" : false, + "cache" : true, + "hideFabOverlay" : true, + "pageStatNames" : [ + "\/vision\/customer\/profile", + "\/mf\/intl\/plan\/current\/features", + "\/mf\/dns\/flags\/inquiry", + "unknown", + "\/mf\/acctount\/settings\/privacy" + ], + "template" : "list", + "navigationBar" : { + "moleculeName" : "navigationBar", + "title" : "Privacy preferences" + } + }, + "PageMap" : { + "participationAgreement" : { + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "moleculeName" : "twoButtonView", + "primaryButton" : { + "moleculeName" : "button", + "action" : { + "extraParameters" : { + "oepIndicator" : "Y", + "selectedMdn" : "7324270455" + }, + "actionType" : "openPage", + "title" : "Accept", + "presentationStyle" : "push", + "pageType" : "updatePrivacyPreferences" + }, + "title" : "Accept" + }, + "secondaryButton" : { + "moleculeName" : "button", + "action" : { + "extraParameters" : { + "selectedMdn" : "7324270455" + }, + "actionType" : "openPage", + "title" : "Not now", + "presentationStyle" : "push", + "pageType" : "privacyPreferences" + }, + "title" : "Not now" + } + } + }, + "pageType" : "participationAgreement", + "molecules" : [ + { + "moleculeName" : "listItem", + "molecule" : { + "moleculeName" : "label", + "attributes" : [ + { + "length" : 13, + "type" : "action", + "location" : 1013, + "action" : { + "browserUrl" : "https:\/\/www.verizon.com\/support\/verizon-custom-experience-programs-faqs\/", + "actionType" : "openURL", + "openInWebview" : true, + "disabled" : false + } + } + ], + "text" : "Verizon Custom Experience Plus helps us personalize our communication with you, give you more relevant product and service recommendations, and develop plans, services and offers and are more appealing to you.\n\nThe program uses information about websites you visit and apps you use on your mobile device, device location and Customer Proprietary Network Information (CPNI), including phone numbers you call or that call you, to help us understand your interests, like “sports lover” or “gamer.”\n\nWe protect your information, as required by federal law, and use it only for Verizon purposes; we do not sell information we use in the programs to others for them to use for their own advertising.\n\nYou must opt in to participate and you can change your choice at any time.\n\nIf you participate in Custom Experience Plus, you will also be included in the Custom Experience and Business and Marketing Insights programs.\n\nYour choice here won't affect any other Verizon services.\n\nAdditional details are available in our Program FAQs." + } + } + ], + "suppressPostLaunchRequests" : false, + "tabBarHidden" : false, + "cache" : true, + "header" : { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Do you want to enroll in Verizon Custom Experience Plus?" + } + }, + "moleculeName" : "headerH2" + }, + "template" : "list", + "navigationBar" : { + "moleculeName" : "navigationBar", + "title" : "Custom Experience Plus" + } + }, + "oeInformation" : { + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "moleculeName" : "button", + "action" : { + "actionType" : "back", + "pageType" : "back" + }, + "title" : "Got it" + } + }, + "pageType" : "oeInformation", + "molecules" : [ + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "label", + "attributes" : [ + { + "length" : 12, + "type" : "action", + "location" : 646, + "action" : { + "browserUrl" : "https:\/\/www.verizon.com\/support\/verizon-custom-experience-programs-faqs\/", + "actionType" : "openURL", + "openInWebview" : true, + "disabled" : false + } + } + ], + "text" : "Verizon Custom Experience helps us personalize our communications with you, give you more relevant product and service recommendations, and develop plans, services and offers that are more appealing to you.\n\nThe program uses information about websites you visit and apps you use on your mobile device to help us better understand your interests, like “sports lover” or “outdoor enthusiast.”\n\nWe protect your information and use it only for Verizon purposes; we do not sell information we use in the program to others for them to use for their own advertising.\n\nYou can opt out of this program at any time. Additional details are available in our Program FAQs." + } + } + ], + "suppressPostLaunchRequests" : false, + "tabBarHidden" : true, + "cache" : true, + "screenHeading" : "Custom Experience", + "header" : { + "moleculeName" : "header", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Here are the details" + } + } + }, + "template" : "list", + "navigationBar" : { + "moleculeName" : "navigationBar", + "backButton" : { + "accessibilityText" : "Close", + "moleculeName" : "navigationImageButton", + "image" : "nav_close", + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "close" + }, + "title" : "Close", + "actionType" : "back", + "presentationStyle" : "push", + "pageType" : "back" + } + }, + "title" : "Custom Experience" + } + }, + "oepInformation" : { + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "moleculeName" : "button", + "action" : { + "actionType" : "back", + "pageType" : "back" + }, + "title" : "Got it" + } + }, + "pageType" : "oepInformation", + "molecules" : [ + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "label", + "attributes" : [ + { + "length" : 12, + "type" : "action", + "location" : 1013, + "action" : { + "browserUrl" : "https:\/\/www.verizon.com\/support\/verizon-custom-experience-programs-faqs\/", + "actionType" : "openURL", + "openInWebview" : true, + "disabled" : false + } + } + ], + "text" : "Verizon Custom Experience Plus helps us personalize our communications with you, give you more relevant product and service recommendations, and develop plans, services and offers and are more appealing to you.\n\nThe program uses information about websites you visit and apps you use on your mobile device, device location and Customer Proprietary Network Information (CPNI), including phone numbers you call or that call you, to help us understand your interests, like “sports lover” or “gamer.”\n\nWe protect your information, as required by federal law, and use it only for Verizon purposes; we do not sell information we use in the program to others for them to use for their own advertising.\n\nYou must opt in to participate and you can change your choice at any time.\n\nIf you participate in Custom Experience Plus, you will also be included in the Custom Experience and Business and Marketing Insights programs.\n\nYour choice here won’t affect any other Verizon services. Additional details are available in our Program FAQs." + } + } + ], + "suppressPostLaunchRequests" : false, + "tabBarHidden" : true, + "cache" : true, + "screenHeading" : "Custom Experience Plus", + "header" : { + "moleculeName" : "header", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Here are the details" + } + } + }, + "template" : "list", + "navigationBar" : { + "moleculeName" : "navigationBar", + "backButton" : { + "accessibilityText" : "Close", + "moleculeName" : "navigationImageButton", + "image" : "nav_close", + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "close" + }, + "title" : "Close", + "actionType" : "back", + "presentationStyle" : "push", + "pageType" : "back" + } + }, + "title" : "Custom Experience Plus" + } + }, + "cpniInformation" : { + "template" : "list", + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "moleculeName" : "button", + "action" : { + "actionType" : "back", + "pageType" : "back" + }, + "title" : "Done" + } + }, + "molecules" : [ + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "label", + "text" : "CPNI is information made available to us solely by virtue of our relationship with you that relates to the type, quantity, destination, technical configuration, location, and amount of use of the telecommunications and interconnected VoIP services you purchase from us, as well as related billing information. The protection of your information is important to us, and you have a right, and we have a duty, under federal law, to protect the confidentiality of your CPNI.\n\nWe may use and share your CPNI among our affiliates and agents to offer you services that are different from the services you currently purchase from us. Verizon offers a full range of services, such as television, telematics, high-speed Internet, video, and local and long distance services. Visit Verizon.com for more information on our services and companies.\n\nIf you don't want your CPNI used for the marketing purposes described above, please notify us by phone any time at 1-800-333-9956 or by modifying the elections below.\n\nUnless you notify us in one of these ways, we may use your CPNI as described above beginning 30 days after the first time we notify you of this CPNI policy. Your choice will remain valid until you notify us that you wish to change your selection. Your decision about use of your CPNI will not affect the provision of any services you currently have with us.\n\nNote: This CPNI notice does not apply to residents of the state of Arizona." + } + } + ], + "screenHeading" : "CPN Information", + "hideFabOverlay" : true, + "cache" : true, + "header" : { + "moleculeName" : "header", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Customer Proprietary Network Information" + } + } + }, + "pageType" : "cpniInformation", + "suppressPostLaunchRequests" : false, + "navigationBar" : { + "moleculeName" : "navigationBar", + "backButton" : { + "accessibilityText" : "Close", + "moleculeName" : "navigationImageButton", + "image" : "nav_close", + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "close" + }, + "title" : "Close", + "actionType" : "back", + "presentationStyle" : "push", + "pageType" : "back" + } + }, + "title" : "CPN info" + }, + "tabBarHidden" : true + }, + "bmrInformation" : { + "template" : "list", + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "moleculeName" : "button", + "action" : { + "actionType" : "back", + "pageType" : "back" + }, + "title" : "Done" + } + }, + "molecules" : [ + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "label", + "attributes" : [ + { + "length" : 26, + "type" : "action", + "location" : 1058, + "action" : { + "browserUrl" : "https:\/\/www.verizon.com\/support\/business-marketing-reports-faqs\/", + + "actionType" : "openURL", + "openInWebview" : true, + "disabled" : false + } + } + ], + "text" : "Business and marketing insights help us and others better understand consumer actions in aggregate. For example, we may create insights about the number of customers in different age groups who visit a website, use an app, or go to a retail store or stadium. We also may develop insights to help estimate traffic patterns about people who move from one area to another during the morning rush hour. The information we use and the insights we create do not identify you individually.\n\nWe use information about how you use your mobile device (such as web browsing, device location, and app\/feature use, certain information about your Verizon products and services (such as device type and amount of use) and demographic and interest information we get from you or from other companies (such as gender, age range and interests). We also use location and point of interest information we obtain from others. We may also use information provided by business and marketing insights clients who want to better understand their own customers or businesses.\n\nSee our Frequently Asked Questions for more information.\n\nYou have a choice about whether your Verizon information is used in the Business and Marketing Insights program. Please note, if you opt in to the Verizon Custom Experience Plus program, you will also be a part of the Business and Marketing Insights program independent of your choice here." + } + } + ], + "screenHeading" : "Business and Marketing Insights", + "hideFabOverlay" : true, + "cache" : true, + "header" : { + "moleculeName" : "header", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Business and Marketing Insights" + } + } + }, + "pageType" : "bmrInformation", + "suppressPostLaunchRequests" : false, + "navigationBar" : { + "moleculeName" : "navigationBar", + "backButton" : { + "accessibilityText" : "Close", + "moleculeName" : "navigationImageButton", + "image" : "nav_close", + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "close" + }, + "title" : "Close", + "actionType" : "back", + "presentationStyle" : "push", + "pageType" : "back" + } + }, + "title" : "Business and Marketing In..." + }, + "tabBarHidden" : true + } } } diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing3.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing3.json index 28587a6..7985612 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing3.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/Testing3.json @@ -1,48 +1,338 @@ { - "ResponseInfo": {}, - "Page": { - "pageType": "planSelectionPageType", - "screenHeading": "Select an international plan", - "template": "threeLayerFillMiddle", - "middle": { - "moleculeName": "bgVideoImageContainer", - "verticalAlignment": "trailing", - "video": { - "moleculeName": "video", - "showControls": false, - "autoPlay": true, - "video": "https://mobile.vzw.com/hybridClient/is/content/VerizonWireless/AKQA%20Assets/AKQA%20Assets%20(12_17%20onward)/PIB_Flow_opening.mp4" - }, - "image": { - "moleculeName": "image", - "image": "https://mobile.vzw.com/hybridClient/is/image/VerizonWireless/mva-pib-activation" - }, - "molecule": { - "moleculeName": "footer", - "molecule": { - "moleculeName":"twoButtonView", - "primaryButton":{ - "moleculeName": "button", - "title":"x", - "fillColor": "white", - "textColor": "black", - "action": { - "actionType": "openPage", - "pageType": "videotest" - } - }, - "secondaryButton":{ - "moleculeName": "button", - "title":"y", - "borderColor": "white", - "textColor": "white", - "action": { - "actionType": "back" - } - } - - } + "ResponseInfo" : { + "locale" : "EN", + "server" : "mf_prepayss01", + "userMessage" : "0", + "code" : "00000", + "hideNotificationLogo" : false, + "message" : "0", + "buildNumber" : "2054", + "type" : "Success", + "requestId" : "a659c62f-9962-4788-a6ee-de8d4b92a2b8", + "topAlertTime" : 0, + "disableType" : "SurvivalMode" + }, + "SystemParams" : { + "fidoMap" : { + "accessToken" : "c2u-Od2Qzjxv1hKLmrMGOwiGkjE", + "fidoGuid" : "95c233fc-1607-414d-a69e-65c1757389c3" + }, + "deviceToken" : "NYt1rMeITp1oGdlvWgudOAwLIC6bVzN97JN7WPi\/RZk2GW971L0\/ulhTgmYQam09x8mQPhGJdM+psAPN24eLtzMGCJiWv0GHbRxF5fmbGwC6Z5rxjg7LRWOlT3rvyf7F" + }, + "Page" : { + "analyticsData" : { + "vzdl.page.flow" : "device landing screen", + "vzwi.mvmapp.pageName" : "\/mf\/myDevice", + "vzwi.mvmapp.pageType" : "myDevicesPR", + "vzdl.page.subFlow" : "device landing screen" + }, + "pageType" : "myDevicesPR", + "molecules" : [ + { + "body" : { + "moleculeName" : "label", + "text" : "864-399-5483", + "fontStyle" : "RegularBodyMedium" + }, + "moleculeName" : "listDvcBtnM", + "button" : { + "size" : "small", + "title" : "Administra", + "moleculeName" : "button", + "enabled" : true, + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "Administrar" + }, + "extraParameters" : { + "customerIntent" : "EUP", + "selectedMDN" : "8643995483" + }, + "actionType" : "openPage", + "appContext" : "mfPrepaySS", + "pageType" : "manageDevicePR" } - } + }, + "image" : { + "height" : 120, + "moleculeName" : "image", + "image" : "https:\/\/mobile.vzw.com\/hybridClient\/is\/image\/VerizonWireless\/samsung-galaxy-s10-black?$device-med$", + "imageFormat" : "png", + "accessibilityText" : "Samsung Galaxy S10 128 GB en negro prisma" + }, + "headline" : { + "moleculeName" : "label", + "text" : "Tu teléfono", + "fontStyle" : "BoldTitleLarge" + } + }, + { + "body" : { + "moleculeName" : "label", + "text" : "NumberShare con \n864-395-9569", + "fontStyle" : "RegularBodyMedium" + }, + "moleculeName" : "listDvcBtnM", + "button" : { + "size" : "small", + "title" : "Administra", + "moleculeName" : "button", + "enabled" : true, + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "Administrar" + }, + "extraParameters" : { + "customerIntent" : "EUP", + "selectedMDN" : "6082155795" + }, + "actionType" : "openPage", + "appContext" : "mfPrepaySS", + "pageType" : "manageDevicePR" + } + }, + "image" : { + "height" : 120, + "moleculeName" : "image", + "image" : "https:\/\/mobile.vzw.com\/hybridClient\/is\/image\/VerizonWireless\/apple-watch-series-5-space-black-stainless-steel-44mm-sport-band-black-vertical-pure-mww72lla-a?$device-med$", + "imageFormat" : "png", + "accessibilityText" : "Apple Watch Series 5, con caja de acero inoxidable negro espacial de 44 mm y correa deportiva negra" + }, + "headline" : { + "moleculeName" : "label", + "text" : "Chill's Smartwatch", + "fontStyle" : "BoldTitleLarge" + } + }, + { + "body" : { + "moleculeName" : "label", + "text" : "864-395-9569", + "fontStyle" : "RegularBodyMedium" + }, + "moleculeName" : "listDvcBtnM", + "button" : { + "size" : "small", + "title" : "Administra", + "moleculeName" : "button", + "enabled" : true, + "action" : { + "analyticsData" : { + "vzdl.page.linkName" : "Administrar" + }, + "extraParameters" : { + "customerIntent" : "EUP", + "selectedMDN" : "8643959569" + }, + "actionType" : "openPage", + "appContext" : "mfPrepaySS", + "pageType" : "manageDevicePR" + } + }, + "image" : { + "height" : 120, + "moleculeName" : "image", + "image" : "https:\/\/mobile.vzw.com\/hybridClient\/is\/image\/VerizonWireless\/iphone-11-pro-max-space-gray?$device-med$", + "imageFormat" : "png", + "accessibilityText" : "Apple iPhone 11 Pro Max 64 GB en gris espacial" + }, + "headline" : { + "moleculeName" : "label", + "text" : "Prepaid's Phone", + "fontStyle" : "BoldTitleLarge" + } + }, + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : + { + "moleculeName" : "stack", + "molecules" : [ + { + "spacing" : 10, + "moleculeName" : "stackItem", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Controla \n tus dispositivos.", + "fontStyle" : "RegularTitleXLarge" + }, + "body" : { + "fontStyle" : "RegularBodyLarge", + "textColor" : "#6F7171", + "moleculeName" : "label", + "text" : "Administra y obtén más información sobre cada dispositivo de tu cuenta." + } + } + }, + { + "spacing" : 35, + "moleculeName" : "stackItem", + "molecule" : { + "secondaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Agrega un dispositivo" + }, + "extraParameters" : { + "mtnToUpgrade" : "8643995483", + "navigationState" : "smartphones", + "customerIntent" : "AAL" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "prepayFamilyDiscountPR" + }, + "style" : "primary", + "enabled" : true, + "fillColor" : "#000000", + "title" : "Agrega un dispositivo", + "textColor" : "#FFFFFF" + }, + "moleculeName" : "twoButtonView", + "primaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Actualiza el dispositivo" + }, + "extraParameters" : { + "mdn" : "8643995483", + "flowFrom" : "PrepayFlow", + "customerIntent" : "EUP", + "navigationState" : "smartphones" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "gridwallPRS" + }, + "style" : "secondary", + "enabled" : true, + "fillColor" : "#FFFFFF", + "title" : "Actualiza el dispositivo", + "borderColor" : "#000000", + "textColor" : "#000000" + }, + "horizontalAlignment" : "leading" + }, + "horizontalAlignment" : "leading" + }, + { + "useVerticalMargins" : true, + "topPadding" : 20, + "moleculeName" : "stackItem", + "molecule" : { + "moleculeName" : "line", + "type" : "primary" + } + } + ] + } + } + ], + "screenHeading" : "Dispositivos", + "cache" : false, + "header" : { + "moleculeName" : "stack", + "molecules" : [ + { + "spacing" : 10, + "moleculeName" : "stackItem", + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Controla \n tus dispositivos.", + "fontStyle" : "RegularTitleXLarge" + }, + "body" : { + "fontStyle" : "RegularBodyLarge", + "textColor" : "#6F7171", + "moleculeName" : "label", + "text" : "Administra y obtén más información sobre cada dispositivo de tu cuenta." + } + } + }, + { + "spacing" : 35, + "moleculeName" : "stackItem", + "molecule" : { + "secondaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Agrega un dispositivo" + }, + "extraParameters" : { + "mtnToUpgrade" : "8643995483", + "navigationState" : "smartphones", + "customerIntent" : "AAL" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "prepayFamilyDiscountPR" + }, + "style" : "primary", + "enabled" : true, + "fillColor" : "#000000", + "title" : "Agrega un dispositivo", + "textColor" : "#FFFFFF" + }, + "moleculeName" : "twoButtonView", + "primaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Actualiza el dispositivo" + }, + "extraParameters" : { + "mdn" : "8643995483", + "flowFrom" : "PrepayFlow", + "customerIntent" : "EUP", + "navigationState" : "smartphones" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "gridwallPRS" + }, + "style" : "secondary", + "enabled" : true, + "fillColor" : "#FFFFFF", + "title" : "Actualiza el dispositivo", + "borderColor" : "#000000", + "textColor" : "#000000" + }, + "horizontalAlignment" : "leading" + }, + "horizontalAlignment" : "leading" + }, + { + "useVerticalMargins" : true, + "topPadding" : 20, + "moleculeName" : "stackItem", + "molecule" : { + "moleculeName" : "line", + "type" : "primary" + } + } + ] + }, + "template" : "list", + "navigationBar" : { + "moleculeName" : "navigationBar", + "title" : "Dispositivos" + } } } + + diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/TileleListSample.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/TileleListSample.json index 4e2c01b..7e2c4fd 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/TileleListSample.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/TileleListSample.json @@ -1,982 +1,714 @@ { - "Page":{ - "ResponseInfo":{ - "type":"Success", - "code":"00000" - }, - "pageType":"prospectWelcomeTrial", - "backgroundColor":"white", - "tabBarIndex":0, - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"AProspect" - }, - "line":{ - "moleculeName":"line", - "type":"none" - }, - "header":{ - "moleculeName":"headerH1", - "useVerticalMargins":true, - "topPadding":32, - "bottomPadding":32, - "titleLockup":{ - "moleculeName":"titleLockup", - "title":{ - "moleculeName":"label", - "text":"Join Verizon\nand stay\nconnected.", - "fontStyle":"BoldTitle2XLarge" + "Page":{ + "ResponseInfo":{ + "type":"Success", + "code":"00000" + }, + "pageType":"prospectWelcomeTrial", + "backgroundColor":"white", + "tabBarIndex":0, + "navigationBar":{ + "moleculeName":"navigationBar", + "pattern":"AProspect" + }, + "line":{ + "moleculeName":"line", + "type":"none" + }, + "header":{ + "moleculeName":"headerH1", + "useVerticalMargins":true, + "topPadding":32, + "bottomPadding":32, + "titleLockup":{ + "moleculeName":"titleLockup", + "title":{ + "moleculeName":"label", + "text":"Join Verizon\nand stay\nconnected.", + "fontStyle":"BoldTitle2XLarge" + } } - } - }, - "template":"list", - "molecules":[ - { - "moleculeName":"listItem", - "useHorizontalMargins":false, - "useVerticalMargins":false, - "molecule":{ - "moleculeName":"carousel", - "accessibilityText":"carousel", - "pagingMolecule":{ - "moleculeName":"barsCarouselIndicator", - "position":-20 - }, - "height":285, - "spacing":12, - "itemWidthPercent":85, - "useHorizontalMargins":true, - "leftPadding":16, - "rightPadding":16, - "molecules":[ - { - "moleculeName":"carouselItem", - "useVerticalMargins":false, - "useHorizontalMargins":false, - "horizontalAlignment":"fill", - "molecule":{ - "moleculeName":"tileContainer", - "color":"black", - "showDropShadow":true, - "backgroundImage":"https://s7.vzw.com/is/image/VerizonWireless/Free%20trial%20BG", - "padding":"padding6X", - "molecule":{ - "moleculeName":"stack", - "axis":"vertical", - "molecules":[ - { - "moleculeName":"stackItem", - "spacing":0, - "molecule":{ - "moleculeName":"label", - "text":"Verizon\nFree Trial", - "fontStyle":"BoldTitleXLarge", - "textColor":"white" - } - }, - { - "moleculeName":"stackItem", - "spacing":8, - "molecule":{ - "moleculeName":"label", - "text":"Try the network America relies on, free for 30 days.", - "fontStyle":"RegularTitleSmall", - "textColor":"white" - } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "verticalAlignment":"center", - "molecule":{ - "moleculeName":"button", - "title":"Try Verizon", - "inverted":true, - "action":{ - "openOauthWebView":true, - "tabBarHidden":true, - "selected":false, - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Try Verizon", - "vzdl.page.sourceChannel":"mva" - }, - "requestURL":"https:\/\/mobile-exp-qa1-west-2.vzw.com\/mobile\/nsa\/nos\/gw\/launchapp\/unauthenticatedWebview", - "extraParameters":{ - "browserUrl":"https:\/\/vzwqa1.verizonwireless.com\/sales\/digital\/trial.html?identifier=iPhone15%2C5&s_ecid=31408684872825763424743718268318966933&intcmp=mva-vzw-prospect_discover-startFreeTrial&fromdeeplink=false", - "flowName":"freeTrialRegistration" - }, - "disableNativeAction":false, - "showNativeNavigation":true, - "customUserAgent":"MY_VZW_APP;IOS;17.0;iPhone15,5;11.6.0;VZW-MFA-IOS", - "openInWebview":true, - "disableOfflineDevice":false, - "hideUrl":true, - "actionType":"openPage", - "pageType":"trialFlow", - "presentationStyle":"push", - "isSelected":false, - "hideWebNavigation":true, - "enableNativeScroll":true - } - } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "molecule":{ - "moleculeName":"link", - "title":"Share with a friend", - "inverted":true, - "action":{ - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Share with a friend", - "vzdl.page.sourceChannel":"mva" - }, - "actionType":"share", - "items":[ - { - "type":"text", - "value":"Join the best mobile network. Try the best network free for 30 days." - }, - { - "type":"url", - "value":"https:\/\/m-sit.vzw.com\/feEru7GF" - } - ] - } - } - } - ] - } - } - }, - { - "moleculeName":"carouselItem", - "useVerticalMargins":false, - "useHorizontalMargins":false, - "horizontalAlignment":"fill", - "molecule":{ - "moleculeName":"tileContainer", - "color":"white", - "padding":"padding6X", - "showDropShadow": true, - "molecule":{ - "moleculeName":"stack", - "axis":"vertical", - "molecules":[ - { - "moleculeName":"stackItem", - "spacing":0, - "molecule":{ - "moleculeName":"label", - "text":"Bring your\nown device", - "fontStyle":"BoldTitleXLarge", - "textColor":"red" - } - }, - { - "moleculeName": "stackItem", - "useHorizontalMargins": false, - "molecule": { - "moleculeName": "label", - "text": "312-497-7419\n372-345-7419", - "fontStyle": "RegularMicro", - "numberOfLines": 2 - - } + }, + "template":"list", + "molecules":[ + { + "moleculeName":"listItem", + "useHorizontalMargins":false, + "useVerticalMargins":false, + "molecule":{ + "moleculeName":"carousel", + "accessibilityText":"carousel", + "pagingMolecule":{ + "moleculeName":"barsCarouselIndicator", + "position":-20 + }, + "height":285, + "spacing":12, + "itemWidthPercent":85, + "useHorizontalMargins":true, + "leftPadding":16, + "rightPadding":16, + "molecules":[ + { + "moleculeName":"carouselItem", + "useVerticalMargins":false, + "useHorizontalMargins":false, + "horizontalAlignment":"fill", + "molecule":{ + "moleculeName":"tileContainer", + "color":"black", + "showDropShadow":true, + "backgroundImage":"https://s7.vzw.com/is/image/VerizonWireless/Free%20trial%20BG", + "padding":"padding6X", + "molecule":{ + "moleculeName":"stack", + "axis":"vertical", + "molecules":[ + { + "moleculeName":"stackItem", + "spacing":0, + "molecule":{ + "moleculeName":"label", + "text":"Verizon\nFree Trial", + "fontStyle":"BoldTitleXLarge", + "textColor":"white" + } + }, + { + "moleculeName":"stackItem", + "spacing":8, + "molecule":{ + "moleculeName":"label", + "text":"Try the network America relies on, free for 30 days.", + "fontStyle":"RegularTitleSmall", + "textColor":"white" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "verticalAlignment":"center", + "molecule":{ + "moleculeName":"button", + "title":"Try Verizon", + "inverted":true, + "action":{ + "openOauthWebView":true, + "tabBarHidden":true, + "selected":false, + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Try Verizon", + "vzdl.page.sourceChannel":"mva" + }, + "requestURL":"https:\/\/mobile-exp-qa1-west-2.vzw.com\/mobile\/nsa\/nos\/gw\/launchapp\/unauthenticatedWebview", + "extraParameters":{ + "browserUrl":"https:\/\/vzwqa1.verizonwireless.com\/sales\/digital\/trial.html?identifier=iPhone15%2C5&s_ecid=31408684872825763424743718268318966933&intcmp=mva-vzw-prospect_discover-startFreeTrial&fromdeeplink=false", + "flowName":"freeTrialRegistration" + }, + "disableNativeAction":false, + "showNativeNavigation":true, + "customUserAgent":"MY_VZW_APP;IOS;17.0;iPhone15,5;11.6.0;VZW-MFA-IOS", + "openInWebview":true, + "disableOfflineDevice":false, + "hideUrl":true, + "actionType":"openPage", + "pageType":"trialFlow", + "presentationStyle":"push", + "isSelected":false, + "hideWebNavigation":true, + "enableNativeScroll":true + } + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "molecule":{ + "moleculeName":"link", + "title":"Share with a friend", + "inverted":true, + "action":{ + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Share with a friend", + "vzdl.page.sourceChannel":"mva" + }, + "actionType":"share", + "items":[ + { + "type":"text", + "value":"Join the best mobile network. Try the best network free for 30 days." + }, + { + "type":"url", + "value":"https:\/\/m-sit.vzw.com\/feEru7GF" + } + ] + } + } + } + ] } - ] + } + }, + { + "moleculeName":"carouselItem", + "useVerticalMargins":false, + "useHorizontalMargins":false, + "horizontalAlignment":"fill", + "molecule":{ + "moleculeName":"tileContainer", + "color":"white", + "padding":"padding6X", + "showDropShadow": true, + "molecule":{ + "moleculeName":"stack", + "axis":"vertical", + "molecules":[ + { + "moleculeName":"stackItem", + "spacing":0, + "molecule":{ + "moleculeName":"label", + "text":"Bring your\nown device", + "fontStyle":"BoldTitleXLarge", + "textColor":"red" + } + }, + { + "moleculeName": "stackItem", + "useHorizontalMargins": false, + "molecule": { + "moleculeName": "label", + "text": "312-497-7419\n372-345-7419", + "fontStyle": "RegularMicro", + "numberOfLines": 2 + + } + } + ] + } + } } - } - } - ] - } - }, - { - "moleculeName":"listItem", - "useHorizontalMargins":false, - "topPadding":48, - "bottomPadding":0, - "molecule":{ - "moleculeName":"carousel", - "accessibilityText":"carousel", - "pagingMolecule":{ - "moleculeName":"barsCarouselIndicator", - "position":-20 - }, - "height":92, - "spacing":12, - "itemWidthPercent":45, - "useHorizontalMargins":true, - "leftPadding":16, - "rightPadding":16, - "molecules":[ - { - "moleculeName":"carouselItem", - "useVerticalMargins":false, - "useHorizontalMargins":false, - "molecule":{ - "moleculeName":"tilelet", - "color":"white", - "padding":"small", - "showDropShadow":true, - "title":{ - "moleculeName":"label", - "text":"Deals", - "fontStyle":"BoldTitleSmall" - }, - "directionalIcon":{ - "size":"small", - "surface":"light" - }, - "action":{ - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Deals", - "vzdl.page.sourceChannel":"mva" - }, - "actionType":"openPage", - "presentationStyle":"push", - "pageType":"deals" - } - } - }, - { - "moleculeName":"carouselItem", - "useVerticalMargins":false, - "useHorizontalMargins":false, - "molecule":{ - "moleculeName":"tilelet", - "color":"white", - "padding":"small", - "showDropShadow":true, - "title":{ - "moleculeName":"label", - "text":"Shop phones", - "fontStyle":"BoldTitleSmall" - }, - "directionalIcon":{ - "size":"small", - "surface":"light" - }, - "action":{ - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Shop phones", - "vzdl.page.sourceChannel":"mva" - }, - "actionType":"openPage", - "presentationStyle":"push", - "pageType":"smartphones" - } - } - }, - { - "moleculeName":"carouselItem", - "useVerticalMargins":false, - "useHorizontalMargins":false, - "molecule":{ - "moleculeName":"tilelet", - "color":"white", - "padding":"small", - "showDropShadow":true, - "title":{ - "moleculeName":"label", - "text":"Shop plans", - "fontStyle":"BoldTitleSmall" - }, - "directionalIcon":{ - "size":"small", - "surface":"light" - }, - "action":{ - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Shop plans", - "vzdl.page.sourceChannel":"mva" - }, - "actionType":"openPage", - "presentationStyle":"push", - "pageType":"plans" - } - } - } - ] - } - }, - { - "bottomPadding":0, - "molecule":{ - "fontStyle":"BoldTitleMedium", - "textAlignment":"center", - "moleculeName":"label", - "accessibilityTraits":[ - "header" - ], - "text":"The network America relies on." + ] + } }, - "topPadding":48, - "moleculeName":"listItem", - "horizontalAlignment":"center" - }, - { - "molecule":{ - "moleculeName":"stack", - "axis":"horizontal", - "molecules":[ - { - "moleculeName":"stackItem", - "horizontalAlignment":"fill", - "molecule":{ - "moleculeName":"icon", - "name":"signal-broadcast", - "size":"large", - "color":"red" - } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "molecule":{ - "moleculeName":"label", - "text":"5G Nationwide covers 200+ million people in 2,700+ cities.", - "fontStyle":"RegularBodyMedium" - } - } - ] - }, - "topPadding":24, - "moleculeName":"listItem", - "bottomPadding":0 - }, - { - "molecule":{ - "moleculeName":"stack", - "axis":"horizontal", - "molecules":[ - { - "moleculeName":"stackItem", - "horizontalAlignment":"fill", - "molecule":{ - "moleculeName":"icon", - "name":"award", - "size":"large", - "color":"red" - } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "molecule":{ - "moleculeName":"label", - "text":"Highest in Customer Satisfaction with Small Business Wireless Service.", - "fontStyle":"RegularBodyMedium" - } - } - ] - }, - "topPadding":16, - "moleculeName":"listItem", - "bottomPadding":0 - }, - { - "bottomPadding":0, - "molecule":{ - "style":"secondary", - "moleculeName":"button", - "accessibilityTraits":[ - "link" - ], - "title":"Check our mobile coverage map", - "action":{ - "analyticsData":{ - "vzdl.page.id":"prospect_3_0_discover", - "vzdl.page.name":"prospect_discover", - "vzdl.page.displayChannel":"mva", - "vzdl.page.linkName":"Check our mobile coverage map", - "vzdl.page.sourceChannel":"mva" - }, - "actionType":"openPage", - "pageType":"coverage" - } - }, - "topPadding":24, - "moleculeName":"listItem", - "horizontalAlignment":"center" - }, - { - "moleculeName":"listItem", - "hideArrow":true, - "topPadding":48, - "bottomPadding":0, - "horizontalAlignment":"fill", - "molecule":{ - "moleculeName":"tileContainer", - "showDropShadow":true, - "color":"red", - "backgroundImage":"https://ss7.vzw.com/is/image/VerizonWireless/Home%20BG", - "padding":"padding6X", - "molecule":{ - "moleculeName":"stack", - "molecules":[ - { - "moleculeName":"stackItem", - "spacing":0, - "horizontalAlignment":"leading", - "molecule":{ - "fontStyle":"BoldTitleXLarge", - "textColor":"white", - "moleculeName":"label", - "text":"Get home internet and save." + { + "moleculeName":"listItem", + "useHorizontalMargins":false, + "topPadding":48, + "bottomPadding":0, + "molecule":{ + "moleculeName":"carousel", + "accessibilityText":"carousel", + "pagingMolecule":{ + "moleculeName":"barsCarouselIndicator", + "position":-20 + }, + "height":92, + "spacing":12, + "itemWidthPercent":45, + "useHorizontalMargins":true, + "leftPadding":16, + "rightPadding":16, + "molecules":[ + { + "moleculeName":"carouselItem", + "useVerticalMargins":false, + "useHorizontalMargins":false, + "molecule":{ + "moleculeName":"tilelet", + "color":"white", + "padding":"small", + "showDropShadow":true, + "title":{ + "moleculeName":"label", + "text":"Deals", + "fontStyle":"BoldTitleSmall" + }, + "directionalIcon":{ + "size":"small", + "surface":"light" + }, + "action":{ + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Deals", + "vzdl.page.sourceChannel":"mva" + }, + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"deals" + } + } + }, + { + "moleculeName":"carouselItem", + "useVerticalMargins":false, + "useHorizontalMargins":false, + "molecule":{ + "moleculeName":"tilelet", + "color":"white", + "padding":"small", + "showDropShadow":true, + "title":{ + "moleculeName":"label", + "text":"Shop phones", + "fontStyle":"BoldTitleSmall" + }, + "directionalIcon":{ + "size":"small", + "surface":"light" + }, + "action":{ + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Shop phones", + "vzdl.page.sourceChannel":"mva" + }, + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"smartphones" + } + } + }, + { + "moleculeName":"carouselItem", + "useVerticalMargins":false, + "useHorizontalMargins":false, + "molecule":{ + "moleculeName":"tilelet", + "color":"white", + "padding":"small", + "showDropShadow":true, + "title":{ + "moleculeName":"label", + "text":"Shop plans", + "fontStyle":"BoldTitleSmall" + }, + "directionalIcon":{ + "size":"small", + "surface":"light" + }, + "action":{ + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Shop plans", + "vzdl.page.sourceChannel":"mva" + }, + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"plans" + } + } } - }, - { - "moleculeName":"stackItem", - "spacing":8, - "horizontalAlignment":"leading", - "molecule":{ - "fontStyle":"RegularBodyLarge", - "textColor":"white", - "moleculeName":"label", - "text":"Switch to Verizon Home Internet\nstarting at a low price, guaranteed." + ] + } + }, + { + "bottomPadding":0, + "molecule":{ + "fontStyle":"BoldTitleMedium", + "textAlignment":"center", + "moleculeName":"label", + "accessibilityTraits":[ + "header" + ], + "text":"The network America relies on." + }, + "topPadding":48, + "moleculeName":"listItem", + "horizontalAlignment":"center" + }, + { + "molecule":{ + "moleculeName":"stack", + "axis":"horizontal", + "molecules":[ + { + "moleculeName":"stackItem", + "horizontalAlignment":"fill", + "molecule":{ + "moleculeName":"icon", + "name":"signal-broadcast", + "size":"large", + "color":"red" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "molecule":{ + "moleculeName":"label", + "text":"5G Nationwide covers 200+ million people in 2,700+ cities.", + "fontStyle":"RegularBodyMedium" + } } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "molecule":{ - "fontStyle":"BoldMicro", - "textColor":"white", - "moleculeName":"label", - "text":"Starting at" + ] + }, + "topPadding":24, + "moleculeName":"listItem", + "bottomPadding":0 + }, + { + "molecule":{ + "moleculeName":"stack", + "axis":"horizontal", + "molecules":[ + { + "moleculeName":"stackItem", + "horizontalAlignment":"fill", + "molecule":{ + "moleculeName":"icon", + "name":"award", + "size":"large", + "color":"red" + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "molecule":{ + "moleculeName":"label", + "text":"Highest in Customer Satisfaction with Small Business Wireless Service.", + "fontStyle":"RegularBodyMedium" + } } - }, - { - "moleculeName":"stackItem", - "spacing":0, - "horizontalAlignment":"leading", - "molecule":{ - "moleculeName":"stack", - "axis":"horizontal", - "molecules":[ - { - "spacing":0, - "moleculeName":"stackItem", - "verticalAlignment":"leading", - "horizontalAlignment":"fill", - "molecule":{ - "fontStyle":"BoldTitleLarge", + ] + }, + "topPadding":16, + "moleculeName":"listItem", + "bottomPadding":0 + }, + { + "bottomPadding":0, + "molecule":{ + "style":"secondary", + "moleculeName":"button", + "accessibilityTraits":[ + "link" + ], + "title":"Check our mobile coverage map", + "action":{ + "analyticsData":{ + "vzdl.page.id":"prospect_3_0_discover", + "vzdl.page.name":"prospect_discover", + "vzdl.page.displayChannel":"mva", + "vzdl.page.linkName":"Check our mobile coverage map", + "vzdl.page.sourceChannel":"mva" + }, + "actionType":"openPage", + "pageType":"coverage" + } + }, + "topPadding":24, + "moleculeName":"listItem", + "horizontalAlignment":"center" + }, + { + "moleculeName":"listItem", + "hideArrow":true, + "topPadding":48, + "bottomPadding":0, + "horizontalAlignment":"fill", + "molecule":{ + "moleculeName":"tileContainer", + "showDropShadow":true, + "color":"red", + "backgroundImage":"https://ss7.vzw.com/is/image/VerizonWireless/Home%20BG", + "padding":"padding6X", + "molecule":{ + "moleculeName":"stack", + "molecules":[ + { + "moleculeName":"stackItem", + "spacing":0, + "horizontalAlignment":"leading", + "molecule":{ + "fontStyle":"BoldTitleXLarge", "textColor":"white", "moleculeName":"label", - "text":"$" - } - }, - { - "spacing":0, - "moleculeName":"stackItem", - "verticalAlignment":"fill", - "horizontalAlignment":"fill", - "molecule":{ - "fontStyle":"BoldFeatureMedium", + "text":"Get home internet and save." + } + }, + { + "moleculeName":"stackItem", + "spacing":8, + "horizontalAlignment":"leading", + "molecule":{ + "fontStyle":"RegularBodyLarge", "textColor":"white", "moleculeName":"label", - "text":"35" - } - }, - { - "spacing":0, - "moleculeName":"stackItem", - "verticalAlignment":"trailing", - "horizontalAlignment":"fill", - "molecule":{ + "text":"Switch to Verizon Home Internet\nstarting at a low price, guaranteed." + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "molecule":{ "fontStyle":"BoldMicro", "textColor":"white", "moleculeName":"label", - "text":"\/mo." - } - } - ] + "text":"Starting at" + } + }, + { + "moleculeName":"stackItem", + "spacing":0, + "horizontalAlignment":"leading", + "molecule":{ + "moleculeName":"stack", + "axis":"horizontal", + "molecules":[ + { + "spacing":0, + "moleculeName":"stackItem", + "verticalAlignment":"leading", + "horizontalAlignment":"fill", + "molecule":{ + "fontStyle":"BoldTitleLarge", + "textColor":"white", + "moleculeName":"label", + "text":"$" + } + }, + { + "spacing":0, + "moleculeName":"stackItem", + "verticalAlignment":"fill", + "horizontalAlignment":"fill", + "molecule":{ + "fontStyle":"BoldFeatureMedium", + "textColor":"white", + "moleculeName":"label", + "text":"35" + } + }, + { + "spacing":0, + "moleculeName":"stackItem", + "verticalAlignment":"trailing", + "horizontalAlignment":"fill", + "molecule":{ + "fontStyle":"BoldMicro", + "textColor":"white", + "moleculeName":"label", + "text":"\/mo." + } + } + ] + } + }, + { + "moleculeName":"stackItem", + "horizontalAlignment":"leading", + "molecule":{ + "moleculeName":"button", + "action":{ + "analyticsData":{ + "vzdl.page.linkName":"Home internet Get started" + }, + "actionType":"openPage", + "pageType":"home" + }, + "accessibilityText":"Get started with Get Verizon Home Internet and save.", + "title":"Get started", + "size":"small", + "inverted":true + } + } + ] + } + } + } + ] + }, + "ModuleMap":{ + "tabBar":{ + "tabs":[ + { + "title":"Discover", + "image":"tab_discover", + "tabBarIndex":0, + "action":{ + "actionType":"openPage", + "pageType":"prospectWelcomeTrial", + "presentationStyle":"root" + } + }, + { + "title":"Account", + "image":"tab_account", + "tabBarIndex":1, + "action":{ + "actionType":"openPage", + "pageType":"trialDashboard", + "presentationStyle":"root" + } + }, + { + "title":"Shop", + "image":"tab_shop_3_0", + "tabBarIndex":2, + "action":{ + "actionType":"openPage", + "pageType":"shop", + "requestURL":"https:\/\/mobile-exp-qa3.vzw.com\/mobile\/nsa\/nos\/gw\/launchapp\/unauthenticatedWebview", + "presentationStyle":"root" + } + }, + { + "title":"Stores", + "image":"nav_stores_black", + "tabBarIndex":3, + "action":{ + "actionType":"openPage", + "pageType":"rtlStoreJourney", + "presentationStyle":"root", + "extraParameters":{ + "fromPage":"rtlStoreJourney", + "makeFavourite":"N" } - }, - { - "moleculeName":"stackItem", - "horizontalAlignment":"leading", - "molecule":{ - "moleculeName":"button", - "action":{ - "analyticsData":{ - "vzdl.page.linkName":"Home internet Get started" - }, - "actionType":"openPage", - "pageType":"home" - }, - "accessibilityText":"Get started with Get Verizon Home Internet and save.", - "title":"Get started", - "size":"small", - "inverted":true - } - } - ] - } - } - } - ] - }, - "ModuleMap":{ - "tabBar":{ - "tabs":[ - { - "title":"Discover", - "image":"tab_discover", - "tabBarIndex":0, - "action":{ - "actionType":"openPage", - "pageType":"prospectWelcomeTrial", - "presentationStyle":"root" - } - }, - { - "title":"Account", - "image":"tab_account", - "tabBarIndex":1, - "action":{ - "actionType":"openPage", - "pageType":"trialDashboard", - "presentationStyle":"root" - } - }, - { - "title":"Shop", - "image":"tab_shop_3_0", - "tabBarIndex":2, - "action":{ - "actionType":"openPage", - "pageType":"shop", - "requestURL":"https:\/\/mobile-exp-qa3.vzw.com\/mobile\/nsa\/nos\/gw\/launchapp\/unauthenticatedWebview", - "presentationStyle":"root" - } - }, - { - "title":"Stores", - "image":"nav_stores_black", - "tabBarIndex":3, - "action":{ - "actionType":"openPage", - "pageType":"rtlStoreJourney", - "presentationStyle":"root", - "extraParameters":{ - "fromPage":"rtlStoreJourney", - "makeFavourite":"N" - } - } - } - ] - }, - "SearchField":{ - "searchField":{ - "moleculeName":"searchTextField", - "placeholder":"What are you looking for?", - "fieldKey":"searchInput" - }, - "searchAction":{ - "actionType":"openPage", - "pageType":"search" - }, - "searchDoneAction":{ - "actionType":"openPage", - "pageType":"searchDone" - } - }, - "HabContent":{ - "habSearch":{ - "label":{ - "moleculeName":"label", - "text":"How can we help?" - }, - "image":{ - "moleculeName":"image", - "image":"hab_search_black", - "width":17, - "height":17 - }, - "image_inverted":{ - "moleculeName":"image", - "image":"hab_search_white", - "width":17, - "height":17 - }, - "action":{ - "actionType":"openURL", - "browserUrl":"https://www.verizon.com/onesearch/search?source=MFNative", - "openInWebview":true, - "showNativeNavigation":true - } - }, - "habAssistant":{ - "label":{ - "moleculeName":"label", - "text":"Chat with the Verizon Assistant" - }, - "image":{ - "moleculeName":"image", - "image":"hab_assistant_black", - "width":20, - "height":20 - }, - "image_inverted":{ - "moleculeName":"image", - "image":"hab_assistant_white", - "width":20, - "height":20 - }, - "action":{ - "actionType":"openPanel", - "panel":"right" - } - }, - "habLiveChat":{ - "label":{ - "moleculeName":"label", - "text":"Chat with an agent" - }, - "image":{ - "moleculeName":"image", - "image":"hab_live_chat_black", - "imageFormat":"gif", - "width":20, - "height":20 - }, - "image_inverted":{ - "moleculeName":"image", - "image":"hab_live_chat_white", - "imageFormat":"gif", - "width":20, - "height":20 - }, - "action":{ - "actionType":"openPanel", - "panel":"right" - } - }, - "habLiveChatNewMessages":{ - "label":{ - "moleculeName":"label", - "text":"Return to chat with an agent" - }, - "image":{ - "moleculeName":"image", - "image":"hab_live_chat_newmessage_black", - "imageFormat":"gif", - "width":20, - "height":20 - }, - "image_inverted":{ - "moleculeName":"image", - "image":"hab_live_chat_newmessage_white", - "imageFormat":"gif", - "width":20, - "height":20 - }, - "action":{ - "actionType":"openPanel", - "panel":"right" - } - } - }, - "SavedCart":{ - "ButtonMap":{ - "PrimaryButton":{ - "actionType":"openPage", - "pageType":"cart" - } - }, - "itemCount":0, - "IS_SHARED_CART":true - }, - "webParams":{ - "mvaServerDomainUrl":"https://mobile-exp-qa3.vzw.com", - "lob":"vzp", - "isTabBarFlowAllowed":"true" - }, - "navigationPatterns":{ - "cache":true, - "cachePolicy":{ - "persist":true, - "expiry":"1714571431134" - }, - "A":{ - "moleculeName":"navigationBar", - "additionalLeftButtons":[ - { - "accessibilityText":"Verizon logo, tap anytime to scroll to top of page", - "moleculeName":"navigationImageButton", - "image":"nav_vz_mark", - "imageRenderingMode":"alwaysOriginal", - "action":{ - "analyticsData":{ - "vzdl.page.linkName":"global black bar nav: vz icon" - }, - "actionType":"scrollToTop" - } - } - ], - "additionalRightButtons":[ - { - "accessibilityText":"Stores", - "moleculeName":"navigationImageButton", - "image":"nav_stores_black", - "action":{ - "actionType":"openPage", - "analyticsData":{ - "vzdl.page.linkName":"global black bar nav:store" - }, - "pageType":"rtlStoreJourney", - "extraParameters":{ - "locale":"EN" - }, - "requestURL":"https:\/\/vzwqa1.verizonwireless.com\/digital\/nsa\/nos\/gw\/retail\/rtlStoreJourney", - "title":"Stores" - } - } + } + } ] - }, - "AProspect":{ - "moleculeName":"navigationBar", - "additionalLeftButtons":[ - { - "accessibilityText":"Verizon logo, tap anytime to scroll to top of page", - "moleculeName":"navigationImageButton", - "image":"nav_vz_mark", - "imageRenderingMode":"alwaysOriginal", - "action":{ - "analyticsData":{ - "vzdl.page.linkName":"global black bar nav: vz icon" - }, - "actionType":"scrollToTop" - } - } - ], - "additionalRightButtons":[ - { - "moleculeName":"navigationLabelButton", - "title":"Sign in", - "action":{ - "appContext":"mobileFirstSS", - "analyticsData":{ - "vzdl.target.engagement.intent":"customer sign in", - "vzdl.page.displayChannel":"MVA", - "vzdl.page.linkName":"I'm a customer" - }, - "requestURL":"https:\/\/mobile-exp.vzw.com\/mobile\/nsa\/nos\/gw\/launchapp\/oauthSignIn?", - "extraParameters":{ - "oAuthLaunchAppFlow":"Y" - }, - "actionType":"openPage", - "pageType":"userSignIn", - "presentationStyle":"root" - } - } - ] - }, - "B":{ - "moleculeName":"navigationBar" - }, - "D":{ - "moleculeName":"navigationBar", - "backButton":{ - "accessibilityText":"Close", - "moleculeName":"navigationImageButton", - "image":"nav_close", - "action":{ - "analyticsData":{ - "vzwi.mvmapp.LinkName":"close" - }, - "title":"Close", - "actionType":"back", - "pageType":"back" - } + }, + "SearchField":{ + "searchField":{ + "moleculeName":"searchTextField", + "placeholder":"What are you looking for?", + "fieldKey":"searchInput" + }, + "searchAction":{ + "actionType":"openPage", + "pageType":"search" + }, + "searchDoneAction":{ + "actionType":"openPage", + "pageType":"searchDone" } - }, - "E":{ - "moleculeName":"navigationBar" - } - } - }, - "PageMap":{ - "shop":{ - "pageType":"shop", - "template":"webView", - "browserUrl":"https:\/\/vzwqa3.verizonwireless.com\/sales\/next\/shop.html?isShopFlow=true&entrypoint=tabbar&isProspect=true", - "cache":true, - "tabBarIndex":1, - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"AProspect" - } - }, - "cart":{ - "pageType":"cart", - "template":"webView", - "browserUrl":"https://www.verizon.com/sales/next/expresscheckout.html?pageName=cart&fromMVA=true&preConfigCart=true&isShopFlow=true&entrypoint=carticon", - "tabBarHidden":true, - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "deals":{ - "pageType":"deals", - "template":"webView", - "browserUrl":"https://www.verizon.com/deals", - "tabBarHidden":true, - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "smartphones":{ - "pageType":"smartphones", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/smartphones", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "plans":{ - "pageType":"plans", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/plans", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "coverage":{ - "pageType":"coverage", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/coverage-map", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "home":{ - "pageType":"home", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/home", - "backgroundColor":"black", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "homeavailability":{ - "pageType":"homeavailability", - "template":"webView", - "tabBarHidden":true, - "backgroundColor":"black", - "browserUrl":"https://www.verizon.com/home#checkAvailability", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "legal":{ - "pageType":"legal", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/about/terms-conditions/overview", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "feedback":{ - "pageType":"feedback", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/about/terms-conditions/overview", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "preowned":{ - "pageType":"preowned", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/certified-pre-owned", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "tablets":{ - "pageType":"tablets", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/tablets", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "watches":{ - "pageType":"watches", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/connected-devices", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "hotspots":{ - "pageType":"hotspots", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/internet-devices", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "accessories":{ - "pageType":"accessories", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/products", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - }, - "tradein":{ - "pageType":"tradein", - "template":"webView", - "tabBarHidden":true, - "browserUrl":"https://www.verizon.com/trade-in", - "navigationBar":{ - "moleculeName":"navigationBar", - "pattern":"B" - } - } - } + }, + "HabContent":{ + "habSearch":{ + "label":{ + "moleculeName":"label", + "text":"How can we help?" + }, + "image":{ + "moleculeName":"image", + "image":"hab_search_black", + "width":17, + "height":17 + }, + "image_inverted":{ + "moleculeName":"image", + "image":"hab_search_white", + "width":17, + "height":17 + }, + "action":{ + "actionType":"openURL", + "browserUrl":"https://www.verizon.com/onesearch/search?source=MFNative", + "openInWebview":true, + "showNativeNavigation":true + } + }, + "habAssistant":{ + "label":{ + "moleculeName":"label", + "text":"Chat with the Verizon Assistant" + }, + "image":{ + "moleculeName":"image", + "image":"hab_assistant_black", + "width":20, + "height":20 + }, + "image_inverted":{ + "moleculeName":"image", + "image":"hab_assistant_white", + "width":20, + "height":20 + }, + "action":{ + "actionType":"openPanel", + "panel":"right" + } + }, + "habLiveChat":{ + "label":{ + "moleculeName":"label", + "text":"Chat with an agent" + }, + "image":{ + "moleculeName":"image", + "image":"hab_live_chat_black", + "imageFormat":"gif", + "width":20, + "height":20 + }, + "image_inverted":{ + "moleculeName":"image", + "image":"hab_live_chat_white", + "imageFormat":"gif", + "width":20, + "height":20 + }, + "action":{ + "actionType":"openPanel", + "panel":"right" + } + }, + "habLiveChatNewMessages":{ + "label":{ + "moleculeName":"label", + "text":"Return to chat with an agent" + }, + "image":{ + "moleculeName":"image", + "image":"hab_live_chat_newmessage_black", + "imageFormat":"gif", + "width":20, + "height":20 + }, + "image_inverted":{ + "moleculeName":"image", + "image":"hab_live_chat_newmessage_white", + "imageFormat":"gif", + "width":20, + "height":20 + }, + "action":{ + "actionType":"openPanel", + "panel":"right" + } + } + }, + "SavedCart":{ + "ButtonMap":{ + "PrimaryButton":{ + "actionType":"openPage", + "pageType":"cart" + } + }, + "itemCount":0, + "IS_SHARED_CART":true + }, + "webParams":{ + "mvaServerDomainUrl":"https://mobile-exp-qa3.vzw.com", + "lob":"vzp", + "isTabBarFlowAllowed":"true" + } + } } diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/TileletSample.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/TileletSample.json index ae6b10c..a049d14 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/TileletSample.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/TileletSample.json @@ -21,33 +21,27 @@ "molecules": [ { "moleculeName": "stackItem", + "horizontalAlignment": "leading", "molecule": { "moleculeName": "tilelet", - "color": "white", + "color": "#000000", "showDropShadow": true, "title": { "moleculeName": "label", "text": "Activate your perks.", "fontStyle": "BoldTitleSmall", - "textColor": "#F50A23" + "textColor": "#ffffff" }, "subTitle": { "text": "You have ${activePerks} out of ${totalPerks} perks active.", - "textColor": "#000000" + "textColor": "#ffffff" }, "action": { "actionType": "openPage", - "analyticsData": { - "vzdl.page.id": "onboardingHub" - }, "pageType": "tasks", - "presentationStyle": "push", - "requestURL": "${mva_edgecast_domain}/mobile/nsa/nos/gw/launchapp/l2/webview", - "extraParameters": { - "browserUrl": "https://${domain}/digital/nsa/secure/ui/products/producthub/home" - } + "presentationStyle": "push" }, "directionalIcon": { "size": "medium" diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/ToggleSample.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/ToggleSample.json deleted file mode 100644 index e9a76a0..0000000 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/ToggleSample.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "Page": { - "template": "stack", - "pageType": "moleculeStack", - "screenHeading": "Manage Profile", - "hideFabOverlay": true, - "suppressPostLaunchRequests": false, - "tabBarHidden": true, - "header": { - "moleculeName": "header", - "molecule": { - "moleculeName": "headlineBody", - "headline": { - "moleculeName": "label", - "text": "Zenkey" - } - } - }, - "stack": { - "moleculeName": "stack", - "molecules": [ - { - "moleculeName": "stackItem", - "molecule": { - "moleculeName": "toggle", - "fieldKey": "isActive" - } - } - ] - }, - "footer": { - "moleculeName": "footer", - "molecule": { - "moleculeName": "twoButtonView", - "primaryButton": { - "moleculeName": "button", - "title": "Edit", - "groupName": "default", - "action": { - "actionType": "openPage", - "pageType": "updateProfile", - "extraParameters": { - "from": "none" - }, - "presentationStyle": "push" - } - } - } - }, - "formRules": [ - { - "groupName": "default", - "rules": [ - - ] - } - ] - } -} - diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSCheckbox.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSCheckbox.json new file mode 100644 index 0000000..6355cb3 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSCheckbox.json @@ -0,0 +1,272 @@ +{ + "ResponseInfo" : { + "correlationId" : "ABC5060F-95C9-4F3B-954D-D74F30CD08A3", + "userMessage" : "0", + "timeStamp" : "01-08-2024 08:36:43", + "message" : "0", + "type" : "Success", + "topAlertTime" : 0, + "errorCode" : "00000" + }, + "Page" : { + "template" : "list", + "footer" : { + "moleculeName" : "footer", + "molecule" : { + "size" : "standard", + "groupName" : "default", + "moleculeName" : "button", + "title" : "Apply", + "action" : { + "requestURL" : "https:\/\/www.verizon.com\/digital\/nsa\/nos\/gw\/retail\/rtlStoreFinder", + "extraParameters" : { + "fromFilter" : "Y", + "searchedZipCode" : " ", + "sourcePage" : "rtlStoreFinder", + "fromPage" : "rtlStoreJourneyNSA", + "accuracyPermission" : "full", + "favStore" : " ", + "latitude" : "33.138233420702115", + "longitude" : "-96.85333736784496", + "makeFavourite" : "N" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "rtlStoreFinder" + } + }, + "horizontalAlignment" : "fill" + }, + "molecules" : [ + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "checkboxLabel", + "willSelect" : true, + "deselectAllTitleAccessibilityText" : "deselect all to uncheck the boxes below", + "checkboxAlignment" : "center", + "selectAllTitle" : "Select all", + "label" : { + "moleculeName" : "label", + "text" : "Select all", + "fontStyle" : "RegularBodyLarge" + }, + "selectAllTitleAccessibilityText" : "select all to check the boxes below", + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey": "agreement" + }, + "deSelectAllTitle" : "Deselect all" + } + }, + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "fontStyle" : "BoldTitleMedium", + "accessibilityText" : "Languages, heading level 2", + "moleculeName" : "label", + "accessibilityTraits" : [ + "header" + ], + "text" : "Languages" + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "English", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "ENGLISH", + + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Spanish", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "SPANISH", + + } + }, + { + "moleculeName" : "listItem", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "fontStyle" : "BoldTitleMedium", + "accessibilityText" : "Services, heading level 2", + "moleculeName" : "label", + "accessibilityTraits" : [ + "header" + ], + "text" : "Services" + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Appointments", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "APPOINTMENTS", + + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Locker available", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "LOCKER_AVAILABLE", + + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "Curbside pickup", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "CURBSIDE_PICKUP", + + } + }, + { + "headlineBody" : { + "moleculeName" : "headlineBody", + "headline" : { + "moleculeName" : "label", + "text" : "In-store Pickup", + "fontStyle" : "RegularBodyLarge" + } + }, + "topPadding" : 0, + "moleculeName" : "listLVCBBdy", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "checkbox" : { + "moleculeName" : "checkbox", + "fieldKey" : "INSTORE_PICKUP", + + } + } + ], + "screenHeading" : "Filters", + "cache" : false, + "header" : { + "moleculeName" : "header", + "line" : { + "moleculeName" : "line", + "type" : "none" + }, + "molecule" : { + "moleculeName" : "headlineBody", + "headline" : { + "fontStyle" : "RegularTitleXLarge", + "accessibilityText" : "Find exactly what you are looking for, heading level 1", + "moleculeName" : "label", + "accessibilityTraits" : [ + "header" + ], + "text" : "Find exactly what you are looking for." + } + } + }, + "pageType" : "storeLocatorFiltersNSA", + "suppressPostLaunchRequests" : false, + "formRules" : [ + { + "groupName" : "default", + "rules" : [ + { + "type" : "anyRequired", + "fields" : [ + "ENGLISH", + "SPANISH", + "APPOINTMENTS", + "LOCKER_AVAILABLE", + "CURBSIDE_PICKUP", + "INSTORE_PICKUP" + ] + } + ] + } + ], + "navigationBar" : { + "moleculeName" : "navigationBar", + "title" : "Filters" + }, + "tabBarHidden" : true + } +} diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-List.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-List.json new file mode 100644 index 0000000..d7ae190 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-List.json @@ -0,0 +1,517 @@ +{ + "Page": { + "template": "list", + "pageType": "wifiSample1", + "screenHeading": "Network Management", + "hideFabOverlay": true, + "suppressPostLaunchRequests": false, + "tabBarHidden": true, + "line": { + "moleculeName": "line", + "type": "none" + }, + "header": { + "moleculeName": "breadcrumbs", + "breadcrumbs": [ + { + "moleculeName": "breadcrumb", + "text": "Breadcrumb 1", + "action":{ + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"plans" + } + }, + { + "moleculeName": "breadcrumb", + "text": "Breadcrumb 2", + "action":{ + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"plans" + } + }, + { + "moleculeName": "breadcrumb", + "text": "Breadcrumb 3", + "action":{ + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"plans" + } + }, + { + "moleculeName": "breadcrumb", + "text": "Breadcrumb 4", + "action":{ + "actionType":"openPage", + "presentationStyle":"push", + "pageType":"plans" + } + } + ] + }, + "molecules": [ + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "pagination", + "totalPages": 10 + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "datePicker", + "fieldKey": "datePicker", + "title": "Pick a date", + "feedback": "This is when the event occurred", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "calendar": { + "moleculeName": "calendar", + "indicators": [ + { + "label": "foo", + "date": "Aug 24, 2024" + } + ] + } + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "radioBoxes", + "fieldKey": "box", + "boxes": [ + { + "moleculeName" : "radioBox", + "text" : "1", + "fieldValue" : "radioBox-1" + }, + { + "moleculeName" : "radioBox", + "text" : "2", + "fieldValue" : "radioBox-2" + }, + { + "text" : "3", + "moleculeName" : "radioBox", + "selected" : true, + "fieldValue" : "radioBox-3" + }, + { + "text" : "4", + "enabled" : false, + "moleculeName" : "radioBox", + "fieldValue" : "radioBox-4" + }, + { + "moleculeName" : "radioBox", + "text" : "5", + "fieldValue" : "radioBox-5" + }, + { + "text" : "6", + "moleculeName" : "radioBox", + "strikethrough" : true, + "fieldValue" : "radioBox-6" + }, + { + "text" : "7", + "enabled" : false, + "moleculeName" : "radioBox", + "strikethrough" : true, + "fieldValue" : "radioBox-7" + } + ] + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "radioButtons", + "fieldKey": "radioButtons", + "radioButtons": [ + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-1" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-2" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-3" + }, + "label": { + "moleculeName": "label", + "text": "Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "checkboxes", + "checkboxes": [ + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-1" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-2" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-3" + }, + "label": { + "moleculeName": "label", + "text": "Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "listItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "toggle", + "fieldKey": "isActive" + } + }, + { + "moleculeName": "listItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "textView", + "height": 150, + "fieldKey": "textView", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "listItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "dropDown", + "placeholder": "Select", + "title": "Relating to", + "fieldKey": "subReason", + "type": "text", + "options": [ + "Plan Questions", + "Change Plan", + "International Use" + ], + "selectedIndex": 0 + } + }, + { + "moleculeName": "listItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "textField", + "fieldKey": "textField", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "listItem", + "topPadding": 10, + "bottomPadding": 10, + "molecule": { + "moleculeName": "mdnEntryField", + "fieldKey": "mdnEntryField", + "title": "Pick a contact", + "feedback": "Manually enter a phone number or pick from the contacts", + "tooltip": { + "moluculeName": "tooltip", + "title": "MDN Entry Field", + "content": "You can either manually enter a phone number or pick from the contact picker popup from your address book." + }, + "required": true + } + }, + { + "moleculeName": "listItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "dropDown", + "options": [ + "All1", + "Apple1", + "Samsung1" + ], + "fieldKey": "dropDown", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "checkboxes", + "checkboxes": [ + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-2-1" + }, + "label": { + "moleculeName": "label", + "text": "2-Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-2-2" + }, + "label": { + "moleculeName": "label", + "text": "2-Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-2-3" + }, + "label": { + "moleculeName": "label", + "text": "2-Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "checkboxes", + "checkboxes": [ + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-3-1" + }, + "label": { + "moleculeName": "label", + "text": "3-Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-3-2" + }, + "label": { + "moleculeName": "label", + "text": "3-Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-3-3" + }, + "label": { + "moleculeName": "label", + "text": "3-Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "listItem", + "molecule": { + "moleculeName": "checkboxes", + "checkboxes": [ + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-4-1" + }, + "label": { + "moleculeName": "label", + "text": "4-Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-4-2" + }, + "label": { + "moleculeName": "label", + "text": "4-Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "4-Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-4-3" + }, + "label": { + "moleculeName": "label", + "text": "Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + ], + "footer": { + "moleculeName": "footer", + "molecule": { + "moleculeName": "twoButtonView", + "primaryButton": { + "moleculeName": "button", + "title": "Edit", + "groupName": "default", + "action": { + "actionType": "openPage", + "pageType": "updateProfile", + "extraParameters": { + "from": "none" + }, + "presentationStyle": "push" + } + } + } + }, + "formRules": [ + { + "groupName": "default", + "rules": [ + { + "type": "allRequired", + "ruleId": "requiredRule", + "fields": [ + "dropdown", + "datepicker" + ] + } + ] + } + ] + } +} diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-Stack.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-Stack.json new file mode 100644 index 0000000..6d78e9a --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/VDSSample-Stack.json @@ -0,0 +1,381 @@ +{ + "Page": { + "template": "stack", + "pageType": "moleculeStack", + "screenHeading": "Manage Profile", + "hideFabOverlay": true, + "suppressPostLaunchRequests": false, + "tabBarHidden": true, + "header": { + "moleculeName": "header", + "molecule": { + "moleculeName": "headlineBody", + "headline": { + "moleculeName": "label", + "text": "Zenkey" + } + } + }, + "stack": { + "moleculeName": "stack", + "molecules": [ + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "datePicker", + "fieldKey": "datePicker", + "title": "Pick a date", + "feedback": "This is when the event occurred", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "calendar": { + "moleculeName": "calendar", + "indicators": [ + { + "label": "foo", + "date": "Aug 24, 2024" + } + ] + } + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "calendar", + "indicators": [ + { + "label": "foo 1", + "date": "Aug 24, 2024" + }, + { + "label": "foo 2", + "date": "Aug 28, 2024" + } + ] + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "radioBoxes", + "fieldKey": "box", + "boxes": [ + { + "moleculeName" : "radioBox", + "text" : "1", + "fieldValue" : "radioBox-1" + }, + { + "moleculeName" : "radioBox", + "text" : "2", + "fieldValue" : "radioBox-2" + }, + { + "text" : "3", + "moleculeName" : "radioBox", + "selected" : true, + "fieldValue" : "radioBox-3" + }, + { + "text" : "4", + "enabled" : false, + "moleculeName" : "radioBox", + "fieldValue" : "radioBox-4" + }, + { + "moleculeName" : "radioBox", + "text" : "5", + "fieldValue" : "radioBox-5" + }, + { + "text" : "6", + "moleculeName" : "radioBox", + "strikethrough" : true, + "fieldValue" : "radioBox-6" + }, + { + "text" : "7", + "enabled" : false, + "moleculeName" : "radioBox", + "strikethrough" : true, + "fieldValue" : "radioBox-7" + } + ] + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "radioButtons", + "fieldKey": "radioButtons", + "radioButtons": [ + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-1" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-2" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "radioButtonLabel", + "radioButton": { + "moleculeName": "radioButton", + "fieldValue": "ACTIVE_VERIZON_DEVICE-3" + }, + "label": { + "moleculeName": "label", + "text": "Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "stackItem", + "molecule": { + "moleculeName": "checkboxes", + "checkboxes": [ + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-1" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-2" + }, + "label": { + "moleculeName": "label", + "text": "Here is the sample" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the sample" + } + }, + { + "moleculeName": "checkboxLabel", + "checkbox": { + "moleculeName": "checkbox", + "fieldKey": "agreement-3" + }, + "label": { + "moleculeName": "label", + "text": "Here is the label" + }, + "subTitle": { + "moleculeName": "label", + "text": "Here is the subtitle" + } + } + ] + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "toggle", + "fieldKey": "isActive" + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "textView", + "height": 150, + "fieldKey": "textView", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "dropDown", + "placeholder": "Select", + "title": "Relating to", + "fieldKey": "subReason", + "type": "text", + "options": [ + "Plan Questions", + "Change Plan", + "International Use" + ], + "selectedIndex": 0 + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "textField", + "fieldKey": "textField", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "mdnEntryField", + "fieldKey": "mdnEntryField", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + }, + { + "moleculeName": "stackItem", + "topPadding": 0, + "bottomPadding": 0, + "molecule": { + "moleculeName": "dropDown", + "options": [ + "All1", + "Apple1", + "Samsung1" + ], + "fieldKey": "dropDown", + "title": "Describe yourself", + "feedback": "This is for other help", + "tooltip": { + "moluculeName": "tooltip", + "title": "Here's the title", + "content": "Here's the content" + }, + "required": true + } + } + ] + }, + "footer": { + "moleculeName": "footer", + "molecule": { + "secondaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Agrega un dispositivo" + }, + "extraParameters" : { + "mtnToUpgrade" : "8643995483", + "navigationState" : "smartphones", + "customerIntent" : "AAL" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "prepayFamilyDiscountPR" + }, + "style" : "primary", + "enabled" : true, + "fillColor" : "#000000", + "title" : "Agrega un dispositivo", + "textColor" : "#FFFFFF" + }, + "moleculeName" : "twoButtonView", + "primaryButton" : { + "moleculeName" : "button", + "action" : { + "appContext" : "mfPrepaySS", + "analyticsData" : { + "vzdl.page.linkName" : "Actualiza el dispositivo" + }, + "extraParameters" : { + "mdn" : "8643995483", + "flowFrom" : "PrepayFlow", + "customerIntent" : "EUP", + "navigationState" : "smartphones" + }, + "actionType" : "openPage", + "presentationStyle" : "push", + "pageType" : "gridwallPRS" + }, + "style" : "secondary", + "enabled" : true, + "fillColor" : "#FFFFFF", + "title" : "Actualiza el dispositivo", + "borderColor" : "#000000", + "textColor" : "#000000" + }, + "horizontalAlignment" : "leading" + } + }, + "formRules": [ + { + "groupName": "default", + "rules": [ + { + "type": "allRequired", + "ruleId": "requiredRule", + "fields": [ + "dropdown", + "datepicker" + ] + } + ] + } + ] + } +} diff --git a/JSONCreator_iOS/JSONCreator/JSON/Samples/callUsOptionsLanding.json b/JSONCreator_iOS/JSONCreator/JSON/Samples/callUsOptionsLanding.json index 12d6d1a..f2ff2d2 100644 --- a/JSONCreator_iOS/JSONCreator/JSON/Samples/callUsOptionsLanding.json +++ b/JSONCreator_iOS/JSONCreator/JSON/Samples/callUsOptionsLanding.json @@ -66,7 +66,7 @@ "type" : "none" }, "moleculeName" : "dropDownListItem", - "bottomPadding" : 0, + "bottomPadding" : 0.000000000001, "molecules" : [ [ { @@ -74,9 +74,9 @@ "moleculeName" : "line", "type" : "none" }, - "topPadding" : 0, + "topPadding" : 0.000000000001, "moleculeName" : "listItem", - "bottomPadding" : 0, + "bottomPadding" : 0.000000000001, "molecule" : { "moleculeName" : "dropDown", "placeholder" : "Select", @@ -98,9 +98,9 @@ "moleculeName" : "line", "type" : "none" }, - "topPadding" : 0, + "topPadding" : 0.000000000001, "moleculeName" : "listItem", - "bottomPadding" : 0, + "bottomPadding" : 0.000000000001, "molecule" : { "moleculeName" : "dropDown", "placeholder" : "Select", @@ -120,9 +120,9 @@ "moleculeName" : "line", "type" : "none" }, - "topPadding" : 0, + "topPadding" : 0.000000000001, "moleculeName" : "listItem", - "bottomPadding" : 0, + "bottomPadding" : 0.000000000001, "molecule" : { "moleculeName" : "dropDown", "placeholder" : "Select", @@ -147,9 +147,9 @@ "moleculeName" : "line", "type" : "none" }, - "topPadding" : 0, + "topPadding" : 0.000000000001, "moleculeName" : "listItem", - "bottomPadding" : 0, + "bottomPadding" : 0.000000000001, "molecule" : { "moleculeName" : "dropDown", "placeholder" : "Select", diff --git a/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateHandler.swift b/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateHandler.swift new file mode 100644 index 0000000..f761fe6 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateHandler.swift @@ -0,0 +1,49 @@ +// +// ActionSetupBiometricsHandler.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 4/5/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import MVMCore +import LocalAuthentication + +open class ActionBiometricStateHandler: MVMCoreActionHandlerProtocol { + + enum Error: MVMError, CustomStringConvertible { + case unknown + + public var description: String { + switch self { + case .unknown: + return "Cannot evaluate biometric policy for an unknown reason." + } + } + } + + required public init() {} + + public func execute(with model: MVMCore.ActionModelProtocol, delegateObject: MVMCore.DelegateObject?, additionalData: [AnyHashable : Any]?) async throws { + guard let model = model as? ActionBiometricStateModel else { return } + + var error: NSError? + let context = LAContext() + guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { + guard let error = error else { + throw Self.Error.unknown + } + if error.code == LAError.biometryNotEnrolled.rawValue, + let action = model.biometricsDisabledAction { + try await delegateObject?.actionDelegate?.action(with: action, additionalData: additionalData, delegateObject: delegateObject) + } else if error.code == LAError.biometryNotAvailable.rawValue, + let action = model.biometricsDeniedAction { + try await delegateObject?.actionDelegate?.action(with: action, additionalData: additionalData, delegateObject: delegateObject) + } else { + throw error + } + return + } + try await delegateObject?.actionDelegate?.action(with: model.biometricsEnabledAction, additionalData: additionalData, delegateObject: delegateObject) + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateModel.swift b/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateModel.swift new file mode 100644 index 0000000..7d3a9aa --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ActionBiometricStateModel.swift @@ -0,0 +1,56 @@ +// +// ActionSetupBiometricsModel.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 4/5/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import MVMCore +import MVMCoreUI + +public struct ActionBiometricStateModel: ActionModelProtocol { + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + + public static var identifier: String = "biometricState" + public var actionType: String = ActionBiometricStateModel.identifier + public var biometricsEnabledAction: ActionModelProtocol + public var biometricsDisabledAction: ActionModelProtocol? + public var biometricsDeniedAction: ActionModelProtocol? + public var extraParameters: JSONValueDictionary? + public var analyticsData: JSONValueDictionary? + + //-------------------------------------------------- + // MARK: - Codable + //-------------------------------------------------- + + private enum CodingKeys: String, CodingKey { + case actionType + case biometricsEnabledAction + case biometricsDisabledAction + case biometricsDeniedAction + case extraParameters + case analyticsData + } + + public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + biometricsEnabledAction = try typeContainer.decodeModel(codingKey: .biometricsEnabledAction) + biometricsDisabledAction = try typeContainer.decodeModelIfPresent(codingKey: .biometricsDisabledAction) + biometricsDeniedAction = try typeContainer.decodeModelIfPresent(codingKey: .biometricsDeniedAction) + extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters) + analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(actionType, forKey: .actionType) + try container.encodeModel(biometricsEnabledAction, forKey: .biometricsEnabledAction) + try container.encodeModelIfPresent(biometricsDisabledAction, forKey: .biometricsDisabledAction) + try container.encodeModelIfPresent(biometricsDeniedAction, forKey: .biometricsDeniedAction) + try container.encodeIfPresent(extraParameters, forKey: .extraParameters) + try container.encodeIfPresent(analyticsData, forKey: .analyticsData) + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoHandler.swift b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoHandler.swift new file mode 100644 index 0000000..5371eef --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoHandler.swift @@ -0,0 +1,39 @@ +// +// ActionRegisterFidoHandler.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 6/12/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import Foundation +import MVMCore +import LocalAuthentication + +open class ActionRegisterFidoHandler: MVMCoreActionHandlerProtocol { + + required public init() {} + + public func execute(with model: MVMCore.ActionModelProtocol, delegateObject: MVMCore.DelegateObject?, additionalData: [AnyHashable : Any]?) async throws { + guard let model = model as? ActionRegisterFidoModel else { return } + do { + try await withCheckedThrowingContinuation({ continuation in + //MFFidoHelper.registerBiometric(model.fidoGuid, accessToken: model.accessToken, userIdentifier: model.userIdentifier) { + continuation.resume() +// } errorHandler: { error in +// continuation.resume(throwing: error) +// } + }) + try await delegateObject?.actionDelegate?.action(with: model.onSuccess, additionalData: additionalData, delegateObject: delegateObject) + } catch { + let error = error as NSError +// guard error.code != FidoErrorCode.Canceled.rawValue, +// error.code != FidoErrorCode.SystemCanceled.rawValue, +// error.code != FidoErrorCode.UserNotResponsive.rawValue else { +// // Dont show error on this error codes +// return +// } + throw error + } + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoModel.swift b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoModel.swift new file mode 100644 index 0000000..066e3f5 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterFidoModel.swift @@ -0,0 +1,65 @@ +// +// ActionRegisterFidoModel.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 6/12/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import Foundation +import MVMCore + +public struct ActionRegisterFidoModel: ActionModelProtocol { + + //-------------------------------------------------- + // MARK: - Properties + //-------------------------------------------------- + + public static var identifier: String = "registerFIDO" + public var actionType: String = ActionRegisterFidoModel.identifier + public var accessToken: String + public var fidoGuid: String + public var userIdentifier: String + public var fidoRegistrationError: String + public var onSuccess: ActionModelProtocol + public var extraParameters: JSONValueDictionary? + public var analyticsData: JSONValueDictionary? + + //-------------------------------------------------- + // MARK: - Codable + //-------------------------------------------------- + + private enum CodingKeys: String, CodingKey { + case actionType + case accessToken + case fidoGuid + case userIdentifier + case fidoRegistrationError + case onSuccess + case extraParameters + case analyticsData + } + + public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + accessToken = try typeContainer.decode(String.self, forKey: .accessToken) + fidoGuid = try typeContainer.decode(String.self, forKey: .fidoGuid) + userIdentifier = try typeContainer.decode(String.self, forKey: .userIdentifier) + fidoRegistrationError = try typeContainer.decode(String.self, forKey: .fidoRegistrationError) + onSuccess = try typeContainer.decodeModel(codingKey: .onSuccess) + extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters) + analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(actionType, forKey: .actionType) + try container.encode(accessToken, forKey: .accessToken) + try container.encode(fidoGuid, forKey: .fidoGuid) + try container.encode(userIdentifier, forKey: .userIdentifier) + try container.encode(fidoRegistrationError, forKey: .fidoRegistrationError) + try container.encodeModel(onSuccess, forKey: .onSuccess) + try container.encodeIfPresent(extraParameters, forKey: .extraParameters) + try container.encodeIfPresent(analyticsData, forKey: .analyticsData) + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ActionRegisterPushNotificationModel.swift b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterPushNotificationModel.swift new file mode 100644 index 0000000..2e130a3 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ActionRegisterPushNotificationModel.swift @@ -0,0 +1,40 @@ +// +// ActionRegisterPushNotificationModel.swift +// MobileFirstFramework +// +// Created by Ryan on 3/17/20. +// Copyright © 2020 Verizon Wireless. All rights reserved. +// + +import UIKit +import MVMCore + +public struct ActionRegisterPushNotificationModel: ActionModelProtocol { + public static var identifier: String = "registerPushNotification" + public var actionType: String? = ActionRegisterPushNotificationModel.identifier + public var extraParameters: JSONValueDictionary? + public var analyticsData: JSONValueDictionary? + public var completionAction: ActionModelProtocol? + + public enum CodingKeys: String, CodingKey { + case actionType + case extraParameters + case analyticsData + case completionAction + } + + public init(from decoder: Decoder) throws { + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters) + analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData) + completionAction = try typeContainer.decodeModelIfPresent(codingKey: .completionAction) + } + + public func encode(to encoder: Encoder) throws { + var encoderContainer = encoder.container(keyedBy: CodingKeys.self) + try encoderContainer.encodeIfPresent(actionType, forKey: .actionType) + try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters) + try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData) + try encoderContainer.encodeModelIfPresent(completionAction, forKey: .completionAction) + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/BiometricSetupBehavior.swift b/JSONCreator_iOS/JSONCreator/MF/BiometricSetupBehavior.swift new file mode 100644 index 0000000..189de66 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/BiometricSetupBehavior.swift @@ -0,0 +1,113 @@ +// +// BiometricSetupBehavior.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 4/12/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import Foundation +import MVMCore +import MVMCoreUI +import LocalAuthentication +import Combine + +public class BiometricSetupBehaviorModel: PageBehaviorModelProtocol { + public class var identifier: String { "biometricSetup" } + public var shouldAllowMultipleInstances: Bool { false } + public init() { } +} + +/** A behavior for managing biometric setup. + If the user has biometrics disabled, an alert is shown. If the user then enables biometrics, the alert is cancelled and biometric enabled action is attempted. +*/ +public class BiometricSetupBehavior: PageCustomActionHandlerBehavior { + + var delegateObject: MVMCoreUIDelegateObject? + + var biometricStateModel: ActionBiometricStateModel? + + /// For listening to foreground notification. + var cancellable: Cancellable? + + public required init(model: MVMCoreUI.PageBehaviorModelProtocol, delegateObject: MVMCoreUI.MVMCoreUIDelegateObject?) { + self.delegateObject = delegateObject + } + + public func canHandleAction(with model: MVMCore.ActionModelProtocol, additionalData: [AnyHashable : Any]?) -> Bool { + switch model { + case is ActionRegisterFidoModel: + // Perform the registration action here to have unique error handling. + return true + case let model as ActionBiometricStateModel: + // Store the model to use + biometricStateModel = model + return false + case let model as ActionAlertModel: + // Check if this is the biometric disabled alert, and listen for foreground. + guard let biometricStateModel = biometricStateModel, + let disabledAlert = biometricStateModel.biometricsDisabledAction as? ActionAlertModel, + model.alert.id == disabledAlert.alert.id else { + return false + } + listenForForegroundEntry(additionalData) + return false + default: + return false + } + } + + public func handleAction(with model: MVMCore.ActionModelProtocol, additionalData: [AnyHashable : Any]?) async throws { + guard let model = model as? ActionRegisterFidoModel else { return } + try await handleRegisterFidoAction(model: model, additionalData: additionalData) + // The fido register action doesn't always throw an error code when it fails. + _ = try await handleDontAllowState(additionalData) + } + + public func handleRegisterFidoAction(model: ActionRegisterFidoModel, additionalData: [AnyHashable : Any]?) async throws { + do { + try await MVMCoreActionHandler.shared()?.handleAction(with: model, additionalData: additionalData, delegateObject: self.delegateObject) + } + catch { + // Any fido registration error (other than don't allow) can be shown as a notification. + guard try await !handleDontAllowState(additionalData) else { return } + //MVMCoreAlertHandler.shared()?.showTopAlertError(withMessage: model.fidoRegistrationError) + } + } + + /** Check and handle the don't allow state for fido registration. + - Returns: Boolean if the don't allow state is handled. + */ + private func handleDontAllowState(_ additionalData: [AnyHashable : Any]? = nil) async throws -> Bool { + guard let biometricStateModel = biometricStateModel, + let action = biometricStateModel.biometricsDeniedAction else { return false } + // Check with Apple for denied case. + var contextError: NSError? + let context = LAContext() + guard !context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &contextError), + let error = contextError, + error.code == LAError.biometryNotAvailable.rawValue else { return false } + try await self.delegateObject?.actionDelegate?.action(with: action, additionalData: additionalData, delegateObject: self.delegateObject) + return true + } + + private func listenForForegroundEntry(_ additionalData: [AnyHashable : Any]? = nil) { + Task { + cancellable?.cancel() + cancellable = await NotificationCenter.Publisher(center: .default, + name: UIApplication.willEnterForegroundNotification).sink { [weak self] _ in + guard let self = self, + LAContext().canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) else { return } + self.cancellable?.cancel() + guard let biometricStateModel = biometricStateModel, + let id = (biometricStateModel.biometricsDisabledAction as? ActionAlertModel)?.alert.id else { return } + AlertHandler.shared().cancelAlert { alertObject in + return (alertObject.alertModel as? AlertModel)?.id == id + } + Task { + try? await self.delegateObject?.actionDelegate?.action(with: biometricStateModel.biometricsEnabledAction, additionalData: additionalData, delegateObject: self.delegateObject) + } + } + } + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusHandler.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusHandler.swift new file mode 100644 index 0000000..5fb4d6c --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusHandler.swift @@ -0,0 +1,127 @@ +// +// ClientParameterBiometricStatusHandler.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 4/11/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import MVMCore +import LocalAuthentication + +public final class ClientParameterBiometricStatusHandler: ClientParameterProtocol { + public static var name: String = ClientParameterBiometricStatusModel.identifier + public var clientParameterModel: ClientParameterBiometricStatusModel + required public init(clientParameterModel: ClientParameterBiometricStatusModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + var error: NSError? + let context = LAContext() + guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { + guard let error = error, + let errorType = LAError.Code(rawValue: error.code)?.rawValueString else { + return formatReturnParameters("unknown") + } + return formatReturnParameters(errorType) + } + return formatReturnParameters("enrolled").mergingRight(["biometricType": context.biometryType.rawValueString]) + } +} + +extension LAError.Code: RawRepresentable { + public init?(rawValue: String) { + switch rawValue { + case "authenticationFailed": + self = .authenticationFailed + case "userCancel": + self = .userCancel + case "userFallback": + self = .userFallback + case "systemCancel": + self = .systemCancel + case "passcodeNotSet": + self = .passcodeNotSet + case "appCancel": + self = .appCancel + case "invalidContext": + self = .invalidContext + case "biometryNotAvailable": + self = .biometryNotAvailable + case "biometryNotEnrolled": + self = .biometryNotEnrolled + case "biometryLockout": + self = .biometryLockout + case "notInteractive": + self = .notInteractive + default: + return nil + } + } + + var rawValueString: String { + switch self { + case .authenticationFailed: + return "authenticationFailed" + case .userCancel: + return "userCancel" + case .userFallback: + return "userFallback" + case .systemCancel: + return "systemCancel" + case .passcodeNotSet: + return "passcodeNotSet" + case .appCancel: + return "appCancel" + case .invalidContext: + return "invalidContext" + case .biometryNotAvailable: + return "biometryNotAvailable" + case .biometryNotEnrolled: + return "biometryNotEnrolled" + case .biometryLockout: + return "biometryLockout" + case .notInteractive: + return "notInteractive" + case .touchIDNotAvailable: + return "biometryNotAvailable" + case .touchIDNotEnrolled: + return "biometryNotEnrolled" + case .touchIDLockout: + return "biometryLockout" + @unknown default: + return "unknown" + } + } +} +extension LABiometryType: RawRepresentable { + public init?(rawValue: String) { + switch rawValue { + case "faceID": + self = .faceID + case "touchID": + self = .touchID + case "none": + self = .none + default: + return nil + } + } + + var rawValueString: String { + switch self { + case .faceID: + return "faceID" + case .touchID: + return "touchID" + case .none: + return "none" + case .opticID: + // TODO: !!!! + return "" + @unknown default: + return "unknown" + } + } +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusModel.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusModel.swift new file mode 100644 index 0000000..b2dfc5b --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricStatusModel.swift @@ -0,0 +1,15 @@ +// +// ClientParameterBiometricStatusModel.swift +// MobileFirstFramework +// +// Created by Scott Pfeil on 4/11/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import MVMCore + +public struct ClientParameterBiometricStatusModel: ClientParameterModelProtocol { + public static var identifier: String = "biometricStatus" + public var type: String = ClientParameterBiometricStatusModel.identifier + @DecodableDefault.UUIDString public var id: String +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricType.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricType.swift new file mode 100644 index 0000000..a61798f --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricType.swift @@ -0,0 +1,28 @@ +// +// ClientParameterBiometricType.swift +// MobileFirstFramework +// +// Created by Subramaniam, Ramya on 15/03/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import Foundation +import MVMCore +public final class ClientParameterBiometricType: ClientParameterProtocol { + public static var name: String = ClientParameterBiometricTypeModel.identifier + public var clientParameterModel: ClientParameterBiometricTypeModel + required public init(clientParameterModel: ClientParameterBiometricTypeModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { +// if MFFidoHelper.canUseTouchId() { +// return formatReturnParameters(MFFidoHelper.KeyBiometricTypeTouchId) +// } else if MFFidoHelper.canUseFaceId() { +// return formatReturnParameters(MFFidoHelper.KeyBiometricTypeFaceId) +// } else { + return formatReturnParameters("faceId") +// } + } +} + diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricTypeModel.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricTypeModel.swift new file mode 100644 index 0000000..8045539 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricTypeModel.swift @@ -0,0 +1,17 @@ +// +// ClientParameterBiometricTypeModel.swift +// MobileFirstFramework +// +// Created by Subramaniam, Ramya on 15/03/23. +// Copyright © 2023 Verizon Wireless. All rights reserved. +// + +import Foundation +import UIKit +import MVMCore + +public struct ClientParameterBiometricTypeModel: ClientParameterModelProtocol { + public static var identifier: String = "bioMetricType" + public var type: String + @DecodableDefault.UUIDString public var id: String +} diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledHandler.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledHandler.swift new file mode 100644 index 0000000..77923a5 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledHandler.swift @@ -0,0 +1,26 @@ +// +// ClientParameterBiometricsEnabledHandler.swift +// MobileFirstFramework +// +// Created by Arun Kumar Chintakrinda on 06/05/24. +// Copyright © 2024 Verizon Wireless. All rights reserved. +// + +import Foundation +import MVMCore +public final class ClientParameterBiometricsEnabledHandler: ClientParameterProtocol { + public static var name: String = ClientParameterBiometricsEnabledModel.identifier + public var clientParameterModel: ClientParameterBiometricsEnabledModel + required public init(clientParameterModel: ClientParameterBiometricsEnabledModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + +// guard let _ = MFFidoHelper.getFidoGUIDForLoggedInCustomer(), (MFFidoHelper.canUseFaceId() || MFFidoHelper.canUseTouchId()) else { +// return formatReturnParameters(false) +// } + return formatReturnParameters(false) + } +} + diff --git a/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledModel.swift b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledModel.swift new file mode 100644 index 0000000..fabc5a8 --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/ClientParameterBiometricsEnabledModel.swift @@ -0,0 +1,15 @@ +// +// ClientParameterBiometricsEnabledModel.swift +// MobileFirstFramework +// +// Created by Arun Kumar Chintakrinda on 06/05/24. +// Copyright © 2024 Verizon Wireless. All rights reserved. +// + +import MVMCore + +public struct ClientParameterBiometricsEnabledModel: ClientParameterModelProtocol { + public static var identifier: String = "biometricsEnabled" + public var type: String = ClientParameterBiometricsEnabledModel.identifier + @DecodableDefault.UUIDString public var id: String +} diff --git a/JSONCreator_iOS/JSONCreator/MF/JSONCreatorActionHandler.swift b/JSONCreator_iOS/JSONCreator/MF/JSONCreatorActionHandler.swift index aaa362e..786bcfb 100644 --- a/JSONCreator_iOS/JSONCreator/MF/JSONCreatorActionHandler.swift +++ b/JSONCreator_iOS/JSONCreator/MF/JSONCreatorActionHandler.swift @@ -8,6 +8,7 @@ import Foundation import MVMCoreUI +import VDS public protocol MVMCoreActionScrollProtocol: MVMCoreActionDelegateProtocol { @@ -48,5 +49,351 @@ public class JSONCreatorActionHandler: MVMCoreUIActionHandler { if let bundle = MVMCoreUIUtility.bundleForMVMCoreUI() { MVMCoreCache.shared()?.registerBundle(forImages: bundle) } + MVMCoreCache.shared()?.registerBundle(forImages: Bundle.main) +// ModelRegistry.register(handler: ClientParameterTest1.self, for: ClientParameterTest1Model.self) +// ModelRegistry.register(handler: ClientParameterTest2.self, for: ClientParameterTest2Model.self) +// ModelRegistry.register(handler: ClientParameterTest3.self, for: ClientParameterTest3Model.self) +// ModelRegistry.register(handler: ClientParameterTest4.self, for: ClientParameterTest4Model.self) + ModelRegistry.register(handler: ActionReplaceTestHandler.self, for: ActionReplaceTestModel.self) +// ModelRegistry.register(handler: HeadersH1ButtonGroup.self, for: HeadersH1ButtonGroupModel.self) + + ModelRegistry.register(handler: ClientParameterESimCapable.self, for: ClientParameterESimCapableModel.self) + ModelRegistry.register(handler: ClientParameterESimUnlocked.self, for: ClientParameterESimUnlockedModel.self) + ModelRegistry.register(handler: ClientParameterCurrentLocation.self, for: ClientParameterCurrentLocationModel.self) + ModelRegistry.register(handler: ClientParameterDefaultPreference.self, for: ClientParameterDefaultPreferenceModel.self) + ModelRegistry.register(handler: ClientParameterBiometricStatusHandler.self, for: ClientParameterBiometricStatusModel.self) + ModelRegistry.register(handler: ClientParameterBiometricType.self, for: ClientParameterBiometricTypeModel.self) + ModelRegistry.register(handler: ClientParameterBiometricsEnabledHandler.self, for: ClientParameterBiometricsEnabledModel.self) + + + ModelRegistry.register(handler: RegisterPushNotificationActionHandler.self, for: ActionRegisterPushNotificationModel.self) + ModelRegistry.register(handler: ActionBiometricStateHandler.self, for: ActionBiometricStateModel.self) + ModelRegistry.register(handler: ActionRegisterFidoHandler.self, for: ActionRegisterFidoModel.self) + + ModelRegistry.register(handler: BiometricSetupBehavior.self, for: BiometricSetupBehaviorModel.self) + + BundleManager.register(Bundle.main.bundlePath) + try? ModelRegistry.throwable_register(type: PatternNavigationItemModel.self, allowsReplace: true) } } + +public struct ClientParameterESimCapableModel: ClientParameterModelProtocol { + public static var identifier: String = "eSimCapable" + public var type: String + @DecodableDefault.UUIDString public var id: String +} + +public final class ClientParameterESimCapable: ClientParameterProtocol { + public static var name: String = ClientParameterESimCapableModel.identifier + public var clientParameterModel: ClientParameterESimCapableModel + public init(clientParameterModel: ClientParameterESimCapableModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + return formatReturnParameters(true) + } +} + +public struct ClientParameterESimUnlockedModel: ClientParameterModelProtocol { + public static var identifier: String = "deviceESimUnlocked" + public var type: String + @DecodableDefault.UUIDString public var id: String +} + +public final class ClientParameterESimUnlocked: ClientParameterProtocol { + public static var name: String = ClientParameterESimUnlockedModel.identifier + public var clientParameterModel: ClientParameterESimUnlockedModel + public init(clientParameterModel: ClientParameterESimUnlockedModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + return formatReturnParameters(true) + } +} + + +public struct ClientParameterDefaultPreferenceModel: ClientParameterModelProtocol { + public static var identifier: String = "defaultPreference" + public var type: String + public var defaultPreferenceKeys: [String] + @DecodableDefault.UUIDString public var id: String +} + +public class ClientParameterDefaultPreference: ClientParameterProtocol { + + public static var name: String = ClientParameterDefaultPreferenceModel.identifier + public var clientParameterModel: ClientParameterDefaultPreferenceModel + required public init(clientParameterModel: ClientParameterDefaultPreferenceModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + + guard let defaultPreferenceData = UserDefaults.standard.dictionary(forKey: "defaultPreferences") else { return valueOnTimeout() } + + let defaultPreferenceKeys = clientParameterModel.defaultPreferenceKeys + var defaultPreferenceParams: [String: AnyHashable] = [:] + + for key in defaultPreferenceKeys { + guard let value = (defaultPreferenceData[key] as? [String: AnyHashable])?[KeyValue] else { continue } + defaultPreferenceParams[key] = value + } + + return defaultPreferenceParams + } +} + + +public struct ClientParameterCurrentLocationInputsModel: Codable { + public let accuracy: Double? + public let timeThreshold: Double? +} + +public struct ClientParameterCurrentLocationModel: ClientParameterModelProtocol { + public static var identifier: String = "currentLocation" + public var type: String + public let inputParameters: ClientParameterCurrentLocationInputsModel? + @DecodableDefault.UUIDString public var id: String +} + +public final class ClientParameterCurrentLocation: ClientParameterProtocol { + public static var name: String = ClientParameterCurrentLocationModel.identifier + public var clientParameterModel: ClientParameterCurrentLocationModel + public init(clientParameterModel: ClientParameterCurrentLocationModel) { + self.clientParameterModel = clientParameterModel + } + + public func fetchClientParameters(requestParameters: [String : Any], timingOutIn timeout: TimeInterval) async -> [String : AnyHashable] { + return formatReturnParameters(true) + } +} + +struct ActionReplaceTestModel: ActionModelProtocol { + public static var identifier: String = "replaceTest" + public var actionType: String = ActionReplaceTestModel.identifier + public var extraParameters: JSONValueDictionary? + public var analyticsData: JSONValueDictionary? +} + +struct ActionReplaceTestHandler: MVMCoreActionHandlerProtocol { + func execute(with model: MVMCore.ActionModelProtocol, delegateObject: MVMCore.DelegateObject?, additionalData: [AnyHashable : Any]?) async throws { + var json = [ + KeyModuleMap: [ + "testYO": [ + "moduleName": "testYO", + "moleculeName":"listItem", + "gone": false, + "id": "testYO", + "molecule": [ + "moleculeName": "externalLink", + "title": "link", + "action": [ + "actionType": "noop" + ] + ] + ] + ] + ] + var loadObject = MVMCoreLoadObject() + await MVMCoreLoadRequestOperation.processJSON(fromServer: json, loadObject: loadObject) + } +} + +public class PatternNavigationItemModel: NavigationItemModel { + + var pattern: String? + + private enum CodingKeys: String, CodingKey { + case id + case moleculeName + case title + case hidden + case backgroundColor + case tintColor + case line + case hidesSystemBackButton + case alwaysShowBackButton + case backButton + case additionalLeftButtons + case additionalRightButtons + case titleView + case style + case titleOffset + case pattern + } + + public required init(from decoder: any Decoder) throws { + super.init() + let typeContainer = try decoder.container(keyedBy: CodingKeys.self) + pattern = try typeContainer.decodeIfPresent(String.self, forKey: .pattern) + if let pattern = pattern { + var patternJSON: [AnyHashable: Any]? = nil + MVMCoreCache.shared()?.fetchJSON(forModule: "navigationPatterns", queue: nil, waitUntilFinished: true, completionHandler: { module in + patternJSON = module?.optionalDictionaryWithChainOfKeysOrIndexes(["navigationPatterns", pattern]) + }) + guard let patternJSON = patternJSON else { + throw ModelRegistry.Error.decoderOther(message: "\(self) JSON not found for pattern: \(pattern)") + } + let data = try JSONSerialization.data(withJSONObject: patternJSON) + let navigationObject = try JSONDecoder.create().decode(NavigationItemModel.self, from: data) + line = navigationObject.line + hidesSystemBackButton = navigationObject.hidesSystemBackButton + style = navigationObject.style + tintColor = navigationObject.tintColor + alwaysShowBackButton = navigationObject.alwaysShowBackButton + backButton = navigationObject.backButton + additionalLeftButtons = navigationObject.additionalLeftButtons + additionalRightButtons = navigationObject.additionalRightButtons + titleView = navigationObject.titleView + titleOffset = navigationObject.titleOffset + } + + id = try typeContainer.decodeIfPresent(String.self, forKey: .id) ?? UUID().uuidString + title = try typeContainer.decodeIfPresent(String.self, forKey: .title) + if let hidden = try typeContainer.decodeIfPresent(Bool.self, forKey: .hidden) { + self.hidden = hidden + } + if let backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) { + self.backgroundColor = backgroundColor + } + if let tintColor = try typeContainer.decodeIfPresent(Color.self, forKey: .tintColor) { + self.tintColor = tintColor + } + if let line = try typeContainer.decodeIfPresent(LineModel.self, forKey: .line) { + self.line = line + } + if let hidesSystemBackButton = try typeContainer.decodeIfPresent(Bool.self, forKey: .hidesSystemBackButton) { + self.hidesSystemBackButton = hidesSystemBackButton + } + if let alwaysShowBackButton = try typeContainer.decodeIfPresent(Bool.self, forKey: .alwaysShowBackButton) { + self.alwaysShowBackButton = alwaysShowBackButton + } + if let backButton: (NavigationButtonModelProtocol & MoleculeModelProtocol) = try typeContainer.decodeModelIfPresent(codingKey: .backButton) { + self.backButton = backButton + } + if let additionalLeftButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)] = try typeContainer.decodeModelsIfPresent(codingKey: .additionalLeftButtons) { + self.additionalLeftButtons = additionalLeftButtons + } + if let additionalRightButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)] = try typeContainer.decodeModelsIfPresent(codingKey: .additionalRightButtons) { + self.additionalRightButtons = additionalRightButtons + } + if let titleView: MoleculeModelProtocol? = try typeContainer.decodeMoleculeIfPresent(codingKey: .titleView) { + self.titleView = titleView + } + if let style = try typeContainer.decodeIfPresent(NavigationItemStyle.self, forKey: .style) { + self.style = style + } + if let titleOffset = try typeContainer.decodeIfPresent(UIOffset.self, forKey: .titleOffset) { + self.titleOffset = titleOffset + } + line?.inverted = style == .dark + } +} + + +// +//public class HeadersH1ButtonGroupModel: HeaderModel, MoleculeModelProtocol, ParentMoleculeModelProtocol { +// +// //-------------------------------------------------- +// // MARK: - Properties +// //-------------------------------------------------- +// public static var identifier: String = "headerH1BtnGrp" +// public var titleLockup: TitleLockupModel +// public var buttons: ButtonGroupModel +// +// public var children: [MoleculeModelProtocol] { +// [titleLockup, buttons] +// } +// +// public func replaceChildMolecule(with molecule: MoleculeModelProtocol) throws -> Bool { +// return try replaceChildMolecule(at: &titleLockup, with: molecule) +// || replaceChildMolecule(at: &buttons, with: molecule) +// } +// +// //-------------------------------------------------- +// // MARK: - Initializer +// //-------------------------------------------------- +// +// public init(titleLockup: TitleLockupModel, buttons: ButtonGroupModel) { +// self.titleLockup = titleLockup +// self.buttons = buttons +// super.init() +// } +// +// //-------------------------------------------------- +// // MARK: - Subclass +// //-------------------------------------------------- +// +// public override func setDefaults() { +// super.setDefaults() +// if titleLockup.title.fontStyle == nil { +// titleLockup.title.fontStyle = Styler.Font.RegularTitle2XLarge +// } +// if titleLockup.subTitle?.fontStyle == nil { +// titleLockup.subTitle?.fontStyle = Styler.Font.RegularTitleMedium +// } +// } +// +// //-------------------------------------------------- +// // MARK: - Keys +// //-------------------------------------------------- +// +// private enum CodingKeys: String, CodingKey { +// case moleculeName +// case titleLockup +// case buttons +// } +// +// //-------------------------------------------------- +// // MARK: - Codec +// //-------------------------------------------------- +// required public init(from decoder: Decoder) throws { +// let typeContainer = try decoder.container(keyedBy: CodingKeys.self) +// titleLockup = try typeContainer.decodeMolecule(codingKey: .titleLockup) +// buttons = try typeContainer.decode(ButtonGroupModel.self, forKey: .buttons) +// try super.init(from: decoder) +// } +// +// public override func encode(to encoder: Encoder) throws { +// try super.encode(to: encoder) +// var container = encoder.container(keyedBy: CodingKeys.self) +// try container.encode(moleculeName, forKey: .moleculeName) +// try container.encode(buttons, forKey: .buttons) +// try container.encode(titleLockup, forKey: .titleLockup) +// } +//} +// +//open class HeadersH1ButtonGroup: HeaderView { +// //-------------------------------------------------- +// // MARK: - Outlets +// //-------------------------------------------------- +// public let titleLockup = TitleLockup() +// public let buttons = ButtonGroup() +// public lazy var stack: Stack = { +// Stack.createStack(with: [titleLockup, buttons], spacing: Padding.Eighteen) +// }() +// +// //------------------------------------------------------- +// // MARK: - View Lifecycle +// //------------------------------------------------------- +// open override func setupView() { +// super.setupView() +// addMolecule(stack) +// stack.restack() +// } +// +// //---------------------------------------------------- +// // MARK: - Molecule +// //------------------------------------------------------ +// open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { +// super.set(with: model, delegateObject, additionalData) +// guard let model = model as? HeadersH1ButtonGroupModel else { return } +// +// titleLockup.set(with: model.titleLockup, delegateObject, additionalData) +// buttons.set(with: model.buttons, delegateObject, additionalData) +// } +// +// open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 121 } +//} diff --git a/JSONCreator_iOS/JSONCreator/MF/RegisterPushNotificationActionHandler.swift b/JSONCreator_iOS/JSONCreator/MF/RegisterPushNotificationActionHandler.swift new file mode 100644 index 0000000..70123dd --- /dev/null +++ b/JSONCreator_iOS/JSONCreator/MF/RegisterPushNotificationActionHandler.swift @@ -0,0 +1,38 @@ +// +// RegisterPushNotificationActionHandler.swift +// MobileFirstFramework +// +// Created by Digvijay Mallegowda Chinnappa on 12/15/21. +// Copyright © 2021 Verizon Wireless. All rights reserved. +// + +import Foundation +import CoreMedia +import MVMCore + +public struct RegisterPushNotificationActionHandler: MVMCoreActionHandlerProtocol { + public init(){} + public func execute(with model: ActionModelProtocol, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?) async throws { + guard let model = model as? ActionRegisterPushNotificationModel else { return } + try await withCheckedThrowingContinuation { continuation in + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { granted, error in + guard var completionAction = model.completionAction else { + continuation.resume() + return + } + var extraParameter = completionAction.extraParameters ?? [:] + extraParameter["granted"] = JSONValue(booleanLiteral: granted) + completionAction.extraParameters = extraParameter + let action = completionAction + Task { + do { + try await (delegateObject?.actionDelegate as? ActionDelegateProtocol)?.performAction(with: action, additionalData: additionalData, delegateObject: delegateObject) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + }) + } as Void + } +}