"use client"; // plane imports import { RANDOM_EMOJI_CODES } from "@plane/constants"; /** * Converts a hyphen-separated hexadecimal emoji code to its decimal representation * @param {string} emojiUnified - The unified emoji code in hexadecimal format (e.g., "1f600" or "1f1e6-1f1e8") * @returns {string} The decimal representation of the emoji code (e.g., "128512" or "127462-127464") * @example * convertHexEmojiToDecimal("1f600") // returns "128512" * convertHexEmojiToDecimal("1f1e6-1f1e8") // returns "127462-127464" * convertHexEmojiToDecimal("") // returns "" */ export const convertHexEmojiToDecimal = (emojiUnified: string): string => { if (!emojiUnified) return ""; return emojiUnified .toString() .split("-") .map((e) => parseInt(e, 16)) .join("-"); }; /** * Converts a hyphen-separated decimal emoji code back to its hexadecimal representation * @param {string} emoji - The emoji code in decimal format (e.g., "128512" or "127462-127464") * @returns {string} The hexadecimal representation of the emoji code (e.g., "1f600" or "1f1e6-1f1e8") * @example * emojiCodeToUnicode("128512") // returns "1f600" * emojiCodeToUnicode("127462-127464") // returns "1f1e6-1f1e8" * emojiCodeToUnicode("") // returns "" */ export const emojiCodeToUnicode = (emoji: string): string => { if (!emoji) return ""; // convert emoji code to unicode const uniCodeEmoji = emoji .toString() .split("-") .map((emoji) => parseInt(emoji, 10).toString(16)) .join("-"); return uniCodeEmoji; }; /** * Groups reactions by a specified key * @param {any[]} reactions - Array of reaction objects * @param {string} key - Key to group reactions by * @returns {Object} Object with reactions grouped by the specified key */ export const groupReactions: (reactions: any[], key: string) => { [key: string]: any[] } = ( reactions: any, key: string ) => { if (!Array.isArray(reactions)) { console.error("Expected an array of reactions, but got:", reactions); return {}; } const groupedReactions = reactions.reduce( (acc: any, reaction: any) => { if (!reaction || typeof reaction !== "object" || !Object.prototype.hasOwnProperty.call(reaction, key)) { console.warn("Skipping undefined reaction or missing key:", reaction); return acc; // Skip undefined reactions or those without the specified key } if (!acc[reaction[key]]) { acc[reaction[key]] = []; } acc[reaction[key]].push(reaction); return acc; }, {} as { [key: string]: any[] } ); return groupedReactions; }; /** * Returns a random emoji code from the RANDOM_EMOJI_CODES array * @returns {string} A random emoji code */ export const getRandomEmoji = (): string => RANDOM_EMOJI_CODES[Math.floor(Math.random() * RANDOM_EMOJI_CODES.length)];