Merge branch 'develop' into feature/tabbar_animation

This commit is contained in:
Michael Chen 2018-08-15 14:07:54 -04:00
commit 592b1603ab
12 changed files with 39 additions and 690 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -120,7 +120,6 @@
AFBB96B81FBA3CEC0008D868 /* MVMCoreActionDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96B51FBA3CEC0008D868 /* MVMCoreActionDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
AFBB96B91FBA3CEC0008D868 /* MVMCoreActionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96B61FBA3CEC0008D868 /* MVMCoreActionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
AFBB96BA1FBA3CEC0008D868 /* MVMCoreActionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96B71FBA3CEC0008D868 /* MVMCoreActionHandler.m */; };
AFBB96EB1FBA4A260008D868 /* canned.json in Resources */ = {isa = PBXBuildFile; fileRef = AFBB96E81FBA4A260008D868 /* canned.json */; };
AFBB96EC1FBA4A260008D868 /* MFHardCodedServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96E91FBA4A260008D868 /* MFHardCodedServerResponse.h */; };
AFBB96ED1FBA4A260008D868 /* MFHardCodedServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96EA1FBA4A260008D868 /* MFHardCodedServerResponse.m */; };
AFC5FA161FFC2E2A00C244CF /* MVMCoreGlobalTopAlertDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC5FA141FFC2E2A00C244CF /* MVMCoreGlobalTopAlertDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
@ -252,7 +251,6 @@
AFBB96B61FBA3CEC0008D868 /* MVMCoreActionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreActionHandler.h; sourceTree = "<group>"; };
AFBB96B71FBA3CEC0008D868 /* MVMCoreActionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreActionHandler.m; sourceTree = "<group>"; };
AFBB96D21FBA44420008D868 /* VZWAuthentication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VZWAuthentication.framework; path = ../../SharedFrameworks/VZWAuthentication.framework; sourceTree = "<group>"; };
AFBB96E81FBA4A260008D868 /* canned.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = canned.json; sourceTree = "<group>"; };
AFBB96E91FBA4A260008D868 /* MFHardCodedServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFHardCodedServerResponse.h; sourceTree = "<group>"; };
AFBB96EA1FBA4A260008D868 /* MFHardCodedServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFHardCodedServerResponse.m; sourceTree = "<group>"; };
AFC5FA141FFC2E2A00C244CF /* MVMCoreGlobalTopAlertDelegateProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MVMCoreGlobalTopAlertDelegateProtocol.h; sourceTree = "<group>"; };
@ -580,7 +578,6 @@
AFBB96E71FBA4A260008D868 /* HardCodedServerResponse */ = {
isa = PBXGroup;
children = (
AFBB96E81FBA4A260008D868 /* canned.json */,
AFBB96E91FBA4A260008D868 /* MFHardCodedServerResponse.h */,
AFBB96EA1FBA4A260008D868 /* MFHardCodedServerResponse.m */,
);
@ -741,7 +738,6 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AFBB96EB1FBA4A260008D868 /* canned.json in Resources */,
AF26DDAE1FCE6A37004E8F65 /* Localizable.strings in Resources */,
AFBB96561FBA3A570008D868 /* freebee.json in Resources */,
AFBB96591FBA3A570008D868 /* freebeelaunchApp.json in Resources */,
@ -971,6 +967,7 @@
"$(PROJECT_DIR)/MVMCore/EmbeddedLibaries/AdobeMobileLibrary",
"$(PROJECT_DIR)/MVMCore/EmbeddedLibraries/VZAnalytics",
);
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.vzw.MVMCore;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;

View File

