mirror of
https://github.com/pierre42100/ComunicWeb
synced 2024-11-26 05:49:22 +00:00
Update unread conversations dropdown
This commit is contained in:
parent
98352c1c50
commit
f3c3e9420d
@ -319,16 +319,10 @@ const ConversationsInterface = {
|
||||
/**
|
||||
* Get the list of unread conversations
|
||||
*
|
||||
* @param {function} callback
|
||||
* @returns {Promise<UnreadConversation[]>}
|
||||
*/
|
||||
getUnreadConversations: function(callback){
|
||||
|
||||
//Perform a request on the API
|
||||
var apiURI = "conversations/get_list_unread";
|
||||
var params = {};
|
||||
|
||||
ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, callback);
|
||||
|
||||
getUnreadConversations: async function() {
|
||||
return await api("conversations/get_list_unread", null, true);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -99,67 +99,49 @@ ComunicWeb.components.conversations.unreadDropdown = {
|
||||
*
|
||||
* @param {HTMLElement} target The target to display the conversations
|
||||
*/
|
||||
refresh_list_conversations: function(target){
|
||||
refresh_list_conversations: async function(target) {
|
||||
|
||||
//Perform a request through the interface
|
||||
ComunicWeb.components.conversations.interface.getUnreadConversations(function(conversations){
|
||||
try {
|
||||
|
||||
//Check for errors
|
||||
if(conversations.error){
|
||||
//Display an error
|
||||
ComunicWeb.common.notificationSystem.showNotification(lang("conversations_dropdown_err_get_list"), "danger");
|
||||
return;
|
||||
}
|
||||
//Perform a request through the interface
|
||||
const list = await ConversationsInterface.getUnreadConversations();
|
||||
|
||||
//Get the list of users ID
|
||||
var usersID = [];
|
||||
let usersID = new Set();
|
||||
|
||||
//Process the list of conversations
|
||||
for (var index = 0; index < conversations.length; index++) {
|
||||
const entry = conversations[index];
|
||||
|
||||
var userID = entry.userID;
|
||||
if(!usersID.includes(userID))
|
||||
usersID.push(userID);
|
||||
for (let entry of list) {
|
||||
ConversationsUtils.getUsersIDForMessage(entry.message).forEach(id => usersID.add(id))
|
||||
}
|
||||
|
||||
//Get informations about the users
|
||||
ComunicWeb.user.userInfos.getMultipleUsersInfo(usersID, function(usersInfos){
|
||||
const users = await getUsers([...usersID]);
|
||||
|
||||
//Check for errors
|
||||
if(usersInfos.error){
|
||||
//Display an error
|
||||
ComunicWeb.common.notificationSystem.showNotification(lang("conversations_dropdown_err_get_user_info"), "danger");
|
||||
return;
|
||||
}
|
||||
|
||||
//Display the list of conversations
|
||||
ComunicWeb.components.conversations.unreadDropdown._display_list(target, conversations, usersInfos);
|
||||
});
|
||||
});
|
||||
this._display_list(target, list, users);
|
||||
}
|
||||
|
||||
catch(e) {
|
||||
console.error(e);
|
||||
ComunicWeb.common.notificationSystem.showNotification(lang("conversations_dropdown_err_get_list"), "danger");
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Display the list of conversations
|
||||
*
|
||||
* @param {HTMLElement} target The target for the fields
|
||||
* @param {array} conversations The list of conversations
|
||||
* @param {object} usersInfos Informations about related users
|
||||
* @param {UnreadConversation[]} conversations The list of conversations
|
||||
* @param {UsersList} usersInfo Information about related users
|
||||
*/
|
||||
_display_list: function(target, conversations, usersInfos){
|
||||
_display_list: function(target, conversations, usersInfo){
|
||||
|
||||
//Empty the target
|
||||
target.innerHTML = "";
|
||||
|
||||
//Process each conversation
|
||||
for (var index = 0; index < conversations.length; index++) {
|
||||
|
||||
//Get the conversation
|
||||
const conversation = conversations[index];
|
||||
for (let conversation of conversations) {
|
||||
|
||||
//Get informations about the user
|
||||
const userInfos = usersInfos["user-" + conversation.userID];
|
||||
const user = usersInfo.get(ConversationsUtils.getMainUserForMessage(conversation.message))
|
||||
|
||||
//Create list element
|
||||
var convLi = createElem2({
|
||||
@ -170,10 +152,9 @@ ComunicWeb.components.conversations.unreadDropdown = {
|
||||
//Create the conversation link element
|
||||
var convLink = createElem2({
|
||||
appendTo: convLi,
|
||||
type: "a",
|
||||
href: "#"
|
||||
type: "a"
|
||||
});
|
||||
convLink.setAttribute("data-conversation-id", conversation.id);
|
||||
convLink.setAttribute("data-conversation-id", conversation.conv.id);
|
||||
|
||||
//Add left elements
|
||||
var leftElems = createElem2({
|
||||
@ -187,14 +168,14 @@ ComunicWeb.components.conversations.unreadDropdown = {
|
||||
appendTo: leftElems,
|
||||
type: "img",
|
||||
class: "img-circle",
|
||||
src: userInfos.accountImage
|
||||
src: conversation.conv.logo ? conversation.conv.logo : user.image
|
||||
});
|
||||
|
||||
//Add item top informations
|
||||
var liTop = createElem2({
|
||||
appendTo: convLink,
|
||||
type: "h4",
|
||||
innerHTML: userFullName(userInfos)
|
||||
innerHTML: user.fullName
|
||||
});
|
||||
|
||||
//Add item top small informations
|
||||
@ -204,30 +185,42 @@ ComunicWeb.components.conversations.unreadDropdown = {
|
||||
});
|
||||
|
||||
//Add the message post time
|
||||
var conversationLastActive = createElem2({
|
||||
createElem2({
|
||||
appendTo: liTopSmall,
|
||||
type: "span",
|
||||
innerHTML: '<i class="fa fa-clock-o"></i> ' + ComunicWeb.common.date.timeDiffToStr(conversation.last_active) + " ago"
|
||||
innerHTML: '<i class="fa fa-clock-o"></i> ' + ComunicWeb.common.date.timeDiffToStr(conversation.conv.last_activity) + " ago"
|
||||
});
|
||||
|
||||
//Add conversation name (if available)
|
||||
if(conversation.conv_name != ""){
|
||||
if(conversation.conv.name != "" && conversation.conv.name != null){
|
||||
|
||||
var targetConversation = createElem2({
|
||||
createElem2({
|
||||
appendTo: convLink,
|
||||
type: "p",
|
||||
innerHTML: conversation.conv_name,
|
||||
innerHTML: conversation.conv.name,
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//Add the message
|
||||
var conversationMessage = createElem2({
|
||||
appendTo: convLink,
|
||||
type: "p",
|
||||
class: "message-content",
|
||||
innerHTML: removeHtmlTags(conversation.message)
|
||||
});
|
||||
// Add the message
|
||||
if (conversation.message.message) {
|
||||
createElem2({
|
||||
appendTo: convLink,
|
||||
type: "p",
|
||||
class: "message-content",
|
||||
innerHTML: removeHtmlTags(conversation.message.message)
|
||||
});
|
||||
}
|
||||
|
||||
// In case of server message
|
||||
if (conversation.message.server_message) {
|
||||
createElem2({
|
||||
appendTo: convLink,
|
||||
type: "p",
|
||||
class: "message-content",
|
||||
innerHTML: ConversationsUtils.getServerMessage(conversation.message, usersInfo)
|
||||
});
|
||||
}
|
||||
|
||||
//Make the conversation link lives
|
||||
convLink.onclick = function(){
|
||||
|
@ -136,6 +136,85 @@ const ConversationsUtils = {
|
||||
//Return result
|
||||
return form;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the ID of the users for a message
|
||||
*
|
||||
* @param {ConversationMessage} msg
|
||||
*/
|
||||
getUsersIDForMessage: function(msg) {
|
||||
if (msg.user_id != null && msg.user_id > 0)
|
||||
return [msg.user_id];
|
||||
|
||||
switch (msg.server_message.type) {
|
||||
case "user_created_conv":
|
||||
case "user_left":
|
||||
return [msg.server_message.user_id];
|
||||
|
||||
case "user_added_another":
|
||||
return [msg.server_message.user_who_added, msg.server_message.user_added];
|
||||
|
||||
case "user_removed_another":
|
||||
return [msg.server_message.user_who_removed, msg.server_message.user_removed];
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the ID of the main user for a given message
|
||||
*
|
||||
* @param {ConversationMessage} msg
|
||||
*/
|
||||
getMainUserForMessage: function(msg) {
|
||||
if (msg.user_id != null && msg.user_id > 0)
|
||||
return msg.user_id;
|
||||
|
||||
switch (msg.server_message.type) {
|
||||
case "user_created_conv":
|
||||
case "user_left":
|
||||
return msg.server_message.user_id;
|
||||
|
||||
case "user_added_another":
|
||||
return msg.server_message.user_who_added;
|
||||
|
||||
case "user_removed_another":
|
||||
return msg.server_message.user_who_removed;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Generate a message of the server
|
||||
*
|
||||
* @param {ConversationMessage} msg
|
||||
* @param {UsersList} users
|
||||
*/
|
||||
getServerMessage: function(msg, users) {
|
||||
if (msg.server_message == null)
|
||||
return "";
|
||||
|
||||
switch (msg.server_message.type) {
|
||||
case "user_created_conv":
|
||||
return tr("%1% created the conversation", {
|
||||
"1": users.get(msg.server_message.user_id).fullName
|
||||
});
|
||||
|
||||
case "user_added_another":
|
||||
return tr("%1% added %2% to the conversation", {
|
||||
"1": users.get(msg.server_message.user_who_added).fullName,
|
||||
"2": users.get(msg.server_message.user_added).fullName
|
||||
})
|
||||
|
||||
case "user_left":
|
||||
return tr("%1% left the conversation", {
|
||||
"1": users.get(msg.server_message.user_id).fullName
|
||||
});
|
||||
|
||||
case "user_removed_another":
|
||||
return tr("%1% removed %2% from the conversation", {
|
||||
"1": users.get(msg.server_message.user_who_removed).fullName,
|
||||
"2": users.get(msg.server_message.user_removed).fullName
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ComunicWeb.components.conversations.utils = ConversationsUtils;
|
||||
|
@ -130,7 +130,6 @@ ComunicWeb.common.langs.en = {
|
||||
//Conversations - unread dropdown
|
||||
conversations_dropdown_header: "Unread conversations",
|
||||
conversations_dropdown_err_get_list: "Could not retrieve the list of unread conversations !",
|
||||
conversations_dropdown_err_get_user_info: "Could not get informations about some users !",
|
||||
conversations_dropdown_no_unread_notice: "You do not have any unread messages in the conversations you are following...",
|
||||
|
||||
|
||||
|
@ -130,7 +130,6 @@ ComunicWeb.common.langs.fr = {
|
||||
//Conversations - unread dropdown
|
||||
conversations_dropdown_header: "Conversations non lues",
|
||||
conversations_dropdown_err_get_list: "Une erreur a survenue lors de la récupération des conversations non lues !",
|
||||
conversations_dropdown_err_get_user_info: "Une erreur a survenue lors de la récupération d'informations de certains utilisateurs !",
|
||||
conversations_dropdown_no_unread_notice: "Vous n'avez aucun message non lu dans les conversations que vous suivez...",
|
||||
|
||||
//Notifications - dropdown
|
||||
|
53
assets/js/typings/Conversations.d.ts
vendored
53
assets/js/typings/Conversations.d.ts
vendored
@ -11,3 +11,56 @@ declare interface ConversationSettingsFormElements {
|
||||
allowEveryoneToAddMembers: HTMLElement,
|
||||
followConversationInput: HTMLElement,
|
||||
}
|
||||
|
||||
declare interface ConversationMember {
|
||||
user_id: number,
|
||||
last_message_seen: number,
|
||||
following: boolean,
|
||||
is_admin: boolean,
|
||||
}
|
||||
|
||||
declare interface Conversation {
|
||||
id: number,
|
||||
last_activity: number,
|
||||
name: string,
|
||||
color?: string,
|
||||
logo?: string,
|
||||
group_id?: number,
|
||||
members: ConversationMember[],
|
||||
can_everyone_add_members: boolean,
|
||||
can_have_call: boolean,
|
||||
can_have_video_call: boolean,
|
||||
has_call_now: boolean,
|
||||
}
|
||||
|
||||
declare interface ConversationServerMessage {
|
||||
type: "user_created_conv"|"user_added_another"|"user_left"|"user_removed_another",
|
||||
user_id?: number,
|
||||
user_who_added?: number,
|
||||
user_added?: number,
|
||||
user_who_removed?: number,
|
||||
user_removed?: number,
|
||||
}
|
||||
|
||||
declare interface ConversationMessageFile {
|
||||
url: string,
|
||||
size: number,
|
||||
name: string,
|
||||
thumbnail?: string,
|
||||
type: string
|
||||
}
|
||||
|
||||
declare interface ConversationMessage {
|
||||
id: number,
|
||||
conv_id: number,
|
||||
user_id: number,
|
||||
time_sent: number,
|
||||
message?: string,
|
||||
file?: ConversationMessageFile,
|
||||
server_message?: ConversationServerMessage,
|
||||
}
|
||||
|
||||
declare interface UnreadConversation {
|
||||
conv: Conversation,
|
||||
message: ConversationMessage
|
||||
}
|
Loading…
Reference in New Issue
Block a user