chore: Sync pre-chat fields after custom attribute update (#4692)
This commit is contained in:
parent
6c6df8661b
commit
a8c6cd729b
4 changed files with 57 additions and 1 deletions
21
app/jobs/inboxes/update_widget_pre_chat_custom_fields_job.rb
Normal file
21
app/jobs/inboxes/update_widget_pre_chat_custom_fields_job.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
class Inboxes::UpdateWidgetPreChatCustomFieldsJob < ApplicationJob
|
||||||
|
queue_as :default
|
||||||
|
|
||||||
|
def perform(account, custom_attribute)
|
||||||
|
attribute_key = custom_attribute['attribute_key']
|
||||||
|
account.web_widgets.all.find_each do |web_widget|
|
||||||
|
pre_chat_fields = web_widget.pre_chat_form_options['pre_chat_fields']
|
||||||
|
pre_chat_fields.each_with_index do |pre_chat_field, index|
|
||||||
|
next unless pre_chat_field['name'] == attribute_key
|
||||||
|
|
||||||
|
web_widget.pre_chat_form_options['pre_chat_fields'][index] =
|
||||||
|
pre_chat_field.deep_merge({
|
||||||
|
'label' => custom_attribute['attribute_display_name'],
|
||||||
|
'placeholder' => custom_attribute['attribute_display_name'],
|
||||||
|
'values' => custom_attribute['attribute_values']
|
||||||
|
})
|
||||||
|
end
|
||||||
|
web_widget.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -34,6 +34,7 @@ class CustomAttributeDefinition < ApplicationRecord
|
||||||
enum attribute_display_type: { text: 0, number: 1, currency: 2, percent: 3, link: 4, date: 5, list: 6, checkbox: 7 }
|
enum attribute_display_type: { text: 0, number: 1, currency: 2, percent: 3, link: 4, date: 5, list: 6, checkbox: 7 }
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
after_update :update_widget_pre_chat_custom_fields
|
||||||
after_destroy :sync_widget_pre_chat_custom_fields
|
after_destroy :sync_widget_pre_chat_custom_fields
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -41,4 +42,8 @@ class CustomAttributeDefinition < ApplicationRecord
|
||||||
def sync_widget_pre_chat_custom_fields
|
def sync_widget_pre_chat_custom_fields
|
||||||
::Inboxes::SyncWidgetPreChatCustomFieldsJob.perform_now(account, attribute_key)
|
::Inboxes::SyncWidgetPreChatCustomFieldsJob.perform_now(account, attribute_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_widget_pre_chat_custom_fields
|
||||||
|
::Inboxes::UpdateWidgetPreChatCustomFieldsJob.perform_now(account, self)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,7 @@ RSpec.describe Inboxes::SyncWidgetPreChatCustomFieldsJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when called' do
|
context 'when called' do
|
||||||
it 'reopens snoozed conversations whose snooze until has passed' do
|
it 'sync pre chat fields if custom attribute deleted' do
|
||||||
described_class.perform_now(account, 'developer_id')
|
described_class.perform_now(account, 'developer_id')
|
||||||
expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [{
|
expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [{
|
||||||
'label' => 'Full Name',
|
'label' => 'Full Name',
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Inboxes::UpdateWidgetPreChatCustomFieldsJob, type: :job do
|
||||||
|
pre_chat_fields = [{
|
||||||
|
'label' => 'Developer Id',
|
||||||
|
'name' => 'developer_id'
|
||||||
|
}, {
|
||||||
|
'label' => 'Full Name',
|
||||||
|
'name' => 'full_name'
|
||||||
|
}]
|
||||||
|
pre_chat_message = 'Share your queries here.'
|
||||||
|
custom_attribute = {
|
||||||
|
'attribute_key' => 'developer_id',
|
||||||
|
'attribute_display_name' => 'Developer Number'
|
||||||
|
}
|
||||||
|
let!(:account) { create(:account) }
|
||||||
|
let!(:web_widget) do
|
||||||
|
create(:channel_widget, account: account, pre_chat_form_options: { pre_chat_message: pre_chat_message, pre_chat_fields: pre_chat_fields })
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when called' do
|
||||||
|
it 'sync pre chat fields if custom attribute updated' do
|
||||||
|
described_class.perform_now(account, custom_attribute)
|
||||||
|
expect(web_widget.reload.pre_chat_form_options['pre_chat_fields']).to eq [
|
||||||
|
{ 'label' => 'Developer Number', 'name' => 'developer_id', 'placeholder' => 'Developer Number',
|
||||||
|
'values' => nil }, { 'label' => 'Full Name', 'name' => 'full_name' }
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue