Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
5 changes: 5 additions & 0 deletions .changeset/every-ravens-look.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@adobe/alloy": patch
---

Passes inbox item after user subscribes to ruleset items
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
REDIRECT_ITEM,
RULESET_ITEM,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
} from "../../constants/schema.js";
import {
buildPageSurface,
Expand Down Expand Up @@ -102,6 +103,7 @@ export default ({
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
];

if (scopes.includes(PAGE_WIDE_SCOPE)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,17 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
OF ANY KIND, either express or implied. See the License for the specific language
governing permissions and limitations under the License.
*/
import { INBOX_ITEM } from "../../constants/schema.js";
import createEvaluableRulesetPayload from "./createEvaluableRulesetPayload.js";
import { getActivityId } from "./utils/index.js";

const hasInboxItem = (payload) =>
Array.isArray(payload.items) &&
payload.items.some((item) => item.schema === INBOX_ITEM);

export default ({ eventRegistry }) => {
const payloadsBasedOnActivityId = {};
const passthroughPayloads = [];

const addPayload = (payload) => {
const activityId = getActivityId(payload);
Expand All @@ -28,6 +34,8 @@ export default ({ eventRegistry }) => {

if (evaluableRulesetPayload.isEvaluable) {
payloadsBasedOnActivityId[activityId] = evaluableRulesetPayload;
} else if (hasInboxItem(payload)) {
passthroughPayloads.push(payload);
}
};

Expand All @@ -36,9 +44,11 @@ export default ({ eventRegistry }) => {
payloadsBasedOnActivityId,
).sort(({ rank: rankA }, { rank: rankB }) => rankA - rankB);

return sortedPayloadsBasedOnActivityId
const evaluatedPayloads = sortedPayloadsBasedOnActivityId
.map((payload) => payload.evaluate(context))
.filter((payload) => payload.items.length > 0);

return [...evaluatedPayloads, ...passthroughPayloads];
};

const addPayloads = (personalizationPayloads) => {
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/constants/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const HTML_CONTENT_ITEM =
export const JSON_CONTENT_ITEM =
"https://ns.adobe.com/personalization/json-content-item";
export const RULESET_ITEM = "https://ns.adobe.com/personalization/ruleset-item";
export const INBOX_ITEM = "https://ns.adobe.com/personalization/inbox-item";
export const REDIRECT_ITEM =
"https://ns.adobe.com/personalization/redirect-item";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
REDIRECT_ITEM,
RULESET_ITEM,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
} from "../../../../../src/constants/schema.js";

describe("Personalization::createPersonalizationDetails", () => {
Expand Down Expand Up @@ -162,6 +163,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
DOM_ACTION,
],
decisionScopes: expectedDecisionScopes,
Expand Down Expand Up @@ -201,6 +203,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
DOM_ACTION,
],
decisionScopes: expectedDecisionScopes,
Expand Down Expand Up @@ -240,6 +243,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
DOM_ACTION,
],
decisionScopes: expectedDecisionScopes,
Expand Down Expand Up @@ -279,6 +283,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
],
decisionScopes: expectedDecisionScopes,
surfaces: [],
Expand Down Expand Up @@ -319,6 +324,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
],
decisionScopes: expectedDecisionScopes,
surfaces: ["web://test1.com/"],
Expand Down Expand Up @@ -360,6 +366,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
],
decisionScopes: expectedDecisionScopes,
surfaces: ["web://test1.com/"],
Expand Down Expand Up @@ -487,6 +494,7 @@ describe("Personalization::createPersonalizationDetails", () => {
RULESET_ITEM,
MESSAGE_IN_APP,
MESSAGE_CONTENT_CARD,
INBOX_ITEM,
DOM_ACTION,
],
decisionScopes: expectedDecisionScopes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down Expand Up @@ -172,6 +173,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ describe("PersonalizationComponent", () => {
"https://ns.adobe.com/personalization/ruleset-item",
"https://ns.adobe.com/personalization/message/in-app",
"https://ns.adobe.com/personalization/message/content-card",
"https://ns.adobe.com/personalization/inbox-item",
"https://ns.adobe.com/personalization/dom-action",
],
decisionScopes: ["__view__"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -444,27 +444,43 @@ describe("RulesEngine:createDecisionProvider", () => {
},
]);
});
it("ignores payloads that aren't json-ruleset type", () => {
decisionProvider.addPayload({
it("passes through payloads that contain inbox items but are not evaluable rulesets", () => {
const inboxPayload = {
id: "66e05490-5e91-45c4-8eee-339784032940",
scope: "mobileapp://com.app/trendingnow",
scopeDetails: {
decisionProvider: "AJO",
activity: { id: "99db8aff4-82af-460e-8524-73e1441afdfa#id" },
correlationID: "za380bc9-aea0-486e-85f4-5904cc53124d-0",
},
items: [
{
id: "569d1166-d3e0-4aea-b9a7-6de8ebdf3aec",
schema: "https://ns.adobe.com/personalization/inbox-item",
data: {
content: {
heading: { content: "Trending Now Inbox" },
layout: { orientation: "horizontal" },
capacity: 10,
},
},
},
],
};
decisionProvider.addPayload(inboxPayload);
expect(decisionProvider.evaluate()).toEqual([inboxPayload]);
});

it("does not pass through payloads that have items but no inbox items (e.g. TGT dom-action only)", () => {
const tgtPayload = {
id: "AT:eyJhY3Rpdml0eUlkIjoiMTQxMDY0IiwiZXhwZXJpZW5jZUlkIjoiMCJ9",
scope: "__view__",
scopeDetails: {
decisionProvider: "TGT",
activity: {
id: "141064",
},
experience: {
id: "0",
},
strategies: [
{
algorithmID: "0",
trafficType: "0",
},
],
characteristics: {
eventToken: "abc",
},
activity: { id: "141064" },
experience: { id: "0" },
strategies: [{ algorithmID: "0", trafficType: "0" }],
characteristics: { eventToken: "abc" },
correlationID: "141064:0:0:0",
},
items: [
Expand All @@ -480,7 +496,8 @@ describe("RulesEngine:createDecisionProvider", () => {
},
},
],
});
};
decisionProvider.addPayload(tgtPayload);
expect(decisionProvider.evaluate()).toEqual([]);
});
});
5 changes: 5 additions & 0 deletions sandboxes/browser/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import AlloyVersion from "./components/AlloyVersion";
import ConfigOverrides from "./ConfigOverrides";
import InAppMessages from "./components/InAppMessagesDemo/InAppMessages";
import ContentCards from "./components/ContentCardsDemo/ContentCards";
import MessageInbox from "./components/MessageInboxDemo/MessageInbox";
import PushNotifications from "./PushNotifications";
import ReferrerTest from "./ReferrerTest";
import Advertising from "./Advertising";
Expand Down Expand Up @@ -108,6 +109,9 @@ const BasicExample = () => {
<li>
<Link to="contentCards">Content Cards</Link>
</li>
<li>
<Link to="messageInbox">Message Inbox</Link>
</li>
<li>
<Link to="pushNotifications">Push Notifications</Link>
</li>
Expand Down Expand Up @@ -149,6 +153,7 @@ const BasicExample = () => {
<Route path="configOverrides" element={<ConfigOverrides />} />
<Route path="inAppMessages" element={<InAppMessages />} />
<Route path="contentCards" element={<ContentCards />} />
<Route path="messageInbox" element={<MessageInbox />} />
<Route path="pushNotifications" element={<PushNotifications />} />
<Route path="referrerTest" element={<ReferrerTest />} />
<Route path="concierge" element={<Concierge />} />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/* Card.css */
.pretty-card {
color: black;
border: 1px solid #ccc;
border-radius: 8px;
padding: 16px;
margin: 16px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
background-color: lightblue;
transition: transform 0.2s;
color: black;
border: 1px solid #ccc;
border-radius: 8px;
padding: 16px;
margin: 16px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
background-color: lightblue;
transition: transform 0.2s;
}

.pretty-card:hover {
transform: scale(1.05);
transform: scale(1.05);
}
Loading