@ -165,7 +165,7 @@
// Sets up the Initial parameters.
if (requestParameters.addInitialRequestParameters) {
NSDictionary *initialParameters = [[MVMCoreSessionObject sharedGlobal] getInitialParameters];
NSDictionary *initialParameters = [[MVMCoreSessionObject sharedGlobal] getInitialParametersExcludingSections:requestParameters.excludedInitialParameters];
if (initialParameters) {
[parameters setObject:initialParameters forKey:@"InitialParams"];
}
@ -310,8 +310,15 @@
}
return nil;
}
NSURLSession *session = [MVMCoreSessionObject sharedGlobal].session;
if (!session) {
#warning Hotfix for when session is nil. We should switch to logging these errors once we fix how session handler misses canceling certain calls because they happen at the same time.
error = [[MVMCoreErrorObject alloc] initWithTitle:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorTitle] message:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorCritical] messageToLog:nil code:ErrorCodeDefault domain:ErrorDomainNative location:locationForError];
error.logError = NO;
requestFinished(nil,error);
}
if ([[MFFreebeeHandler sharedHandler] isFreeBeeEnabled]
&& [[MFFreebeeHandler sharedHandler] isValidCampaign]) {
BOOL isAllowedPage = [[MFFreebeeHandler sharedHandler] isAllowedPage:requestParameters.pageType];

View File

@ -56,4 +56,7 @@
- (nullable instancetype)initWithPageJSON:(nullable NSDictionary *)pageJSON errorObject:(nullable MVMCoreErrorObject *)errorObject;
// Returns whether the load will extend the app session timer based on the response provided by the server.
- (BOOL)extendsAppSession;
@end

View File

@ -9,6 +9,7 @@
#import "MVMCoreLoadObject.h"
#import "MVMCoreErrorObject.h"
#import "MVMCoreJSONConstants.h"
#import "NSDictionary+MFConvenience.h"
@implementation MVMCoreLoadObject
@ -54,4 +55,9 @@
return self;
}
- (BOOL)extendsAppSession {
NSNumber *extendSessionFlag = [self.responseInfoMap objectForKey:@"appSessionExtended" ofType:[NSNumber class]];
return !extendSessionFlag || [extendSessionFlag boolValue]; // Default to YES if the key does not exist.
}
@end

View File

@ -163,7 +163,7 @@
if ([loadObject.operation checkAndHandleForCancellation]) {
return;
}
if (loadObject.pageDataFromCache || loadObject.pageType) {
// Can continue loading with the page.
@ -283,10 +283,8 @@
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
// Update the session timer on a good response.
[[MVMCoreSessionTimeHandler sharedSessionHandler] startSessionTimer];
completionHandler(jsonObject);
} else {
// Error json not correct format.
@ -365,6 +363,11 @@
// Sets the response info map
loadObject.responseInfoMap = [jsonDictionary dict:KeyResponseInfo];
// Update the session timer on a good response.
if (loadObject.extendsAppSession) {
[[MVMCoreSessionTimeHandler sharedSessionHandler] startSessionTimer];
}
// Dismiss any top alerts that server wants us to dismiss
[[MVMCoreAlertHandler sharedAlertHandler] hidePersistentTopAlertViewOfType:[loadObject.responseInfoMap string:@"disableType"]];

View File

@ -63,6 +63,9 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) {
// A flag for if we should be adding the initial request parameters.
@property (assign, nonatomic) BOOL addInitialRequestParameters;
// A list of initial parameter sections to blacklist / skip.
@property (nullable, strong, nonatomic) NSSet<NSString *> *excludedInitialParameters;
// A flag for if we should always show alerts, even during a background load.
@property (assign) BOOL allowAlertsIfBackgroundRequest;
@ -88,7 +91,7 @@ typedef NS_ENUM(NSInteger, MFLoadStyle) {
@property (nonatomic) BOOL openSupportPanel;
// A list of page types that this operation should NOT be loaded in parallel with.
@property (nonatomic) NSArray<NSString *>* _Nullable successivePageTypes;
@property (nullable, strong, nonatomic) NSArray<NSString *> * successivePageTypes;
// Creates an object with the given page type and extra parameters. Adds the extra parameters to the standard request parameters. Will add any modules needed by the page type by default.
- (nullable instancetype)initWithPageType:(nonnull NSString *)pageType extraParameters:(nullable NSDictionary *)extraParameters;

View File

@ -125,6 +125,7 @@
copyObject.shouldNotGoToServerOnCacheFail = self.shouldNotGoToServerOnCacheFail;
copyObject.neverLoadFromCache = self.neverLoadFromCache;
copyObject.addInitialRequestParameters = self.addInitialRequestParameters;
copyObject.excludedInitialParameters = self.excludedInitialParameters;
copyObject.tabWasPressed = self.tabWasPressed;
copyObject.navigationController = self.navigationController;
copyObject.allowAlertsIfBackgroundRequest = self.allowAlertsIfBackgroundRequest;

View File

@ -28,6 +28,8 @@
// Gets inital parameters for request parameters.
- (nullable NSDictionary *)getInitialParameters;
// Gets inital parameters for request parameters excluding any items given a list of key names.
- (nullable NSDictionary *)getInitialParametersExcludingSections:(nullable NSSet<NSString *> *)excludeSections;
// Restarts the application session state. Can clear variables and pass a page type if needed.
- (void)restartSessionWithPageType:(nullable NSString *)pageType parameters:(nullable NSDictionary *)parameters clearAllVariables:(BOOL)clearAllVariables;

View File

@ -16,6 +16,10 @@
}
- (nullable NSDictionary *)getInitialParameters {
return [self getInitialParametersExcludingSections:nil];
}
- (nullable NSDictionary *)getInitialParametersExcludingSections:(nullable NSSet<NSString *> *)excludeSections {
return nil;
}

View File

@ -9,6 +9,7 @@
#import "MFHardCodedServerResponse.h"
#import "MVMCoreRequestParameters.h"
#import "NSDictionary+MFConvenience.h"
#import "MVMCoreLoggingHandler.h"
#if ENABLE_HARD_CODED_RESPONSE
@ -48,7 +49,7 @@
if(error) {
MVMCoreLog(@"Error creating JSON!");
} else {
//DLog(@"Canned json responses:%@", jsonObj);
//MVMCoreLog(@"Loaded canned json responses:\n%@", jsonObj);
}
}
}

