mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 13:07:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 | 
						|
  });
 | 
						|
};
 |