Chatwoot/app/javascript/dashboard/store/modules/conversations/helpers.js
Nithin David Thomas 85b52a1d3f
feat: Add a view for unattended conversations (#5890)
Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
2022-11-29 08:18:00 -08:00

58 lines
1.8 KiB
JavaScript

export const findPendingMessageIndex = (chat, message) => {
const { echo_id: tempMessageId } = message;
return chat.messages.findIndex(
m => m.id === message.id || m.id === tempMessageId
);
};
export const filterByStatus = (chatStatus, filterStatus) =>
filterStatus === 'all' ? true : chatStatus === filterStatus;
export const filterByInbox = (shouldFilter, inboxId, chatInboxId) => {
const isOnInbox = Number(inboxId) === chatInboxId;
return inboxId ? isOnInbox && shouldFilter : shouldFilter;
};
export const filterByTeam = (shouldFilter, teamId, chatTeamId) => {
const isOnTeam = Number(teamId) === chatTeamId;
return teamId ? isOnTeam && shouldFilter : shouldFilter;
};
export const filterByLabel = (shouldFilter, labels, chatLabels) => {
const isOnLabel = labels.every(label => chatLabels.includes(label));
return labels.length ? isOnLabel && shouldFilter : shouldFilter;
};
export const filterByUnattended = (
shouldFilter,
conversationType,
firstReplyOn
) => {
return conversationType === 'unattended'
? !firstReplyOn && shouldFilter
: shouldFilter;
};
export const applyPageFilters = (conversation, filters) => {
const { inboxId, status, labels = [], teamId, conversationType } = filters;
const {
status: chatStatus,
inbox_id: chatInboxId,
labels: chatLabels = [],
meta = {},
first_reply_created_at: firstReplyOn,
} = conversation;
const team = meta.team || {};
const { id: chatTeamId } = team;
let shouldFilter = filterByStatus(chatStatus, status);
shouldFilter = filterByInbox(shouldFilter, inboxId, chatInboxId);
shouldFilter = filterByTeam(shouldFilter, teamId, chatTeamId);
shouldFilter = filterByLabel(shouldFilter, labels, chatLabels);
shouldFilter = filterByUnattended(
shouldFilter,
conversationType,
firstReplyOn
);
return shouldFilter;
};