View File

@ -1,678 +0,0 @@
{
"selectFeedbackSource": {
"ResponseInfo": {
"locale": "EN",
"server": "twswcmvmzad03.tdc.vzwcorp.com-srv01_nmobilefirst01",
"userMessage": "0",
"code": "00000",
"message": "0",
"mdn": "7323798012",
"buildNumber": "9633",
"type": "Success",
"requestId": "990372c1-19de-44b1-935f-6cedfbe36d41"
},
"Page": {
"pageType": "exploreZoneRtl",
"parentPageType": "visitUsRtl",
"tab": [
{
"actionType": "openPage",
"pageType": "exploreZoneRtl",
"extraParameters": {
"zoneId": "90",
"zoneName": "GetFitZone"
},
"itemName": "Get Fit",
"title": "Get Fit",
"appContext": "mobileFirstSS",
"modules": [
"GetFitZone"
]
},
{
"actionType": "openPage",
"pageType": "exploreZoneRtl",
"extraParameters": {
"zoneId": "91",
"zoneName": "AmplifyItZone"
},
"itemName": "Amplify It",
"title": "Amplify It",
"appContext": "mobileFirstSS",
"modules": [
"AmplifyItZone"
]
},
{
"actionType": "openPage",
"pageType": "exploreZoneRtl",
"extraParameters": {
"zoneId": "93",
"zoneName": "HomeServicesZone"
},
"itemName": "Home Service",
"title": "Home Service",
"appContext": "mobileFirstSS",
"modules": [
"HomeServicesZone"
]
}
],
"beaconids": [
{
"tabIndex": 0,
"minor": 23233,
"zoneId": 90,
"major": 7203,
"locationCode": "W078801",
"header": null
},
{
"tabIndex": 1,
"minor": 23424,
"zoneId": 91,
"major": 7203,
"locationCode": "W078801",
"header": null
},
{
"tabIndex": 2,
"minor": 24016,
"zoneId": 93,
"major": 7203,
"locationCode": "W078801",
"header": null
}
],
"title": "Title",
"message": "Please enable your Bluetooth to detect the zone you are exploring",
"currentTabIndex": 1,
"ButtonMap": {
"AsyncCallButton": {
"actionType": "openPage",
"pageType": "exploreZoneModAsyncRtl",
"tryToReplaceFirst": false,
"title": "Explore Zone Async Call",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"screenHeading": "Explore Products"
},
"ModuleMap": {
"AmplifyItZone": {
"mappoint": "AmplifyItZone",
"zoneId": "91",
"name": "Amplify It",
"ResponseInfo": {
"locale": "EN",
"code": "00000",
"message": "0",
"userMessage": "0",
"type": "Success"
},
"skuList": [
[
{
"deviceTitle": "Flip 2",
"stockInWarehouse": false,
"colorCode": "#003399",
"colorName": "Blue",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/jbl-flip-2-blue-FLIPIIBLUAM-imageset?$acc-lg$",
"preSelected": false,
"qty": 349991,
"skuId": "FLIPIIBLUAM",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "FLIPIIBLUAM",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "FLIPIIBLUAM"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "FLIPIIBLUAM"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc2040005",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "79.98"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "79.98"
}
},
"device": false,
"sorId": "sku870003",
"stockInStore": true
},
{
"deviceTitle": "Flip 2",
"stockInWarehouse": false,
"colorCode": "#000000",
"colorName": "Black",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/jbl-flip-2-black-FLIPIIBLKAM-imageset?$acc-lg$",
"preSelected": true,
"qty": 349880,
"skuId": "FLIPIIBLKAM",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "FLIPIIBLKAM",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "FLIPIIBLKAM"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "FLIPIIBLKAM"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc2040005",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "69.98"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "69.98"
}
},
"device": false,
"sorId": "sku870008",
"stockInStore": true
},
{
"deviceTitle": "Flip 2",
"stockInWarehouse": false,
"colorCode": "#ff0000",
"colorName": "Red",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/jbl-flip-2-red-FLIPIIREDAM-imageset?$acc-lg$",
"preSelected": false,
"qty": 349989,
"skuId": "FLIPIIREDAM",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "FLIPIIREDAM",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "FLIPIIREDAM"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "FLIPIIREDAM"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc2040005",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "79.98"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "79.98"
}
},
"device": false,
"sorId": "sku870005",
"stockInStore": true
},
{
"deviceTitle": "Flip 2",
"stockInWarehouse": false,
"colorCode": "#FFFF00",
"colorName": "Yellow",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/jbl-flip-2-yellow-FLIPIIYELAM-imageset?$acc-lg$",
"preSelected": false,
"qty": 350000,
"skuId": "FLIPIIYELAM",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "FLIPIIYELAM",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "FLIPIIYELAM"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "FLIPIIYELAM"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc2040005",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "79.98"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "79.98"
}
},
"device": false,
"sorId": "sku870006",
"stockInStore": true
},
{
"deviceTitle": "Flip 2",
"stockInWarehouse": false,
"colorCode": "#FFFFFF",
"colorName": "White",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/jbl-flip-2-white-FLIPIIWHTAM-imageset?$acc-lg$",
"preSelected": false,
"qty": 349999,
"skuId": "FLIPIIWHTAM",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "FLIPIIWHTAM",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "FLIPIIWHTAM"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "FLIPIIWHTAM"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc2040005",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "79.98"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "79.98"
}
},
"device": false,
"sorId": "sku870007",
"stockInStore": true
}
],
[
{
"deviceTitle": "QuietComfort 25 Acoustic Noise Cancelling headphones - Apple devices",
"stockInWarehouse": false,
"colorCode": "#FFFFFF",
"colorName": "White",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/bose-quietcomfort-25-acoustic-noise-cancelling-headphones-white-iset-715053-0020?$acc-lg$",
"preSelected": false,
"qty": 99986,
"skuId": "715053-0020",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "715053-0020",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "715053-0020"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "715053-0020"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc4120007",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "299.99"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "299.99"
}
},
"device": false,
"sorId": "sku1450111",
"stockInStore": true
},
{
"deviceTitle": "QuietComfort 25 Acoustic Noise Cancelling headphones - Apple devices",
"stockInWarehouse": false,
"colorCode": "#000000",
"colorName": "Black",
"isDevice": false,
"discountFlag": false,
"imageUrl": "https://mobile-edev.vzw.com/dev01/geofencing/instore/images/smart/s7/is/image/VerizonWireless/bose-quietcomfort-25-acoustic-noise-cancelling-headphones-black-iset-715053-0010?$acc-lg$",
"preSelected": true,
"qty": 99974,
"skuId": "715053-0010",
"ButtonMap": {
"PrimaryButton": {
"actionType": "openPage",
"pageType": "addToSharedCartRtl",
"extraParameters": {
"cmd": "add",
"cart": [
{
"sku": "715053-0010",
"qty": 1
}
]
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Add to cart",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"MoreColors": {
"actionType": "openPage",
"pageType": "exploreZoneMoreClrsRtl",
"extraParameters": {
"sku": "715053-0010"
},
"tryToReplaceFirst": false,
"title": "More colors",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
},
"SecondaryButton": {
"actionType": "openPage",
"pageType": "getPDPBySKURtl",
"extraParameters": {
"sku": "715053-0010"
},
"presentationStyle": "push",
"tryToReplaceFirst": false,
"title": "Learn more",
"selected": false,
"disableAction": false,
"appContext": "mobileFirstSS",
"isSelected": false
}
},
"inStorePurchase": false,
"fallBackImageUrl": "ICON_DFLT_ACCESSORY_IMG",
"accessoryId": "acc4120007",
"inventoryMsg": "In stock, take it with you today.",
"priceMap": {
"netPrice": {
"price": "299.99"
},
"discountPrice": {
"price": "0"
},
"originalPrice": {
"price": "299.99"
}
},
"device": false,
"sorId": "sku1450115",
"stockInStore": true
}
]
]
}
}
}
}