@acrsolutions/chat-components
Version:
Un set di componenti per la creazione di un'applicazione di messaggistica
101 lines (100 loc) • 3.15 kB
JavaScript
/**
* Cerca una porzione di stringa in una stringa, ignorando il case
* @param partialString la stringa da cercare
* @param entireString la stringa in cui cercare
* @returns true se la stringa parziale è inclusa nella stringa intera, false altrimenti
*/
export function includesIgnoreCase(partialString = '', entireString = '') {
return entireString.toLowerCase().includes(partialString.toLowerCase());
}
/**
* Prende un oggetto e restituisce un array delle proprie chiavi tipizzate.
* @param obj L'oggetto di cui si vogliono le chiavi.
* @returns Un array di chiavi tipizzate dell'oggetto passato come parametro.
*/
export function getTypedObjectKeys(obj) {
if (obj == null)
return [];
return Object.keys(obj);
}
export const MessageTypes = {
Unknown: 'unknown',
Text: 'text',
Location: 'location',
Contacts: 'contacts',
Interactive: 'interactive',
Image: 'image',
Audio: 'audio',
Document: 'document',
Reaction: 'reaction',
Template: 'template',
Video: 'video',
Button: 'button',
};
export const MediaMessageTypes = [
MessageTypes.Image,
MessageTypes.Audio,
MessageTypes.Video,
MessageTypes.Document,
];
// Definizione delle categorie
// Mappa delle estensioni dei file alle categorie
const extToCategoryMap = new Map([
// Text
['.txt', MessageTypes.Text],
['.html', MessageTypes.Text],
['.json', MessageTypes.Text],
['.css', MessageTypes.Text],
['.js', MessageTypes.Text],
// Images
['.jpg', MessageTypes.Image],
['.jpeg', MessageTypes.Image],
['.png', MessageTypes.Image],
['.gif', MessageTypes.Image],
['.webp', MessageTypes.Image],
['.svg', MessageTypes.Image],
// Audio
['.mp3', MessageTypes.Audio],
['.wav', MessageTypes.Audio],
['.ogg', MessageTypes.Audio],
// Video
['.mp4', MessageTypes.Video],
['.webm', MessageTypes.Video],
['.ogg', MessageTypes.Video],
// Documents
['.pdf', MessageTypes.Document],
['.doc', MessageTypes.Document],
['.docx', MessageTypes.Document],
['.xls', MessageTypes.Document],
['.xlsx', MessageTypes.Document],
]);
// Funzione per ottenere la categoria in base all'estensione del file
export const getCategoryFromExtension = (fileName) => {
// Estrai l'estensione del file
const extension = fileName.slice(fileName.lastIndexOf('.')).toLowerCase();
// Restituisci la categoria associata all'estensione
const category = extToCategoryMap.get(extension);
if (category !== MessageTypes.Image &&
category !== MessageTypes.Video &&
category !== MessageTypes.Audio &&
category !== MessageTypes.Document) {
return null;
}
return category;
};
export function toPrintableFullDate(date) {
if (date == null)
return 'Nessuna data';
return (new Date(date).toLocaleDateString() +
' ' +
new Date(date).toLocaleTimeString());
}
export function buildSentTime(sentDate) {
const sentTime = sentDate.split('T')[1];
if (sentTime.length > 5) {
return sentTime.substring(0, 5);
}
else {
return sentTime;
}
}