UNPKG

softchatjs-react-native

Version:

React native UI SDK for softchatjs-core. Create a free account at: https://www.softchatjs.com

1 lines 9.18 kB
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["import moment from 'moment';\r\n\r\nimport { StringOrNumber, Participant } from \"../types\";\r\nimport { Conversation, Message, MessageStates, UserMeta, ParticipantListInfo } from \"softchatjs-core\";\r\n\r\nimport { GestureResponderEvent } from 'react-native';\r\n\r\nexport function generateConversationId(str1: StringOrNumber, str2: StringOrNumber) {\r\n const sortedStrings = [str1, str2].sort();\r\n const combinedString = sortedStrings.join('_');\r\n const hash = hashCode(combinedString);\r\n return hash.toString()\r\n}\r\n\r\nfunction hashCode(str: string) {\r\n let hash = 0;\r\n if (str.length == 0) {\r\n return hash;\r\n }\r\n for (let i = 0; i < str.length; i++) {\r\n let char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash; // Convert to 32bit integer\r\n }\r\n return hash;\r\n}\r\n\r\nexport const generateId = () => {\r\n let uuid = '';\r\n const characters = 'abcdef0123456789';\r\n for (let i = 0; i < 32; i++) {\r\n const randomNumber = Math.floor(Math.random() * characters.length);\r\n const character = characters.charAt(randomNumber);\r\n if (i === 8 || i === 12 || i === 16 || i === 20) {\r\n uuid += '-';\r\n }\r\n uuid += character;\r\n }\r\n return uuid;\r\n}\r\n\r\n\r\nexport const getUserInfoWithId = (userId: string, participantList: ParticipantListInfo[]): {\r\n presentUser: UserMeta | undefined,\r\n receivingUser: UserMeta | undefined,\r\n} => {\r\n let presentUser = participantList.find(participant => participant.participantId === userId);\r\n let otherParticipants = participantList.filter(participant => participant.participantId !== userId)\r\n return { presentUser: presentUser?.participantDetails, receivingUser: otherParticipants[0]?.participantDetails };\r\n};\r\n\r\nexport const truncate = (str: string, len: number) => {\r\n return str.length > len ? str.substring(0, len)+'...' : str;\r\n}\r\n\r\nexport const getConversationTitle = (userId: string, converstaion: Conversation) => {\r\n if(converstaion.conversationType !== 'group-chat'){\r\n const userInfos = getUserInfoWithId(userId, converstaion.participantList);\r\n\r\n const firstname = userInfos.receivingUser?.firstname\r\n const username = userInfos.receivingUser?.username\r\n return firstname? firstname : username\r\n }\r\n return converstaion.groupMeta?.groupName || 'no-groupname'\r\n}\r\n\r\nexport const getUsernameInitials = (username: string) =>{\r\n return username.substring(0, 1)\r\n}\r\n\r\nexport function formatMessageTime(time: Date | string) {\r\n return moment(new Date(time)).format(\"hh:mm a\");\r\n}\r\n\r\nexport function formatConversationTime(time: Date | string) {\r\n const now = moment();\r\n const then = moment(time);\r\n const duration = moment.duration(now.diff(then));\r\n\r\n // Get the largest unit\r\n const years = Math.floor(duration.asYears());\r\n if (years > 0) return years + 'yr';\r\n\r\n const months = Math.floor(duration.asMonths());\r\n if (months > 0) return months + 'mo';\r\n\r\n const weeks = Math.floor(duration.asWeeks());\r\n if (weeks > 0) return weeks + 'w';\r\n\r\n const days = Math.floor(duration.asDays());\r\n if (days > 0) return days + 'd';\r\n\r\n const hours = Math.floor(duration.asHours());\r\n if (hours > 0) return hours + 'h';\r\n\r\n const minutes = Math.floor(duration.asMinutes());\r\n if (minutes > 0) return minutes + 'm';\r\n\r\n // If duration is less than 1 minute\r\n return 'Just now';\r\n}\r\n\r\nexport const generateFillerTimestamps = () => {\r\n return {\r\n createdAt: new Date(),\r\n updatedAt: new Date(),\r\n }\r\n}\r\n\r\nexport const getUnreadMessageIds = (conversation: Conversation, userId: string) => {\r\n var ids: string[] = []\r\n conversation.messages.map(m => {\r\n if (m.messageState === MessageStates.SENT && m.from !== userId) {\r\n ids.push(m.messageId)\r\n }\r\n })\r\n return ids\r\n}\r\n\r\nexport const getQuotedMessage = (messageId: string, messages: Message[]) => {\r\n const message = messages.find(msg => msg.messageId === messageId)\r\n return message\r\n}\r\n\r\nexport const stopPropagation = (event: GestureResponderEvent) => {\r\n event.stopPropagation();\r\n};\r\n\r\nexport const getRandomColor = (): string => {\r\n const letters = '0123456789ABCDEF';\r\n let color = '#';\r\n for (let i = 0; i < 6; i++) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color\r\n};\r\n\r\nexport const getParticipant = (uid: string, participantList: ParticipantListInfo[]) => {\r\n return participantList.find(p => p.participantDetails.uid === uid);\r\n}\r\n\r\nexport function convertToMinutes(seconds: number) {\r\n var _seconds = Number(seconds.toFixed(0))\r\n const minutes = Math.floor(_seconds / 60);\r\n const remainingSeconds = _seconds % 60;\r\n\r\n // Pad the numbers to always have two digits\r\n const paddedMinutes = String(minutes).padStart(2, '0');\r\n const paddedSeconds = String(remainingSeconds).padStart(2, '0');\r\n\r\n return `${paddedMinutes}:${paddedSeconds}`;\r\n}\r\n\r\nexport const restructureMessages = (data: Array<string | Message>) => {\r\n const groupMessagesByDate = data.reduce((acc, item) => {\r\n if(typeof item !== \"string\") {\r\n var date = moment(item.createdAt).format('MMMM DD, YYYY');\r\n if(acc[date]) {\r\n acc[date].unshift(item)\r\n }else{\r\n acc[date] = [ item ]\r\n }\r\n }\r\n return acc\r\n },{} as {[key: string]: Array<Message>});\r\n\r\n const _messages: Array<string | Message> = Object.entries(groupMessagesByDate).flatMap(\r\n ([date, messages]) => [...messages.reverse(), date]\r\n );\r\n return _messages\r\n}\r\n\r\n"],"mappings":";AAAA,OAAO,YAAY;AAGnB,SAAgC,qBAAoD;AAI7E,SAAS,uBAAuB,MAAsB,MAAsB;AAC/E,QAAM,gBAAgB,CAAC,MAAM,IAAI,EAAE,KAAK;AACxC,QAAM,iBAAiB,cAAc,KAAK,GAAG;AAC7C,QAAM,OAAO,SAAS,cAAc;AACpC,SAAO,KAAK,SAAS;AACzB;AAEA,SAAS,SAAS,KAAa;AAC7B,MAAI,OAAO;AACX,MAAI,IAAI,UAAU,GAAG;AACjB,WAAO;AAAA,EACX;AACA,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAI,OAAO,IAAI,WAAW,CAAC;AAC3B,YAAS,QAAQ,KAAK,OAAQ;AAC9B,WAAO,OAAO;AAAA,EAClB;AACA,SAAO;AACT;AAEO,IAAM,aAAa,MAAM;AAC5B,MAAI,OAAO;AACX,QAAM,aAAa;AACnB,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAM,eAAe,KAAK,MAAM,KAAK,OAAO,IAAI,WAAW,MAAM;AACjE,UAAM,YAAY,WAAW,OAAO,YAAY;AAChD,QAAI,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAC/C,cAAQ;AAAA,IACV;AACA,YAAQ;AAAA,EACV;AACA,SAAO;AACX;AAGO,IAAM,oBAAoB,CAAC,QAAgB,oBAG7C;AACH,MAAI,cAAc,gBAAgB,KAAK,iBAAe,YAAY,kBAAkB,MAAM;AAC1F,MAAI,oBAAoB,gBAAgB,OAAO,iBAAe,YAAY,kBAAkB,MAAM;AAClG,SAAO,EAAE,aAAa,aAAa,oBAAoB,eAAe,kBAAkB,CAAC,GAAG,mBAAmB;AACjH;AAEO,IAAM,WAAW,CAAC,KAAa,QAAgB;AACpD,SAAO,IAAI,SAAS,MAAM,IAAI,UAAU,GAAG,GAAG,IAAE,QAAQ;AAC1D;AAEO,IAAM,uBAAuB,CAAC,QAAgB,iBAA+B;AAClF,MAAG,aAAa,qBAAqB,cAAa;AAChD,UAAM,YAAY,kBAAkB,QAAQ,aAAa,eAAe;AAExE,UAAM,YAAY,UAAU,eAAe;AAC3C,UAAM,WAAW,UAAU,eAAe;AAC1C,WAAO,YAAW,YAAY;AAAA,EAChC;AACA,SAAO,aAAa,WAAW,aAAa;AAC9C;AAEO,IAAM,sBAAsB,CAAC,aAAoB;AACtD,SAAO,SAAS,UAAU,GAAG,CAAC;AAChC;AAEO,SAAS,kBAAkB,MAAqB;AACrD,SAAO,OAAO,IAAI,KAAK,IAAI,CAAC,EAAE,OAAO,SAAS;AAChD;AAEO,SAAS,uBAAuB,MAAqB;AAC1D,QAAM,MAAM,OAAO;AACnB,QAAM,OAAO,OAAO,IAAI;AACxB,QAAM,WAAW,OAAO,SAAS,IAAI,KAAK,IAAI,CAAC;AAG/C,QAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ,CAAC;AAC3C,MAAI,QAAQ,EAAG,QAAO,QAAQ;AAE9B,QAAM,SAAS,KAAK,MAAM,SAAS,SAAS,CAAC;AAC7C,MAAI,SAAS,EAAG,QAAO,SAAS;AAEhC,QAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ,CAAC;AAC3C,MAAI,QAAQ,EAAG,QAAO,QAAQ;AAE9B,QAAM,OAAO,KAAK,MAAM,SAAS,OAAO,CAAC;AACzC,MAAI,OAAO,EAAG,QAAO,OAAO;AAE5B,QAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ,CAAC;AAC3C,MAAI,QAAQ,EAAG,QAAO,QAAQ;AAE9B,QAAM,UAAU,KAAK,MAAM,SAAS,UAAU,CAAC;AAC/C,MAAI,UAAU,EAAG,QAAO,UAAU;AAGlC,SAAO;AACT;AAEO,IAAM,2BAA2B,MAAM;AAC5C,SAAO;AAAA,IACL,WAAW,oBAAI,KAAK;AAAA,IACpB,WAAW,oBAAI,KAAK;AAAA,EACtB;AACF;AAEO,IAAM,sBAAsB,CAAC,cAA4B,WAAmB;AACjF,MAAI,MAAgB,CAAC;AACrB,eAAa,SAAS,IAAI,OAAK;AAC7B,QAAI,EAAE,iBAAiB,cAAc,QAAQ,EAAE,SAAS,QAAQ;AAC9D,UAAI,KAAK,EAAE,SAAS;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAC,WAAmB,aAAwB;AAC1E,QAAM,UAAU,SAAS,KAAK,SAAO,IAAI,cAAc,SAAS;AAChE,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,UAAiC;AAC/D,QAAM,gBAAgB;AACxB;AAEO,IAAM,iBAAiB,MAAc;AAC1C,QAAM,UAAU;AAChB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,CAAC;AAAA,EACjD;AACA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,KAAa,oBAA2C;AACrF,SAAO,gBAAgB,KAAK,OAAK,EAAE,mBAAmB,QAAQ,GAAG;AACnE;AAEO,SAAS,iBAAiB,SAAiB;AAChD,MAAI,WAAW,OAAO,QAAQ,QAAQ,CAAC,CAAC;AACxC,QAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,QAAM,mBAAmB,WAAW;AAGpC,QAAM,gBAAgB,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG;AACrD,QAAM,gBAAgB,OAAO,gBAAgB,EAAE,SAAS,GAAG,GAAG;AAE9D,SAAO,GAAG,aAAa,IAAI,aAAa;AAC1C;AAEO,IAAM,sBAAsB,CAAC,SAAkC;AACpE,QAAM,sBAAsB,KAAK,OAAO,CAAC,KAAK,SAAS;AACrD,QAAG,OAAO,SAAS,UAAU;AAC3B,UAAI,OAAO,OAAO,KAAK,SAAS,EAAE,OAAO,eAAe;AACxD,UAAG,IAAI,IAAI,GAAG;AACZ,YAAI,IAAI,EAAE,QAAQ,IAAI;AAAA,MACxB,OAAK;AACH,YAAI,IAAI,IAAI,CAAE,IAAK;AAAA,MACrB;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAE,CAAC,CAAoC;AAEvC,QAAM,YAAqC,OAAO,QAAQ,mBAAmB,EAAE;AAAA,IAC7E,CAAC,CAAC,MAAM,QAAQ,MAAM,CAAC,GAAG,SAAS,QAAQ,GAAG,IAAI;AAAA,EACpD;AACA,SAAO;AACT;","names":[]}