dappros/ethora

View on GitHub
client-web/build-prod/static/js/986.cc803151.chunk.js.map

Summary

Maintainability
Test Coverage
{"version":3,"file":"static/js/986.cc803151.chunk.js","mappings":"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","sources":["components/DeleteDialog.tsx","helpers/chat/createPrivateChat.ts","components/Chat/Messages/Message.tsx","components/Chat/Messages/SystemMessage.tsx","components/MetaNavigation/CompassItem.tsx","components/MetaNavigation/MetaHeader.tsx","components/MetaNavigation/MetaNavigation.tsx","components/Chat/Threads/CustomMessageInput.tsx","components/Chat/Threads/ThreadContainer.tsx","components/Chat/ChatTransferDialog.tsx","components/Chat/ChatMediaModal.tsx","components/Chat/ChatAudioRecorder.tsx","pages/ChatInRoom/Chat.tsx","pages/ChatInRoom/index.tsx","pages/Profile/QrModal.tsx"],"sourcesContent":["import * as React from \"react\";\nimport Button from \"@mui/material/Button\";\nimport Dialog from \"@mui/material/Dialog\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport DialogContent from \"@mui/material/DialogContent\";\nimport DialogContentText from \"@mui/material/DialogContentText\";\nimport DialogTitle from \"@mui/material/DialogTitle\";\n\ninterface IProps {\n  open: boolean;\n  onClose: () => void;\n  onDeletePress: () => void;\n  loading?: boolean;\n  title: string;\n  description: string;\n  deleteButtonTitle?: string;\n  cancelButtonTitle?: string;\n}\n\nexport function DeleteDialog({\n  open,\n  onClose,\n  onDeletePress,\n  loading,\n  title,\n  description,\n  deleteButtonTitle,\n  cancelButtonTitle,\n}: IProps) {\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      aria-labelledby=\"alert-dialog-title\"\n      aria-describedby=\"alert-dialog-description\"\n    >\n      <DialogTitle id=\"alert-dialog-title\">{title}</DialogTitle>\n      <DialogContent>\n        <DialogContentText id=\"alert-dialog-description\">\n          {description}\n        </DialogContentText>\n      </DialogContent>\n      <DialogActions>\n        <Button disabled={loading} onClick={onClose}>\n          {cancelButtonTitle || \"Cancel\"}\n        </Button>\n        <Button disabled={loading} onClick={onDeletePress} autoFocus color={\"error\"}>\n          {deleteButtonTitle || \"Delete\"}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n}\n","import xmpp from \"../../xmpp\";\nimport {useStoreState} from \"../../store\";\nimport { CONFERENCEDOMAIN } from \"../../constants\";\n\nexport const underscoreManipulation = (str:string) => {\n    if(str){\n        return str.replace(/([A-Z])/g, '_$1').toLowerCase()\n    }else{\n        return 'invalid string passed'\n    }\n};\n\nexport const createPrivateChat = async (\n    myWalletAddress: string,\n    otherUserWalletAddress: string,\n    myFirstName: string,\n    otherFirstName: string,\n    userJID?: string\n) => {\n    const combinedWalletAddress = [myWalletAddress, otherUserWalletAddress]\n        .sort()\n        .join('.');\n\n    const roomJid = combinedWalletAddress.toLowerCase() + CONFERENCEDOMAIN;\n    const combinedUsersName = [myFirstName, otherFirstName].sort().join(' and ');\n\n    const currentChatRooms = useStoreState.getState().userChatRooms;\n\n    let isNewRoom = false;\n    if(currentChatRooms.filter((el) => el.jid === roomJid).length === 0){\n        isNewRoom = true;\n        xmpp.createNewRoom(combinedWalletAddress.toLowerCase());\n        xmpp.setOwner(combinedWalletAddress.toLowerCase());\n        xmpp.roomConfig(\n            combinedWalletAddress.toLowerCase(),\n            {roomName: combinedUsersName},\n        );\n        xmpp.subsribe(roomJid);\n        xmpp.presenceInRoom(roomJid);\n\n        setTimeout(() => {\n            xmpp.sendInvite(\n                underscoreManipulation(myWalletAddress),\n                roomJid.toLowerCase(),\n                underscoreManipulation(otherUserWalletAddress),\n            );\n        }, 1000);\n    }\n\n    return {roomJid, roomName: combinedUsersName, isNewRoom};\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\n  Message as KitMessage,\n  MessageModel,\n  MessageSeparator,\n} from \"@chatscope/chat-ui-kit-react\";\nimport { differenceInHours, format, formatDistance, subDays } from \"date-fns\";\nimport { TMessageHistory } from \"../../../store\";\nimport { useHistory } from \"react-router\";\nimport {\n  Card,\n  CardActionArea,\n  CardMedia,\n  Button,\n  IconButton,\n  Typography,\n  Divider,\n} from \"@mui/material\";\nimport MoreVertIcon from \"@mui/icons-material/MoreVert\";\nimport coin from \"../../../assets/images/coin.png\";\nimport { Box } from \"@mui/system\";\nimport {\n  audioMimetypes,\n  imageMimetypes,\n  videoMimetypes,\n} from \"../../../constants\";\nimport xmpp from \"../../../xmpp\";\nimport { IButtons } from \"../../../pages/ChatInRoom/Chat\";\n\nconst avatarPreviewUrl = \"https://icotar.com/initials/\";\n\nexport interface IMessage {\n  message: TMessageHistory;\n  position: {\n    type: string;\n    position: MessageModel[\"position\"];\n    separator?: string;\n  };\n  is?: string;\n  onMessageButtonClick: (button: IButtons) => void;\n  toggleTransferDialog: (value: boolean, message: TMessageHistory) => void;\n  onMediaMessageClick: (value: boolean, message: TMessageHistory) => void;\n\n  onThreadClick?: () => void;\n  isThread?: boolean;\n}\n\ntype IDirection = \"outgoing\" | \"incoming\";\n\nexport const Message: React.FC<IMessage> = ({\n  message,\n  position,\n  onMessageButtonClick,\n  toggleTransferDialog,\n  onMediaMessageClick,\n  onThreadClick,\n  isThread,\n}) => {\n  const firstName = message.data.senderFirstName;\n  const lastName = message.data.senderLastName;\n  const messageJid = message.data.senderJID.split(\"/\")[0];\n  const userJid = useMemo(() => xmpp.client?.jid?.toString().split(\"/\")[0], []);\n  const isSameUser = userJid === messageJid;\n  const history = useHistory();\n  const [buttons, setButtons] = useState<IButtons[]>();\n\n  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n  const openMenu = Boolean(anchorEl);\n\n  const [messageDirection, setMessageDirection] =\n    useState<IDirection>(\"incoming\");\n\n  const openDialogMenu = () => {\n    setAnchorEl(null);\n    toggleTransferDialog(true, message);\n  };\n\n  const openThreadView = () => {\n    onThreadClick();\n  };\n\n  const fullViewImage = () => {\n    onMediaMessageClick(true, message);\n  };\n\n  const rightClick = (event: React.SyntheticEvent<HTMLElement>) => {\n    event.preventDefault();\n    openDialogMenu();\n  };\n\n  const ReplyComponent = () => {\n    return (\n      <Button\n        variant=\"text\"\n        style={{\n          flexDirection: \"row\",\n          display: \"flex\",\n          textTransform: \"none\",\n          textAlign: \"left\",\n        }}\n      >\n        <Divider\n          style={{\n            borderWidth: \"3px\",\n            borderRadius: \"5px\",\n            marginRight: \"5px\",\n          }}\n          variant=\"middle\"\n          orientation=\"vertical\"\n          flexItem\n        />\n\n        <div>\n          <strong style={{ cursor: \"pointer\" }}>\n            {message.data.mainMessage?.userName || \"N/A\"}\n            <br />\n          </strong>\n          {message.data.mainMessage?.imageLocation &&\n            imageMimetypes[message.data.mainMessage.mimeType] && (\n              <Card sx={{ maxWidth: 200 }}>\n                <CardActionArea onClick={fullViewImage}>\n                  <CardMedia\n                    style={{\n                      height: 150,\n                      objectFit: \"cover\",\n                      objectPosition: \"left\",\n                    }}\n                    component=\"img\"\n                    height=\"150\"\n                    image={message.data.mainMessage.imageLocation}\n                    alt={message.data.mainMessage?.originalName}\n                  />\n                </CardActionArea>\n              </Card>\n            )}\n\n          {/* {message.data.mainMessage.ImageLocation &&\n          message.data.mainMessage.MimeType.split(\"/\")[0] === \"application\" ? (\n            <a target=\"_blank\" href={message.data.location}>\n              <KitMessage.ImageContent\n                src={message.data.mainMessage.ImageLocation}\n                alt={message.data.mainMessage.OriginalName}\n                width={150}\n              />\n              {message.data.mainMessage.MimeType.split(\"/\")[1]}\n            </a>\n          ) : null} */}\n\n          {message.data.mainMessage?.imageLocation &&\n            videoMimetypes[message.data.mainMessage?.mimeType] && (\n              <video controls width=\"200px\">\n                <source\n                  src={message.data.mainMessage.imageLocation}\n                  type={message.data.mainMessage.mimeType}\n                  title={message.data.mainMessage.originalName}\n                />\n                Sorry, your browser doesn't support videos.\n              </video>\n            )}\n\n          {message.data.mainMessage?.imageLocation &&\n            audioMimetypes[message.data.mainMessage?.mimeType] && (\n              <audio controls>\n                <source\n                  src={message.data.mainMessage.imageLocation}\n                  type={message.data.mainMessage.mimeType}\n                />\n                Your browser does not support the audio element.\n              </audio>\n            )}\n\n          <span\n            dangerouslySetInnerHTML={{\n              __html: message.data?.mainMessage?.text.replace(\n                /\\b(https?\\:\\/\\/\\S+)/gm,\n                '<a href=\"$1\">$1</a>'\n              ),\n            }}\n          ></span>\n        </div>\n      </Button>\n    );\n  };\n\n  useEffect(() => {\n    if (message.data.quickReplies) {\n      setButtons(JSON.parse(message.data.quickReplies));\n    }\n    setMessageDirection(isSameUser ? \"outgoing\" : \"incoming\");\n  }, []);\n\n  return (\n    <div is={\"Message\"}>\n      {!!position.separator && (\n        <MessageSeparator>{position.separator}</MessageSeparator>\n      )}\n      <KitMessage\n        onContextMenu={\n          !message.data.isReply && !isThread ? rightClick : () => {}\n        }\n        style={{\n          marginBottom:\n            position.type === \"last\" || position.type === \"single\" ? 15 : null,\n        }}\n        model={{\n          sender: firstName + \" \" + lastName,\n          direction: messageDirection,\n          position: position.position,\n        }}\n        avatarPosition={isSameUser ? \"tr\" : \"tl\"}\n        avatarSpacer={position.type !== \"first\" && position.type !== \"single\"}\n      >\n        {(position.type === \"first\" || position.type === \"single\") && (\n          <img\n            style={{\n              borderRadius: \"50%\",\n              boxSizing: \"border-box\",\n              width: \"42px\",\n              height: \"42px\",\n              cursor: \"pointer\",\n            }}\n            onClick={() =>\n              history.push(\"/profile/\" + message.data.senderWalletAddress)\n            }\n            is={\"Avatar\"}\n            src={\n              message.data.photoURL\n                ? message.data.photoURL\n                : +firstName + \" \" + lastName\n            }\n            onError={({ currentTarget }) => {\n              currentTarget.onerror = null;\n              currentTarget.src = avatarPreviewUrl + firstName + \" \" + lastName;\n            }}\n            alt={firstName}\n          />\n        )}\n\n        <KitMessage.CustomContent>\n          {/* Main Message */}\n          {message.data.isReply && !isThread && <ReplyComponent />}\n          {(position.type === \"first\" || position.type === \"single\") && (\n            <span\n              style={{\n                display: \"flex\",\n                justifyContent: \"space-between\",\n                alignItems: \"center\",\n              }}\n            >\n              <strong\n                style={{ cursor: \"pointer\" }}\n                onClick={() =>\n                  history.push(\"/profile/\" + message.data.senderWalletAddress)\n                }\n              >\n                {firstName} {lastName}\n                <br />\n              </strong>\n              {!isThread && !message.data.isReply && (\n                <IconButton\n                  aria-label=\"more\"\n                  id=\"long-button\"\n                  aria-controls={openMenu ? \"long-menu\" : undefined}\n                  aria-expanded={openMenu ? \"true\" : undefined}\n                  aria-haspopup=\"true\"\n                  onClick={openDialogMenu}\n                >\n                  <MoreVertIcon />\n                </IconButton>\n              )}\n            </span>\n          )}\n\n          {message.data.isMediafile &&\n            !!imageMimetypes[message.data.mimetype] && (\n              <Card sx={{ maxWidth: 200 }}>\n                <CardActionArea onClick={fullViewImage}>\n                  <CardMedia\n                    style={{\n                      height: 150,\n                      objectFit: \"cover\",\n                      objectPosition: \"left\",\n                    }}\n                    component=\"img\"\n                    height=\"150\"\n                    image={message.data.location}\n                    alt={message.data.originalName}\n                  />\n                </CardActionArea>\n              </Card>\n            )}\n\n          {message.data.isMediafile &&\n            !!videoMimetypes[message.data.mimetype] && (\n              <video controls width=\"200px\">\n                <source\n                  src={message.data.location}\n                  type={message.data.mimetype}\n                  title={message.data.originalName}\n                />\n                Sorry, your browser doesn't support videos.\n              </video>\n            )}\n\n          {message.data.isMediafile &&\n            !!audioMimetypes[message.data.mimetype] && (\n              <audio controls>\n                <source\n                  src={message.data.location}\n                  type={message.data.mimetype}\n                />\n                Your browser does not support the audio element.\n              </audio>\n            )}\n\n          {!message.data.isMediafile && (\n            <div>\n              <span\n                dangerouslySetInnerHTML={{\n                  __html: message.body.replace(\n                    /\\b(https?\\:\\/\\/\\S+)/gm,\n                    '<a href=\"$1\">$1</a>'\n                  ),\n                }}\n              />\n              {/*FOOTER */}\n              <div\n                style={{\n                  display: \"flex\",\n                  justifyContent: \"space-between\",\n                  alignItems: \"center\",\n                  marginTop: 5,\n                  minWidth: 200,\n                  color:\n                    messageDirection === \"incoming\"\n                      ? \"rgb(110, 169, 215)\"\n                      : \"#c6e3fa\",\n                  flexDirection:\n                    messageDirection === \"incoming\" ? \"row\" : \"row-reverse\",\n                }}\n              >\n                <div\n                  style={{\n                    fontSize: 12,\n                  }}\n                >\n                  {differenceInHours(new Date(), new Date(message.date)) > 5\n                    ? format(new Date(message.date), \"h:mm a\")\n                    : formatDistance(\n                        subDays(new Date(message.date), 0),\n                        new Date(),\n                        {\n                          addSuffix: true,\n                        }\n                      )}\n                </div>\n                {message.coinsInMessage > 0 && (\n                  <div style={{ display: \"flex\", alignItems: \"center\" }}>\n                    <div style={{ fontSize: 12 }}>\n                      {message?.coinsInMessage}\n                    </div>\n                    <img\n                      src={coin}\n                      style={{ width: 25, height: 25 }}\n                      alt={\"coin\"}\n                    />\n                  </div>\n                )}\n                {message.data.isEdited && (\n                  <div\n                    style={{\n                      display: \"flex\",\n                      alignItems: \"flex-end\",\n                      marginLeft: 3,\n                      marginRight: 3,\n                    }}\n                  >\n                    <Typography fontSize={12}>edited</Typography>\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n        </KitMessage.CustomContent>\n\n        {/*{(position.type === \"last\" || position.type === \"single\") && (*/}\n        {/*  <KitMessage.Footer*/}\n        {/*    sentTime={*/}\n        {/*      differenceInHours(new Date(), new Date(message.date)) > 5*/}\n        {/*        ? format(new Date(message.date), \"h:mm a\")*/}\n        {/*        : formatDistance(*/}\n        {/*            subDays(new Date(message.date), 0),*/}\n        {/*            new Date(),*/}\n        {/*            {*/}\n        {/*              addSuffix: true,*/}\n        {/*            }*/}\n        {/*          )*/}\n        {/*    }*/}\n        {/*  />*/}\n        {/*)}*/}\n        <KitMessage.Footer>\n          {message.numberOfReplies > 0 &&\n            messageDirection === \"incoming\" &&\n            !isThread && (\n              <Button onClick={() => openThreadView()} variant=\"text\">\n                <Typography fontSize={\"12px\"} textTransform={\"none\"}>\n                  {message.numberOfReplies}{\" \"}\n                  {message.numberOfReplies === 1 ? \"Reply\" : \"Replies\"} (tap to\n                  review)\n                </Typography>\n              </Button>\n            )}\n        </KitMessage.Footer>\n      </KitMessage>\n      {!!buttons && (\n        <Box sx={{ \"& button\": { m: 0.5 } }}>\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n              width: \"max-content\",\n              marginLeft: \"45px\",\n            }}\n          >\n            {buttons.map((button, index) => {\n              return (\n                <Button\n                  variant=\"outlined\"\n                  size=\"small\"\n                  onClick={() => onMessageButtonClick(button)}\n                  key={index}\n                >\n                  {button.name}\n                </Button>\n              );\n            })}\n          </div>\n        </Box>\n      )}\n    </div>\n  );\n};\n","import {TMessageHistory} from \"../../../store\";\nimport React from \"react\";\n\nexport interface IMessage {\n    message: TMessageHistory;\n    userJid: string;\n    is?: string;\n}\n\nexport const SystemMessage: React.FC<IMessage> = ({message, userJid}) => {\n    return (\n        <div style={{\n            textAlign: \"center\",\n            color: \"#6ea9d7\",\n            fontSize: \".8em\",\n            boxSizing: \"border-box\",\n            fontFamily: \"Helvetica Neue,Segoe UI,Helvetica,Arial,sans-serif\"\n        }} key={message.key}>\n            {message.body}\n        </div>\n    );\n}","import { Box, Button } from \"@mui/material\";\nimport { useHistory } from \"react-router\";\nimport { CONFERENCEDOMAIN } from \"../../constants\";\nimport { IApiMetaRoom } from \"./MetaNavigation\";\n\nconst CHAT = \"/chat/\";\n\nexport const CompassItem = ({\n  room,\n  name,\n  chatId,\n  setDirection,\n}: {\n  room: IApiMetaRoom | undefined;\n  name: string;\n  chatId: string;\n  setDirection: () => void;\n}) => {\n  const history = useHistory();\n  if (!room) {\n    return (\n      <Box\n        justifyContent={\"center\"}\n        alignItems={\"center\"}\n        style={{ padding: \"10px 0\" }}\n      >\n        <Button\n          disabled={!chatId}\n          onClick={() => {\n            setDirection();\n            history.push(CHAT + 'none');\n          }}\n        >\n          {\"Empty\"}\n        </Button>\n      </Box>\n    );\n  }\n  return (\n    <Box\n      justifyContent={\"center\"}\n      alignItems={\"center\"}\n      style={{ padding: \"10px 0\", maxWidth: 170 }}\n    >\n      <Button\n        onClick={() => {\n          setDirection();\n          history.push(CHAT + room.roomJid + CONFERENCEDOMAIN);\n        }}\n      >\n        {name}\n      </Button>\n    </Box>\n  );\n};\n","import { Box, Button, Typography } from \"@mui/material\";\nimport { IApiMetaRoom } from \"./MetaNavigation\";\nimport coin from \"../../assets/images/coin.png\";\nimport { useHistory } from \"react-router\";\nexport const MetaHeader = ({\n  room,\n  direction,\n  previousRoom,\n}: {\n  room: IApiMetaRoom | undefined;\n  direction: string;\n  previousRoom: IApiMetaRoom | undefined;\n}) => {\n  const history = useHistory();\n  const onCreateClick = () => {\n    history.push(\"/newchat\", {\n      metaDirection: direction,\n      metaRoom: previousRoom,\n    });\n  };\n  if (!room?.name) {\n    return (\n      <Box\n        sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}\n      >\n        <Box sx={{ alignItems: \"center\", display: \"flex\" }}>\n          <Typography>\n            This space is empty. You can build your own room here for{\" \"}\n            <b>120 </b>\n          </Typography>\n          <img src={coin} style={{ width: 20, height: 20 }} alt={\"coin\"} />\n\n          {/* <CreateNewChatButton\n            onPress={() =>\n              navigation.navigate(ROUTES.NEWCHAT, {\n                metaDirection: direction,\n                metaRoom: previousRoom,\n              })\n            }\n          /> */}\n        </Box>\n        <Button onClick={onCreateClick}>Create Meta Room</Button>\n      </Box>\n    );\n  }\n  return (\n    <Box\n      sx={{\n        display: \"flex\",\n        justifyContent: \"center\",\n        alignItems: \"center\",\n        flexDirection: \"column\",\n      }}\n    >\n      <Typography sx={{ fontWeight: \"bold\", fontSize: 18 }}>\n        {room.name}\n      </Typography>\n      <Typography>{room.description}</Typography>\n    </Box>\n  );\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { CompassItem } from \"./CompassItem\";\nimport {\n  Box,\n  CircularProgress,\n  IconButton,\n  Modal,\n  useTheme,\n} from \"@mui/material\";\nimport { MetaHeader } from \"./MetaHeader\";\nimport xmpp from \"../../xmpp\";\nimport { httpWithAuth } from \"../../http\";\nimport { CONFERENCEDOMAIN, DOMAIN } from \"../../constants\";\nimport { useStoreState } from \"../../store\";\nimport ExploreIcon from \"@mui/icons-material/Explore\";\ntype IRoom = {\n  _id: string;\n  contractAddress: string;\n  createdAt: string;\n  description: string;\n  name: string;\n  ownerId: string;\n};\n\nexport interface IApiMetaRoom {\n  _id: string;\n  contractAddress: string;\n  createdAt: Date;\n  description: string;\n  name: string;\n  ownerId: string;\n  ownerNavLinks: {\n    east: IRoom | null;\n    north: IRoom | null;\n    south: IRoom | null;\n    west: IRoom | null;\n  };\n  roomJid: string;\n  updatedAt: Date;\n  userNavLinks: {\n    east: IRoom | null;\n    north: IRoom | null;\n    south: IRoom | null;\n    west: IRoom | null;\n  };\n}\n\nexport interface IMetaNavigation {\n  chatId: string;\n  open: boolean;\n  onClose: () => void;\n}\nconst DIRECTIONS = {\n  NORTH: \"north\",\n  WEST: \"west\",\n  SOUTH: \"south\",\n  EAST: \"east\",\n};\nconst SHORT_DIRECTIONS: Record<string, string> = {\n  north: \"n\",\n  west: \"w\",\n  south: \"s\",\n  east: \"e\",\n};\n\nconst OPOSITE_DIRECTIONS: Record<string, string> = {\n  [DIRECTIONS.WEST]: DIRECTIONS.EAST,\n  [DIRECTIONS.EAST]: DIRECTIONS.WEST,\n  [DIRECTIONS.SOUTH]: DIRECTIONS.NORTH,\n  [DIRECTIONS.NORTH]: DIRECTIONS.SOUTH,\n};\n\nconst getOpositeDirection = (direction: string) => {\n  return OPOSITE_DIRECTIONS[direction];\n};\n\n// const findRoom = (id: string | undefined, arr: IApiMetaRoom[]) => {\n//   if (!id) {\n//     return null;\n//   }\n//   const room = arr.find((item) => item.idAddress === id);\n//   if (!room) {\n//     return null;\n//   }\n//   return room;\n// };\n\nconst emptyMetaRoom = {\n  name: \"\",\n  description: \"\",\n  ownerNavLinks: { west: null, east: null, north: null, south: null },\n  ownerId: \"\",\n  contractAddress: \"\",\n  createdAt: new Date(),\n  _id: \"\",\n  roomJid: \"\",\n  updatedAt: new Date(),\n  userNavLinks: { west: null, east: null, north: null, south: null },\n};\n\nconst style = {\n  position: \"absolute\" as \"absolute\",\n  top: \"50%\",\n  left: \"50%\",\n  transform: \"translate(-50%, -50%)\",\n  p: 2,\n  outline: \"none\",\n};\nconst roomRoute = \"/room\";\nexport const MetaNavigation: React.FC<IMetaNavigation> = ({\n  chatId,\n  open,\n  onClose,\n}) => {\n  const [previousDirection, setPreviousDirection] = useState(\"\");\n  const [loading, setLoading] = useState(false);\n\n  const [previousRoom, setPreviuosRoom] = useState<IApiMetaRoom | undefined>();\n  const [currentMetaRoom, setCurrentMetaRoom] =\n    useState<IApiMetaRoom>(emptyMetaRoom);\n  const user = useStoreState((state) => state.user);\n\n  const theme = useTheme();\n\n  const getCurrentRoom = async () => {\n    setLoading(true);\n    try {\n      const res = await httpWithAuth().get(roomRoute + \"/getRoom/\" + chatId);\n      setCurrentMetaRoom(res.data.result);\n    } catch (error) {\n      setCurrentMetaRoom(emptyMetaRoom);\n      console.log(error);\n    }\n    setLoading(false);\n  };\n\n  useEffect(() => {\n    if (!chatId) {\n      setCurrentMetaRoom(emptyMetaRoom);\n    }\n    if (chatId) {\n      getCurrentRoom();\n    }\n  }, [chatId]);\n  const checkEmptyDirections = () => {\n    return (\n      !currentMetaRoom?.ownerNavLinks?.south &&\n      !currentMetaRoom?.ownerNavLinks?.east &&\n      !currentMetaRoom?.ownerNavLinks?.west &&\n      !currentMetaRoom?.ownerNavLinks?.north &&\n      !currentMetaRoom?.userNavLinks?.south &&\n      !currentMetaRoom?.userNavLinks?.east &&\n      !currentMetaRoom?.userNavLinks?.west &&\n      !currentMetaRoom?.userNavLinks?.north\n    );\n  };\n\n  const sendMessage = (chatName: string, jid: string, isPrevious: boolean) => {\n    const textEnter =\n      user.firstName + \" \" + user.lastName + \" \" + \"has joined\" + \" \" + \"<-\";\n    const textLeave =\n      user.firstName + \" \" + user.lastName + \" \" + \"has left\" + \" \" + \"->\";\n    const data = {\n      senderFirstName: user.firstName,\n      senderLastName: user.lastName,\n      senderWalletAddress: user.walletAddress,\n      isSystemMessage: true,\n      tokenAmount: 0,\n      receiverMessageId: \"\",\n      mucname: chatName,\n      photoURL: user.profileImage,\n      roomJid: jid,\n      isReply: false,\n      mainMessage: undefined,\n    };\n    xmpp.sendMessageStanza(jid, isPrevious ? textLeave : textEnter, data);\n  };\n  const sendRoomJoin = async () => {\n    try {\n      const res = await httpWithAuth().post(roomRoute + \"/join/\" + chatId, {});\n      console.log(res.data);\n    } catch (error) {\n      console.log(error);\n    }\n  };\n  useEffect(() => {\n    if (previousRoom?.name) {\n      sendMessage(\n        previousRoom.name,\n        previousRoom.roomJid + CONFERENCEDOMAIN,\n        true\n      );\n    }\n  }, [previousRoom]);\n  useEffect(() => {\n    if (currentMetaRoom.name) {\n      sendMessage(\n        currentMetaRoom.name,\n        currentMetaRoom.roomJid + CONFERENCEDOMAIN,\n        false\n      );\n      sendRoomJoin();\n    }\n  }, [currentMetaRoom]);\n\n  if (!currentMetaRoom.roomJid && !previousDirection) {\n    return null;\n  }\n\n  const renderDirections = (direction: string) => {\n    const oppositePreviousDirection = getOpositeDirection(previousDirection);\n    if (checkEmptyDirections() && direction === oppositePreviousDirection) {\n      return (\n        <CompassItem\n          name={oppositePreviousDirection + \":\" + previousRoom?.name}\n          chatId={chatId}\n          room={previousRoom}\n          setDirection={() => {\n            setPreviousDirection(oppositePreviousDirection);\n            setPreviuosRoom(previousRoom);\n          }}\n        />\n      );\n    }\n    return (\n      <CompassItem\n        name={\n          SHORT_DIRECTIONS[direction] +\n          \":\" +\n          (currentMetaRoom.ownerNavLinks[direction]?.name ||\n            currentMetaRoom.userNavLinks[direction]?.name)\n        }\n        chatId={chatId}\n        room={\n          currentMetaRoom?.ownerNavLinks?.[direction] ||\n          currentMetaRoom?.userNavLinks?.[direction]\n        }\n        setDirection={() => {\n          setPreviousDirection(direction);\n          setPreviuosRoom(currentMetaRoom);\n        }}\n      />\n    );\n  };\n  return (\n    <Modal open={open} onClose={onClose}>\n      <Box sx={style}>\n        {loading ? (\n          <CircularProgress size={50} />\n        ) : (\n          <Box>\n            <Box\n              sx={{ bgcolor: \"white\", mb: \"10px\", borderRadius: \"10px\", p: 2 }}\n            >\n              <MetaHeader\n                room={currentMetaRoom}\n                direction={previousDirection}\n                previousRoom={previousRoom}\n              />\n            </Box>\n            <Box\n              sx={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                justifyContent: \"center\",\n                alignItems: \"center\",\n                bgcolor: \"white\",\n                borderRadius: \"10px\",\n                p: 2,\n              }}\n            >\n              {renderDirections(DIRECTIONS.NORTH)}\n              <Box\n                sx={{\n                  display: \"grid\",\n                  gridTemplateColumns: \"repeat(3, 1fr)\",\n                  alignItems: \"center\",\n                  justifyContent: \"center\",\n                }}\n              >\n                <Box sx={{ display: \"flex\" }}>\n                  {renderDirections(DIRECTIONS.WEST)}\n                </Box>\n                <Box\n                  sx={{\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                    alignItems: \"center\",\n                  }}\n                >\n                  <IconButton sx={{ color: theme.palette.primary.main }}>\n                    <ExploreIcon fontSize=\"large\" />\n                  </IconButton>\n                </Box>\n                <Box sx={{ display: \"flex\" }}>\n                  {renderDirections(DIRECTIONS.EAST)}\n                </Box>\n              </Box>\n              {renderDirections(DIRECTIONS.SOUTH)}\n            </Box>\n          </Box>\n        )}\n      </Box>\n    </Modal>\n  );\n};\n","import { MessageInput } from '@chatscope/chat-ui-kit-react';\nimport * as React from 'react';\n\n\ninterface CustomMessageInputProps {\n    onPaste:any;\n    placeholder:string;\n    onChange:(innerHtml: string, textContent: string, innerText: string, nodes: NodeList) => void;\n    onSend:(innerHtml: string, textContent: string, innerText: string, nodes: NodeList) => void;\n    sendFile:(file: File, isReply: boolean) => void\n}\n\nconst CustomMessageInput = (props: CustomMessageInputProps) => {\n\n    const {\n        onPaste,\n        placeholder,\n        onChange,\n        onSend,\n        sendFile\n    } = props;\n\n    const fileRef = React.useRef(null);\n\n    return (\n        <div>\n            <MessageInput\n            onPaste={onPaste}\n            placeholder={placeholder}\n            onChange={onChange}\n            onSend={onSend}\n            onAttachClick={() => fileRef.current.click()}\n            />\n            <input\n            type=\"file\"\n            name=\"file\"\n            id=\"file\"\n            onChange={(event) => sendFile(event.target.files[0], true)}\n            ref={fileRef}\n            style={{ display: \"none\" }}\n            />\n        </div>\n    );\n};\n\nexport default CustomMessageInput;\n\n","import React, { useState } from \"react\";\nimport {\n  ChatContainer,\n  ConversationHeader,\n  MessageInput,\n  MessageList,\n  TypingIndicator,\n} from \"@chatscope/chat-ui-kit-react\";\nimport { Box, Checkbox, Divider, IconButton, Typography } from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Message } from \"../Messages/Message\";\nimport { TMessageHistory, TUserChatRooms, useStoreState } from \"../../../store\";\nimport xmpp from \"../../../xmpp\";\nimport * as DOMPurify from \"dompurify\";\nimport { SystemMessage } from \"../Messages/SystemMessage\";\nimport CustomMessageInput from \"./CustomMessageInput\";\nimport { TProfile } from \"../../../pages/Profile/types\";\nimport { IMessagePosition } from \"../../../pages/ChatInRoom/Chat\";\nimport { getPosition, stripHtml } from \"../../../utils\";\nimport { useHistory, useParams } from \"react-router\";\nimport { createMainMessageForThread } from \"../../../utils/createMessage\";\n\ninterface ThreadContainerProps {\n  roomData: {\n    jid: string;\n    name: string;\n    room_background: string;\n    room_thumbnail: string;\n    users_cnt: string;\n  };\n  handleSetThreadView: (value: boolean) => void;\n  isThreadView: boolean;\n  chooseRoom: (jid: string) => void;\n  profile: TProfile;\n  currentPickedRoom: TUserChatRooms;\n  currentRoom: string;\n  onYReachStart: () => void;\n  sendFile: (file: File, isReply: boolean) => void;\n  showInChannel: boolean;\n  toggleMediaModal: (value: boolean, message?: TMessageHistory) => void;\n  handleShowInChannel: (event: React.ChangeEvent<HTMLInputElement>) => void;\n  toggleTransferDialog: (value: boolean, message?: TMessageHistory) => void;\n}\n\nconst ThreadContainer: React.FC<ThreadContainerProps> = ({\n  roomData,\n  handleSetThreadView,\n  isThreadView,\n  profile,\n  currentPickedRoom,\n  currentRoom,\n  onYReachStart,\n  sendFile,\n  toggleMediaModal,\n  toggleTransferDialog,\n  handleShowInChannel,\n  showInChannel,\n}) => {\n  const currentThreadViewMessage = useStoreState(\n    (store) => store.currentThreadViewMessage\n  );\n  const [myThreadMessage, setMyThreadMessage] = useState(\"\");\n\n  const user = useStoreState((store) => store.user);\n  const userChatRooms = useStoreState((store) => store.userChatRooms);\n  const messages = useStoreState((state) => state.historyMessages);\n\n  const { roomJID } = useParams<{ roomJID: string }>();\n\n  const threadWindowMessages = messages.filter(\n    (item: TMessageHistory) =>\n      item.roomJID.includes(roomJID) &&\n      item.data.isReply &&\n      item.data?.mainMessage?.id === currentThreadViewMessage.id\n  );\n  const currentUntrackedChatRoom = useStoreState(\n    (store) => store.currentUntrackedChatRoom\n  );\n  const loaderArchive = useStoreState((store) => store.loaderArchive);\n  const history = useHistory();\n  const setThreadMessage = (value: string) => {\n    setMyThreadMessage(value);\n    xmpp.isComposing(\n      user.walletAddress,\n      roomData.jid,\n      user.firstName + \" \" + user.lastName\n    );\n  };\n  const handleChatDetailClick = () => {\n    history.push(\"/chatDetails/\" + currentUntrackedChatRoom);\n  };\n\n  const handlePaste = (event: any) => {\n    let item = Array.from(event.clipboardData.items).find((x: any) =>\n      /^image\\//.test(x.type)\n    );\n    if (item) {\n      // @ts-ignore\n      let blob = item.getAsFile();\n      sendFile(blob, false);\n    }\n  };\n  const sendThreadMessage = (button: any) => {\n    if (myThreadMessage.trim().length > 0) {\n      let userAvatar = \"\";\n      if (profile?.profileImage) {\n        userAvatar = profile?.profileImage;\n      }\n      const clearMessageFromHtml = DOMPurify.sanitize(myThreadMessage);\n      const finalMessageTxt = stripHtml(clearMessageFromHtml);\n\n      if (finalMessageTxt.trim().length > 0) {\n        const data = {\n          senderFirstName: user.firstName,\n          senderLastName: user.lastName,\n          senderWalletAddress: user.walletAddress,\n          isSystemMessage: false,\n          tokenAmount: 0,\n          receiverMessageId: currentThreadViewMessage.data.receiverMessageId,\n          mucname: roomData.name,\n          photoURL: user.profileImage,\n          roomJid: roomData.jid,\n          isReply: true,\n          mainMessage: createMainMessageForThread(currentThreadViewMessage),\n          showInChannel: showInChannel,\n          push: true,\n        };\n\n        xmpp.sendMessageStanza(currentRoom, finalMessageTxt, data);\n      }\n    }\n  };\n\n  return (\n    <ChatContainer\n      style={{\n        borderLeftWidth: \"2px\",\n      }}\n    >\n      {!!roomData && (\n        <div is=\"ConversationHeader\">\n          <ConversationHeader\n            style={{\n              height: \"70px\",\n            }}\n          >\n            <ConversationHeader.Content\n              datatype=\"dad\"\n              userName={\n                <div>\n                  <Typography fontWeight={\"bold\"}>Thread</Typography>\n                  <Typography>{roomData.name}</Typography>\n                </div>\n              }\n              onClick={handleChatDetailClick}\n            />\n            <ConversationHeader.Actions>\n              <IconButton\n                sx={{ color: \"black\" }}\n                onClick={() => handleSetThreadView(false)}\n              >\n                <CloseIcon />\n              </IconButton>\n            </ConversationHeader.Actions>\n          </ConversationHeader>\n          {/* Main Message Preview */}\n          <Box width={\"100%\"} padding={2}>\n            <span>\n              <div>\n                <Message\n                  onMediaMessageClick={toggleMediaModal}\n                  toggleTransferDialog={toggleTransferDialog}\n                  isThread={isThreadView}\n                  key={currentThreadViewMessage.id}\n                  is={\"Message\"}\n                  position={{ position: \"single\", type: \"single\" }}\n                  message={currentThreadViewMessage}\n                  onMessageButtonClick={sendThreadMessage}\n                />\n              </div>\n            </span>\n          </Box>\n          <Divider>{currentThreadViewMessage.numberOfReplies}</Divider>\n        </div>\n      )}\n\n      <MessageList\n        style={{\n          backgroundImage: currentPickedRoom?.room_background\n            ? `url(${currentPickedRoom.room_background})`\n            : \"white\",\n          backgroundRepeat: \"no-repeat\",\n          backgroundSize: \"100% 100%\",\n        }}\n        disableOnYReachWhenNoScroll={true}\n        typingIndicator={\n          !!userChatRooms.filter((e) => e.jid === currentRoom)[0]\n            ?.composing && (\n            <TypingIndicator\n              style={{ opacity: \".6\" }}\n              content={\n                userChatRooms.filter((e) => e.jid === currentRoom)[0]?.composing\n              }\n            />\n          )\n        }\n      >\n        {threadWindowMessages.map((message, index, arr) =>\n          message.data.isSystemMessage === \"false\" ? (\n            <Message\n              onMediaMessageClick={toggleMediaModal}\n              toggleTransferDialog={toggleTransferDialog}\n              isThread={true}\n              key={message.id}\n              is={\"Message\"}\n              position={getPosition(arr, message, index)}\n              message={message}\n              onMessageButtonClick={sendThreadMessage}\n            />\n          ) : (\n            <SystemMessage\n              key={message.id}\n              is={\"Message\"}\n              message={message}\n              userJid={xmpp.client?.jid?.toString()}\n            />\n          )\n        )}\n        {threadWindowMessages.length <= 0 ||\n          (!currentRoom && (\n            <MessageList.Content\n              style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                justifyContent: \"center\",\n                height: \"100%\",\n                textAlign: \"center\",\n                fontSize: \"1.2em\",\n              }}\n            >\n              {!loaderArchive ? (\n                <span>\n                  {!currentRoom && \"To get started, please select a chat room.\"}\n                </span>\n              ) : (\n                \"Loading...\"\n              )}\n            </MessageList.Content>\n          ))}\n        {!loaderArchive && currentRoom && threadWindowMessages.length <= 0 && (\n          <MessageList.Content\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n              justifyContent: \"center\",\n              height: \"100%\",\n              textAlign: \"center\",\n              fontSize: \"1.2em\",\n            }}\n          >\n            Message list is empty\n          </MessageList.Content>\n        )}\n      </MessageList>\n\n      {!!roomData?.name && (\n        <div is={\"MessageInput\"}>\n          <Divider />\n          <Box\n            borderColor={\"#D3D3D3\"}\n            height=\"30px\"\n            alignItems={\"center\"}\n            flexDirection={\"row\"}\n            display=\"flex\"\n            width={\"100%\"}\n          >\n            <Checkbox\n              checked={showInChannel}\n              onChange={handleShowInChannel}\n              inputProps={{ \"aria-label\": \"controlled\" }}\n            />\n            <Typography>Also send to room</Typography>\n          </Box>\n\n          <CustomMessageInput\n            onChange={setThreadMessage}\n            onPaste={handlePaste}\n            onSend={sendThreadMessage}\n            placeholder=\"Type message here\"\n            sendFile={sendFile}\n          />\n        </div>\n      )}\n    </ChatContainer>\n  );\n};\n\nexport default ThreadContainer;\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport {\n  Dialog,\n  DialogContent,\n  Divider,\n  Button,\n  Typography,\n  TextField,\n} from \"@mui/material\";\nimport { transferCoin } from \"../../http\";\n\nimport coin from \"../../assets/images/coin.png\";\nimport SendIcon from \"@mui/icons-material/Send\";\nimport BlockIcon from \"@mui/icons-material/Block\";\nimport xmpp from \"../../xmpp\";\nimport { TMessageHistory, useStoreState } from \"../../store\";\nimport { coinReplacedName, coinsMainName } from \"../../config/config\";\nimport { DOMAIN } from \"../../constants\";\nimport { createPrivateChat } from \"../../helpers/chat/createPrivateChat\";\nimport { useSnackbar } from \"../../context/SnackbarContext\";\nimport ReplyIcon from '@mui/icons-material/Reply';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { walletToUsername } from \"../../utils/walletManipulation\";\n\nconst dialogItems = [1, 3, 5, \"x\"];\ninterface IProps {\n  open: boolean;\n  onClose: () => void;\n  loading?: boolean;\n  message: TMessageHistory | null;\n  onPrivateRoomClick: (jid: string) => void;\n  onThreadClick:() => void;\n  onEditClick:(value:boolean, message:TMessageHistory) => void;\n  onDeleteClick:(value:boolean, message:TMessageHistory) => void;\n}\ntype IDialog = \"dialog\" | \"error\" | \"clarification\" | \"transfer\";\n\nconst dialogTypes: Record<IDialog, IDialog> = {\n  dialog: \"dialog\",\n  error: \"error\",\n  clarification: \"clarification\",\n  transfer: \"transfer\",\n};\n\nexport function ChatTransferDialog({\n  open,\n  onClose,\n  loading,\n  message,\n  onPrivateRoomClick,\n  onThreadClick,\n  onEditClick,\n  onDeleteClick\n}: IProps) {\n  const user = useStoreState((state) => state.user);\n\n  const [coinAmount, setCoinAmount] = useState(1);\n  const [dialogType, setDialogType] = useState<IDialog>(dialogTypes.dialog);\n\n  const balance = useStoreState((store) => store.balance);\n  const setNewUserChatRoom = useStoreState((store) => store.setNewUserChatRoom);\n  const { showSnackbar } = useSnackbar();\n\n  const messageJid = message?.data?.senderJID.split('/')[0];\n  const userJid = useMemo(() => walletToUsername(user.walletAddress) + DOMAIN, []);\n  const isSameUser = userJid === messageJid;\n  const coinData = balance.filter(\n    (el) => !el.tokenType && el.contractAddress.length > 10\n  );\n\n  const openThreadView = () => {\n    onThreadClick()\n    onClose()\n  }\n  \n  const openEditView = () => {\n    onEditClick(true, message);\n    onClose();\n  }\n\n  const handleDelete = () => {\n    onDeleteClick(true, message);\n    onClose();\n  }\n\n  const userToBlackList = (step: \"clarify\" | \"block\") => {\n    if (step === \"clarify\") {\n      setDialogType(dialogTypes.clarification);\n      return;\n    }\n\n    if (step === \"block\") {\n      xmpp.blacklistUser(message.data.senderJID);\n      xmpp.getBlackList();\n      useStoreState\n        .getState()\n        .removeAllInMessageHistory(message.data.senderJID);\n    }\n    onClose();\n  };\n\n  const sendCoins = async (amount?: number) => {\n    const currentCoinAmount = amount ? Number(amount) : Number(coinAmount);\n    try {\n      const res = await transferCoin(\n        \"DPT\",\n        coinData[0].tokenName,\n        currentCoinAmount,\n        message.data.senderWalletAddress\n      );\n      const coinName =\n        coinData[0].tokenName === coinsMainName\n          ? coinReplacedName\n          : coinData[0].tokenName;\n      const sender = user.firstName + \" \" + user.lastName;\n      const receiver =\n        message.data.senderFirstName + \" \" + message.data.senderLastName;\n      const textMessage = `${sender} -> ${coinAmount} ${coinName} -> ${receiver}`;\n      const transactionId = res.data.transaction._id;\n      xmpp.sendSystemMessage(\n        message.roomJID,\n        user.firstName,\n        user.lastName,\n        user.walletAddress,\n        textMessage,\n        currentCoinAmount,\n        message.id,\n        transactionId\n      );\n\n      onClose();\n    } catch (error) {\n      console.log(error);\n      showSnackbar(\"error\", \"An error occurred during the coin transfer.\");\n      onClose();\n    }\n  };\n\n  const openPrivateRoom = () => {\n    createPrivateChat(\n      user.walletAddress,\n      message.data.senderWalletAddress,\n      user.firstName,\n      message.data.senderFirstName,\n      message.data.senderJID\n    )\n      .then((result) => {\n        if (result.isNewRoom) {\n          const temporaryRoomData = {\n            jid: result.roomJid,\n            name: result.roomName,\n            room_background: \"none\",\n            room_thumbnail: \"none\",\n            users_cnt: \"2\",\n            unreadMessages: 0,\n            composing: \"\",\n            toUpdate: true,\n            description: \"\",\n          };\n          setNewUserChatRoom(temporaryRoomData);\n          onPrivateRoomClick(result.roomJid);\n        } else {\n          onPrivateRoomClick(result.roomJid);\n        }\n      })\n      .catch((error) => {\n        console.log(\"openPrivateRoom Error: \", error);\n      });\n    onClose();\n  };\n\n  const renderDialogContent = () => {\n    if (!message) return null;\n    switch (dialogType) {\n      case dialogTypes.clarification:\n        return (\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n            }}\n          >\n            {\"Are you sure you want to block the user?\"}\n            <Button\n              onClick={() => userToBlackList(\"block\")}\n              variant=\"outlined\"\n              size=\"small\"\n            >\n              To block list\n            </Button>\n          </div>\n        );\n      case dialogTypes.dialog:\n        return (\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n            }}\n          >\n            {!isSameUser&&<div>\n              Reward{\" \"}\n              <strong>\n                {message.data.senderFirstName +\n                  \" \" +\n                  message.data.senderLastName}\n              </strong>{\" \"}\n              with coins\n            </div>}\n\n            {!isSameUser&&<div\n              style={{\n                display: \"flex\",\n                justifyContent: \"space-between\",\n                alignItems: \"center\",\n                margin: \"10px 0px 10px 0px\",\n              }}\n            >\n              {dialogItems.map((item) => (\n                <div\n                  key={item}\n                  style={{\n                    textAlign: \"center\",\n                    cursor: \"pointer\",\n                  }}\n                  onClick={() => {\n                    typeof item === \"number\"\n                      ? sendCoins(item)\n                      : setDialogType(dialogTypes.transfer);\n                  }}\n                >\n                  <img\n                    src={coin}\n                    style={{\n                      width: 25,\n                      height: 25,\n                    }}\n                    alt={\"coin\"}\n                  />\n                  <Typography\n                    sx={{\n                      fontWeight: \"bold\",\n                    }}\n                  >\n                    {item}\n                  </Typography>\n                </div>\n              ))}\n            </div>}\n            {!isSameUser&&<Divider\n              style={{\n                margin: \"10px\",\n              }}\n            />}\n            {!isSameUser&&<Button\n              onClick={openPrivateRoom}\n              variant=\"outlined\"\n              startIcon={<SendIcon />}\n            >\n              Direct message\n            </Button>}\n            <Button\n              style={{\n                margin: \"10px 0px 0px 0px\",\n              }}\n              onClick={openThreadView}\n              variant=\"outlined\"\n              startIcon={<ReplyIcon />}\n            >\n              Reply\n            </Button>\n\n            {isSameUser&&\n              <Button\n                style={{\n                  margin: \"10px 0px 0px 0px\",\n                }}\n                onClick={openEditView}\n                variant=\"outlined\"\n                startIcon={<EditIcon />}\n              >\n                Edit\n              </Button>\n            }\n\n            {isSameUser&&\n              <Button\n                style={{\n                  margin: \"10px 0px 0px 0px\",\n                }}\n                onClick={handleDelete}\n                variant=\"outlined\"\n                startIcon={<EditIcon />}\n              >\n                Delete\n              </Button>\n            }\n              \n              {!isSameUser&&<Divider\n              style={{\n                margin: \"10px\",\n              }}\n            />}\n            {!isSameUser&&<div\n            style={{\n              display:'flex',\n              alignItems:\"center\",\n              flexDirection:\"column\"\n            }}\n            >\n              <Button\n                onClick={() => userToBlackList(\"clarify\")}\n                variant=\"contained\"\n                startIcon={<BlockIcon />}\n              >\n                Block this user\n              </Button>\n              <Typography\n                style={{\n                  textAlign: \"center\",\n                }}\n                variant=\"caption\"\n                display=\"block\"\n                gutterBottom\n              >\n                Stop seeing this user.\n              </Typography>\n            </div>}\n          </div>\n        );\n      case dialogTypes.transfer:\n        return (\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n            }}\n          >\n            <TextField\n              id=\"standard-basic\"\n              type={\"number\"}\n              label=\"Enter transfer amount\"\n              variant=\"standard\"\n              onChange={(event) => setCoinAmount(Number(event.target.value))}\n            />\n            <Button\n              style={{\n                marginTop: 10,\n              }}\n              onClick={() => sendCoins()}\n              variant=\"outlined\"\n              size=\"small\"\n            >\n              Send coins\n            </Button>\n          </div>\n        );\n\n      default:\n        return null;\n    }\n  };\n  return (\n    <Dialog open={open} onClose={onClose} maxWidth={\"xl\"}>\n      <DialogContent>{renderDialogContent()}</DialogContent>\n    </Dialog>\n  );\n}\n","import React from \"react\";\nimport Box from \"@mui/material/Box\";\n\nimport Modal from \"@mui/material/Modal\";\nimport { TCombinedMimeType } from \"../../constants\";\nimport { IconButton } from \"@mui/material\";\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst style = {\n  position: \"absolute\" as \"absolute\",\n  top: \"50%\",\n  left: \"50%\",\n  transform: \"translate(-50%, -50%)\",\n  bgcolor: \"background.paper\",\n  boxShadow: 24,\n  p: 4,\n  borderRadius: '10px'\n};\n\ninterface IChatMediaModal {\n  open: boolean;\n  onClose: () => void;\n  mimetype: TCombinedMimeType;\n  url: string;\n}\n\nexport const ChatMediaModal: React.FC<IChatMediaModal> = ({\n  open,\n  onClose,\n  mimetype,\n  url,\n}) => {\n  const renderMediaContent = () => {\n    switch (mimetype) {\n      case \"image/jpeg\":\n      case \"image/png\":\n      case \"image/jpg\":\n        return <img src={url} alt={\"image1\"} style={{ maxWidth: \"100%\", maxHeight: '90vh' }} />;\n\n      default:\n        return null;\n    }\n  };\n  return (\n    <Modal\n      open={open}\n      onClose={onClose}\n      aria-labelledby=\"modal-modal-title\"\n      aria-describedby=\"modal-modal-description\"\n    >\n      <Box sx={style}>\n        <IconButton onClick={onClose} sx={{position: 'absolute', top: 0, right: 0, color: 'black'}}>\n          <CloseIcon />\n        </IconButton>\n        {renderMediaContent()}\n      </Box>\n    </Modal>\n  );\n};\n","import React, { useCallback, useState } from \"react\";\nimport xmpp from \"../../xmpp\";\nimport { AudioRecorder, useAudioRecorder } from \"react-audio-voice-recorder\";\nimport { uploadFile } from \"../../http\";\nimport { TProfile } from \"../../pages/Profile/types\";\nimport { useStoreState } from \"../../store\";\nimport { Box, CircularProgress } from \"@mui/material\";\nimport { useSnackbar } from \"../../context/SnackbarContext\";\n\ninterface IProps {\n  profile: TProfile;\n  currentRoom: string;\n  roomData: any;\n}\n\nexport function ChatAudioMessageDialog({\n  profile,\n  currentRoom,\n  roomData,\n}: IProps) {\n  const user = useStoreState((store) => store.user);\n  const [loading, setLoading] = useState(false);\n  const recorderControls = useAudioRecorder();\n  const { showSnackbar } = useSnackbar();\n  const addAudioElement = (blob: Blob) => {\n    setLoading(true);\n    let formData = new FormData();\n    formData.append(\"files\", blob);\n    uploadFile(formData)\n      .then((result) => {\n        let userAvatar = \"\";\n        if (profile?.profileImage) {\n          userAvatar = profile?.profileImage;\n        }\n\n        result.data.results.map(async (item: any) => {\n          const data = {\n            firstName: user.firstName,\n            lastName: user.lastName,\n            walletAddress: user.walletAddress,\n            chatName: roomData.name,\n            userAvatar: userAvatar,\n            createdAt: item.createdAt,\n            expiresAt: item.expiresAt,\n            fileName: item.filename,\n            isVisible: item.isVisible,\n            location: item.location,\n            locationPreview: item.locationPreview,\n            mimetype: item.mimetype,\n            originalName: item.originalname,\n            ownerKey: item.ownerKey,\n            size: item.size,\n            duration: item?.duration,\n            updatedAt: item.updatedAt,\n            userId: item.userId,\n            waveForm: \"\",\n            attachmentId: item._id,\n            wrappable: true,\n          };\n          xmpp.sendMediaMessageStanza(currentRoom, data);\n        });\n      })\n      .catch((error) => {\n        console.log(error);\n        showSnackbar(\"error\", \"An error occurred while loading your audio.\");\n      });\n    setLoading(false);\n\n  };\n\n  return (\n    <Box>\n      <Box style={{ display: loading ? \"none\" : \"block\" }}>\n        <AudioRecorder\n          recorderControls={recorderControls}\n          onRecordingComplete={addAudioElement}\n        />\n      </Box>\n      {loading && <CircularProgress color={\"secondary\"} size={\"20px\"} />}\n    </Box>\n  );\n}\n","import React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport xmpp from \"../../xmpp\";\nimport {\n  TActiveRoomFilter,\n  TMessageHistory,\n  TUserChatRooms,\n  useStoreState,\n} from \"../../store\";\nimport { getPublicProfile, uploadFile } from \"../../http\";\nimport { TProfile } from \"../Profile/types\";\nimport { format, formatDistance, subDays } from \"date-fns\";\nimport * as DOMPurify from \"dompurify\";\n\nimport {\n  MainContainer,\n  Avatar,\n  ChatContainer,\n  MessageList,\n  MessageInput,\n  Conversation,\n  ConversationList,\n  Sidebar,\n  Search,\n  ConversationHeader,\n  TypingIndicator,\n  MessageModel,\n} from \"@chatscope/chat-ui-kit-react\";\nimport { Message } from \"../../components/Chat/Messages/Message\";\nimport { SystemMessage } from \"../../components/Chat/Messages/SystemMessage\";\nimport {\n  Button,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  DialogTitle,\n  IconButton,\n  useMediaQuery,\n  useTheme,\n  Box,\n  Slide,\n  Stack,\n  Typography,\n  Divider,\n} from \"@mui/material\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport { useDropzone } from \"react-dropzone\";\nimport { MetaNavigation } from \"../../components/MetaNavigation/MetaNavigation\";\nimport QrCodeIcon from \"@mui/icons-material/QrCode\";\nimport { QrModal } from \"../Profile/QrModal\";\nimport { CONFERENCEDOMAIN } from \"../../constants\";\nimport { ROOMS_FILTERS } from \"../../config/config\";\nimport ThreadContainer from \"../../components/Chat/Threads/ThreadContainer\";\nimport { ChatTransferDialog } from \"../../components/Chat/ChatTransferDialog\";\nimport { ChatMediaModal } from \"../../components/Chat/ChatMediaModal\";\nimport { ChatAudioMessageDialog } from \"../../components/Chat/ChatAudioRecorder\";\nimport { generateChatLink, getPosition, stripHtml } from \"../../utils\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport { DeleteDialog } from \"../../components/DeleteDialog\";\nimport { useSnackbar } from \"../../context/SnackbarContext\";\nimport { createMainMessageForThread } from \"../../utils/createMessage\";\n\nexport type IMessagePosition = {\n  position: MessageModel[\"position\"];\n  type: string;\n  separator?: string;\n};\n\nexport interface IButtons {\n  name: string;\n  notDisplayedValue: string;\n  value: string;\n}\n\nconst NO_ROOM_PICKED = \"none\" + CONFERENCEDOMAIN;\nconst filterChatRooms = (\n  rooms: TUserChatRooms[],\n  filter: TActiveRoomFilter\n) => {\n  if (filter === ROOMS_FILTERS.official || filter === ROOMS_FILTERS.favourite) {\n    return rooms.filter(\n      (item) =>\n        item.group === ROOMS_FILTERS.official ||\n        item.group === ROOMS_FILTERS.favourite\n    );\n  }\n\n  return rooms.filter(\n    (item) =>\n      item.group !== ROOMS_FILTERS.official &&\n      item.group !== ROOMS_FILTERS.favourite\n  );\n};\n\nexport function ChatInRoom() {\n  const messages = useStoreState((state) => state.historyMessages);\n  const user = useStoreState((store) => store.user);\n  const userChatRooms = useStoreState((store) => store.userChatRooms);\n  const currentThreadViewMessage = useStoreState(\n    (store) => store.currentThreadViewMessage\n  );\n  const setCurrentThreadViewMessage = useStoreState(\n    (store) => store.setCurrentThreadViewMessage\n  );\n  const loaderArchive = useStoreState((store) => store.loaderArchive);\n  const currentUntrackedChatRoom = useStoreState(\n    (store) => store.currentUntrackedChatRoom\n  );\n  const { roomJID } = useParams<{ roomJID: string }>();\n\n  const [profile, setProfile] = useState<TProfile>();\n  const [myMessage, setMyMessage] = useState(\"\");\n\n  const [showMetaNavigation, setShowMetaNavigation] = useState(true);\n  const [isThreadView, setThreadView] = useState(false);\n  const [showInChannel, setShowInChannel] = React.useState(false);\n  const [isEditing, setIsEditing] = React.useState(false);\n  const [currentEditMessage, setCurrentEditMessage] =\n    React.useState<TMessageHistory>();\n  const [showDeleteDialog, setShowDeleteDialog] =\n    React.useState<boolean>(false);\n  const [currentDeleteMessage, setCurrentDeleteMessage] =\n    React.useState<TMessageHistory>();\n\n  const handleSetThreadView = (value: boolean) => setThreadView(value);\n  const handleSetCurrentThreadViewMessage = (threadMessage: TMessageHistory) =>\n    setCurrentThreadViewMessage(threadMessage);\n  const handleShowInChannel = (event: React.ChangeEvent<HTMLInputElement>) =>\n    setShowInChannel(event.target.checked);\n\n  const handleCurrentEditMessage = (message: TMessageHistory) =>\n    setCurrentEditMessage(message);\n\n  const handleSetCurrentDeleteMessage = (message: TMessageHistory) =>\n    setCurrentDeleteMessage(message);\n\n  const handleCloseDeleteMessageDialog = () => {\n    setShowDeleteDialog(false);\n    setCurrentDeleteMessage(null);\n  };\n\n  const [currentRoom, setCurrentRoom] = useState(\"\");\n  const currentPickedRoom = useMemo(() => {\n    return userChatRooms.find((item) => item.jid === currentRoom);\n  }, [userChatRooms, currentRoom]);\n\n  const mainWindowMessages = messages.filter(\n    (item: TMessageHistory) =>\n      item.data.roomJid === roomJID + CONFERENCEDOMAIN &&\n      (item.data.showInChannel || !item.data.isReply)\n  );\n\n  const [roomData, setRoomData] = useState<{\n    jid: string;\n    name: string;\n    room_background: string;\n    room_thumbnail: string;\n    users_cnt: string;\n  }>({\n    jid: \"\",\n    name: \"\",\n    room_background: \"\",\n    room_thumbnail: \"\",\n    users_cnt: \"\",\n  });\n\n\n  const [transferDialogData, setTransferDialogData] = useState<{\n    open: boolean;\n    message: TMessageHistory | null;\n  }>({ open: false, message: null });\n\n  const [mediaDialogData, setMediaDialogData] = useState<{\n    open: boolean;\n    message: TMessageHistory | null;\n  }>({ open: false, message: null });\n\n  const [isQrModalVisible, setQrModalVisible] = useState(false);\n\n  const [isFileUploading, setFileUploading] = useState(false);\n\n  const [firstLoadMessages, setFirstLoadMessages] = useState(true);\n  const activeRoomFilter = useStoreState((state) => state.activeRoomFilter);\n  const setActiveRoomFilter = useStoreState(\n    (state) => state.setActiveRoomFilter\n  );\n  const openLastMetaRoom = activeRoomFilter === ROOMS_FILTERS.meta;\n  const closeQrModal = () => {\n    setQrModalVisible(false);\n  };\n  const history = useHistory();\n  const fileRef = useRef(null);\n  const { showSnackbar } = useSnackbar();\n  const onDrop = useCallback(\n    (acceptedFiles: File[]) => {\n      sendFile(acceptedFiles[0], false);\n    },\n    [roomData]\n  );\n  const { getRootProps } = useDropzone({\n    onDrop,\n    noClick: true,\n    maxFiles: 1,\n  });\n  const onYReachStart = () => {\n    const filteredMessages = messages.filter(\n      (item: TMessageHistory) => item.roomJID === currentRoom\n    );\n\n    if (loaderArchive) {\n      return;\n    } else {\n      const lastMessageID = filteredMessages[0].id;\n      xmpp.getPaginatedArchive(currentRoom, String(lastMessageID), 10);\n    }\n  };\n\n  useEffect(() => {\n    if (roomJID) {\n      loadMessages(roomJID);\n      setShowMetaNavigation(true);\n    }\n  }, [roomJID]);\n\n  useEffect(() => {\n    getPublicProfile(user.walletAddress).then((result) => {\n      setProfile(result.data.result);\n    });\n  }, []);\n\n  const toggleTransferDialog = (\n    value: boolean,\n    message: TMessageHistory = null\n  ) => {\n    setTransferDialogData({ open: value, message });\n  };\n  const toggleMediaModal = (\n    value: boolean,\n    message: TMessageHistory = null\n  ) => {\n    setMediaDialogData({ open: value, message });\n  };\n\n  const chooseRoom = (jid: string) => {\n    history.push(\"/chat/\" + jid.split(\"@\")[0]);\n    loadMessages(jid);\n  };\n  const loadMessages = (jid: string) => {\n    setCurrentRoom(jid);\n    const currentRoomData = userChatRooms.filter((e) => e.jid === jid)[0];\n    setRoomData(currentRoomData);\n    useStoreState.getState().clearCounterChatRoom(jid);\n    useStoreState.getState().setCurrentUntrackedChatRoom(jid);\n\n    const filteredMessages = messages.filter(\n      (item: TMessageHistory) => item.roomJID === jid\n    );\n    setFirstLoadMessages(true);\n\n    if (\n      !loaderArchive &&\n      filteredMessages.length <= 10 &&\n      filteredMessages.length > 0\n    ) {\n      const lastMessageID = filteredMessages[0].id;\n      xmpp.getPaginatedArchive(jid, String(lastMessageID), 50);\n    }\n  };\n\n  const getConversationInfo = (roomJID: string) => {\n    const messagesInRoom = messages\n      .filter((item: TMessageHistory) => item.roomJID === roomJID)\n      .slice(-1);\n    if (loaderArchive && messagesInRoom.length <= 0) {\n      return \"Loading...\";\n    }\n\n    if (messagesInRoom.length > 0) {\n      return messagesInRoom[0].body;\n    }\n    return \"No messages yet\";\n  };\n\n  const getLastActiveTime = (roomJID: string) => {\n    const messagesInRoom = messages\n      .filter((item: TMessageHistory) => item.roomJID === roomJID)\n      .slice(-1);\n    if (messagesInRoom.length <= 0) {\n      return \"\";\n    }\n\n    return format(new Date(messagesInRoom[0].date), \"H:mm\");\n  };\n\n  const sendMessage = (button: any) => {\n    if (myMessage.trim().length > 0) {\n      let userAvatar = \"\";\n      if (profile?.profileImage) {\n        userAvatar = profile?.profileImage;\n      }\n      const clearMessageFromHtml = DOMPurify.sanitize(myMessage);\n      const finalMessageTxt = stripHtml(clearMessageFromHtml);\n\n      if (finalMessageTxt.trim().length > 0) {\n        if (isEditing) {\n          const data = {\n            senderFirstName: user.firstName,\n            senderLastName: user.lastName,\n            senderWalletAddress: user.walletAddress,\n            isSystemMessage: false,\n            tokenAmount: 0,\n            receiverMessageId: currentEditMessage.data.receiverMessageId,\n            mucname: roomData.name,\n            photoURL: userAvatar,\n            roomJid: roomJID,\n            isReply: false,\n            mainMessage: undefined,\n            push: true,\n          };\n          xmpp.sendReplaceMessageStanza(\n            currentUntrackedChatRoom,\n            finalMessageTxt,\n            currentEditMessage.id.toString(),\n            data\n          );\n          setIsEditing(false);\n        } else {\n          xmpp.sendMessage(\n            currentRoom,\n            user.firstName,\n            user.lastName,\n            userAvatar,\n            user.walletAddress,\n            typeof button === \"object\" ? button.value : finalMessageTxt,\n            typeof button === \"object\" ? button.notDisplayedValue : null\n          );\n        }\n      }\n    }\n  };\n  const sendFile = async (file: File, isReply: boolean) => {\n    const formData = new FormData();\n    formData.append(\"files\", file);\n    setFileUploading(true);\n    try {\n      const result = await uploadFile(formData);\n      let userAvatar = \"\";\n      if (profile?.profileImage) {\n        userAvatar = profile?.profileImage;\n      }\n\n      result.data.results.map(async (item: any) => {\n        let data = {\n          firstName: user.firstName,\n          lastName: user.lastName,\n          walletAddress: user.walletAddress,\n          chatName: roomData.name,\n          userAvatar: userAvatar,\n          createdAt: item.createdAt,\n          expiresAt: item.expiresAt,\n          fileName: item.filename,\n          isVisible: item.isVisible,\n          location: item.location,\n          locationPreview: item.locationPreview,\n          mimetype: item.mimetype,\n          originalName: item.originalname,\n          ownerKey: item.ownerKey,\n          size: item.size,\n          duration: item?.duration,\n          updatedAt: item.updatedAt,\n          userId: item.userId,\n          waveForm: \"\",\n          attachmentId: item._id,\n          wrappable: true,\n          roomJid: currentRoom\n        };\n\n        const additionalDataForThread = {\n          isReply: isReply,\n          mainMessage: isReply\n            ? createMainMessageForThread(currentThreadViewMessage)\n            : undefined,\n          showInChannel: showInChannel,\n        };\n        xmpp.sendMediaMessageStanza(currentRoom, {\n          ...data,\n          ...additionalDataForThread,\n        });\n      });\n    } catch (error) {\n      showSnackbar(\"error\", \"Cannot upload file\");\n    }\n\n    if (fileRef.current) {\n      fileRef.current.value = \"\";\n    }\n    setFileUploading(false);\n  };\n\n  const setMessage = (value) => {\n    setMyMessage(value);\n    xmpp.isComposing(\n      user.walletAddress,\n      roomData.jid,\n      user.firstName + \" \" + user.lastName\n    );\n  };\n\n  const handlePaste = (event: any) => {\n    let item = Array.from(event.clipboardData.items).find((x: any) =>\n      /^image\\//.test(x.type)\n    );\n    if (item) {\n      // @ts-ignore\n      let blob = item.getAsFile();\n      sendFile(blob, false);\n    }\n  };\n\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      xmpp.pausedComposing(user.walletAddress, roomData.jid);\n    }, 1000);\n    return () => clearTimeout(timeoutId);\n  }, [myMessage]);\n\n  const onBlur = () => {\n    useStoreState.getState().setCurrentUntrackedChatRoom(\"\");\n  };\n  const onFocus = () => {\n    if (currentRoom) {\n      useStoreState.getState().setCurrentUntrackedChatRoom(currentRoom);\n      useStoreState.getState().clearCounterChatRoom(currentRoom);\n    }\n  };\n\n  useEffect(() => {\n    if (currentUntrackedChatRoom) {\n      if (\n        !roomJID ||\n        roomJID === \"none\" ||\n        roomJID === \"\" ||\n        currentUntrackedChatRoom.split(\"@\")[0] === roomJID\n      ) {\n        if (currentUntrackedChatRoom.split(\"@\")[1]) {\n          chooseRoom(currentUntrackedChatRoom);\n        } else {\n          chooseRoom(currentUntrackedChatRoom + CONFERENCEDOMAIN);\n        }\n      }\n    }\n\n    if (\n      currentUntrackedChatRoom.split(\"@\")[0] !== roomJID &&\n      roomJID !== \"none\" &&\n      roomJID !== \"\"\n    ) {\n      useStoreState.getState().setCurrentUntrackedChatRoom(roomJID);\n      chooseRoom(roomJID);\n    }\n\n    window.addEventListener(\"blur\", onBlur);\n    window.addEventListener(\"focus\", onFocus);\n\n    return () => {\n      window.removeEventListener(\"blur\", onBlur);\n      window.removeEventListener(\"focus\", onFocus);\n    };\n  }, [currentRoom]);\n\n  useEffect(() => {\n    const filteredMessages = messages.filter(\n      (item: TMessageHistory) => item.roomJID === currentRoom\n    );\n    if (\n      !loaderArchive &&\n      filteredMessages.length > 0 &&\n      filteredMessages.length <= 51 &&\n      currentRoom &&\n      firstLoadMessages\n    ) {\n      const lastUpFilteredMessage = filteredMessages[0];\n\n      if (\n        filteredMessages.length >= 10 &&\n        filteredMessages.length < 15 &&\n        lastUpFilteredMessage.data.isSystemMessage\n      ) {\n        setFirstLoadMessages(false);\n        xmpp.getPaginatedArchive(\n          currentRoom,\n          String(lastUpFilteredMessage.id),\n          5\n        );\n      } else if (filteredMessages.length === 1) {\n        setFirstLoadMessages(false);\n        xmpp.getPaginatedArchive(\n          currentRoom,\n          String(lastUpFilteredMessage.id),\n          50\n        );\n      }\n    }\n    if (\n      filteredMessages.length === 0 &&\n      firstLoadMessages &&\n      xmpp.client.status === \"online\"\n    ) {\n      xmpp.getRoomArchiveStanza(currentRoom, 50);\n    }\n  }, [messages]);\n\n  const handleChatDetailClick = () => {\n    history.push(\"/chatDetails/\" + currentUntrackedChatRoom);\n  };\n\n  const onMenuThreadClick = () => {\n    setThreadView(true);\n    handleSetCurrentThreadViewMessage(transferDialogData.message);\n  };\n\n  const onMenuEditClick = (value: boolean, message: TMessageHistory) => {\n    setIsEditing(value);\n    handleCurrentEditMessage(message);\n  };\n\n  const onMessageThreadClick = (message: TMessageHistory) => {\n    setThreadView(true);\n    handleSetCurrentThreadViewMessage(message);\n  };\n\n  //set the message to be deleted and show delete confirmation dialogue\n  const onMessageDeleteClick = (value: boolean, message: TMessageHistory) => {\n    setShowDeleteDialog(value);\n    handleSetCurrentDeleteMessage(message);\n  };\n\n  //triggered when user clicks Delete button on delete confirmation dialogue\n  const deleteMessage = () => {\n    //remove the message from store\n    useStoreState.getState().deleteMessage(currentDeleteMessage.id);\n\n    //send delete request to xmpp server\n    xmpp.deleteMessageStanza(\n      currentUntrackedChatRoom,\n      currentDeleteMessage.id.toString()\n    );\n\n    handleCloseDeleteMessageDialog();\n  };\n\n  //Delete confirmation dialogue component\n\n  //component to render File upload dialog box\n\n  return (\n    <Box style={{ paddingBlock: \"20px\", height: \"100%\" }}>\n      <MainContainer responsive>\n        <Sidebar position=\"left\" scrollable={false}>\n          <Search placeholder=\"Search...\" />\n          <ConversationList loading={loaderArchive}>\n            {filterChatRooms(userChatRooms, activeRoomFilter).map((room) => (\n              <Conversation\n                active={room.jid === currentRoom}\n                key={room.jid}\n                unreadCnt={room.unreadMessages}\n                onClick={() => {\n                  chooseRoom(room.jid);\n                  setThreadView(false);\n                }}\n                name={room.name}\n                info={getConversationInfo(room.jid)}\n                lastActivityTime={getLastActiveTime(room.jid)}\n              >\n                <Avatar\n                  src={\n                    room.room_thumbnail !== \"none\"\n                      ? room.room_thumbnail\n                      : \"https://icotar.com/initials/\" + room.name\n                  }\n                />\n              </Conversation>\n            ))}\n          </ConversationList>\n        </Sidebar>\n\n        <div\n          {...getRootProps()}\n          style={{\n            width: \"100%\",\n            height: \"100%\",\n            flexDirection: \"row\",\n            display: \"flex\",\n          }}\n        >\n          <ChatContainer>\n            {!!roomData && (\n              <ConversationHeader\n                style={{\n                  height: \"70px\",\n                }}\n              >\n                <ConversationHeader.Back />\n                {mainWindowMessages.length > 0 && (\n                  <ConversationHeader.Content\n                    userName={roomData.name}\n                    onClick={handleChatDetailClick}\n                    info={\n                      messages.filter(\n                        (item: TMessageHistory) => item.roomJID === currentRoom\n                      ).length > 0 &&\n                      \"Active \" +\n                        formatDistance(\n                          subDays(\n                            new Date(mainWindowMessages.slice(-1)[0].date),\n                            0\n                          ),\n                          new Date(),\n                          { addSuffix: true }\n                        )\n                    }\n                  />\n                )}\n                <ConversationHeader.Actions>\n                  <ChatAudioMessageDialog\n                    profile={profile}\n                    currentRoom={currentRoom}\n                    roomData={roomData}\n                  />\n                  <IconButton\n                    sx={{ color: \"black\" }}\n                    onClick={() => setQrModalVisible(true)}\n                  >\n                    <QrCodeIcon />\n                  </IconButton>\n                </ConversationHeader.Actions>\n              </ConversationHeader>\n            )}\n            <MessageList\n              style={{\n                backgroundImage: currentPickedRoom?.room_background\n                  ? `url(${currentPickedRoom.room_background})`\n                  : \"white\",\n                backgroundRepeat: \"no-repeat\",\n                backgroundSize: \"100% 100%\",\n              }}\n              loadingMore={loaderArchive || isFileUploading}\n              onYReachStart={onYReachStart}\n              disableOnYReachWhenNoScroll={true}\n              typingIndicator={\n                !!userChatRooms.filter((e) => e.jid === currentRoom)[0]\n                  ?.composing && (\n                  <TypingIndicator\n                    style={{ opacity: \".6\" }}\n                    content={\n                      userChatRooms.filter((e) => e.jid === currentRoom)[0]\n                        ?.composing\n                    }\n                  />\n                )\n              }\n            >\n              {mainWindowMessages.map((message, index, arr) => {\n                const position = getPosition(arr, message, index);\n                return message.data.isSystemMessage === \"false\" ? (\n                  <Message\n                    onThreadClick={() => onMessageThreadClick(message)}\n                    key={message.id}\n                    is={\"Message\"}\n                    position={position}\n                    message={message}\n                    onMessageButtonClick={sendMessage}\n                    toggleTransferDialog={toggleTransferDialog}\n                    onMediaMessageClick={toggleMediaModal}\n                  />\n                ) : (\n                  <SystemMessage\n                    key={message.id}\n                    is={\"Message\"}\n                    message={message}\n                    userJid={xmpp.client?.jid?.toString()}\n                  />\n                );\n              })}\n              {mainWindowMessages.length <= 0 ||\n                !currentRoom ||\n                (currentRoom === NO_ROOM_PICKED && (\n                  <MessageList.Content\n                    style={{\n                      display: \"flex\",\n                      flexDirection: \"column\",\n                      justifyContent: \"center\",\n                      height: \"100%\",\n                      textAlign: \"center\",\n                      fontSize: \"1.2em\",\n                    }}\n                  >\n                    {!loaderArchive ? (\n                      <span>\n                        {!currentRoom || currentRoom === NO_ROOM_PICKED\n                          ? \"Choose a chat room or create one to start a conversation.\"\n                          : null}\n                      </span>\n                    ) : (\n                      \"Loading...\"\n                    )}\n                  </MessageList.Content>\n                ))}\n              {!loaderArchive &&\n                currentRoom &&\n                currentRoom !== NO_ROOM_PICKED &&\n                mainWindowMessages.length <= 0 && (\n                  <MessageList.Content\n                    style={{\n                      display: \"flex\",\n                      flexDirection: \"column\",\n                      justifyContent: \"center\",\n                      height: \"100%\",\n                      textAlign: \"center\",\n                      fontSize: \"1.2em\",\n                    }}\n                  >\n                    Message list is empty\n                  </MessageList.Content>\n                )}\n            </MessageList>\n            {!!roomData?.name && (\n              <div is={\"MessageInput\"}>\n                {/* Edit message component */}\n                {isEditing && <Divider />}\n                <Slide direction=\"up\" in={isEditing} mountOnEnter unmountOnExit>\n                  <Stack\n                    display={\"flex\"}\n                    height={\"50px\"}\n                    width={\"100%\"}\n                    direction={\"row\"}\n                  >\n                    <div\n                      style={{\n                        display: \"flex\",\n                        flex: \"0.05\",\n                        justifyContent: \"center\",\n                        alignItems: \"center\",\n                      }}\n                    >\n                      <EditIcon color=\"info\" />\n                    </div>\n                    <div\n                      style={{\n                        display: \"flex\",\n                        flex: \"0.90\",\n                        flexDirection: \"column\",\n                      }}\n                    >\n                      <Typography color={\"#1976d2\"} fontWeight={\"bold\"}>\n                        Edit Message\n                      </Typography>\n                      <Typography>{currentEditMessage?.body}</Typography>\n                    </div>\n                    <div\n                      style={{\n                        display: \"flex\",\n                        flex: \"0.05\",\n                        justifyContent: \"center\",\n                        alignItems: \"center\",\n                      }}\n                    >\n                      <IconButton\n                        onClick={() => onMenuEditClick(false, undefined)}\n                        aria-label=\"close\"\n                      >\n                        <CloseIcon />\n                      </IconButton>\n                    </div>\n                  </Stack>\n                </Slide>\n\n                <MessageInput\n                  onPaste={handlePaste}\n                  placeholder=\"Type message here\"\n                  onChange={setMessage}\n                  onSend={sendMessage}\n                  onAttachClick={() => fileRef.current.click()}\n                />\n                <input\n                  type=\"file\"\n                  name=\"file\"\n                  id=\"file\"\n                  onChange={(event) => sendFile(event.target.files[0], false)}\n                  ref={fileRef}\n                  style={{ display: \"none\" }}\n                />\n              </div>\n            )}\n          </ChatContainer>\n          {isThreadView && (\n            <ThreadContainer\n              chooseRoom={chooseRoom}\n              currentPickedRoom={currentPickedRoom}\n              currentRoom={currentRoom}\n              handleSetThreadView={handleSetThreadView}\n              handleShowInChannel={handleShowInChannel}\n              isThreadView={isThreadView}\n              onYReachStart={onYReachStart}\n              profile={profile}\n              roomData={roomData}\n              sendFile={sendFile}\n              showInChannel={showInChannel}\n              toggleMediaModal={toggleMediaModal}\n              toggleTransferDialog={toggleTransferDialog}\n            />\n          )}\n        </div>\n      </MainContainer>\n\n      <ChatTransferDialog\n        open={transferDialogData.open}\n        onClose={() => toggleTransferDialog(false)}\n        loading={false}\n        onPrivateRoomClick={chooseRoom}\n        message={transferDialogData.message}\n        onThreadClick={onMenuThreadClick}\n        onEditClick={onMenuEditClick}\n        onDeleteClick={onMessageDeleteClick}\n      />\n      <ChatMediaModal\n        open={mediaDialogData.open}\n        onClose={() => toggleMediaModal(false)}\n        mimetype={mediaDialogData.message?.data?.mimetype}\n        url={mediaDialogData.message?.data?.location}\n      />\n\n      <DeleteDialog\n        open={showDeleteDialog}\n        onClose={handleCloseDeleteMessageDialog}\n        onDeletePress={deleteMessage}\n        description={\"Are you sure you want to delete this message.\"}\n        title={\"Delete message\"}\n      />\n      <QrModal\n        open={isQrModalVisible}\n        link={generateChatLink({ roomAddress: currentPickedRoom?.jid })}\n        onClose={closeQrModal}\n        title={\"Share Chatroom\"}\n      />\n      <MetaNavigation\n        open={showMetaNavigation || openLastMetaRoom}\n        chatId={currentRoom.split(\"@\")[0]}\n        onClose={() => {\n          setShowMetaNavigation(false);\n\n          openLastMetaRoom && setActiveRoomFilter(\"\");\n        }}\n      />\n    </Box>\n  );\n}\n","import React from \"react\";\nimport Container from \"@mui/material/Container\";\nimport { ChatInRoom } from \"./Chat\";\n\nexport default function Chat() {\n  return (\n    <Container maxWidth=\"xl\" style={{ height: \"calc(100vh - 68px)\" }}>\n      <ChatInRoom />\n    </Container>\n  );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogTitle, IconButton } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport QRCode from \"react-qr-code\";\nimport { truncateString } from \"../../utils\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nexport interface IQrModal {\n  open: boolean;\n  link: string;\n  onClose: () => void;\n  title?: string;\n}\n\nexport const QrModal: React.FC<IQrModal> = ({ title, open, link, onClose }) => {\n  return (\n    <Dialog maxWidth={false} open={open} onClose={onClose}>\n      {!!title && (\n        <DialogTitle sx={{ padding: \"0 24px\", paddingTop: \"20px\" }}>\n          {title}\n        </DialogTitle>\n      )}\n      <Box sx={{ padding: \"20px\" }}>\n        <QRCode\n          size={256}\n          style={{ height: \"50vh\", maxWidth: \"100%\", width: \"100%\" }}\n          value={link}\n          viewBox={`0 0 256 256`}\n        />\n        <Box\n          sx={{\n            boxShadow: \"0px 0px 10px -5px rgba(0,0,0,0.75)\",\n            borderRadius: \"10px\",\n            display: \"flex\",\n            justifyContent: \"space-between\",\n            alignItems: \"center\",\n            pl: \"10px\",\n            my: \"10px\",\n          }}\n        >\n          <span>{truncateString(link, 50)}</span>\n          <Button\n            variant=\"contained\"\n            sx={{ borderRadius: \"10px\", marginLeft: '5px' }}\n            onClick={() => navigator.clipboard.writeText(link)}\n          >\n            Copy\n          </Button>\n        </Box>\n        <IconButton\n          onClick={onClose}\n          sx={{\n            color: \"black\",\n            position: \"absolute\",\n            top: 10,\n            right: 10,\n            fontSize: \"30px\",\n          }}\n        >\n          <CloseIcon fontSize=\"inherit\" />\n        </IconButton>\n      </Box>\n    </Dialog>\n  );\n};\n"],"names":["DeleteDialog","open","onClose","onDeletePress","loading","title","description","deleteButtonTitle","cancelButtonTitle","id","disabled","onClick","autoFocus","color","underscoreManipulation","str","replace","toLowerCase","createPrivateChat","myWalletAddress","otherUserWalletAddress","myFirstName","otherFirstName","userJID","combinedWalletAddress","sort","join","roomJid","CONFERENCEDOMAIN","combinedUsersName","currentChatRooms","useStoreState","userChatRooms","isNewRoom","filter","el","jid","length","xmpp","roomName","setTimeout","Message","message","position","onMessageButtonClick","toggleTransferDialog","onMediaMessageClick","onThreadClick","isThread","firstName","data","senderFirstName","lastName","senderLastName","messageJid","senderJID","split","isSameUser","useMemo","toString","history","useHistory","useState","buttons","setButtons","React","anchorEl","setAnchorEl","openMenu","Boolean","messageDirection","setMessageDirection","openDialogMenu","fullViewImage","ReplyComponent","Button","variant","style","flexDirection","display","textTransform","textAlign","Divider","borderWidth","borderRadius","marginRight","orientation","flexItem","cursor","mainMessage","userName","imageLocation","imageMimetypes","mimeType","Card","sx","maxWidth","CardActionArea","CardMedia","height","objectFit","objectPosition","component","image","alt","originalName","videoMimetypes","controls","width","src","type","audioMimetypes","dangerouslySetInnerHTML","__html","text","useEffect","quickReplies","JSON","parse","is","separator","onContextMenu","isReply","event","preventDefault","marginBottom","model","sender","direction","avatarPosition","avatarSpacer","boxSizing","push","senderWalletAddress","photoURL","onError","currentTarget","onerror","justifyContent","alignItems","IconButton","undefined","MoreVert","isMediafile","mimetype","location","body","marginTop","minWidth","fontSize","differenceInHours","Date","date","format","formatDistance","subDays","addSuffix","coinsInMessage","coin","isEdited","marginLeft","Typography","numberOfReplies","Box","m","map","button","index","size","name","SystemMessage","userJid","fontFamily","key","CHAT","CompassItem","room","chatId","setDirection","padding","MetaHeader","previousRoom","fontWeight","metaDirection","metaRoom","DIRECTIONS","SHORT_DIRECTIONS","north","west","south","east","OPOSITE_DIRECTIONS","emptyMetaRoom","ownerNavLinks","ownerId","contractAddress","createdAt","_id","updatedAt","userNavLinks","top","left","transform","p","outline","MetaNavigation","previousDirection","setPreviousDirection","setLoading","setPreviuosRoom","currentMetaRoom","setCurrentMetaRoom","user","state","theme","useTheme","getCurrentRoom","httpWithAuth","get","roomRoute","res","result","console","log","sendMessage","chatName","isPrevious","textEnter","textLeave","walletAddress","isSystemMessage","tokenAmount","receiverMessageId","mucname","profileImage","sendRoomJoin","post","renderDirections","oppositePreviousDirection","getOpositeDirection","checkEmptyDirections","Modal","CircularProgress","bgcolor","mb","gridTemplateColumns","palette","primary","main","Explore","props","onPaste","placeholder","onChange","onSend","sendFile","fileRef","onAttachClick","current","click","target","files","ref","roomData","handleSetThreadView","isThreadView","profile","currentPickedRoom","currentRoom","onYReachStart","toggleMediaModal","handleShowInChannel","showInChannel","currentThreadViewMessage","store","myThreadMessage","setMyThreadMessage","messages","historyMessages","roomJID","useParams","threadWindowMessages","item","includes","currentUntrackedChatRoom","loaderArchive","sendThreadMessage","trim","clearMessageFromHtml","DOMPurify","finalMessageTxt","stripHtml","createMainMessageForThread","borderLeftWidth","datatype","Close","backgroundImage","room_background","backgroundRepeat","backgroundSize","disableOnYReachWhenNoScroll","typingIndicator","e","composing","opacity","content","arr","getPosition","borderColor","Checkbox","checked","inputProps","value","Array","from","clipboardData","items","find","x","test","blob","getAsFile","dialogItems","dialogTypes","ChatTransferDialog","onPrivateRoomClick","onEditClick","onDeleteClick","coinAmount","setCoinAmount","dialogType","setDialogType","balance","setNewUserChatRoom","showSnackbar","useSnackbar","walletToUsername","DOMAIN","coinData","tokenType","openThreadView","openEditView","handleDelete","userToBlackList","step","removeAllInMessageHistory","sendCoins","amount","currentCoinAmount","Number","transferCoin","tokenName","coinName","coinsMainName","coinReplacedName","receiver","textMessage","transactionId","transaction","openPrivateRoom","then","temporaryRoomData","room_thumbnail","users_cnt","unreadMessages","toUpdate","catch","error","Dialog","DialogContent","margin","startIcon","Send","Reply","Edit","Block","gutterBottom","TextField","label","renderDialogContent","boxShadow","ChatMediaModal","url","right","maxHeight","renderMediaContent","ChatAudioMessageDialog","recorderControls","useAudioRecorder","onRecordingComplete","formData","FormData","append","uploadFile","userAvatar","results","expiresAt","fileName","filename","isVisible","locationPreview","originalname","ownerKey","duration","userId","waveForm","attachmentId","wrappable","NO_ROOM_PICKED","ChatInRoom","setCurrentThreadViewMessage","setProfile","myMessage","setMyMessage","showMetaNavigation","setShowMetaNavigation","setThreadView","setShowInChannel","isEditing","setIsEditing","currentEditMessage","setCurrentEditMessage","showDeleteDialog","setShowDeleteDialog","currentDeleteMessage","setCurrentDeleteMessage","handleSetCurrentThreadViewMessage","threadMessage","handleCloseDeleteMessageDialog","setCurrentRoom","mainWindowMessages","setRoomData","transferDialogData","setTransferDialogData","mediaDialogData","setMediaDialogData","isQrModalVisible","setQrModalVisible","isFileUploading","setFileUploading","firstLoadMessages","setFirstLoadMessages","activeRoomFilter","setActiveRoomFilter","openLastMetaRoom","ROOMS_FILTERS","useRef","onDrop","useCallback","acceptedFiles","getRootProps","useDropzone","noClick","maxFiles","filteredMessages","lastMessageID","String","loadMessages","getPublicProfile","chooseRoom","currentRoomData","clearCounterChatRoom","setCurrentUntrackedChatRoom","getConversationInfo","messagesInRoom","slice","getLastActiveTime","notDisplayedValue","file","additionalDataForThread","timeoutId","clearTimeout","onBlur","onFocus","window","addEventListener","removeEventListener","lastUpFilteredMessage","rooms","onMenuEditClick","handleCurrentEditMessage","paddingBlock","responsive","scrollable","group","active","unreadCnt","info","lastActivityTime","QrCode","loadingMore","onMessageThreadClick","Slide","in","mountOnEnter","unmountOnExit","Stack","flex","handleSetCurrentDeleteMessage","deleteMessage","QrModal","link","generateChatLink","roomAddress","Chat","Container","paddingTop","viewBox","pl","my","truncateString","navigator","clipboard","writeText"],"sourceRoot":""}