import { _httpCallAuthenticated } from "../../main/3dexperience_api";
import { _3DSwym_get_Token } from "../3dswym_api";
/**
* @description La fonction `_3dSwym_getAllCommunities` récupère une liste de communautés à partir d'une plateforme
* 3D Swym en utilisant les informations d'identification fournies.
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 10, mais vous pouvez le changer jusqu'à 128, au delà on change de page.
* @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.
* @param {Function} [onDone] - Une fonction de rappel qui sera appelée une fois l'opération terminée. Il prend la
* liste des communautés comme paramètre.
* @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3dSwym_getAllCommunities`. Il vous permet de gérer et de
* répondre à toute erreur qui se produit.
*/
export function _3DSwym_getAllCommunities(
credentials,
onDone = undefined,
onError = undefined
) {
const URL = {
base: credentials._3DSwym,
uri: "/api/community/listmycommunities",
limit: `/limit/${credentials.limit ? credentials.limit : 500}`,
page: `/page/${credentials.page ? credentials.page : "1"}`,
};
const url = `${URL.base}${URL.uri}${URL.limit}${URL.page}`;
const communautes = [];
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(url, {
method: "GET",
headers: {
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
onComplete(response, headers, xhr) {
const info = JSON.parse(response);
const _communitiesInfo = info.result;
let count = 0;
_communitiesInfo.forEach((commu) => {
const _communaute = {
description: commu.description,
id: commu.id,
title: commu.title,
owner: commu.owner,
role: commu.role,
access: commu.access,
};
_3DSwym_getMembersCommunity(
credentials,
commu.id,
(data) => {
count++;
_communaute["members"] = data;
communautes.push(_communaute);
if (count === _communitiesInfo.length && onDone) {
onDone(communautes);
}
},
(err) => onError(err)
);
});
},
onFailure(response, headers) {
const info = response;
info["status"] = headers.status;
info["response"] = headers.errormsg;
if (onError) onError(info);
},
});
});
}
/**
* @description La fonction `_3DSwym_getMembersCommunity` récupère une liste des membres d'une communauté en utilisant les informations d'identification et l'ID de communauté fournis.
*
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 50, mais vous pouvez le changer jusqu'à 128, au delà on change de page.
* @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.
* @param {String} idCommu - L'identifiant de la communauté dont vous souhaitez récupérer les membres. (ex: "YXdA5x4DSUKtlAi2wmnyTA")
* @param {Function} onDone - Une fonction de rappel qui sera appelée lorsque l'appel d'API réussit et renvoie les
* données de réponse. Les données de réponse seront transmises en argument à cette fonction.
* @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3DSwym_getMembersCommunity`. Il est utilisé pour gérer
* toutes les erreurs qui se produisent et fournir une gestion des erreurs ou des messages d'erreur
* appropriés à l'appelant de la fonction.
*/
export function _3DSwym_getMembersCommunity(
credentials,
idCommu,
onDone,
onError
) {
const URL = `${credentials._3DSwym}/api/community/listmembers`;
const datas = {
params: {
page: credentials.page ? credentials.page : 1,
limit: credentials.limit ? credentials.limit : 50,
community_id: idCommu,
},
};
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(URL, {
method: "POST",
headers: {
"Content-type": "application/json;charset=UTF-8",
Accept: "application/json",
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
data: JSON.stringify(datas),
type: "json",
onComplete(response, headers, xhr) {
const info = response;
if (onDone) onDone(info);
},
onFailure(response, headers) {
const info = response;
info["status"] = headers.status;
info["response"] = headers.errormsg;
if (onError) onError(info);
},
});
});
}
/**
* @description La fonction `_3DSwym_getIdeaStatusMaturity` récupère le statut et la maturité d'une idée d'une
* communauté 3DExperience à l'aide des informations d'identification fournies.
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials._3DSwym - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param {String} credentials.commu_id - L'ID de communauté 3DExperience (ex:"YXdA5x4DSUKtlAi2wmnyTA")
* @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la
* requête API sera terminée avec succès. Il prend un argument, « info », qui correspond aux données de
* réponse de l'API.
* @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3DSwym_getIdeaStatusMaturity`. Il vous permet de gérer
* et de traiter l'erreur de manière personnalisée.
*/
export function _3DSwym_getIdeaStatusMaturity(
credentials,
onDone = undefined,
onError = undefined
) {
const commuID = "YXdA5x4DSUKtlAi2wmnyTA";
if (!credentials.commu_id) credentials.commu_id = commuID;
const URL = `${credentials._3DSwym}/api/v2/communities/${credentials.commu_id}/ideas/statuses`;
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(URL, {
method: "GET",
headers: {
"Content-type": "application/json;charset=UTF-8",
Accept: "application/json",
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
onComplete(response) {
const info = JSON.parse(response);
if (onDone) onDone(info);
},
onFailure(response, headers) {
const info = response;
info["status"] = headers.status;
info["response"] = headers.errormsg;
if (onError) onError(info);
},
});
});
}
// TEST
const contentMSG = {
receipt: ["c00005701637"], // Liste des personnes à qui envoyer le message
msg: "TESTS Beam ³ DEV, Happy new year ! ヾ(⌐■_■)ノ♪", // Message à envoyer
};
// CREATION DE MESSAGES DIRECT OU INSTANTANÉ
/**
* @description La fonction `_3DSwym_buildDirectMessage` permet d'envoyer un message direct à un ou plusieurs utilisateurs dans un espace plateforme 3DExperience.
*
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials._3DSwym - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param {Object} [credentials.currentUser] - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).
* @param {string} [credentials.currentUser.login] - Le paramètre `login` est l'identifiant d'envois du message
* @param {string} [credentials.currentUser.first_name] - Le paramètre `first_name` est l'identifiant d'envois du message
* @param {string} [credentials.currentUser.last_name] - Le paramètre `last_name` est l'identifiant d'envois du message.
*
* @param {Object} [datas] - Le paramètre `datas` est un objet qui contient les données du messages.
* @param {String} [datas.msg] - Le paramètre `msg` est une chaîne de caractères qui contient le message à envoyer.
*
* @param {Array} [datas.receipt] - La liste des utilisateurs à qui envoyer le message (login). La liste des personnes accessible est générer par la fonction _3DSwym_getFamiliarPeople. (ex: ["bem3_yan.coquoz","bem_bob_Dylan"])
*
* @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque le message direct sera envoyé avec
* succès. Il prend un argument, qui est un objet contenant des informations sur la réponse du serveur.
* @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3DSwym_buildDirectMessage`. Il est facultatif et peut
* être indéfini.
*/
export function _3DSwym_buildDirectMessage(
credentials,
datas,
onDone = undefined,
onError = undefined
) {
const { listAllContacts, currentUser, _3DSwym } = credentials;
console.log("__listAllContacts", listAllContacts.hits);
const _URL = `${_3DSwym}/api/directmessages`;
const _data = {
users: [currentUser.login].concat(datas.receipt),
};
const MSGData = {
id_msg: "",
senderId: credentials.currentUser.login,
senderName: `${credentials.currentUser.first_name} ${credentials.currentUser.last_name}`,
msg: formatedMessage(datas.msg),
};
let otherCommunity = false;
_3DSwym_findCommunityToInstantMSG(
_data.users,
(rep) => {
if (rep !== undefined) {
MSGData["id_msg"] = rep.id;
otherCommunity = true;
_3DSwym_sendMessageData(credentials, MSGData);
}
},
(err) => {
otherCommunity = false;
console.log("_3dSwym_findCommunityToInstantMSG callback", err);
if (onError) onError(err);
MSGData["id_msg"] = "";
}
);
if (otherCommunity === false) {
setTimeout(() => {
if (otherCommunity === false) {
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
data: JSON.stringify(_data),
type: "json",
onComplete(response, headers, xhr) {
const info = response;
info["reponse"] = JSON.parse(xhr.response);
info["status"] = xhr.status;
if (onDone) onDone(info);
MSGData["id_msg"] = info.result.id;
_3DSwym_sendMessageData(credentials, MSGData);
},
onFailure(response, headers, xhr) {
const info = response;
info["msg"] = headers.errormsg;
info["status"] = headers.status;
if (onError) onError(info);
},
});
});
}
}, 500);
}
}
/**
* @description La fonction `_3DSwym_findCommunityToInstantMSG` est utilisée pour rechercher une communauté dans une
* plateforme 3DExperience pour la messagerie instantanée en fonction des informations d'identification
* et des données fournies.
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param {Array} datas - Le paramètre `datas` est un tableau qui contient les données à utiliser pour trouver une communauté pour envoyer un message instantané.
* @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque
* l'opération sera terminée avec succès. Il faut un argument, qui est le résultat de l'opération.
* @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3DSwym_findCommunityToInstantMSG`. Il est facultatif et
* peut être omis s’il n’est pas nécessaire.
*/
export function _3DSwym_findCommunityToInstantMSG(
credentials,
datas,
onDone,
onError
) {
const URL = `${credentials._3DSwym}/api/directmessages/lite?with_favorites=false`;
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(URL, {
method: "GET",
headers: {
Accept: "application/json,text/javascript,*/*",
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
onComplete(response) {
const info = JSON.parse(response);
const infoSortedByLengths = [];
info.result.forEach((com) => {
com.users = com.users.sort((a, b) => {
return a.login.localeCompare(b.login);
});
if (com.users.length === datas.length) {
infoSortedByLengths.push(com);
}
});
const sortedDatas = datas.sort();
const _datas = infoSortedByLengths.find((com) => {
const logins = [];
com.users.forEach((user) => {
logins.push(user.login);
});
return JSON.stringify(logins) === JSON.stringify(sortedDatas);
});
if (onDone && _datas !== undefined) {
onDone(_datas);
} else if (onError || _datas === undefined) {
onError(_datas);
}
},
onFailure(response) {
const info = response;
info["msg"] = headers.errormsg;
info["errCode"] = headers.errorcode;
console.log("❌ sendDirectMessageLite => ", info);
if (onError) onError(info);
},
});
});
}
/**
* @description La fonction `_3DSwym_sendMessageData` envoie un message direct avec les informations
* d'identification et le contenu donnés, et appelle les rappels `onDone` ou `onError` en fonction du
* succès ou de l'échec de la requête.
* @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
* la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
* @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
* @param content - Le paramètre `content` est un objet qui contient les propriétés suivantes :
* @param {String} content.id_msg - L'identifiant du message à envoyer.
* @param {String} content.senderId - L'identifiant de l'utilisateur qui envoie le message.
* @param {String} content.senderName - Le nom de l'utilisateur qui envoie le message.
* @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'envoi
* du message sera terminé avec succès. Il prend un argument, qui est un objet contenant des
* informations sur la réponse du serveur.
* @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
* erreur lors de l'exécution de la fonction `_3DSwym_sendMessageData`. Il vous permet de gérer et de
* traiter les informations d'erreur.
*/
export function _3DSwym_sendMessageData(
credentials,
content,
onDone = undefined,
onError = undefined
) {
const URL = {
base: credentials._3DSwym,
uri: "/api/community",
id_msg: `${content.id_msg}`,
endUri: "/instantmessages",
};
const url = `${URL.base}${URL.uri}/${URL.id_msg}${URL.endUri}`;
const datas = {
author: { login: content.senderId, displayName: content.senderName },
accessState: null,
commentUri: null,
comments: null,
endorsements: null,
moderationState: null,
parentCommentUri: null,
richMessage: content.msg,
};
console.log("_3dSwym_sendDirectMessageData url ", url);
_3DSwym_get_Token(credentials, (token) => {
_httpCallAuthenticated(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
},
data: JSON.stringify(datas),
type: "json",
onComplete(response, headers, xhr) {
const info = response;
info["status"] = xhr.status;
info["response"] = JSON.parse(xhr.response);
console.log("✅ _3dSwym_sendDirectMessageData => ", info);
if (onDone) onDone(info);
},
onFailure(response, headers) {
const info = response;
info["msg"] = headers.errormsg;
info["errCode"] = headers.errorcode;
console.log("❌ sendDirectMessage => ", info);
if (onError) onError(info);
},
});
});
}
/**
* @description La fonction `formatedMessage` renvoie un message formaté avec la date et l'heure actuelles.
* @param {String} message - Le paramètre `message` est une chaîne qui représente le contenu du message que vous souhaitez envoyer.
*
* @returns un message formaté avec la date et l'heure actuelles. Le message est enveloppé dans une balise de paragraphe, suivie d'un saut de ligne et d'une règle horizontale.
* En dessous, il comprend une phrase indiquant quand le message a été envoyé, y compris la date et l'heure.
*
*/
function formatedMessage(message) {
const _dates = new Date().toLocaleDateString();
const time = new Date().toLocaleTimeString();
return `<p>${message} </p>
<br/>
<hr/>
<p><u>envoyer :</u>Le <b>${_dates} à ${time}</b></p>`;
}
export default {
_3DSwym_getAllCommunities,
_3DSwym_getMembersCommunity,
_3DSwym_getIdeaStatusMaturity,
_3DSwym_buildDirectMessage,
_3DSwym_findCommunityToInstantMSG,
_3DSwym_sendMessageData,
};