Skip to content

Commit a688245

Browse files
authored
Merge pull request #122 from medyo/develop
change jspath to jsonpath
2 parents 14aaeb0 + 38a3dba commit a688245

4 files changed

Lines changed: 65 additions & 18 deletions

File tree

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"country-emoji": "^1.5.4",
1717
"dompurify": "^2.2.7",
1818
"eslint-plugin-react": "^7.28.0",
19-
"jspath": "^0.4.0",
19+
"jsonpath": "^1.1.1",
2020
"localforage": "^1.9.0",
2121
"normalize.css": "^8.0.1",
2222
"prop-types": "^15.0.0-0",
@@ -74,6 +74,7 @@
7474
"devDependencies": {
7575
"@types/chrome": "^0.0.198",
7676
"@types/jest": "^29.1.2",
77+
"@types/jsonpath": "^0.2.0",
7778
"@types/node": "^18.11.0",
7879
"@types/react": "^18.0.21",
7980
"@types/react-dom": "^18.0.6",

src/features/MarketingBanner/components/MarketingBanner.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import DOMPurify from 'dompurify'
22
import { useMarketingConfigStore } from '../stores/marketingBanner'
3-
import JSPath from 'jspath'
43
import { useUserPreferences } from 'src/stores/preferences'
54
import { getAppVersion } from 'src/utils/Os'
65
import { isWebOrExtensionVersion, isProduction, getBrowserName } from 'src/utils/Environment'
@@ -14,6 +13,7 @@ import {
1413
} from 'src/lib/analytics'
1514
import { diffBetweenTwoDatesInDays } from 'src/utils/DateUtils'
1615
import { isMobile } from 'react-device-detect'
16+
import jsonPath from "jsonpath";
1717

1818
export const MarketingBanner = () => {
1919
const { setCampaignClosed, closedCampaigns } = useMarketingConfigStore()
@@ -41,7 +41,7 @@ export const MarketingBanner = () => {
4141
}, [userSelectedTags, firstSeenDate, cards])
4242

4343
useEffect(() => {
44-
if (marketingConfig) {
44+
if (marketingConfig && marketingConfig.version == 1) {
4545
const availableCampaigns: Campaign[] = getAvailableCampaigns(marketingConfig)
4646
setAvailableCampaigns(availableCampaigns)
4747
}
@@ -60,23 +60,30 @@ export const MarketingBanner = () => {
6060
}
6161

6262
const getAvailableCampaigns = (config: MarketingConfig) => {
63+
6364
const campaignsWithUserAttr = config.campaigns.map((camp) => {
64-
return { ...camp, userAtttributes: userAtttributes }
65+
return { ...camp, attrs: userAtttributes }
6566
})
6667

6768
const lastVisibleAdDate = Math.max(...closedCampaigns.map((camp) => camp.date))
6869
if (lastVisibleAdDate > Date.now() - config.campaigns_interval) {
6970
return []
7071
}
7172

72-
const closedCampaignsSet = new Set(closedCampaigns.map((closedCamp) => closedCamp.id))
73-
const availableCampaigns = campaignsWithUserAttr
74-
.filter((camp) => camp.enabled && !closedCampaignsSet.has(camp.id))
75-
.flatMap((camp) => JSPath.apply(camp.condition, camp))
76-
.sort((a, b) => (a.priority || 0) - (b.priority || 0))
77-
.reverse()
78-
79-
return availableCampaigns
73+
try {
74+
const closedCampaignsSet = new Set(closedCampaigns.map((closedCamp) => closedCamp.id))
75+
const availableCampaigns = campaignsWithUserAttr
76+
.filter((camp) => camp.enabled && !closedCampaignsSet.has(camp.id))
77+
.flatMap((camp) => jsonPath.query([camp], camp.condition) as Campaign[])
78+
.sort((a, b) => (a.priority || 0) - (b.priority || 0))
79+
.reverse()
80+
81+
return availableCampaigns
82+
} catch(e) {
83+
console.log("getAvailableCampaigns", e)
84+
return []
85+
}
86+
8087
}
8188

8289
if (!marketingConfig.enabled) {

src/features/MarketingBanner/types/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export type MarketingConfig = {
22
enabled: boolean;
33
campaigns_interval: number;
4+
version: number;
45
campaigns: Campaign[]
56
}
67

@@ -15,5 +16,5 @@ export type Campaign = {
1516
}
1617

1718
type UserAttribute = {
18-
[key: string]: string | string[];
19+
[key: string]: string | number | string[];
1920
}

yarn.lock

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2199,6 +2199,11 @@
21992199
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
22002200
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
22012201

2202+
"@types/jsonpath@^0.2.0":
2203+
version "0.2.0"
2204+
resolved "https://registry.yarnpkg.com/@types/jsonpath/-/jsonpath-0.2.0.tgz#13c62db22a34d9c411364fac79fd374d63445aa1"
2205+
integrity sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==
2206+
22022207
"@types/jspath@^0.4.0":
22032208
version "0.4.0"
22042209
resolved "https://registry.yarnpkg.com/@types/jspath/-/jspath-0.4.0.tgz#de372bc15e59e1f6a1639fd918fa1f059b6783fe"
@@ -5348,6 +5353,18 @@ escape-string-regexp@^4.0.0:
53485353
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
53495354
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
53505355

5356+
escodegen@^1.8.1:
5357+
version "1.14.3"
5358+
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
5359+
integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
5360+
dependencies:
5361+
esprima "^4.0.1"
5362+
estraverse "^4.2.0"
5363+
esutils "^2.0.2"
5364+
optionator "^0.8.1"
5365+
optionalDependencies:
5366+
source-map "~0.6.1"
5367+
53515368
escodegen@^2.0.0:
53525369
version "2.0.0"
53535370
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -5671,6 +5688,11 @@ espree@^7.3.0, espree@^7.3.1:
56715688
acorn-jsx "^5.3.1"
56725689
eslint-visitor-keys "^1.3.0"
56735690

5691+
esprima@1.2.2:
5692+
version "1.2.2"
5693+
resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b"
5694+
integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==
5695+
56745696
esprima@^4.0.0, esprima@^4.0.1:
56755697
version "4.0.1"
56765698
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -5690,7 +5712,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0:
56905712
dependencies:
56915713
estraverse "^5.2.0"
56925714

5693-
estraverse@^4.1.1:
5715+
estraverse@^4.1.1, estraverse@^4.2.0:
56945716
version "4.3.0"
56955717
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
56965718
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -7965,10 +7987,14 @@ jsonfile@^6.0.1:
79657987
optionalDependencies:
79667988
graceful-fs "^4.1.6"
79677989

7968-
jspath@^0.4.0:
7969-
version "0.4.0"
7970-
resolved "https://registry.yarnpkg.com/jspath/-/jspath-0.4.0.tgz#2f5fd1808ff2249a88a3c45e642288a226f85e1d"
7971-
integrity sha512-2/R8wkot8NCXrppBT/onp+4mcAUAZqtPxsW6aSJU3hrFAVqKqtFYcat2XJZ7inN4RtATUxfv0UQSYOmvJKiIGA==
7990+
jsonpath@^1.1.1:
7991+
version "1.1.1"
7992+
resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901"
7993+
integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==
7994+
dependencies:
7995+
esprima "1.2.2"
7996+
static-eval "2.0.2"
7997+
underscore "1.12.1"
79727998

79737999
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2:
79748000
version "3.3.3"
@@ -11723,6 +11749,13 @@ stackframe@^1.3.4:
1172311749
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
1172411750
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
1172511751

11752+
static-eval@2.0.2:
11753+
version "2.0.2"
11754+
resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42"
11755+
integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==
11756+
dependencies:
11757+
escodegen "^1.8.1"
11758+
1172611759
static-extend@^0.1.1:
1172711760
version "0.1.2"
1172811761
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -12449,6 +12482,11 @@ unbox-primitive@^1.0.2:
1244912482
has-symbols "^1.0.3"
1245012483
which-boxed-primitive "^1.0.2"
1245112484

12485+
underscore@1.12.1:
12486+
version "1.12.1"
12487+
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e"
12488+
integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==
12489+
1245212490
unicode-canonical-property-names-ecmascript@^2.0.0:
1245312491
version "2.0.0"
1245412492
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"

0 commit comments

Comments
 (0)