added for project testing

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-10-02 09:37:08 -05:00
parent 23284fbe9a
commit f1bed66dc9
28 changed files with 4620 additions and 1623 deletions

View File

@ -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 = "<group>"; };
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 = "<group>"; };
EA6299722C9B7BCA008980E3 /* ActionRegisterFidoModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterFidoModel.swift; sourceTree = "<group>"; };
EA6299732C9B7BCA008980E3 /* ClientParameterBiometricStatusHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricStatusHandler.swift; sourceTree = "<group>"; };
EA6299742C9B7BCA008980E3 /* ActionRegisterFidoHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterFidoHandler.swift; sourceTree = "<group>"; };
EA6299752C9B7BCA008980E3 /* ActionBiometricStateModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionBiometricStateModel.swift; sourceTree = "<group>"; };
EA6299762C9B7BCA008980E3 /* ActionBiometricStateHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionBiometricStateHandler.swift; sourceTree = "<group>"; };
EA6299772C9B7BCA008980E3 /* ClientParameterBiometricStatusModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricStatusModel.swift; sourceTree = "<group>"; };
EA6299782C9B7BCA008980E3 /* ClientParameterBiometricType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricType.swift; sourceTree = "<group>"; };
EA6299792C9B7BCA008980E3 /* ClientParameterBiometricsEnabledHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricsEnabledHandler.swift; sourceTree = "<group>"; };
EA62997A2C9B7BCA008980E3 /* ClientParameterBiometricsEnabledModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClientParameterBiometricsEnabledModel.swift; sourceTree = "<group>"; };
EA6299852C9B7C53008980E3 /* RegisterPushNotificationActionHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterPushNotificationActionHandler.swift; sourceTree = "<group>"; };
EA6299862C9B7C53008980E3 /* ActionRegisterPushNotificationModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRegisterPushNotificationModel.swift; sourceTree = "<group>"; };
EA6299872C9B7C54008980E3 /* BiometricSetupBehavior.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BiometricSetupBehavior.swift; sourceTree = "<group>"; };
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 = "<group>"; };
@ -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;
};

View File

@ -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"
}
}
}

View File

@ -131,7 +131,8 @@
"fields": [
"emailID",
"firstName",
"lastName"
"lastName",
"zipcode"
]
}
]

View File

@ -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"
}
}
}

View File

@ -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"
}
}
]
}
}
}
}
}

View File

@ -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 wont 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
}
}
}

View File

@ -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"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -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"

View File

@ -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": [
]
}
]
}
}

View File

@ -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
}
}

View File

@ -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"
]
}
]
}
]
}
}

View File

@ -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"
]
}
]
}
]
}
}

View File

@ -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",

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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
}
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}
}
}
}

View File

@ -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"
}
}
}

View File

@ -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
}

View File

@ -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")
// }
}
}

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -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<StackModel> = {
// Stack<StackModel>.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 }
//}

View File

@ -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
}
}