diff --git a/cmd/chat.go b/cmd/chat.go index 5e0bd3cc..46160845 100644 --- a/cmd/chat.go +++ b/cmd/chat.go @@ -97,6 +97,7 @@ type handoffFormReq struct { type chatSettingsResponse struct { Campaigns *struct{} `json:"campaigns,omitempty"` HasCampaigns bool `json:"has_campaigns"` + CampaignDelaySeconds int `json:"campaign_delay_seconds"` livechat.Config // Hide server-side fields from the public widget response. TrustedDomains *struct{} `json:"trusted_domains,omitempty"` @@ -149,9 +150,10 @@ func handleGetChatSettings(r *fastglue.Request) error { } response := chatSettingsResponse{ - Config: config, - HasCampaigns: slices.ContainsFunc(config.Campaigns, func(c proactive.Campaign) bool { return c.Enabled }), - CustomAttributes: customAttributes, + Config: config, + HasCampaigns: slices.ContainsFunc(config.Campaigns, func(c proactive.Campaign) bool { return c.Enabled }), + CampaignDelaySeconds: earliestCampaignDelay(config.Campaigns), + CustomAttributes: customAttributes, } // Get business hours data if office hours feature is enabled. diff --git a/cmd/widget_campaign.go b/cmd/widget_campaign.go index 3dc435c3..3f4a1915 100644 --- a/cmd/widget_campaign.go +++ b/cmd/widget_campaign.go @@ -213,6 +213,19 @@ func campaignSender(app *App, id int) (umodels.User, error) { return app.user.GetAgent(id, "") } +func earliestCampaignDelay(campaigns []proactive.Campaign) int { + delay := 0 + for _, campaign := range campaigns { + if !campaign.Enabled { + continue + } + if delay == 0 || campaign.DelaySeconds < delay { + delay = campaign.DelaySeconds + } + } + return delay +} + func validCampaignKey(key string) bool { id, err := uuid.Parse(key) return err == nil && id != uuid.Nil diff --git a/frontend/apps/main/src/components/datatable/DataTable.vue b/frontend/apps/main/src/components/datatable/DataTable.vue index 5c7e8ee3..a251c603 100644 --- a/frontend/apps/main/src/components/datatable/DataTable.vue +++ b/frontend/apps/main/src/components/datatable/DataTable.vue @@ -1,13 +1,13 @@