diff --git a/frontend-next/src/components/app/datatypes.js b/frontend-next/src/components/app/datatypes.js
index a43ef05..4897bb2 100644
--- a/frontend-next/src/components/app/datatypes.js
+++ b/frontend-next/src/components/app/datatypes.js
@@ -1,5 +1,5 @@
import Link from "next/link"
-import { useEffect, useState } from "react";
+import { use, useEffect, useState } from "react";
const Filter = require('bad-words')
const filter = new Filter();
@@ -45,18 +45,17 @@ let dateOptions = {
* @returns {Boolean} - Image Loaded (True) or Not (False)
*/
function imageProcessing(url) {
- var x = async () => {
+ var x = new Promise((resolve, reject) => {
var img = new Image();
img.src = url;
- img.onload = function() {
- return true;
+ img.onload = () => {
+ resolve([true, url]);
}
- img.onerror = function() {
- return false;
+ img.onerror = () => {
+ resolve([false, url]);
}
- }
- var res = x()
- return res
+ })
+ return x
}
@@ -65,28 +64,34 @@ function imageProcessing(url) {
* @param {String} message - Message to Format
* @returns {String} - Formatted Message (IN HTML)
*/
-export function RMF(message) {
- var URLREGEX = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
- var URLmatch = message.match(URLREGEX);
- var newMessage = URLmatch ? [] : message
- if (URLmatch) {
- for (var i = 0; i < URLmatch.length; i++) {
- if (imageProcessing("https://"+URLmatch[i])) {
- newMessage.push((
- {(URLmatch.length == 1) && message.split(URLmatch[i])[0].replace("https://","").replace("http://","")}
-
- {(i == URLmatch.length || URLmatch.length == 1) && message.split(URLmatch[i])[1]}
- ))
- } else {
- newMessage.push((
- {URLmatch.length == 1 && message.split(URLmatch[i])[0]}
- {URLmatch[i]}
- {(i == URLmatch.length || URLmatch.length == 1) && message.split(URLmatch[i])[1]}
- ))
+export async function RMF(message) {
+ var x = new Promise(async (resolve) => {
+ var URLREGEX = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
+ var URLmatch = message.match(URLREGEX);
+ var newMessage = URLmatch ? [] : message
+ if (URLmatch) {
+ for (var i = 0; i < URLmatch.length; i++) {
+ await imageProcessing("https://"+URLmatch[i]).then((result) => {
+ if (result[0]) {
+ newMessage.push((
+ {(URLmatch.length == 1) && message.split(result[1])[0].replace("https://","").replace("http://","")}
+
+ {(i == URLmatch.length || URLmatch.length == 1) && message.split(result[1])[1]}
+ ))
+ } else {
+ newMessage.push((
+ {URLmatch.length == 1 && message.split(URLmatch[i])[0]}
+ {URLmatch[i]}
+ {(i == URLmatch.length || URLmatch.length == 1) && message.split(URLmatch[i])[1]}
+ ))
+ }
+ })
}
}
- }
- return newMessage
+ resolve(newMessage)
+
+ });
+ return x
}
/**
* Grabs Window Size
@@ -134,35 +139,46 @@ const generateColor = (user_str) => {
* @returns {Object} - Chat Message Component
*/
export function Chat({ chatObj, user, path }) {
+ const [message, setMessage] = useState([])
+ const [messageReady, setMessageReady] = useState(false)
function deleteMessage() {
remove(ref(database, `${path}/chats/${chatObj.timestamp}-${chatObj.user}`))
}
- var messageFilterBypass = [undefined, null, '', ' ', '\'', '\"']
- if (!messageFilterBypass.includes(chatObj.body) && (chatObj.body.length != 1 && !chatObj.body[0].match(/\W/))) {
- var message = filter.clean(chatObj.body)
- message = RMF(message)
- } else {
- var message = chatObj.body
- }
+
+
+ useEffect(() => {
+ var messageFilterBypass = [undefined, null, '', ' ', '\'', '\"']
+ if (!messageFilterBypass.includes(chatObj.body) && (chatObj.body.length != 1 && !chatObj.body[0].match(/\W/))) {
+ var settingMessage = filter.clean(chatObj.body)
+ RMF(settingMessage).then((result) => {
+ setMessage(result)
+ setMessageReady(true)
+ })
+ } else {
+ setMessage(chatObj.body)
+ setMessageReady(true)
+ }
+ }, [])
- const Speak = ({ children }) => (
- <>{useTts({ children, autoPlay: true }).ttsChildren}>
- )
return (
-