Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 2 additions & 62 deletions apps/AEPSampleAppNewArchEnabled/app/OptimizeView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,14 @@ export default () => {

const updatePropositions = () => {
Optimize.updatePropositions(decisionScopes);
console.log('Updated Proposition for decisionScopes:', decisionScopes);
console.log('Updated Propositions');
};

const getPropositions = async () => {
const propositions: Map<string, Proposition> =
await Optimize.getPropositions(decisionScopes);
console.log(propositions);
if (propositions) {
console.log("get propositions", JSON.stringify(Object.fromEntries(propositions), null, 2));
setTextProposition(propositions.get(decisionScopeText.getName()));
setImageProposition(propositions.get(decisionScopeImage.getName()));
setHtmlProposition(propositions.get(decisionScopeHtml.getName()));
Expand All @@ -118,54 +118,6 @@ export default () => {
},
});

const multipleOffersDisplayed = async () => {
const propositionsMap: Map<string, Proposition> = await Optimize.getPropositions(decisionScopes);
const offerPairs: Array<{proposition: Proposition, offerId: string}> = [];

propositionsMap.forEach((proposition: Proposition) => {
if (proposition && proposition.items) {
proposition.items.forEach((offer) => {
offerPairs.push({
proposition: proposition,
offerId: offer.id
});
});
}
});

console.log('Extracted offer pairs:', offerPairs);

if (offerPairs.length > 0) {
Optimize.displayed(offerPairs);
console.log(`Called multipleOffersDisplayed with ${offerPairs.length} offers`);
} else {
console.log('No offers found to display');
}
};

const generateDisplayInteractionXdmForMultipleOffers = async () => {
const propositionsMap: Map<string, Proposition> = await Optimize.getPropositions(decisionScopes);
const offerPairs: Array<{proposition: Proposition, offerId: string}> = [];

propositionsMap.forEach((proposition: Proposition) => {
if (proposition && proposition.items) {
proposition.items.forEach((offer) => {
offerPairs.push({
proposition: proposition,
offerId: offer.id
});
});
}
});

const xdm = await Optimize.generateDisplayInteractionXdm(offerPairs);
if (xdm) {
console.log('Generated Display Interaction XDM for Multiple Offers:', JSON.stringify(xdm, null, 2));
} else {
console.log('Error in generating Display interaction XDM for multiple offers.');
}
};

const renderTargetOffer = () => {
if (targetProposition?.items) {
if (targetProposition.items[0].format === TARGET_OFFER_TYPE_JSON) {
Expand Down Expand Up @@ -386,18 +338,6 @@ export default () => {
onPress={clearCachedProposition}
/>
</View>
<View style={{margin: 5}}>
<Button
title="Multiple Offers Displayed"
onPress={multipleOffersDisplayed}
/>
</View>
<View style={{margin: 5}}>
<Button
title="Generate Display Interaction XDM for Multiple Offers"
onPress={generateDisplayInteractionXdmForMultipleOffers}
/>
</View>
<View style={{margin: 5}}>
<Button
title="Subscribe to Proposition Update"
Expand Down
62 changes: 0 additions & 62 deletions packages/optimize/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,68 +163,6 @@ const decisionScopes = [
Optimize.updatePropositions(decisionScopes, null, null);
```

### Batching multiple display propositions track events:

The Optimize SDK now provides enhanced support for batching multiple display propositions track events. The following APIs are available:

#### displayed

**Syntax**

```typescript
displayed(offerPairs: Array<{ proposition: Proposition; offerId: string }>)
```

**Example**

```typescript
const propositions: Map<string, Proposition> = await Optimize.getPropositions(decisionScopes);
const offerPairs: Array<{ proposition: Proposition; offerId: string }> = [];

propositions.forEach((proposition: Proposition) => {
if (proposition && proposition.items) {
proposition.items.forEach((offer) => {
offerPairs.push({
proposition,
offerId: offer.id,
});
});
}
});

Optimize.displayed(offerPairs);
```

#### generateDisplayInteractionXdm

**Syntax**

```typescript
generateDisplayInteractionXdm(offerPairs: Array<{ proposition: Proposition; offerId: string }>): Promise<Map<string, any>>
```

**Example**

```typescript
const propositions: Map<string, Proposition> = await Optimize.getPropositions(decisionScopes);
const offerPairs: Array<{ proposition: Proposition; offerId: string }> = [];

propositions.forEach((proposition: Proposition) => {
if (proposition && proposition.items) {
proposition.items.forEach((offer) => {
offerPairs.push({
proposition,
offerId: offer.id,
});
});
}
});

const xdmData = await Optimize.generateDisplayInteractionXdm(offerPairs);
// use xdmData as needed

```

---

## Public classes
Expand Down
46 changes: 0 additions & 46 deletions packages/optimize/__tests__/OptimizeTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,50 +174,4 @@ describe('Optimize', () => {
'eyJhY3Rpdml0eUlkIjoieGNvcmU6b2ZmZXItYWN0aXZpdHk6MTExMTExMTExMTExMTExMSIsInBsYWNlbWVudElkIjoieGNvcmU6b2ZmZXItcGxhY2VtZW50OjExMTExMTExMTExMTExMTEiLCJpdGVtQ291bnQiOjEwfQ=='
);
});

it('Test Optimize.displayed', async () => {
const spy = jest.spyOn(NativeModules.AEPOptimize, 'multipleOffersDisplayed');
const proposition = new Proposition(propositionJson as any);
const offer = proposition.items[0];
const offerPairs = [{
proposition,
offerId: offer.id
}];

// Clean the proposition as your implementation does
const entries = Object.entries(proposition).filter(
([_, value]) => typeof value !== 'function'
);
const cleanedProposition = Object.fromEntries(entries);
const cleanedPairs = [{
proposition: cleanedProposition,
offerId: offer.id
}];

await Optimize.displayed(offerPairs);
expect(spy).toHaveBeenCalledWith(cleanedPairs);
});

it('Test Optimize.generateDisplayInteractionXdm', async () => {
const spy = jest.spyOn(NativeModules.AEPOptimize, 'generateDisplayInteractionXdmForMultipleOffers');
const proposition = new Proposition(propositionJson as any);
const offer = proposition.items[0];
const offerPairs = [{
proposition,
offerId: offer.id
}];

// Clean the proposition as your implementation does
const entries = Object.entries(proposition).filter(
([_, value]) => typeof value !== 'function'
);
const cleanedProposition = Object.fromEntries(entries);
const cleanedPairs = [{
proposition: cleanedProposition,
offerId: offer.id
}];

await Optimize.generateDisplayInteractionXdm(offerPairs);
expect(spy).toHaveBeenCalledWith(cleanedPairs);
});
});

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import com.adobe.marketing.mobile.optimize.DecisionScope;
import com.adobe.marketing.mobile.optimize.Offer;
import com.adobe.marketing.mobile.optimize.OfferType;
import com.adobe.marketing.mobile.optimize.OfferUtils;
import com.adobe.marketing.mobile.optimize.Optimize;
import com.adobe.marketing.mobile.optimize.OptimizeProposition;
import com.facebook.react.bridge.Promise;
Expand All @@ -31,7 +30,6 @@
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -63,43 +61,6 @@ public void offerDisplayed(final String offerId, final ReadableMap propositionMa
}
}

@ReactMethod
public void multipleOffersDisplayed(final ReadableArray propositionOfferPairs) {
if (propositionOfferPairs == null || propositionOfferPairs.size() == 0) {
return;
}

List<Offer> nativeOffers = new ArrayList<>();

for (int i = 0; i < propositionOfferPairs.size(); i++) {
ReadableMap propositionOfferPairMap = propositionOfferPairs.getMap(i);
if (propositionOfferPairMap == null) {
continue;
}

ReadableMap propositionMap = propositionOfferPairMap.getMap(RCTAEPOptimizeConstants.PROPOSITION_KEY);
String offerId = propositionOfferPairMap.getString(RCTAEPOptimizeConstants.OFFER_ID_KEY);
if (propositionMap == null || offerId == null) {
continue;
}

Map<String, Object> propositionEventData = RCTAEPOptimizeUtil.convertReadableMapToMap(propositionMap);
OptimizeProposition proposition = OptimizeProposition.fromEventData(propositionEventData);
if (proposition != null) {
for (Offer offer : proposition.getOffers()) {
if (offer.getId().equalsIgnoreCase(offerId)) {
nativeOffers.add(offer);
break;
}
}
}
}

if (!nativeOffers.isEmpty()) {
OfferUtils.displayed(nativeOffers);
}
}

@ReactMethod
public void extensionVersion(final Promise promise) {
promise.resolve(Optimize.extensionVersion());
Expand Down Expand Up @@ -183,42 +144,6 @@ public void generateDisplayInteractionXdm(final String offerId, final ReadableMa
}
}

@ReactMethod
public void generateDisplayInteractionXdmForMultipleOffers(final ReadableArray propositionOfferPairs, final Promise promise) {
final List<Offer> nativeOffers = new ArrayList<>();

for (int i = 0; i < propositionOfferPairs.size(); i++) {
ReadableMap propositionOfferPairMap = propositionOfferPairs.getMap(i);
if (propositionOfferPairMap == null) {
continue;
}

ReadableMap propositionMap = propositionOfferPairMap.getMap(RCTAEPOptimizeConstants.PROPOSITION_KEY);
String offerId = propositionOfferPairMap.getString(RCTAEPOptimizeConstants.OFFER_ID_KEY);
if (propositionMap == null || offerId == null) {
continue;
}

Map<String, Object> propositionEventData = RCTAEPOptimizeUtil.convertReadableMapToMap(propositionMap);
OptimizeProposition proposition = OptimizeProposition.fromEventData(propositionEventData);

for (Offer offer : proposition.getOffers()) {
if (offer.getId().equalsIgnoreCase(offerId)) {
nativeOffers.add(offer);
break;
}
}
}

if (nativeOffers.size() > 0) {
final Map<String, Object> interactionXdm = OfferUtils.generateDisplayInteractionXdm(nativeOffers);
final WritableMap writableMap = RCTAEPOptimizeUtil.convertMapToWritableMap(interactionXdm);
promise.resolve(writableMap);
} else {
promise.reject("generateDisplayInteractionXdmForMultipleOffers", "Error in generating Display interaction XDM for multiple offers.");
}
}

@ReactMethod
public void generateTapInteractionXdm(final String offerId, final ReadableMap propositionMap, final Promise promise) {
final Map<String, Object> eventData = RCTAEPOptimizeUtil.convertReadableMapToMap(propositionMap);
Expand Down
Loading