Chatwoot/app/javascript/widget/helpers/campaignHelper.js

48 lines
1.2 KiB
JavaScript
Raw Normal View History

import { URLPattern } from 'urlpattern-polyfill';
export const isPatternMatchingWithURL = (urlPattern, url) => {
let updatedUrlPattern = urlPattern;
const locationObj = new URL(url);
if (updatedUrlPattern.endsWith('/')) {
updatedUrlPattern = updatedUrlPattern.slice(0, -1) + '*\\?*\\#*';
}
if (locationObj.pathname.endsWith('/')) {
locationObj.pathname = locationObj.pathname.slice(0, -1);
}
const pattern = new URLPattern(updatedUrlPattern);
return pattern.test(locationObj.toString());
};
// Format all campaigns
export const formatCampaigns = ({ campaigns }) => {
return campaigns.map(item => {
return {
id: item.id,
triggerOnlyDuringBusinessHours:
item.trigger_only_during_business_hours || false,
timeOnPage: item?.trigger_rules?.time_on_page,
url: item?.trigger_rules?.url,
};
});
};
// Filter all campaigns based on current URL and business availability time
export const filterCampaigns = ({
campaigns,
currentURL,
isInBusinessHours,
}) => {
return campaigns.filter(campaign => {
if (!isPatternMatchingWithURL(campaign.url, currentURL)) {
return false;
}
if (campaign.triggerOnlyDuringBusinessHours) {
return isInBusinessHours;
}
return true;
});
};