diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
index 67cd10a5a..397928e75 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
@@ -33,13 +33,16 @@
{{ currentContact.name }}
@@ -131,6 +134,7 @@ import ConversationContextMenu from './contextMenu/Index.vue';
import alertMixin from 'shared/mixins/alertMixin';
import TimeAgo from 'dashboard/components/ui/TimeAgo';
import CardLabels from './conversationCardComponents/CardLabels.vue';
+import PriorityMark from './PriorityMark.vue';
const ATTACHMENT_ICONS = {
image: 'image',
audio: 'headphones-sound-wave',
@@ -147,6 +151,7 @@ export default {
Thumbnail,
ConversationContextMenu,
TimeAgo,
+ PriorityMark,
},
mixins: [
@@ -429,6 +434,11 @@ export default {
padding: var(--space-micro) 0 var(--space-micro) 0;
}
+ .conversation-metadata-attributes {
+ display: flex;
+ gap: var(--space-small);
+ }
+
.assignee-label {
display: inline-flex;
margin-left: var(--space-small);
diff --git a/app/javascript/dashboard/components/widgets/conversation/PriorityMark.vue b/app/javascript/dashboard/components/widgets/conversation/PriorityMark.vue
new file mode 100644
index 000000000..7d0105b9d
--- /dev/null
+++ b/app/javascript/dashboard/components/widgets/conversation/PriorityMark.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json
index 597799c15..78b7e660c 100644
--- a/app/javascript/dashboard/i18n/locale/en/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/en/conversation.json
@@ -66,6 +66,23 @@
"NEXT_WEEK": "Next week"
}
},
+ "PRIORITY": {
+ "TITLE": "Priority",
+ "OPTIONS": {
+ "NONE": "None",
+ "URGENT": "Urgent",
+ "HIGH": "High",
+ "MEDIUM": "Medium",
+ "LOW": "Low"
+ },
+ "CHANGE_PRIORITY": {
+ "SELECT_PLACEHOLDER": "None",
+ "INPUT_PLACEHOLDER": "Select priority",
+ "NO_RESULTS": "No results found",
+ "SUCCESSFUL": "Changed priority of conversation id %{conversationId} to %{priority}",
+ "FAILED": "Couldn't change priority. Please try again."
+ }
+ },
"CARD_CONTEXT_MENU": {
"PENDING": "Mark as pending",
"RESOLVED": "Mark as resolved",
diff --git a/app/javascript/dashboard/routes/dashboard/conversation/ConversationAction.vue b/app/javascript/dashboard/routes/dashboard/conversation/ConversationAction.vue
index d71a397c5..c55ebed6a 100644
--- a/app/javascript/dashboard/routes/dashboard/conversation/ConversationAction.vue
+++ b/app/javascript/dashboard/routes/dashboard/conversation/ConversationAction.vue
@@ -45,11 +45,32 @@
$t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.NO_RESULTS.TEAM')
"
:input-placeholder="
- $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.PLACEHOLDER.TEAM')
+ $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.PLACEHOLDER.INPUT_PLACEHOLDER')
"
@click="onClickAssignTeam"
/>
+
+
+
+
opt.id === this.currentChat.priority
+ );
+
+ return selectedOption || this.priorityOptions[0];
+ },
+ set(priorityItem) {
+ const conversationId = this.currentChat.id;
+ const priority = priorityItem ? priorityItem.id : null;
+ this.$store.dispatch('setCurrentChatPriority', {
+ priority,
+ conversationId,
+ });
+ this.$store
+ .dispatch('assignPriority', { conversationId, priority })
+ .then(() => {
+ this.showAlert(
+ this.$t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.SUCCESSFUL', {
+ priority: priorityItem.name,
+ conversationId,
+ })
+ );
+ });
+ },
+ },
showSelfAssign() {
if (!this.assignedAgent) {
return true;
@@ -170,6 +250,14 @@ export default {
this.assignedTeam = selectedItemTeam;
}
},
+
+ onClickAssignPriority(selectedPriorityItem) {
+ const isSamePriority =
+ this.assignedPriority &&
+ this.assignedPriority.id === selectedPriorityItem.id;
+
+ this.assignedPriority = isSamePriority ? null : selectedPriorityItem;
+ },
},
};
diff --git a/app/javascript/dashboard/store/modules/conversations/actions.js b/app/javascript/dashboard/store/modules/conversations/actions.js
index c2715a093..c801e6162 100644
--- a/app/javascript/dashboard/store/modules/conversations/actions.js
+++ b/app/javascript/dashboard/store/modules/conversations/actions.js
@@ -403,6 +403,27 @@ const actions = {
clearConversationFilters({ commit }) {
commit(types.CLEAR_CONVERSATION_FILTERS);
},
+
+ assignPriority: async ({ dispatch }, { conversationId, priority }) => {
+ try {
+ await ConversationApi.togglePriority({
+ conversationId,
+ priority,
+ });
+
+ dispatch('setCurrentChatPriority', {
+ priority,
+ conversationId,
+ });
+ } catch (error) {
+ // Handle error
+ }
+ },
+
+ setCurrentChatPriority({ commit }, { priority, conversationId }) {
+ commit(types.ASSIGN_PRIORITY, { priority, conversationId });
+ },
+
...messageReadActions,
...messageTranslateActions,
};
diff --git a/app/javascript/dashboard/store/modules/conversations/index.js b/app/javascript/dashboard/store/modules/conversations/index.js
index 6ba2fb2b9..8e68071ef 100644
--- a/app/javascript/dashboard/store/modules/conversations/index.js
+++ b/app/javascript/dashboard/store/modules/conversations/index.js
@@ -77,6 +77,11 @@ export const mutations = {
Vue.set(chat.meta, 'team', team);
},
+ [types.ASSIGN_PRIORITY](_state, { priority, conversationId }) {
+ const [chat] = _state.allConversations.filter(c => c.id === conversationId);
+ Vue.set(chat, 'priority', priority);
+ },
+
[types.UPDATE_CONVERSATION_CUSTOM_ATTRIBUTES](_state, custom_attributes) {
const [chat] = getSelectedChatConversation(_state);
Vue.set(chat, 'custom_attributes', custom_attributes);
diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js
index c7f4087c5..bb9d8221f 100644
--- a/app/javascript/dashboard/store/mutation-types.js
+++ b/app/javascript/dashboard/store/mutation-types.js
@@ -35,6 +35,7 @@ export default {
UNMUTE_CONVERSATION: 'UNMUTE_CONVERSATION',
ASSIGN_AGENT: 'ASSIGN_AGENT',
ASSIGN_TEAM: 'ASSIGN_TEAM',
+ ASSIGN_PRIORITY: 'ASSIGN_PRIORITY',
SET_CHAT_META: 'SET_CHAT_META',
ADD_MESSAGE: 'ADD_MESSAGE',
DELETE_MESSAGE: 'DELETE_MESSAGE',
diff --git a/app/views/api/v1/conversations/partials/_conversation.json.jbuilder b/app/views/api/v1/conversations/partials/_conversation.json.jbuilder
index 1f3bca044..15cae0b07 100644
--- a/app/views/api/v1/conversations/partials/_conversation.json.jbuilder
+++ b/app/views/api/v1/conversations/partials/_conversation.json.jbuilder
@@ -42,3 +42,4 @@ json.timestamp conversation.last_activity_at.to_i
json.first_reply_created_at conversation.first_reply_created_at.to_i
json.unread_count conversation.unread_incoming_messages.count
json.last_non_activity_message conversation.messages.non_activity_messages.first.try(:push_event_data)
+json.priority conversation.priority
diff --git a/public/assets/images/dashboard/priority/high.svg b/public/assets/images/dashboard/priority/high.svg
new file mode 100644
index 000000000..9196db1b7
--- /dev/null
+++ b/public/assets/images/dashboard/priority/high.svg
@@ -0,0 +1,6 @@
+
diff --git a/public/assets/images/dashboard/priority/low.svg b/public/assets/images/dashboard/priority/low.svg
new file mode 100644
index 000000000..5b6d70a69
--- /dev/null
+++ b/public/assets/images/dashboard/priority/low.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/images/dashboard/priority/medium.svg b/public/assets/images/dashboard/priority/medium.svg
new file mode 100644
index 000000000..ffb17d44c
--- /dev/null
+++ b/public/assets/images/dashboard/priority/medium.svg
@@ -0,0 +1,5 @@
+
diff --git a/public/assets/images/dashboard/priority/none.svg b/public/assets/images/dashboard/priority/none.svg
new file mode 100644
index 000000000..e215fda39
--- /dev/null
+++ b/public/assets/images/dashboard/priority/none.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/images/dashboard/priority/urgent.svg b/public/assets/images/dashboard/priority/urgent.svg
new file mode 100644
index 000000000..fc4f16b50
--- /dev/null
+++ b/public/assets/images/dashboard/priority/urgent.svg
@@ -0,0 +1,9 @@
+