Skip to content

Commit

Permalink
MOB-9055: Resolve nested criteria match issue (#423)
Browse files Browse the repository at this point in the history
* MOB-9055: Resolve nested criteria match issue

* converted an array operator as opposed to a for-loop
  • Loading branch information
darshan-iterable committed Aug 5, 2024
1 parent 7c04dba commit c403521
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 7 deletions.
4 changes: 3 additions & 1 deletion src/anonymousUserTracking/complexCriteria.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,9 @@ describe('complexCriteria', () => {
{
eventName: 'button-clicked',
dataFields: {
'button-clicked.lastPageViewed': 'welcome page'
'button-clicked': {
lastPageViewed: 'welcome page'
}
},
eventType: 'customEvent'
},
Expand Down
28 changes: 28 additions & 0 deletions src/anonymousUserTracking/criteriaCompletionChecker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,9 +328,21 @@ class CriteriaCompletionChecker {
return true;
}
}

if (field.includes('.') && query.comparatorType !== 'IsSet') {
const valueFromObj = this.getValueFromNestedObject(eventData, field);
if (valueFromObj) {
return this.evaluateComparison(
query.comparatorType,
valueFromObj,
query.value ? query.value : ''
);
}
}
const eventKeyItems = filteredLocalDataKeys.filter(
(keyItem) => keyItem === field
);

if (eventKeyItems.length) {
return this.evaluateComparison(
query.comparatorType,
Expand All @@ -343,6 +355,22 @@ class CriteriaCompletionChecker {
return matchResult;
}

private getValueFromNestedObject(eventData: any, field: string): any {
const valueFromObj = this.getFieldValue(eventData, field);
if (typeof valueFromObj === 'object') {
return Object.keys(valueFromObj).map((key) =>
this.getValueFromNestedObject(valueFromObj, key)
);
} else {
return valueFromObj;
}
}

private getFieldValue(data: any, field: string): any {
const fields = field.split('.');
return fields.reduce((acc, field) => acc?.[field], data);
}

private doesItemMatchQueries(item: any, searchQueries: any[]): boolean {
let shouldReturn = false;
const filteredSearchQueries = searchQueries.filter((searchQuery) => {
Expand Down
8 changes: 5 additions & 3 deletions src/anonymousUserTracking/tests/complexCriteria.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ describe('complexCriteria', () => {
{
eventName: 'button-clicked',
dataFields: {
'button-clicked.lastPageViewed': 'welcome page'
'button-clicked': { lastPageViewed: 'welcome page' }
},
eventType: 'customEvent'
},
Expand Down Expand Up @@ -1309,8 +1309,10 @@ describe('complexCriteria', () => {
return JSON.stringify([
{
dataFields: {
'animal-found.type': 'cat',
'animal-found.count': 4
'animal-found': {
type: 'cat',
count: 4
}
},
eventType: 'customEvent'
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,13 @@ describe('CriteriaCompletionChecker', () => {
{
eventName: 'testEvent',
createdAt: 1708494757530,
dataFields: { 'browserVisit.website.domain': 'google.com' },
dataFields: {
browserVisit: {
website: {
domain: 'google.com'
}
}
},
createNewFields: true,
eventType: 'customEvent'
}
Expand Down Expand Up @@ -109,7 +115,7 @@ describe('CriteriaCompletionChecker', () => {
{
eventName: 'testEvent',
createdAt: 1708494757530,
dataFields: { 'browserVisit.website.domain': 'google.com' },
dataFields: { browserVisit: { website: { domain: 'google.com' } } },
createNewFields: true,
eventType: 'customEvent'
}
Expand Down Expand Up @@ -1008,7 +1014,7 @@ describe('CriteriaCompletionChecker', () => {
{
eventName: 'button-clicked',
dataFields: {
'button-clicked.animal': 'test page',
'button-clicked': { animal: 'test page' },
total: 3
},
createdAt: 1700071052507,
Expand Down

0 comments on commit c403521

Please sign in to comment.