diff --git a/app/javascript/widget/helpers/campaignTimer.js b/app/javascript/widget/helpers/campaignTimer.js index 9e587345a..dd189c4de 100644 --- a/app/javascript/widget/helpers/campaignTimer.js +++ b/app/javascript/widget/helpers/campaignTimer.js @@ -4,12 +4,12 @@ class CampaignTimer { this.campaignTimers = []; } - initTimers = ({ campaigns }) => { + initTimers = ({ campaigns }, websiteToken) => { this.clearTimers(); campaigns.forEach(campaign => { const { timeOnPage, id: campaignId } = campaign; this.campaignTimers[campaignId] = setTimeout(() => { - store.dispatch('campaign/startCampaign', { campaignId }); + store.dispatch('campaign/startCampaign', { campaignId, websiteToken }); }, timeOnPage * 1000); }); }; diff --git a/app/javascript/widget/store/modules/campaign.js b/app/javascript/widget/store/modules/campaign.js index 8fe7f06e2..71dee6b67 100644 --- a/app/javascript/widget/store/modules/campaign.js +++ b/app/javascript/widget/store/modules/campaign.js @@ -14,14 +14,14 @@ const state = { activeCampaign: {}, }; -const resetCampaignTimers = (campaigns, currentURL) => { +const resetCampaignTimers = (campaigns, currentURL, websiteToken) => { const formattedCampaigns = formatCampaigns({ campaigns }); // Find all campaigns that matches the current URL const filteredCampaigns = filterCampaigns({ campaigns: formattedCampaigns, currentURL, }); - campaignTimer.initTimers({ campaigns: filteredCampaigns }); + campaignTimer.initTimers({ campaigns: filteredCampaigns }, websiteToken); }; export const getters = { @@ -37,7 +37,7 @@ export const actions = { commit('setCampaigns', campaigns); commit('setError', false); commit('setHasFetched', true); - resetCampaignTimers(campaigns, currentURL); + resetCampaignTimers(campaigns, currentURL, websiteToken); } catch (error) { commit('setError', true); commit('setHasFetched', true); @@ -50,15 +50,15 @@ export const actions = { if (!campaigns.length) { dispatch('fetchCampaigns', { websiteToken, currentURL }); } else { - resetCampaignTimers(campaigns, currentURL); + resetCampaignTimers(campaigns, currentURL, websiteToken); } }, - startCampaign: async ( - { getters: { getCampaigns: campaigns }, commit }, - { campaignId } - ) => { + startCampaign: async ({ commit }, { websiteToken, campaignId }) => { + const { data: campaigns } = await getCampaigns(websiteToken); const campaign = campaigns.find(item => item.id === campaignId); - commit('setActiveCampaign', campaign); + if (campaign) { + commit('setActiveCampaign', campaign); + } }, executeCampaign: async ({ commit }, { campaignId, websiteToken }) => { diff --git a/app/javascript/widget/store/modules/specs/campaign/actions.spec.js b/app/javascript/widget/store/modules/specs/campaign/actions.spec.js index ab5a74702..20f9b9aae 100644 --- a/app/javascript/widget/store/modules/specs/campaign/actions.spec.js +++ b/app/javascript/widget/store/modules/specs/campaign/actions.spec.js @@ -22,9 +22,14 @@ describe('#actions', () => { ['setError', false], ['setHasFetched', true], ]); - expect(campaignTimer.initTimers).toHaveBeenCalledWith({ - campaigns: [{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }], - }); + expect(campaignTimer.initTimers).toHaveBeenCalledWith( + { + campaigns: [ + { id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }, + ], + }, + 'XDsafmADasd' + ); }); it('sends correct actions if API is error', async () => { API.get.mockRejectedValue({ message: 'Authentication required' }); @@ -38,13 +43,11 @@ describe('#actions', () => { ]); }); }); - describe('#initCampaigns', () => { const actionParams = { websiteToken: 'XDsafmADasd', currentURL: 'https://chatwoot.com', }; - it('sends correct actions if campaigns are empty', async () => { await actions.initCampaigns( { dispatch, getters: { getCampaigns: [] } }, @@ -59,20 +62,26 @@ describe('#actions', () => { actionParams ); expect(dispatch.mock.calls).toEqual([]); - expect(campaignTimer.initTimers).toHaveBeenCalledWith({ - campaigns: [{ id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }], - }); + expect(campaignTimer.initTimers).toHaveBeenCalledWith( + { + campaigns: [ + { id: 11, timeOnPage: '20', url: 'https://chatwoot.com' }, + ], + }, + 'XDsafmADasd' + ); }); }); describe('#startCampaign', () => { it('reset campaign if campaign id is not present in the campaign list', async () => { + API.get.mockResolvedValue({ data: campaigns }); await actions.startCampaign( { dispatch, getters: { getCampaigns: campaigns }, commit }, { campaignId: 32 } ); - expect(commit.mock.calls).toEqual([['setActiveCampaign', undefined]]); }); it('start campaign if campaign id passed', async () => { + API.get.mockResolvedValue({ data: campaigns }); await actions.startCampaign( { dispatch, getters: { getCampaigns: campaigns }, commit }, { campaignId: 1 }