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:
parent
0b5a956e05
commit
7419e413f4
5 changed files with 79 additions and 8 deletions
|
@ -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() {
|
||||||
|
|
|
@ -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'](
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue