fix: Added "None" option in bulk actions assignment menu (#5585)

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
This commit is contained in:
Tejaswini Chile 2022-10-12 02:14:35 +05:30 committed by GitHub
parent 0b5a956e05
commit 7419e413f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 79 additions and 8 deletions

View file

@ -141,9 +141,19 @@ export default {
assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags', assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags',
}), }),
assignableAgents() { assignableAgents() {
return this.$store.getters['inboxAssignableAgents/getAssignableAgents']( return [
{
confirmed: true,
name: 'None',
id: null,
role: 'agent',
account_id: 0,
email: 'None',
},
...this.$store.getters['inboxAssignableAgents/getAssignableAgents'](
this.inboxId this.inboxId
); ),
];
}, },
}, },
mounted() { mounted() {

View file

@ -57,7 +57,7 @@
</li> </li>
</ul> </ul>
<div v-else class="agent-confirmation-container"> <div v-else class="agent-confirmation-container">
<p> <p v-if="selectedAgent.id">
{{ {{
$t('BULK_ACTION.ASSIGN_CONFIRMATION_LABEL', { $t('BULK_ACTION.ASSIGN_CONFIRMATION_LABEL', {
conversationCount, conversationCount,
@ -67,6 +67,15 @@
<strong> <strong>
{{ selectedAgent.name }} {{ selectedAgent.name }}
</strong> </strong>
<span>?</span>
</p>
<p v-else>
{{
$t('BULK_ACTION.UNASSIGN_CONFIRMATION_LABEL', {
conversationCount,
conversationLabel,
})
}}
</p> </p>
<div class="agent-confirmation-actions"> <div class="agent-confirmation-actions">
<woot-button <woot-button
@ -82,7 +91,7 @@
:is-loading="uiFlags.isUpdating" :is-loading="uiFlags.isUpdating"
@click="submit" @click="submit"
> >
{{ $t('BULK_ACTION.ASSIGN_LABEL') }} {{ $t('BULK_ACTION.YES') }}
</woot-button> </woot-button>
</div> </div>
</div> </div>
@ -131,7 +140,17 @@ export default {
agent.name.toLowerCase().includes(this.query.toLowerCase()) agent.name.toLowerCase().includes(this.query.toLowerCase())
); );
} }
return this.assignableAgents; return [
{
confirmed: true,
name: 'None',
id: null,
role: 'agent',
account_id: 0,
email: 'None',
},
...this.assignableAgents,
];
}, },
assignableAgents() { assignableAgents() {
return this.$store.getters['inboxAssignableAgents/getAssignableAgents']( return this.$store.getters['inboxAssignableAgents/getAssignableAgents'](

View file

@ -2,9 +2,11 @@
"BULK_ACTION": { "BULK_ACTION": {
"CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected",
"AGENT_SELECT_LABEL": "Select Agent", "AGENT_SELECT_LABEL": "Select Agent",
"ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign %{conversationCount} %{conversationLabel} to",
"UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign %{conversationCount} %{conversationLabel}?",
"GO_BACK_LABEL": "Go back", "GO_BACK_LABEL": "Go back",
"ASSIGN_LABEL": "Assign", "ASSIGN_LABEL": "Assign",
"YES": "Yes",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully", "ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again", "ASSIGN_FAILED": "Failed to assign conversations, please try again",

View file

@ -36,7 +36,7 @@ class BulkActionsJob < ApplicationJob
def available_params(params) def available_params(params)
return unless params[:fields] return unless params[:fields]
params[:fields].delete_if { |_k, v| v.nil? } params[:fields].delete_if { |key, value| value.nil? && key == 'status' }
end end
def bulk_add_labels(conversation) def bulk_add_labels(conversation)

View file

@ -75,6 +75,46 @@ RSpec.describe 'Api::V1::Accounts::BulkActionsController', type: :request do
expect(Conversation.first.status).to eq('open') expect(Conversation.first.status).to eq('open')
end end
it 'Bulk remove assignee id from conversations' do
Conversation.first.update(assignee_id: agent_1.id)
Conversation.second.update(assignee_id: agent_2.id)
params = { type: 'Conversation', fields: { assignee_id: nil }, ids: Conversation.first(3).pluck(:display_id) }
expect(Conversation.first.status).to eq('open')
expect(Conversation.first.assignee_id).to eq(agent_1.id)
expect(Conversation.second.assignee_id).to eq(agent_2.id)
perform_enqueued_jobs do
post "/api/v1/accounts/#{account.id}/bulk_actions",
headers: agent.create_new_auth_token,
params: params
expect(response).to have_http_status(:success)
end
expect(Conversation.first.assignee_id).to be_nil
expect(Conversation.second.assignee_id).to be_nil
expect(Conversation.first.status).to eq('open')
end
it 'Do not bulk update status to nil' do
Conversation.first.update(assignee_id: agent_1.id)
Conversation.second.update(assignee_id: agent_2.id)
params = { type: 'Conversation', fields: { status: nil }, ids: Conversation.first(3).pluck(:display_id) }
expect(Conversation.first.status).to eq('open')
perform_enqueued_jobs do
post "/api/v1/accounts/#{account.id}/bulk_actions",
headers: agent.create_new_auth_token,
params: params
expect(response).to have_http_status(:success)
end
expect(Conversation.first.status).to eq('open')
end
it 'Bulk update conversation status and assignee id' do it 'Bulk update conversation status and assignee id' do
params = { type: 'Conversation', fields: { assignee_id: agent_1.id, status: 'snoozed' }, ids: Conversation.first(3).pluck(:display_id) } params = { type: 'Conversation', fields: { assignee_id: agent_1.id, status: 'snoozed' }, ids: Conversation.first(3).pluck(:display_id) }