Skip to content

Commit

Permalink
LYNX-718: Sidekick Personalisation plugin - Catalog Rules, Cart Rules…
Browse files Browse the repository at this point in the history
… and Customer Groups (#287)
  • Loading branch information
bl4de authored Feb 4, 2025
1 parent 260cfa1 commit 0338293
Show file tree
Hide file tree
Showing 14 changed files with 267 additions and 390 deletions.
216 changes: 0 additions & 216 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions tools/segments/dist/index.76406fbe.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

10 changes: 0 additions & 10 deletions tools/segments/dist/index.e22faa19.js

This file was deleted.

2 changes: 1 addition & 1 deletion tools/segments/dist/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><link rel="stylesheet" href="index.6bf80747.css"><meta charset="utf-8"><title>Customer Segments Picker</title><link rel="stylesheet" href="index.107f8a5c.css"></head><body> <div id="app"></div> <script type="module" src="index.e22faa19.js"></script> </body></html>
<!DOCTYPE html><html lang="en"><head><link rel="stylesheet" href="index.6bf80747.css"><meta charset="utf-8"><title>Customer Segments Picker</title><link rel="stylesheet" href="index.107f8a5c.css"></head><body> <div id="app"></div> <script type="module" src="index.76406fbe.js"></script> </body></html>
32 changes: 32 additions & 0 deletions tools/segments/src/api/cartrules.graphql.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/
import executeGraphQlQuery from './query.graphql';
import queryCache from './query.cache';

const query = `
query {
allCartRules {
name
}
}
`;

const getCartRules = async (environment) => {
if (!queryCache.cartRules.length > 0) {
try {
const rules = await executeGraphQlQuery(query, environment);
rules?.allCartRules?.forEach(rule => {
queryCache.cartRules.push({
'name': rule.name,
});
});
} catch (err) {
console.error('Could not retrieve cart rules', err);
}
}
return queryCache.cartRules;
}

export default getCartRules;
32 changes: 32 additions & 0 deletions tools/segments/src/api/catalogrules.graphql.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/
import executeGraphQlQuery from './query.graphql';
import queryCache from './query.cache';

const query = `
query {
allCatalogRules {
name
}
}
`;

const getCatalogRules = async (environment) => {
if (!queryCache.catalogRules.length > 0) {
try {
const rules = await executeGraphQlQuery(query, environment);
rules?.allCatalogRules?.forEach(rule => {
queryCache.catalogRules.push({
'name': rule.name,
});
});
} catch (err) {
console.error('Could not retrieve catalog rules', err);
}
}
return queryCache.catalogRules;
}

export default getCatalogRules;
32 changes: 32 additions & 0 deletions tools/segments/src/api/customergroups.graphql.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/
import executeGraphQlQuery from './query.graphql';
import queryCache from './query.cache';

const query = `
query {
allCustomerGroups {
name
}
}
`;

const getCustomerGroups = async (environment) => {
if (!queryCache.customerGroups.length > 0) {
try {
const groups = await executeGraphQlQuery(query, environment);
groups?.allCustomerGroups?.forEach(group => {
queryCache.customerGroups.push({
'name': group.name,
});
});
} catch (err) {
console.error('Could not retrieve customer groups', err);
}
}
return queryCache.customerGroups;
}

export default getCustomerGroups;
22 changes: 22 additions & 0 deletions tools/segments/src/api/query.cache.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/

/**
* To avoid executing requests every time the Personalisation category is selected,
* the result is cached.
*
* In order to clear the cache (eg. when new rule or segment was added to the backend), there is
* 'Refresh' button added to the plugin.
* Also, cache is cleared every time when the environment
* is changed as data comes from different endpoint.
*/
const queryCache = {
catalogRules: [],
cartRules: [],
customerSegments: [],
customerGroups: [],
}

export default queryCache;
21 changes: 21 additions & 0 deletions tools/segments/src/api/query.graphql.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* Copyright 2025 Adobe
* All Rights Reserved.
*/
import { getConfigValue } from '../../../../scripts/configs';
import { fetchGraphQl, setEndpoint } from '@dropins/tools/fetch-graphql.js';

async function executeGraphQlQuery(query, environment) {
try {
setEndpoint(new URL(await getConfigValue('commerce-core-endpoint', environment)).href);
const response = await fetchGraphQl(query, {
method: 'GET'
});

return response.data ? response.data : [];
} catch (err) {
console.error('Could not execute GraphQl query to ', environment);
}
}

export default executeGraphQlQuery;
Loading

0 comments on commit 0338293

Please sign in to comment.