diff --git a/.rubocop.yml b/.rubocop.yml index d0724ef20..22e59629d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -8,15 +8,11 @@ Layout/LineLength: Max: 150 Metrics/ClassLength: - Max: 125 + Max: 175 Exclude: - - 'app/models/conversation.rb' - - 'app/models/contact.rb' - - 'app/mailers/conversation_reply_mailer.rb' - 'app/models/message.rb' - - 'app/builders/messages/facebook/message_builder.rb' - - 'app/controllers/api/v1/accounts/contacts_controller.rb' - - 'app/listeners/action_cable_listener.rb' + - 'app/models/conversation.rb' + RSpec/ExampleLength: Max: 25 Style/Documentation: diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 587e082ce..d75dc71b5 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -18,7 +18,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def index @contacts_count = resolved_contacts.count - @contacts = fetch_contacts_with_conversation_count(resolved_contacts) + @contacts = fetch_contacts(resolved_contacts) end def search @@ -29,7 +29,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController search: "%#{params[:q].strip}%" ) @contacts_count = contacts.count - @contacts = fetch_contacts_with_conversation_count(contacts) + @contacts = fetch_contacts(contacts) end def import @@ -63,7 +63,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController result = ::Contacts::FilterService.new(params.permit!, current_user).perform contacts = result[:contacts] @contacts_count = result[:count] - @contacts = fetch_contacts_with_conversation_count(contacts) + @contacts = fetch_contacts(contacts) end def contactable_inboxes @@ -125,17 +125,14 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController @current_page = params[:page] || 1 end - def fetch_contacts_with_conversation_count(contacts) - conversation_count_sub_query = 'SELECT COUNT(*) FROM "conversations" WHERE "conversations"."contact_id" = "contacts"."id"' - contacts_with_conversation_count = filtrate(contacts) - .select("contacts.*, (#{conversation_count_sub_query}) as conversations_count") - .group('contacts.id') - .includes([{ avatar_attachment: [:blob] }]) - .page(@current_page).per(RESULTS_PER_PAGE) + def fetch_contacts(contacts) + contacts_with_avatar = filtrate(contacts) + .includes([{ avatar_attachment: [:blob] }]) + .page(@current_page).per(RESULTS_PER_PAGE) - return contacts_with_conversation_count.includes([{ contact_inboxes: [:inbox] }]) if @include_contact_inboxes + return contacts_with_avatar.includes([{ contact_inboxes: [:inbox] }]) if @include_contact_inboxes - contacts_with_conversation_count + contacts_with_avatar end def build_contact_inbox diff --git a/app/controllers/concerns/ensure_current_account_helper.rb b/app/controllers/concerns/ensure_current_account_helper.rb index eb781dbfe..5d02e96c8 100644 --- a/app/controllers/concerns/ensure_current_account_helper.rb +++ b/app/controllers/concerns/ensure_current_account_helper.rb @@ -8,7 +8,7 @@ module EnsureCurrentAccountHelper def ensure_current_account account = Account.find(params[:account_id]) - ensure_account_is_active?(account) + render_unauthorized('Account is suspended') and return unless account.active? if current_user account_accessible_for_user?(account) @@ -27,8 +27,4 @@ module EnsureCurrentAccountHelper def account_accessible_for_bot?(account) render_unauthorized('You are not authorized to access this account') unless @resource.agent_bot_inboxes.find_by(account_id: account.id) end - - def ensure_account_is_active?(account) - render_unauthorized('Account is suspended') unless account.active? - end end diff --git a/app/javascript/dashboard/helper/automationHelper.js b/app/javascript/dashboard/helper/automationHelper.js index cb68cbd43..e9b1f886c 100644 --- a/app/javascript/dashboard/helper/automationHelper.js +++ b/app/javascript/dashboard/helper/automationHelper.js @@ -120,9 +120,18 @@ export const generateConditionOptions = (options, key = 'id') => { }); }; +// Add the "None" option to the agent list +export const agentList = agents => [ + { + id: 'nil', + name: 'None', + }, + ...(agents || []), +]; + export const getActionOptions = ({ agents, teams, labels, type }) => { const actionsMap = { - assign_agent: agents, + assign_agent: agentList(agents), assign_team: teams, send_email_to_team: teams, add_label: generateConditionOptions(labels, 'title'), diff --git a/app/javascript/dashboard/i18n/index.js b/app/javascript/dashboard/i18n/index.js index 919fcef11..d0e85b43a 100644 --- a/app/javascript/dashboard/i18n/index.js +++ b/app/javascript/dashboard/i18n/index.js @@ -26,6 +26,7 @@ import pt_BR from './locale/pt_BR'; import ro from './locale/ro'; import ru from './locale/ru'; import sk from './locale/sk'; +import sr from './locale/sr'; import sv from './locale/sv'; import ta from './locale/ta'; import th from './locale/th'; @@ -66,6 +67,7 @@ export default { ro, ru, sk, + sr, sv, ta, th, diff --git a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsTable.vue b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsTable.vue index d2b3c75ce..3c77653e9 100644 --- a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsTable.vue +++ b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsTable.vue @@ -1,6 +1,6 @@