HomePage.d4924ea6.chunk.js.map 410 KB

1
  1. {"version":3,"sources":["components/HomePage/LeftBar/SmallMenuBar/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/RecentItem/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/ChatItem/index.tsx","components/reusableComponents/AlertInfo/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/index.tsx","components/HomePage/LeftBar/SearchLists/FilesList/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/MediaListItem/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/index.tsx","components/HomePage/LeftBar/SearchLists/TextList/index.tsx","components/HomePage/LeftBar/SearchLists/AudioList/index.tsx","components/HomePage/LeftBar/SearchLists/VideoList/index.tsx","redux/chats/operations/index.ts","redux/chats/selector/index.ts","redux/allMessages/selector/index.ts","redux/control/selector/index.ts","redux/chat/operations/index.ts","components/HomePage/LeftBar/SearchLists/index.tsx","redux/allMessages/operations/index.ts","components/HomePage/LeftBar/SearchBar/StaticDatePicker/index.tsx","components/HomePage/LeftBar/SearchBar/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/DeleteModal/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/index.tsx","components/HomePage/LeftBar/ChatsList/index.tsx","components/HomePage/LeftBar/MenuBar/index.tsx","components/HomePage/LeftBar/ContactsList/ContactItem/index.tsx","redux/contacts/selector/index.ts","redux/contacts/operations/index.ts","components/HomePage/LeftBar/ContactsList/index.tsx","components/HomePage/LeftBar/AddContact/ToolBar/index.tsx","components/HomePage/LeftBar/AddContact/index.tsx","components/HomePage/LeftBar/SettingsBar/ToolBar/MenuList/index.tsx","components/HomePage/LeftBar/SettingsBar/ToolBar/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsPicture/DeleteModal/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsPicture/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsMenu/index.tsx","components/HomePage/LeftBar/SettingsBar/index.tsx","components/HomePage/LeftBar/EditBar/ToolBar/index.tsx","components/HomePage/LeftBar/EditBar/EditList/index.tsx","components/HomePage/LeftBar/EditBar/SubmitBtn/index.tsx","components/HomePage/LeftBar/EditBar/index.tsx","components/HomePage/LeftBar/index.tsx","components/HomePage/CentralBar/HeaderBar/Credentials/index.tsx","components/HomePage/CentralBar/HeaderBar/Buttons/MenuList/index.tsx","components/HomePage/CentralBar/HeaderBar/Buttons/DeleteModal/index.tsx","components/HomePage/CentralBar/HeaderBar/Buttons/index.tsx","components/HomePage/CentralBar/HeaderBar/index.tsx","components/HomePage/CentralBar/ChatBar/ArrowBack/index.tsx","components/HomePage/CentralBar/ChatBar/FilesMenu/UploadFile/index.tsx","components/HomePage/CentralBar/ChatBar/FilesMenu/index.tsx","components/HomePage/CentralBar/ChatBar/SendMessage/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageLeftText/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageLeftImage/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageLeftAudio/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageLeftVideo/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageLeftFile/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageRightText/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageRightImage/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageRightAudio/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageRightVideo/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageRightFile/index.tsx","components/HomePage/CentralBar/ChatBar/Messages/MessageTime/index.tsx","redux/messages/selector/index.ts","redux/messages/operations/index.ts","components/HomePage/CentralBar/ChatBar/index.tsx","components/HomePage/CentralBar/index.tsx","components/HomePage/RightBar/SearchList/Search/StaticDatePicker/index.tsx","components/HomePage/RightBar/SearchList/Search/index.tsx","components/HomePage/RightBar/SearchList/index.tsx","components/HomePage/RightBar/CredentialsList/ToolBar/index.tsx","components/HomePage/RightBar/CredentialsList/ProfilePicture/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileMenu/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/AudioList/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/MediaList/MediaListItem/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/MediaList/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/FilesList/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/TextList/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/VideoList/index.tsx","components/HomePage/RightBar/CredentialsList/ProfileLists/index.tsx","components/HomePage/RightBar/CredentialsList/index.tsx","components/HomePage/RightBar/EditBar/ToolBar/index.tsx","components/HomePage/RightBar/EditBar/EditList/index.tsx","components/HomePage/RightBar/EditBar/Delete/index.tsx","components/HomePage/RightBar/EditBar/SubmitBtn/index.tsx","components/HomePage/RightBar/EditBar/index.tsx","components/HomePage/RightBar/index.tsx","components/HomePage/index.tsx"],"names":["StyledMenu","styled","props","Menu","elevation","anchorOrigin","vertical","horizontal","transformOrigin","theme","borderRadius","marginTop","spacing","minWidth","color","palette","mode","grey","boxShadow","padding","marginBottom","fontSize","text","secondary","marginRight","useStyles","makeStyles","container","position","maxWidth","top","right","zIndex","cursor","SmallMenuBar","setPopup","classes","dispatch","useDispatch","useState","anchorEl","setAnchorEl","open","Boolean","handleClose","className","Avatar","onClick","e","currentTarget","sx","bgcolor","width","height","id","aria-labelledby","onClose","MenuItem","actionLeftIsOpen","stackItem","display","flexDirection","justifyContent","alignContent","alignItems","background","titleName","paddingTop","RecentItem","handleListItemClick","chat","name","lastName","avatarUrl","companionId","alt","src","prodBaseURL","undefined","firstLetter","Typography","variant","slicedWord","listItemInnerText","flexWrap","listItem_iconAvatar","listItem_iconRight","listItem_icon_time","marginLeft","paddingBottom","ChatItem","lastMessage","lastMessageCreatedAt","createdAt","ListItemButton","ListItemIcon","ListItemText","primary","timeStampEU","AlertInfo","Stack","Alert","severity","AlertTitle","stack","maxHeight","overflowY","webkitBoxShadow","backgroundColor","ChatListRecent","value","date","filteredAndSorted","length","direction","slice","map","List","component","aria-label","folderIcon","listItem","FilesList","messagesMemo","sort","setDisabled","filtered","filter","type","filteredMessages","handleSort","useEffect","message","fullType","ListItem","ListItemAvatar","handleDownload","Divider","overlay","left","boxSizing","wrapper","downloadIcon","content","img","scale","time","MediaListItem","updatedAt","watch","setWatch","url","target","ImageListItem","srcSet","loading","MediaList","ImageList","cols","rowHeight","copyIcon","TextList","style","wordBreak","secondaryTypographyProps","onCopy","copied","AudioList","VideoList","asyncGetChats","a","getChats","data","actionGetChatsSuccess","actionGetChatsReject","getStateMemo","createSelector","state","chats","getAllMessagesMemo","allMessages","messages","getLeftIsOpen","control","leftIsOpen","getRightIsOpen","rightIsOpen","getScrollChat","scrollChat","getState","asyncStartChatById","startChat","actionSelectChat","borderBottom","item","icon","lineHeight","fontWeight","underline","SearchLists","setValue","setDate","useSelector","total","isActive","setIsActive","handleIsActive","newValue","handleReset","getAllMessages","actionGetAllMessagesSuccess","actionGetAllMessagesReject","idInterval","setInterval","refreshAppTime","clearInterval","sortByRecent","el","credentials","toLowerCase","includes","timeStampFilter","actionRightIsOpen","StaticDatePicker","disabled","changeDate","handleOnOpen","DatePicker","inputVariant","orientation","openTo","autoOk","Date","onOpen","onChange","Search","margin","SearchIconWrapper","pointerEvents","StyledInputBase","InputBase","paddingLeft","transition","transitions","create","toolBar","activeSearch","outline","iconBtn","transform","iconArrow","label","inputProps","SearchBar","handleClick","handleOpenIsSearch","handleSearch","Toolbar","IconButton","onFocus","placeholder","size","Switch","updateUser","checked","modalDelete","bottom","titleWrapper","DeleteModal","setModal","removeChatForBoth","actionRemoveChat","Button","StyledBadge","Badge","paper","animation","border","opacity","listItemInnerText__icon","listItem_iconTimeChecked","listItem_iconRightBtn","textAlign","listItem_iconRightBtnMute","listItem_iconRightBtnHidden","listItem_typing","listItem_dots","fontFamily","clipPath","to","handleNewMsgs","selected","setSelected","modal","mute","seen","watched","typing","online","muteChat","onContextMenu","preventDefault","handleContextMenu","overlap","list","ChatsList","chatsRef","useRef","getChatMemo","stopPropagation","actionScrollChat","handleNotification","useCallback","sortedChats","current","forEach","i","oldDifferent","playNotificationWithoutPermission","notification","number","visibility","listItemLast","listIcon","listIconText","MenuBar","nightMode","asyncCurrentUser","Paper","textDecoration","href","ContactItem","contact","_id","removeContact","contacts","getContactsMemo","asyncGetContacts","getContacts","actionGetContactsSuccess","actionGetContactsReject","asyncAddContact","addContact","ContactsList","arr","ToolBar","title","buttonNext","textField","AddContact","setNumber","handleAddContact","isValidNumber","onKeyDown","code","TextField","fullWidth","split","join","trim","required","MenuList","asyncLogout","index","setIndex","removeUserAvatar","nameTile","timeTile","iconDeleteWrapper","iconDelete","SettingsPicture","getAuthorizationState","avatarsArr","selectedItem","SettingsMenu","getNumber","SettingsBar","imgWrapper","imgDropZoneOverlay","addPhoto","avatarArrow","alignSelf","EditList","user","setName","setLastName","openBtn","setOpenBtn","setFile","useDropzone","noDrag","accept","getRootProps","getInputProps","acceptedFiles","handleTextField","format","SubmitBtn","handleSubmit","EditBar","file","Name","LastName","updateCredentials","originalName","originalLastName","formData","FormData","append","updateUserAvatar","LeftBar","popup","modalRoot","handleCloseModal","modalHtml","document","getElementById","addEventListener","removeEventListener","Grid","lg","onMouseEnter","onMouseLeave","createPortal","Credentials","getChat","Buttons","HeaderBar","AppBar","avatarArrowWrapper","listSeenIcon","ArrowBack","isArrow","handleScrollTo","isNew","new","dropZone","UploadFile","children","listText","FilesMenu","setIsOpenMenu","setType","containerActive","textarea","resize","attachIcon","borderTop","filesMenu","emoji","iconCancel","avatarCamera","avatarRight","pauseLeft","pauseRight","avatarPause","animationIterationCount","ringContainerLeft","ringContainerRight","circle","ringRing","SendMessage","isOpenMenu","isOpenEmoji","setIsOpenEmoji","isRecording","setIsRecording","isFilming","setIsFilming","useReactMediaRecorder","audio","status","startRecording","stopRecording","mediaBlobUrl","clearBlobUrl","video","_status","_startRecording","_stopRecording","_mediaBlobUrl","_clearBlobUrl","clearMessage","sentMessage","sentMessageById","XMLHttpRequest","responseType","onload","blob","response","File","sentAudioMessageById","send","sentVideoMessageById","sentImgMessageById","sentFileMessageById","playNotification","handleFocusTextarea","typingChat","handleBlurTextarea","handleRecording","handleFilming","onEmojiClick","_e","emojiObject","prevValue","onBlur","rows","font","borderLeft","borderRight","messageActive","MessageLeftText","primaryTypographyProps","timeStampMessage","removeMessageById","wrapperActive","image","bntDownload","wrapperOverlayImg","overlayDownloadIcon","overlayTime","overlayDelete","MessagesLeftImage","player","MessageLeftAudio","controls","Player","require","playerActive","MessageLeftVideo","playsInline","FileViewer","MessageLeftFile","read","setRead","handleCloseRead","allowFullScreen","fileType","filePath","onError","rel","download","MessageRightText","MessageRightImage","MessageRightAudio","MessageRightVideo","MessageRightFile","MessageTime","getMessages","getMessagesMemo","asyncGetMessagesById","cb","getMessagesById","actionGetMessagesSuccess","actionGetMessagesReject","debounce","messagesScroll","messagesEmpty","messagesBody","ChatBar","userNumber","setIsArrow","setIsNew","divRef","scrollTo","scrollHeight","behavior","handleScroll","scrollTop","clientHeight","different","Math","floor","seenChat","debouncedHandleScroll","getChatById","actionGetChatById","ref","onScroll","isTime","MessageLeftImage","chatBar","CentralBar","searchBarActive","sortChat","SearchList","iconClose","contactsMemo","isContact","setIsContact","find","ProfilePicture","ProfileMenu","overflow","ProfileLists","filterBy","scrollContainer","CredentialsList","notifications","setMute","Checkbox","Delete","editBar","Mute","updateContact","RightBar","minHeight","centralAndRight","centralBar","HomePage"],"mappings":"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","file":"static/js/HomePage.d4924ea6.chunk.js","sourcesContent":["import { makeStyles } from '@material-ui/core'\r\nimport React, { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { styled } from '@mui/material/styles';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport PermContactCalendarIcon from '@mui/icons-material/PermContactCalendar';\r\nimport ModeEditOutlineOutlinedIcon from '@mui/icons-material/ModeEditOutlineOutlined';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\r\nimport { actionLeftIsOpen } from '../../../../redux/control/action';\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(-2),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '8px 8px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n maxWidth: '100%',\r\n top: '92vh',\r\n right: 20,\r\n zIndex: 10,\r\n cursor:'pointer'\r\n },\r\n})\r\n\r\ninterface ISmallMenuBar {\r\n setPopup:React.Dispatch<React.SetStateAction<boolean>>,\r\n}\r\nconst SmallMenuBar = ({setPopup}:ISmallMenuBar) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const open = Boolean(anchorEl);\r\n const handleClick = (e: React.MouseEvent<HTMLDivElement>):void => setAnchorEl(e.currentTarget)\r\n\r\n const handleClose = ():void => {\r\n setPopup(false)\r\n setAnchorEl(null)\r\n }\r\n\r\n return (\r\n <div className={classes.container}>\r\n <Avatar onClick={handleClick} sx={{\r\n bgcolor: 'rgb(41, 139, 231)',\r\n width: 56, height: 56 }}>\r\n {!anchorEl?<ModeEditOutlineOutlinedIcon />:<CloseIcon/>}\r\n </Avatar>\r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <MenuItem onClick={() => {\r\n handleClose();\r\n dispatch(actionLeftIsOpen('contact'))\r\n }}>\r\n <PersonAddAltIcon/>\r\n New Contact\r\n </MenuItem> \r\n <MenuItem onClick={() => {\r\n handleClose();\r\n dispatch(actionLeftIsOpen('contacts'))\r\n }}>\r\n <PermContactCalendarIcon/>\r\n Contacts\r\n </MenuItem> \r\n </StyledMenu> \r\n </div>\r\n );\r\n}\r\nexport default SmallMenuBar","import { makeStyles, Typography } from '@material-ui/core'\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { slicedWord, firstLetter,prodBaseURL } from '../../../../../../helpers';\r\nimport { TChat } from '../../../../../../typescript/redux/chats/types';\r\n\r\nconst useStyles = makeStyles({\r\n stackItem: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding:5,\r\n borderRadius: 5,\r\n cursor:'pointer',\r\n '&:hover': {\r\n background: '#eeeded'\r\n }\r\n },\r\n titleName: {\r\n color: '#575757',\r\n fontSize: 16,\r\n paddingTop:5\r\n }\r\n})\r\n\r\ninterface IRecentItem {\r\n handleListItemClick: (companionId: string) => void,\r\n chat:TChat,\r\n}\r\n\r\nconst RecentItem = ({handleListItemClick,chat}:IRecentItem) => {\r\n const classes = useStyles()\r\n const { name, lastName,color,avatarUrl,companionId } = chat\r\n \r\n \r\n\r\nreturn (\r\n <div onClick={() => handleListItemClick(companionId)} className={classes.stackItem}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 54, height: 54}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <Typography variant=\"h6\" className={classes.titleName} >{`${firstLetter(name)}${slicedWord(name, 8, 1)}`}</Typography>\r\n </div>\r\n )\r\n}\r\n\r\nexport default RecentItem","import { makeStyles,Typography } from '@material-ui/core'\r\nimport ListItemButton from '@mui/material/ListItemButton';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\n\r\nimport { TChat } from '../../../../../../typescript/redux/chats/types';\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n listItemInnerText: {\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n },\r\n listItem_iconAvatar: {\r\n marginRight:10\r\n },\r\n listItem_iconRight: {\r\n marginRight: 10,\r\n },\r\n listItem_icon_time: {\r\n fontSize: 12,\r\n marginLeft: 5,\r\n paddingBottom:25,\r\n color: '#1b1b1b'\r\n },\r\n})\r\n\r\ninterface IChatItem {\r\n chat: TChat,\r\n handleListItemClick: (companionId: string) => void,\r\n}\r\n\r\nconst ChatItem = ({chat,handleListItemClick}:IChatItem) => {\r\n const classes = useStyles()\r\n const {name,lastName,avatarUrl,color,companionId,lastMessage,lastMessageCreatedAt,createdAt} = chat\r\n\r\n return (\r\n <ListItemButton onClick={() => handleListItemClick(companionId)}>\r\n <ListItemIcon className={classes.listItem_iconAvatar}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 54, height: 54 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemIcon> \r\n <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondary={`${lastMessage ? slicedWord(lastMessage, 35) :\r\n `${firstLetter(name)}${slicedWord(name, 8, 1)} joined Telegram`}`}/>\r\n <ListItemIcon className={classes.listItem_iconRight}>\r\n <Typography className={classes.listItem_icon_time} variant=\"h6\" color=\"initial\">\r\n {timeStampEU(lastMessageCreatedAt?lastMessageCreatedAt:createdAt)}\r\n </Typography>\r\n </ListItemIcon> \r\n </ListItemButton> \r\n );\r\n}\r\nexport default ChatItem","import Alert from '@mui/material/Alert';\r\nimport AlertTitle from '@mui/material/AlertTitle';\r\nimport Stack from '@mui/material/Stack';\r\n\r\n\r\nconst AlertInfo = ({ name }: { name: string }) => {\r\nreturn (\r\n <Stack sx={{ width: '100%' }} spacing={2}>\r\n <Alert severity=\"info\">\r\n <AlertTitle>Warning</AlertTitle>\r\n <strong>{name}</strong>\r\n </Alert>\r\n </Stack>\r\n );\r\n}\r\n\r\nexport default AlertInfo","import { makeStyles } from '@material-ui/core'\r\nimport List from '@mui/material/List';\r\nimport Stack from '@mui/material/Stack';\r\n\r\nimport { TChats } from '../../../../../typescript/redux/chats/types';\r\nimport RecentItem from './RecentItem';\r\nimport ChatItem from './ChatItem';\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\n\r\nconst useStyles = makeStyles({\r\n stack: {\r\n display: 'flex',\r\n justifyContent: 'space-around',\r\n paddingTop:20,\r\n },\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n})\r\n\r\ninterface IChatListRecent {\r\n value: string,\r\n date:any,\r\n filteredAndSorted: TChats,\r\n handleListItemClick: (companionId: string) => void,\r\n}\r\n\r\nconst ChatListRecent = ({value,date,filteredAndSorted,handleListItemClick}:IChatListRecent) => {\r\n const classes = useStyles()\r\n\r\nreturn (\r\n <>\r\n {!value && !date && filteredAndSorted.length > 0 &&\r\n <Stack direction=\"row\" className={classes.stack}>\r\n {filteredAndSorted.slice(0, 6).map((chat) =>\r\n <RecentItem key={chat.companionId} handleListItemClick={handleListItemClick} chat={chat} />)}\r\n </Stack>}\r\n {(value || date) && filteredAndSorted.length > 0 &&\r\n <List className={classes.container} component=\"nav\" aria-label=\"main mailbox folders\">\r\n {filteredAndSorted.map((chat) =>\r\n <ChatItem key={chat.companionId} handleListItemClick={handleListItemClick} chat={chat} />)}\r\n </List>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Chat by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 &&<AlertInfo name='You do not have any Chats yet!'/>}\r\n </>) \r\n}\r\n\r\nexport default ChatListRecent","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport FolderIcon from '@mui/icons-material/Folder';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IFilesList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst FilesList = ({ messagesMemo,value,date,sort,setDisabled }: IFilesList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type !== 'text')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <FolderIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>}\r\n {(value || date)&& filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Files by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Files yet!'/>}\r\n </>\r\n )\r\n}\r\n\r\nexport default FilesList","\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport ImageListItem from '@mui/material/ImageListItem';\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { handleDownload,timeStampEU,prodBaseURL } from '../../../../../../helpers'\r\n\r\nconst useStyles = makeStyles({ \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapper: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n downloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n img: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n scale:0.98\r\n }\r\n },\r\n time: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }\r\n});\r\nconst MediaListItem = ({ message,fullType,updatedAt }: { message: string,fullType:string,updatedAt:string }) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const handleOpenWatch = () => !watch && setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n \r\n const url = `${prodBaseURL}/${message}`\r\n \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapper}>\r\n <span className={classes.time}>{timeStampEU(updatedAt)}</span>\r\n <DownloadForOfflineIcon className={classes.downloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <ImageListItem>\r\n <img onClick={handleOpenWatch} className={classes.img}\r\n src={`${url}?w=164&h=164&fit=crop&auto=format`}\r\n srcSet={`${url}?w=164&h=164&fit=crop&auto=format&dpr=2 2x`}\r\n alt='imageItem' loading=\"lazy\" />\r\n </ImageListItem>\r\n \r\n )\r\n}\r\n\r\nexport default MediaListItem","import ImageList from '@mui/material/ImageList';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport MediaListItem from './MediaListItem';\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { filteredMessages,handleSort } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n})\r\n\r\ninterface IMediaList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst MediaList = ({ messagesMemo,value,date,sort,setDisabled }: IMediaList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'image')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort), date, value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <ImageList className={classes.container} cols={3} rowHeight={164}>\r\n {filteredAndSorted.map(({message,createdAt,fullType,updatedAt}) => \r\n <MediaListItem key={createdAt} message={message} fullType={fullType} updatedAt={updatedAt}/>)}\r\n </ImageList>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Media by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Media yet!'/>}\r\n </>\r\n )\r\n}\r\n\r\nexport default MediaList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Divider from '@mui/material/Divider';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,firstLetter,copied,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n copyIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n }, \r\n})\r\n\r\ninterface ITextList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst TextList = ({ messagesMemo,value,date,sort,setDisabled }: ITextList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'text')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, lastName, name, color, avatarUrl }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText style={{ wordBreak: 'break-word',marginRight:2 }} primary={message}\r\n secondary={timeStampEU(createdAt)} secondaryTypographyProps={{color: '#020202',paddingTop:0.5}}\r\n />\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large' />\r\n </CopyToClipboard> \r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Text by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Text yet!'/>} \r\n </>\r\n ) \r\n}\r\n\r\nexport default TextList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport LibraryMusicIcon from '@mui/icons-material/LibraryMusic';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IAudioList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst AudioList = ({ messagesMemo,value,date,sort,setDisabled }: IAudioList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'audio')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort), date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return(\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <LibraryMusicIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Audio by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Audio yet!'/>}\r\n </>)\r\n}\r\nexport default AudioList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport VideoLibraryIcon from '@mui/icons-material/VideoLibrary';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IVideoList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst VideoList = ({ messagesMemo,value,date,sort,setDisabled }: IVideoList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'video')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n\r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem key={createdAt} alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <VideoLibraryIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>}\r\n {(value || date)&& filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Video by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Video yet!'/>}\r\n </>\r\n ) \r\n}\r\n\r\nexport default VideoList","import {\r\n actionGetChatsSuccess,\r\n actionGetChatsReject,\r\n} from '../action';\r\nimport { getChats} from '../../../api-data';\r\nimport { IChatsRes } from '../../../typescript/redux/chats/interfaces'\r\n\r\nconst asyncGetChats = () => async (dispatch:any) => {\r\n try {\r\n const data = await getChats<IChatsRes>()\r\n data&&dispatch(actionGetChatsSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetChatsReject())\r\n }\r\n};\r\n\r\nexport { asyncGetChats };\r\n\r\n\r\n\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getTotal = (state: IState) => state.chats.total;\r\nconst getLimit = (state:IState) => state.chats.limit;\r\nconst getPage = (state: IState) => state.chats.page;\r\nconst getChats = (state: IState) => state.chats.chats;\r\nconst getState = (state: IState) => state.chats;\r\nconst getStateMemo = createSelector([getState], state => state);\r\n\r\nexport { getTotal,getLimit,getPage,getChats,getState,getStateMemo };\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getAllMessages = (state: IState) => state.allMessages.messages;\r\nconst getState = (state: IState) => state.allMessages;\r\nconst getAllMessagesMemo = createSelector([getAllMessages], messages => messages);\r\n\r\nexport { getAllMessages,getState,getAllMessagesMemo };\r\n\r\n","import { IState } from '../../../typescript/redux/interfaces'\n\nconst getLeftIsOpen = (state: IState) => state.control.leftIsOpen;\nconst getRightIsOpen = (state: IState) => state.control.rightIsOpen;\nconst getScrollChat = (state: IState) => state.control.scrollChat;\nconst getState = (state:IState) => state.control;\n\nexport { getLeftIsOpen,getRightIsOpen,getScrollChat,getState };\n","import {\r\n actionSelectChat,\r\n actionGetChatById\r\n} from '../action';\r\nimport { startChat,getChatById } from '../../../api-data';\r\n\r\nimport { TChat } from '../../../typescript/redux/chat/types'\r\n\r\nconst asyncStartChatById = (id:string) => async (dispatch:any) => {\r\n try {\r\n const data = await startChat<TChat>(id)\r\n data&&dispatch(actionSelectChat(data))\r\n } catch(e) {}\r\n};\r\n\r\nconst asyncGetChatById = (id:string) => async (dispatch:any) => {\r\n try {\r\n const data = await getChatById<TChat>(id)\r\n data&&dispatch(actionGetChatById(data))\r\n } catch(e) {}\r\n};\r\n\r\n\r\n\r\nexport { asyncStartChatById,asyncGetChatById };\r\n\r\n\r\n\r\n\r\n","import { useState, useEffect } from 'react';\r\nimport { useDispatch,useSelector } from 'react-redux';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport ChatListRecent from './ChatListRecent'\r\nimport FilesList from './FilesList';\r\nimport MediaList from './MediaList';\r\nimport TextList from './TextList';\r\nimport AudioList from './AudioList'\r\nimport VideoList from './VideoList';\r\nimport { asyncGetAllMessages } from '../../../../redux/allMessages/operations';\r\nimport { asyncGetChats } from '../../../../redux/chats/operations';\r\nimport { getStateMemo } from '../../../../redux/chats/selector';\r\nimport { getAllMessagesMemo } from '../../../../redux/allMessages/selector';\r\nimport { getState } from '../../../../redux/control/selector';\r\nimport { sortByRecent,timeStampFilter,refreshAppTime } from '../../../../helpers';\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations';\r\nimport { actionLeftIsOpen,actionRightIsOpen } from '../../../../redux/control/action';\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\n\r\nconst useStyles = makeStyles({\r\ncontainer: {\r\n height:'7vh',\r\n borderBottom: 'solid 2px #dddddd',\r\n display: 'flex',\r\n justifyContent: 'space-around',\r\n alignContent: \"center\",\r\n alignItems:\"center\",\r\n flexWrap: 'nowrap',\r\n color:'rgba(0, 0, 0, 0.6)'\r\n},\r\nitem: {\r\n height:'100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignContent: \"center\",\r\n alignItems: \"center\",\r\n cursor:'pointer',\r\n},\r\nicon: {\r\n fontSize: '1rem',\r\n lineHeight: 0,\r\n marginBottom: 0,\r\n fontWeight:600\r\n },\r\nunderline: {\r\n fontSize: '2.2rem',\r\n lineHeight: 0,\r\n },\r\n})\r\n\r\ninterface ISearchLists {\r\n value: string,\r\n setValue: React.Dispatch<string>\r\n sort: boolean,\r\n date: any,\r\n setDate: React.Dispatch<any>,\r\n setDisabled: React.Dispatch<boolean>,\r\n}\r\n\r\nconst SearchLists = ({ value,setValue,sort,date,setDate,setDisabled }: ISearchLists) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { chats, total } = useSelector(getStateMemo)\r\n const messagesMemo = useSelector(getAllMessagesMemo)\r\n const {leftIsOpen,rightIsOpen} = useSelector(getState)\r\n const [isActive, setIsActive] = useState<number>(0)\r\n const handleIsActive = (newValue: number): void => {\r\n setIsActive(newValue)\r\n value && setValue('')\r\n date&&setDate('')\r\n } \r\n\r\n const handleListItemClick = (companionId: string) => {\r\n rightIsOpen&&dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n const filteredChats = (arr: TChats) => arr.filter((el) => {\r\n const credentials = el.name + ' ' + el.lastName\r\n if (!date) {\r\n return credentials.toLowerCase().includes(value.toLowerCase())\r\n } else if (credentials.toLowerCase().includes(value.toLowerCase())\r\n &&timeStampFilter(date) === timeStampFilter(el.lastMessageCreatedAt ?\r\n el.lastMessageCreatedAt : el.createdAt)) {\r\n return el\r\n }\r\n })\r\n \r\n useEffect(() => {\r\n setDate('')\r\n }, [setDate])\r\n \r\n useEffect(() => {\r\n if (isActive === 0) {\r\n dispatch(actionLeftIsOpen('searchChats'))\r\n } else {\r\n dispatch(actionLeftIsOpen('searchAllMessages'))\r\n }\r\n }, [isActive,dispatch]) \r\n \r\n useEffect(() => {\r\n if (isActive === 0) setDisabled(total === '0'?true:false)\r\n }, [isActive,total,setDisabled])\r\n \r\n useEffect(() => {\r\n const handleReset = () => {\r\n if (leftIsOpen === 'searchChats') {\r\n dispatch(asyncGetChats())\r\n } else if (leftIsOpen === 'searchAllMessages') {\r\n dispatch(asyncGetAllMessages())\r\n }\r\n }\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen,dispatch]);\r\n \r\n \r\n const filteredAndSorted = filteredChats(sortByRecent(chats,sort))\r\n return (\r\n <>\r\n <div className={classes.container}>\r\n <div className={classes.item} style={{color:isActive === 0?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(0)}>\r\n <span className={classes.icon}>Chats</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 1?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(1)}>\r\n <span className={classes.icon}>Files</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 2?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(2)}>\r\n <span className={classes.icon}>Media</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 3?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(3)}>\r\n <span className={classes.icon}>Text</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 4?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(4)}>\r\n <span className={classes.icon}>Audio</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 5?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(5)}>\r\n <span className={classes.icon}>Video</span>\r\n <span className={classes.underline}>___</span>\r\n </div> \r\n </div>\r\n {isActive === 0 && <ChatListRecent value={value} date={date}\r\n filteredAndSorted={filteredAndSorted} handleListItemClick={handleListItemClick} />}\r\n {isActive === 1 && <FilesList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 2 && <MediaList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 3 && <TextList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 4 && <AudioList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 5 && <VideoList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default SearchLists","import {\r\n actionGetAllMessagesSuccess,\r\n actionGetAllMessagesReject,\r\n} from '../action';\r\nimport { getAllMessages } from '../../../api-data';\r\nimport { IAllMessagesState } from '../../../typescript/redux/allMessages/interfaces'\r\n\r\n\r\nconst asyncGetAllMessages= () => async (dispatch:any) => {\r\n try {\r\n const data = await getAllMessages<IAllMessagesState>()\r\n data && dispatch(actionGetAllMessagesSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetAllMessagesReject())\r\n } \r\n};\r\n\r\nexport { asyncGetAllMessages };\r\n\r\n\r\n\r\n\r\n","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n },\r\n})\r\n\r\ninterface IStaticDatePicker {\r\n date: Date,\r\n disabled: boolean,\r\n changeDate: React.Dispatch<React.SetStateAction<any>>,\r\n handleOnOpen: () => void,\r\n}\r\n\r\nconst StaticDatePicker = ({ date,disabled, changeDate,handleOnOpen }: IStaticDatePicker) => {\r\n const classes = useStyles()\r\nreturn (\r\n <DatePicker\r\n className={classes.container}\r\n inputVariant='outlined'\r\n orientation=\"portrait\"\r\n variant=\"dialog\"\r\n openTo=\"date\"\r\n autoOk\r\n disabled={disabled}\r\n value={date?date:new Date()}\r\n onOpen={handleOnOpen}\r\n onChange={changeDate}\r\n />\r\n );\r\n};\r\n\r\nexport default StaticDatePicker;","import Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton'\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport InputBase from '@mui/material/InputBase';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport Switch from '@mui/material/Switch';\r\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\r\nimport { styled } from '@mui/material/styles';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { updateUser } from '../../../../api-data';\r\nimport { TLeftIsOpen } from '../../../../typescript/redux/control/types';\r\nimport StaticDatePicker from \"./StaticDatePicker\";\r\n\r\n\r\nconst Search = styled('div')(({ theme }:any) => ({\r\n position: 'relative',\r\n borderRadius: '20px',\r\n backgroundColor: '#f1f0f0',\r\n width: '100%',\r\n margin:'0 5% 0 5%'\r\n}));\r\n\r\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\r\n color: 'inherit',\r\n '& .MuiInputBase-input': { \r\n fontWeight: 500,\r\n borderRadius: '20px',\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height: '7vh',\r\n },\r\n activeSearch: {\r\n outline: '2px solid #2184f7',\r\n color: '#2184f7'\r\n },\r\n iconBtn: {\r\n '&:hover': {\r\n transform: 'rotate(180deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface ISearchBar {\r\n handleClick:() => void,\r\n handleOpenIsSearch:() => void,\r\n handleSearch:(e: React.ChangeEvent<HTMLInputElement>) => void,\r\n leftIsOpen: TLeftIsOpen,\r\n value: string,\r\n sort: boolean,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n disabled: boolean\r\n}\r\n\r\nconst SearchBar = ({ handleClick, handleOpenIsSearch, handleSearch, leftIsOpen,\r\n value, sort,setDate,date,disabled }: ISearchBar) => {\r\n const handleSort = () => updateUser({ sort: !sort })\r\n const handleOnOpen = () => setDate('') \r\n \r\n const classes = useStyles()\r\n return (\r\n <Toolbar className={classes.toolBar}>\r\n <IconButton onClick={handleClick}>\r\n {leftIsOpen ? <ArrowBackIcon className={classes.iconArrow} /> : <MenuIcon className={classes.iconBtn} />}\r\n </IconButton>\r\n <div onFocus={handleOpenIsSearch} style={{display:'flex',width:'100%'}}>\r\n <Search className={value?classes.activeSearch:undefined}>\r\n <SearchIconWrapper>\r\n <SearchIcon />\r\n </SearchIconWrapper>\r\n <StyledInputBase\r\n value={value}\r\n onChange={handleSearch}\r\n placeholder={disabled?'Disabled':'Search'}\r\n inputProps={{ 'aria-label': 'search' }}\r\n disabled={disabled}/>\r\n </Search>\r\n <IconButton aria-label=\"delete\" size=\"medium\" disabled={disabled}>\r\n <StaticDatePicker date={date} disabled={disabled} \r\n changeDate={setDate} handleOnOpen={handleOnOpen} /> \r\n <CalendarTodayIcon fontSize='medium'\r\n style={{color:date?'#2184f7':'#b1aeae'}}/>\r\n </IconButton>\r\n <Switch onClick={handleSort} checked={sort} {...label} disabled={disabled} />\r\n </div>\r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default SearchBar","import Button from '@mui/material/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { removeChatForBoth } from '../../../../../../api-data';\r\nimport { actionRightIsOpen } from '../../../../../../redux/control/action';\r\nimport { actionRemoveChat } from '../../../../../../redux/chat/action';\r\nimport { firstLetter, slicedWord,prodBaseURL } from '../../../../../../helpers';\r\nimport { TChat } from '../../../../../../typescript/redux/chats/types';\r\n\r\nconst useStyles = makeStyles({\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\ninterface IDeleteModal {\r\n setModal: (a: boolean) => void,\r\n chat:TChat\r\n}\r\nconst DeleteModal = ({setModal,chat}:IDeleteModal) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const {name,lastName,avatarUrl,color,companionId} = chat\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeChatForBoth(companionId)\r\n setModal(false)\r\n dispatch(actionRemoveChat())\r\n dispatch(actionRightIsOpen(''))\r\n }\r\n }\r\n \r\n return (\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete chat</h3>\r\n </div>\r\n <p style={{color: '#050505'}}>{`Are you sure you want to delete the\r\n chat with ${`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CHAT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div>\r\n </div> \r\n )\r\n}\r\n\r\nexport default DeleteModal","import { makeStyles,Typography } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport { styled } from '@mui/material/styles';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport NotificationsNoneIcon from '@mui/icons-material/NotificationsNone';\r\nimport VolumeOffIcon from '@mui/icons-material/VolumeOff';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport ListItemButton from '@mui/material/ListItemButton';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport Badge from '@mui/material/Badge';\r\nimport DoneAllIcon from '@mui/icons-material/DoneAll';\r\n\r\nimport { muteChat } from '../../../../../api-data';\r\nimport { TChat } from '../../../../../typescript/redux/chats/types';\r\nimport { firstLetter, slicedWord, timeStampEU,prodBaseURL } from '../../../../../helpers';\r\nimport DeleteModal from './DeleteModal';\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '8px 8px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst StyledBadge = styled(Badge)(({ theme }) => ({\r\n '& .MuiBadge-badge': {\r\n backgroundColor: '#44b700',\r\n color: '#44b700',\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\r\n '&::after': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n animation: 'ripple 1.2s infinite ease-in-out',\r\n border: '1px solid currentColor',\r\n content: '\"\"',\r\n },\r\n },\r\n '@keyframes ripple': {\r\n '0%': {\r\n transform: 'scale(.8)',\r\n opacity: 1,\r\n },\r\n '100%': {\r\n transform: 'scale(2.4)',\r\n opacity: 0,\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n listItemInnerText: {\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n },\r\n listItemInnerText__icon: {\r\n marginLeft: 5,\r\n color: '#959595',\r\n },\r\n listItem_iconAvatar: {\r\n marginRight:10\r\n },\r\n listItem_iconRight: {\r\n marginRight: 10,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n flexDirection: 'column'\r\n },\r\n listItem_iconTimeChecked: {\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n marginBottom:2\r\n },\r\n listItem_iconRightBtn: {\r\n background: '#0ac40a',\r\n borderRadius: '50%',\r\n color: '#ffffff',\r\n border: 'none',\r\n height: 24,\r\n width: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n fontSize: 12,\r\n marginLeft: 'auto',\r\n '&:hover': {\r\n outline: 'solid 3px #3ee415',\r\n }\r\n },\r\n listItem_iconRightBtnMute: {\r\n background: '#a7aaa7',\r\n borderRadius: '50%',\r\n color: '#ffffff',\r\n border: 'none',\r\n height: 24,\r\n width: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n fontSize: 12,\r\n marginLeft: 'auto',\r\n '&:hover': {\r\n outline: 'solid 3px #cccbcb',\r\n }\r\n },\r\n listItem_iconRightBtnHidden: {\r\n background: 'inherit',\r\n borderRadius: '50%',\r\n border: 'none',\r\n height: 24,\r\n width: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n fontSize: 12,\r\n marginLeft: 'auto', \r\n },\r\n listItem_icon_time: {\r\n fontSize: 12,\r\n marginLeft: 5,\r\n color: '#1b1b1b'\r\n },\r\n listItem_typing: {\r\n color: '#4d4d4d',\r\n animation: 'ripple 4s infinite ease-in-out', \r\n }, \r\n listItem_dots: {\r\n color: '#1b1b1b',\r\n fontWeight: 'bold',\r\n display:'inline-block',\r\n fontFamily: 'monospace',\r\n clipPath: 'inset(0 3ch 0 0)',\r\n animation: `$run 2s steps(5) infinite`, \r\n },\r\n '@keyframes run': {\r\n to: {\r\n clipPath: 'inset(0 -1ch 0 0)'\r\n },\r\n },\r\n})\r\n\r\ninterface IChatItem {\r\n chat: TChat,\r\n handleListItemClick: (companionId: string) => void,\r\n handleNewMsgs: (e: any,companionId: string) => void,\r\n}\r\nconst ChatItem = ({chat,handleListItemClick,handleNewMsgs}:IChatItem) => {\r\n const classes = useStyles()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal, setModal] = useState<boolean>(false);\r\n const open = Boolean(anchorEl);\r\n const { name, lastName, avatarUrl, color, companionId, mute, seen, total, watched,\r\n typing, online, lastMessage, lastMessageCreatedAt, createdAt } = chat\r\n\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'mute') muteChat(companionId)\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div>\r\n {modal&&<DeleteModal setModal={setModal} chat={chat}/>}\r\n <ListItemButton\r\n selected={selected}\r\n onClick={() => handleListItemClick(companionId)}\r\n onContextMenu={(e) => handleContextMenu(e)}\r\n >\r\n <ListItemIcon className={classes.listItem_iconAvatar}>\r\n <StyledBadge overlap=\"circular\" variant={online === 'true'?'dot':'standard'}\r\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 54, height: 54 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </StyledBadge>\r\n </ListItemIcon> \r\n <ListItemText primary={<div className={classes.listItemInnerText}>\r\n <span>{`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>\r\n {mute&&<VolumeOffIcon className={classes.listItemInnerText__icon} fontSize='small' />}</div>}\r\n secondary={typing ? <span className={classes.listItem_typing}>\r\n typing<span className={classes.listItem_dots}>...</span></span> :\r\n lastMessage ? slicedWord(lastMessage, 35) :\r\n `${firstLetter(name)}${slicedWord(name, 8, 1)} joined Telegram`}/>\r\n <ListItemIcon className={classes.listItem_iconRight}>\r\n <div className={classes.listItem_iconTimeChecked}>\r\n {watched&& <DoneAllIcon style={{ color: '#18bd03' }} fontSize='small' />}\r\n <Typography className={classes.listItem_icon_time} variant=\"h6\" color=\"initial\">\r\n {timeStampEU(lastMessageCreatedAt?lastMessageCreatedAt:createdAt)}\r\n </Typography>\r\n </div>\r\n {lastMessage && total > seen ? <button onClick={(e) => handleNewMsgs(e,companionId)}\r\n className={mute?classes.listItem_iconRightBtnMute:classes.listItem_iconRightBtn}>{total-seen}</button> :\r\n <button className={classes.listItem_iconRightBtnHidden}/>}\r\n </ListItemIcon> \r\n </ListItemButton>\r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n > \r\n <MenuItem onClick={() => handleClose('mute')}>\r\n {mute ? <NotificationsNoneIcon /> : <VolumeOffIcon />}\r\n {mute ? 'Unmute chat':'Mute chat'}\r\n </MenuItem>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete chat\r\n </MenuItem> \r\n </StyledMenu> \r\n </div>\r\n );\r\n}\r\nexport default ChatItem","import List from '@mui/material/List';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect,useRef,useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport AlertInfo from '../../../reusableComponents/AlertInfo'\r\nimport ChatItem from './ChatItem';\r\nimport { notification,playNotificationWithoutPermission,sortByRecent } from '../../../../helpers'\r\nimport { getStateMemo } from '../../../../redux/chats/selector'\r\nimport { getChatMemo } from '../../../../redux/chat/selector'\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations'\r\nimport { asyncGetChats } from '../../../../redux/chats/operations';\r\nimport { actionRightIsOpen,actionScrollChat } from '../../../../redux/control/action'\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\nimport { prodBaseURL,refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n width: '100%',\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n})\r\n\r\ninterface IChatsList {\r\n sort: boolean,\r\n}\r\n\r\nconst ChatsList = ({sort}:IChatsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const chatsRef = useRef<any>(null)\r\n const { total, chats } = useSelector(getStateMemo)\r\n const chat = useSelector(getChatMemo)\r\n \r\n const handleListItemClick = (companionId: string) => {\r\n dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const handleNewMsgs = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, companionId: string) => {\r\n e.stopPropagation()\r\n dispatch(actionScrollChat(true))\r\n dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const handleNotification = useCallback((companionId: string) => {\r\n dispatch(asyncStartChatById(companionId))\r\n dispatch(actionScrollChat(true))\r\n }, [dispatch])\r\n\r\n const sortedChats: TChats = sortByRecent(chats, sort)\r\n \r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncGetChats())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]); \r\n\r\n useEffect(() => {\r\n if (chatsRef.current) {\r\n chatsRef.current.forEach(({total,seen}: any,i:number) => {\r\n const oldDifferent = total - seen\r\n const chat = sortedChats[i]\r\n if(chat === undefined) return\r\n const newDifferent = chat.total - chat.seen\r\n if (newDifferent > oldDifferent && !chat.mute) {\r\n playNotificationWithoutPermission(`${prodBaseURL}/telegramReceive.mp3`)\r\n notification(chat.name,() => handleNotification(chat.companionId))\r\n } \r\n })\r\n }\r\n chatsRef.current = sortedChats\r\n }, [chat,sortedChats,handleNotification,dispatch])\r\n\r\n return total !== '0' ? (\r\n <List className={classes.list} component=\"nav\"\r\n aria-label=\"main mailbox folders\">\r\n {sortedChats.map((el) => <ChatItem key={el.number} chat={el} \r\n handleListItemClick={handleListItemClick} handleNewMsgs={handleNewMsgs} />)}\r\n </List>\r\n ):<AlertInfo name='You do not have Chats yet!' />;\r\n}\r\n\r\nexport default ChatsList","import Divider from '@mui/material/Divider';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PermContactCalendarIcon from '@mui/icons-material/PermContactCalendar';\r\nimport SettingsIcon from '@mui/icons-material/Settings';\r\nimport Brightness3Icon from '@mui/icons-material/Brightness3'; \r\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\r\nimport BugReportIcon from '@mui/icons-material/BugReport';\r\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\r\nimport Switch from '@mui/material/Switch';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { updateUser } from '../../../../api-data';\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { actionLeftIsOpen } from '../../../../redux/control/action';\r\nimport { refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex:100\r\n },\r\n container: {\r\n position: 'absolute',\r\n width: 270,\r\n maxWidth: '100%',\r\n top: 60,\r\n left: 15,\r\n zIndex: 10,\r\n visibility: 'visible',\r\n },\r\n list: {\r\n background:'#fdfdfd'\r\n },\r\n listItemLast: {\r\n textAlign: 'center',\r\n },\r\n listIcon: {\r\n marginRight: 15,\r\n },\r\n listIconText: {\r\n marginRight: 15,\r\n paddingLeft:6\r\n }\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface IContactsList {\r\n nightMode: boolean,\r\n}\r\n\r\nconst MenuBar = ({nightMode}:IContactsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const handleNightMode = () => updateUser({ nightMode: !nightMode })\r\n\r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]); \r\n\r\n return (\r\n <div className={classes.overlay} id='overlay'>\r\n <Paper className={classes.container}>\r\n <MenuList className={classes.list}>\r\n <MenuItem onClick={() => dispatch(actionLeftIsOpen('contact'))}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <PersonAddAltIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>New Contact</ListItemText>\r\n </MenuItem> \r\n <MenuItem onClick={() => dispatch(actionLeftIsOpen('contacts'))}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <PermContactCalendarIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Contacts</ListItemText>\r\n </MenuItem>\r\n <MenuItem onClick={() => dispatch(actionLeftIsOpen('settings'))}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <SettingsIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Settings</ListItemText>\r\n </MenuItem>\r\n <MenuItem style={{cursor:'default'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <Brightness3Icon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Night Mode</ListItemText>\r\n <Switch onClick={handleNightMode} checked={nightMode} {...label} style={{cursor:'pointer'}}/>\r\n </MenuItem>\r\n <a style={{ textDecoration: 'none', color: 'inherit' }} target='blank'\r\n href='https://www.makeuseof.com/tag/useful-telegram-features/'>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIcon}>\r\n <HelpOutlineIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Telegram Features</ListItemText>\r\n </MenuItem>\r\n </a>\r\n <a style={{ textDecoration: 'none', color: 'inherit' }} target='blank'\r\n href='https://bugs.telegram.org/?tag_ids=41&sort=time'>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIcon}>\r\n <BugReportIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Report bug</ListItemText>\r\n </MenuItem>\r\n </a>\r\n <a style={{ textDecoration: 'none', color: 'inherit' }} target='blank'\r\n href='https://www.msn.com/en-in/money/tech/telegram-webk-and-webz-web-apps-launched-whats-the-difference/ar-BB1fOwLR'>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIconText}>\r\n K\r\n </ListItemIcon>\r\n <ListItemText>Switch to K Version</ListItemText>\r\n </MenuItem>\r\n </a>\r\n <a style={{ textDecoration: 'none', color: 'inherit' }} target='blank'\r\n href='https://desktop.telegram.org/changelog'>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIconText}>\r\n W\r\n </ListItemIcon>\r\n <ListItemText>Switch to Old Version</ListItemText>\r\n </MenuItem>\r\n </a> \r\n <Divider />\r\n <MenuItem style={{cursor:'default'}}>\r\n <ListItemText secondary='Telegram WebZ 1.32.3' className={classes.listItemLast}/>\r\n </MenuItem>\r\n </MenuList>\r\n </Paper>\r\n </div>\r\n );\r\n}\r\n\r\nexport default MenuBar","import { makeStyles } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { styled } from '@mui/material/styles';\r\nimport Button from '@mui/material/Button';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport ListItemButton from '@mui/material/ListItemButton';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport {removeContact } from '../../../../../api-data';\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action';\r\nimport { TContact } from '../../../../../typescript/redux/contacts/types';\r\nimport { TRightIsOpen } from '../../../../../typescript/redux/control/types';\r\nimport { firstLetter,slicedWord,timeStampEU,copied,prodBaseURL } from '../../../../../helpers';\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '8px 8px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n listItem_iconAvatar: {\r\n marginRight:10\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n }, \r\n})\r\ninterface IContactItem {\r\n contact: TContact,\r\n handleListItemClick: (companionId: string) => void,\r\n rightIsOpen: TRightIsOpen,\r\n}\r\nconst ContactItem = ({contact,handleListItemClick,rightIsOpen}:IContactItem) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n const { name, lastName, avatarUrl, color, companionId,createdAt, number,_id } = contact\r\n\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Number')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n rightIsOpen === 'edit'&&dispatch(actionRightIsOpen('credentials'))\r\n removeContact(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div>\r\n <ListItemButton\r\n selected={selected}\r\n onClick={() => handleListItemClick(companionId)}\r\n onContextMenu={(e) => handleContextMenu(e)}\r\n >\r\n <ListItemIcon className={classes.listItem_iconAvatar}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 54, height: 54 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemIcon> \r\n <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondary={`Registered since ${timeStampEU(createdAt)}`} />\r\n </ListItemButton> \r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={number}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy number\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete contact\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal&&<div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete contact</h3>\r\n </div>\r\n <p style={{ color: '#050505' }}>{`Are you sure you want to delete contact\r\n ${`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CONTACT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>}\r\n </div>\r\n );\r\n}\r\nexport default ContactItem","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getTotal = (state: IState) => state.contacts.total;\r\nconst getLimit = (state:IState) => state.contacts.limit;\r\nconst getPage = (state: IState) => state.contacts.page;\r\nconst getContacts = (state: IState) => state.contacts.contacts;\r\nconst getState = (state: IState) => state.contacts;\r\n\r\nconst getContactsMemo = createSelector([getContacts], state => state);\r\n\r\nexport { getTotal,getLimit,getPage,getContacts,getState,getContactsMemo };\r\n","import {\r\n actionGetContactsSuccess,\r\n actionGetContactsReject\r\n} from '../action';\r\nimport { addContact,getContacts} from '../../../api-data';\r\nimport { IContactsState } from '../../../typescript/redux/contacts/interfaces'\r\n\r\nconst asyncGetContacts = () => async (dispatch:any) => {\r\n try {\r\n const data = await getContacts<IContactsState>()\r\n data&&dispatch(actionGetContactsSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetContactsReject())\r\n } \r\n};\r\n\r\nconst asyncAddContact = (number:string) => async (dispatch:any) => {\r\n try {\r\n await addContact(number)\r\n } catch(e) {}\r\n};\r\n\r\n\r\nexport { asyncAddContact,asyncGetContacts };\r\n","import List from '@mui/material/List';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../reusableComponents/AlertInfo'\r\nimport ContactItem from './ContactItem';\r\nimport { getState } from '../../../../redux/contacts/selector'\r\nimport { asyncGetContacts } from '../../../../redux/contacts/operations';\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations'\r\nimport { getRightIsOpen } from '../../../../redux/control/selector'\r\nimport { actionLeftIsOpen, actionRightIsOpen } from '../../../../redux/control/action';\r\nimport { handleSort,timeStampFilter,refreshAppTime } from '../../../../helpers';\r\nimport { TContacts,TContact } from '../../../../typescript/redux/contacts/types';\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n width: '100%',\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n})\r\n\r\ninterface IContactList {\r\n value: string,\r\n handleClick: () => void,\r\n sort: boolean,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n}\r\nconst ContactsList = ({value,handleClick,sort,date,setDisabled} : IContactList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { total, contacts } = useSelector(getState)\r\n const rightIsOpen = useSelector(getRightIsOpen)\r\n\r\n const filteredContacts = ():TContacts => handleSort('name', contacts, sort).filter((el:TContact) => {\r\n const credentials = el.name + ' ' + el.lastName\r\n if (!date) {\r\n return credentials.toLowerCase().includes(value.toLowerCase())\r\n } else if (credentials.toLowerCase().includes(value.toLowerCase())\r\n && timeStampFilter(date) === timeStampFilter(el.createdAt)) {\r\n return el\r\n }\r\n })\r\n\r\n const handleListItemClick = (companionId: string) => {\r\n handleClick()\r\n dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const arr = filteredContacts()\r\n\r\n useEffect(() => {\r\n dispatch(actionLeftIsOpen('contacts'))\r\n }, [dispatch]) \r\n\r\n useEffect(() => {\r\n setDisabled(total === '0'?true:false)\r\n }, [total, setDisabled])\r\n \r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncGetContacts())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]); \r\n \r\n return total !== '0' ? (\r\n <List\r\n className={classes.list} component=\"nav\"\r\n aria-label=\"main mailbox folders\">\r\n {arr.length > 0 ? arr.map((contact) => <ContactItem key={contact.number}\r\n contact={contact} handleListItemClick={handleListItemClick} rightIsOpen={rightIsOpen}/>) :\r\n <AlertInfo name={`Can not find Contact by request : ${value}`} />}\r\n </List>\r\n ):<AlertInfo name='You do not have Contact yet!' />;\r\n}\r\n\r\nexport default ContactsList","import Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton'\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height: '7vh',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\ninterface ISearchBar {\r\n handleClick:() => void,\r\n}\r\n\r\nconst ToolBar = ({ handleClick }:ISearchBar) => {\r\n \r\n const classes = useStyles()\r\n return (\r\n <Toolbar className={classes.toolBar}>\r\n <IconButton onClick={handleClick}>\r\n <ArrowBackIcon className={classes.iconArrow} /> \r\n </IconButton>\r\n\r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, Button, TextField, Typography } from '@material-ui/core'\r\nimport React, { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { asyncAddContact } from '../../../../redux/contacts/operations'\r\nimport { actionLeftIsOpen } from '../../../../redux/control/action';\r\nimport ToolBar from './ToolBar';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: 350,\r\n margin: '0 auto',\r\n paddingBottom: 24,\r\n },\r\n title: {\r\n marginBottom: 20,\r\n textAlign: 'center',\r\n },\r\n buttonNext: {\r\n marginTop: 20,\r\n height: 50,\r\n color: '#f8f8f8',\r\n backgroundColor:'#1d74c5',\r\n },\r\n textField: {\r\n marginBottom:20\r\n }\r\n})\r\n\r\ninterface IAddContact {\r\n handleClick: () => void\r\n}\r\n\r\nconst AddContact = ({handleClick}:IAddContact) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [number, setNumber] = useState<string>('')\r\n\r\n const handleTextField = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value.split(' ').join('').trim()\r\n setNumber(value)\r\n }\r\n const handleAddContact = async () => {\r\n dispatch(asyncAddContact(number))\r\n dispatch(actionLeftIsOpen('contacts'))\r\n }\r\n\r\n const isValidNumber = () => {\r\n if (number.length < 13 || number.length > 13) return false\r\n if(number.slice(0,1) === '+') return true\r\n return true\r\n }\r\n\r\n const handlePressEnter = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if(e.code === 'Enter' && isValidNumber()) handleAddContact()\r\n } \r\n\r\n \r\n return (\r\n <>\r\n <ToolBar handleClick={handleClick}/>\r\n <div onKeyDown={handlePressEnter} className={classes.container} >\r\n <Typography\r\n className={classes.title}\r\n variant=\"h5\"\r\n color=\"initial\">\r\n Add new contact\r\n </Typography> \r\n <TextField\r\n id=\"number\"\r\n name='NUMBER'\r\n label=\"Write down a number,+ is requirement\"\r\n value={number}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n className={classes.textField}\r\n required\r\n />\r\n {isValidNumber() &&\r\n <Button\r\n onClick={handleAddContact}\r\n className={classes.buttonNext}\r\n color='primary'\r\n variant=\"contained\"\r\n fullWidth\r\n > ADD\r\n </Button>}\r\n </div>\r\n </> \r\n );\r\n};\r\n\r\nexport default AddContact;","import { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { styled } from '@mui/material/styles';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport LogoutIcon from '@mui/icons-material/Logout';\r\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\r\n\r\nimport { asyncLogout } from '../../../../../../redux/authorization/operations';\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(5),\r\n minWidth: 180,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst MenuList = () => {\r\n const dispatch = useDispatch()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const open = Boolean(anchorEl);\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>): void =>\r\n setAnchorEl(e.currentTarget)\r\n\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'logout') dispatch(asyncLogout())\r\n setAnchorEl(null)\r\n }\r\n \r\n return (\r\n <>\r\n <IconButton onClick={handleClick} aria-label=\"delete\"\r\n style={{marginLeft:5}} size=\"medium\">\r\n <MoreVertIcon fontSize='medium'/>\r\n </IconButton>\r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <MenuItem style={{fontWeight:500}} onClick={() => handleClose('logout')}>\r\n <LogoutIcon/>\r\n Log Out\r\n </MenuItem> \r\n </StyledMenu>\r\n </>\r\n );\r\n}\r\n\r\nexport default MenuList","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\nimport MenuList from './MenuList';\r\nimport { actionLeftIsOpen } from '../../../../../redux/control/action';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n height: '7vh',\r\n padding:10,\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\ninterface IToolBar {\r\n handleClick:() => void\r\n}\r\n\r\nconst ToolBar = ({handleClick}:IToolBar) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={handleClick} aria-label=\"delete\" size=\"medium\">\r\n <ArrowBackIcon className={classes.iconArrow} fontSize='medium'/>\r\n </IconButton>\r\n <Typography style={{ marginLeft: 20, color: '#474747' }} variant=\"h6\" color=\"initial\">Settings</Typography>\r\n <IconButton onClick={() => dispatch(actionLeftIsOpen('edit'))} style={{ marginLeft: 'auto' }} aria-label=\"delete\" size=\"medium\">\r\n <EditIcon fontSize='medium' /> \r\n </IconButton>\r\n <MenuList/> \r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import Button from '@mui/material/Button';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { removeUserAvatar } from '../../../../../../api-data';\r\n\r\nconst useStyles = makeStyles({\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\ninterface IDeleteModal {\r\n setModal: (a: boolean) => void,\r\n index: number,\r\n setIndex: any\r\n}\r\nconst DeleteModal = ({setModal,index,setIndex}:IDeleteModal) => {\r\n const classes = useStyles()\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeUserAvatar(index)\r\n setIndex(index-1)\r\n setModal(false)\r\n }\r\n }\r\n \r\n return (\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete image</h3>\r\n </div>\r\n <p style={{color: '#050505'}}>{`Are you sure you want to delete the Image?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE IMAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div>\r\n </div> \r\n )\r\n}\r\n\r\nexport default DeleteModal","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux';\r\nimport { useState } from 'react';\r\nimport { getAuthorizationState } from '../../../../../redux/authorization/selector'\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { firstLetter, slicedWord, timeStampEU,prodBaseURL } from '../../../../../helpers'\r\nimport DeleteModal from './DeleteModal';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n backgroundColor: '#ffffff',\r\n position:'relative',\r\n },\r\n nameTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:8,\r\n fontSize: 18,\r\n zIndex:10,\r\n top: '7%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n },\r\n timeTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:4,\r\n fontSize: 15,\r\n top: '1%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n },\r\n iconDeleteWrapper: {\r\n position: 'absolute',\r\n top: '1%',\r\n right: '9%',\r\n },\r\n iconDelete: {\r\n '&:hover': {\r\n opacity: 1,\r\n color: '#fa0000',\r\n animation: `$shake 0.5s`,\r\n }\r\n },\r\n '@keyframes shake': {\r\n '0%': { transform: 'translate(0.5px, 0.5px) rotate(0deg)'},\r\n '10%': { transform: 'translate(-0.5px, -1px) rotate(-1deg)'},\r\n '20%': { transform: 'translate(-1.5px, 0px) rotate(1deg)'},\r\n '30%': { transform: 'translate(1.5px, 1px) rotate(0deg)'},\r\n '40%': { transform: 'translate(0.5px, -0.5px) rotate(1deg)'},\r\n '50%': { transform: 'translate(-0.5px, 1px) rotate(-1deg)'},\r\n '60%': { transform: 'translate(-1.5px, 0.5px) rotate(0deg)'},\r\n '70%': { transform: 'translate(1.5px, 0.5px) rotate(-1deg)'},\r\n '80%': { transform: 'translate(-0.5px, -0.5px) rotate(1deg)'},\r\n '90%': { transform: 'translate(0.5px, 1px) rotate(0deg)'},\r\n '100%': { transform: 'translate(0.5px, -1px) rotate(-1deg)'},\r\n }, \r\n})\r\n\r\nconst SettingsPicture = () => {\r\n const classes = useStyles()\r\n const { name, lastName, avatarsArr, online } = useSelector(getAuthorizationState)\r\n const [modal, setModal] = useState<boolean>(false);\r\n const [index, setIndex] = useState<number>(0);\r\n const handleClick = (): void => setModal(true)\r\n\r\n return (\r\n <div className={classes.container}>\r\n {modal &&\r\n <DeleteModal setModal={setModal} index={index} setIndex={setIndex}/>}\r\n <Carousel onChange={(i)=> setIndex(i)} selectedItem={index}>\r\n {avatarsArr.map(({ avatarUrl, updatedAt }) =>\r\n <div key={avatarUrl}>\r\n <img alt='pic' src={`${prodBaseURL}/${avatarUrl}`}/>\r\n <p className=\"legend\">{timeStampEU(updatedAt)}</p> \r\n </div>)}\r\n </Carousel> \r\n <span className={classes.nameTile}>{`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>\r\n <span className={classes.timeTile}>{online === 'true' ? 'online' : `last seen ${timeStampEU(online)}`}</span>\r\n {avatarsArr.length > 1 &&\r\n <div className={classes.iconDeleteWrapper}>\r\n <Avatar className={classes.iconDelete} onClick={handleClick}\r\n sx={{width: 36, height: 36, backgroundColor: 'rgb(0,0,0)',\r\n color: '#ffffff', opacity: 0.5,cursor:'pointer'}}>\r\n <DeleteOutlineIcon fontSize='medium'/> \r\n </Avatar> \r\n </div>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default SettingsPicture","import { useSelector } from 'react-redux';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport { getNumber } from '../../../../../redux/authorization/selector'\r\nimport { copied} from '../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n backgroundColor: '#ffffff', \r\n },\r\n})\r\n\r\n\r\nconst SettingsMenu = () => {\r\n const classes = useStyles()\r\n const number = useSelector(getNumber)\r\n\r\n return (\r\n <Paper className={classes.container}>\r\n <MenuList>\r\n <CopyToClipboard onCopy={() => copied('Number')} text={number}>\r\n <MenuItem>\r\n <ListItemIcon style={{marginRight:15}}>\r\n <PhoneIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={number} secondary='Phone' />\r\n </MenuItem>\r\n </CopyToClipboard> \r\n </MenuList>\r\n </Paper>\r\n );\r\n}\r\n\r\nexport default SettingsMenu","import { useEffect } from \"react\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport ToolBar from \"./ToolBar\"\r\nimport SettingsPicture from \"./SettingsPicture\"\r\nimport SettingsMenu from \"./SettingsMenu\"\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations'\r\nimport { refreshAppTime } from '../../../../helpers'\r\n\r\ninterface ISettingsBar {\r\n handleClick:() => void\r\n}\r\n\r\nconst SettingsBar = ({ handleClick }: ISettingsBar) => {\r\n const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\r\n \r\n return (\r\n <div style={{backgroundColor: '#f3f2f2',height:'100%',width:'100%'}}>\r\n <ToolBar handleClick={handleClick}/>\r\n <SettingsPicture />\r\n <SettingsMenu/>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SettingsBar","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\nimport { actionLeftIsOpen } from '../../../../../redux/control/action';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n paddingLeft: 10,\r\n height:'7vh',\r\n width: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\n\r\nconst ToolBar = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={() => dispatch(actionLeftIsOpen('settings'))} aria-label=\"delete\" size=\"medium\">\r\n <ArrowBackIcon className={classes.iconArrow} fontSize='medium'/>\r\n </IconButton>\r\n <Typography style={{marginLeft:20,color: '#474747'}} variant=\"h6\" color=\"initial\">Edit profile</Typography>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, TextField } from '@material-ui/core'\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport AddAPhotoIcon from '@mui/icons-material/AddAPhoto';\r\nimport { useEffect } from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { format,firstLetter,prodBaseURL } from '../../../../../helpers'\r\nimport { IAuthorizationState } from '../../../../../typescript/redux/authorization/interfaces'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: '100%',\r\n padding: 20,\r\n paddingTop:0,\r\n position: 'relative',\r\n backgroundColor: '#ffffff',\r\n },\r\n imgWrapper: {\r\n cursor: 'pointer',\r\n marginBottom: 30,\r\n position: 'relative',\r\n },\r\n imgDropZoneOverlay: {\r\n position: 'absolute',\r\n width: 120,\r\n height: 120,\r\n borderRadius: '50%',\r\n backgroundColor: '#6868687d',\r\n left: 0,\r\n zIndex: 1,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n addPhoto: {\r\n color: '#ffffff',\r\n transform: 'scale(1.1)',\r\n '&:hover': {\r\n transform: 'scale(1.3)',\r\n },\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n alignSelf: 'flex-end',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\ninterface IEditList {\r\n user: IAuthorizationState,\r\n name: string,\r\n setName: any,\r\n lastName: string,\r\n setLastName: any,\r\n openBtn: boolean,\r\n setOpenBtn: any,\r\n file:any,\r\n setFile: (file:any) => void\r\n}\r\n\r\nconst EditList = (props: IEditList) => {\r\n const classes = useStyles()\r\n const { user, name, setName, lastName, setLastName,\r\n openBtn, setOpenBtn,setFile } = props\r\n const { avatarUrl, color } = user\r\n const { getRootProps, getInputProps, acceptedFiles } = useDropzone({\r\n noDrag: true,\r\n accept:'image/*'\r\n });\r\n\r\n const handleTextField = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n !openBtn&&setOpenBtn(true)\r\n const value = format(e.target.value)\r\n const name = e.target.name\r\n switch (name) {\r\n case 'name':\r\n setName(value)\r\n break;\r\n case 'lastName':\r\n setLastName(value)\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (acceptedFiles.slice(-1)[0]) {\r\n setFile(acceptedFiles.slice(-1)[0])\r\n setOpenBtn(true)\r\n }\r\n }, [setFile,setOpenBtn,acceptedFiles])\r\n\r\n return (\r\n <div className={classes.container} > \r\n <ListItemAvatar className={classes.imgWrapper}>\r\n <div {...getRootProps({ className: classes.imgDropZoneOverlay })}>\r\n <AddAPhotoIcon className={classes.addPhoto} fontSize='large' />\r\n <input {...getInputProps()}/>\r\n </div>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 120, height: 120}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar> \r\n <TextField\r\n id=\"name\"\r\n name='name'\r\n label=\"Name\"\r\n value={name}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n style={{marginBottom:20}}\r\n />\r\n <TextField\r\n id=\"lastName\"\r\n name='lastName'\r\n label=\"LastName\"\r\n value={lastName}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n /> \r\n </div>\r\n )\r\n};\r\n\r\nexport default EditList;","import { makeStyles} from '@material-ui/core'\r\nimport Avatar from '@mui/material/Avatar';\r\nimport DoneIcon from '@mui/icons-material/Done';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n content: '',\r\n top: '92vh',\r\n right:20,\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n },\r\n})\r\n\r\nconst SubmitBtn = ({handleSubmit}:{handleSubmit:() => void}) => {\r\n const classes = useStyles() \r\n\r\n return (\r\n <div className={classes.container}>\r\n <Avatar onClick={handleSubmit} className={classes.avatarArrow}\r\n sx={{width: 56, height: 56,backgroundColor: 'rgb(41, 139, 231)',color: '#ffffff'}}>\r\n <DoneIcon fontSize=\"medium\" /> \r\n </Avatar>\r\n </div> \r\n )\r\n};\r\n\r\nexport default SubmitBtn;","import { makeStyles } from '@material-ui/core'\r\nimport { useState,useEffect } from 'react';\r\nimport { useSelector,useDispatch } from 'react-redux';\r\nimport ToolBar from './ToolBar'\r\nimport EditList from './EditList'\r\nimport SubmitBtn from './SubmitBtn';\r\nimport { getAuthorizationState } from '../../../../redux/authorization/selector'\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { updateCredentials, updateUserAvatar } from '../../../../api-data';\r\nimport { refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#f3f2f2',\r\n position:'relative'\r\n }\r\n})\r\n\r\n\r\n\r\nconst EditBar= () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const user = useSelector(getAuthorizationState)\r\n const [name, setName] = useState<string>('')\r\n const [lastName, setLastName] = useState<string>('')\r\n const [openBtn, setOpenBtn] = useState<boolean>(false)\r\n const [file,setFile] = useState<any>(null)\r\n const {name:Name,lastName:LastName} = user\r\n\r\n const handleSubmit = async () => {\r\n if (name !== Name || lastName !== LastName){\r\n await updateCredentials({ name, lastName, originalName: name, originalLastName: lastName })\r\n }\r\n if (file) {\r\n const formData: any = new FormData()\r\n formData.append(\"avatar\", file);\r\n await updateUserAvatar(formData)\r\n }\r\n file && setFile(null)\r\n openBtn && setOpenBtn(false)\r\n }\r\n\r\n useEffect(() => {\r\n const handleReset = () => !openBtn && dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [openBtn,dispatch]); \r\n \r\n useEffect(() => {\r\n Name&&setName(Name)\r\n LastName && setLastName(LastName)\r\n }, [Name, LastName])\r\n\r\n return (\r\n <div className={classes.container}>\r\n {openBtn&&<SubmitBtn handleSubmit={handleSubmit}/>}\r\n <ToolBar />\r\n <EditList user={user} name={name} setName={setName}\r\n lastName={lastName} setLastName={setLastName} \r\n openBtn={openBtn} setOpenBtn={setOpenBtn}\r\n file={file} setFile={setFile}/>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EditBar","import { useState, useRef, useEffect } from 'react';\r\nimport { useSelector,useDispatch } from 'react-redux';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport Grid from '@mui/material/Grid'\r\nimport SmallMenuBar from './SmallMenuBar'\r\nimport SearchLists from './SearchLists';\r\nimport SearchBar from './SearchBar'\r\nimport ChatsList from './ChatsList'\r\nimport MenuBar from './MenuBar'\r\nimport ContactsList from './ContactsList'\r\nimport AddContact from './AddContact'\r\nimport SettingsBar from './SettingsBar';\r\nimport EditBar from './EditBar';\r\nimport { getAuthorizationState } from '../../../redux/authorization/selector';\r\nimport { getLeftIsOpen } from '../../../redux/control/selector';\r\nimport { actionLeftIsOpen } from '../../../redux/control/action';\r\n\r\nconst LeftBar = () => {\r\n const dispatch = useDispatch()\r\n const { sort, nightMode } = useSelector(getAuthorizationState)\r\n const leftIsOpen = useSelector(getLeftIsOpen)\r\n const [modal, setModal] = useState<boolean>(false)\r\n const [popup, setPopup] = useState<boolean>(false);\r\n const [disabled, setDisabled] = useState<boolean>(false)\r\n const [value, setValue] = useState<string>('')\r\n const [date, setDate] = useState<any>('');\r\n const modalRoot = useRef<HTMLDivElement | null>(null);\r\n \r\n const handleOpenIsSearch = () => leftIsOpen===''&&dispatch(actionLeftIsOpen('searchChats'))\r\n \r\n const handleClick = () => {\r\n dispatch(actionLeftIsOpen(''))\r\n setModal(true)\r\n }\r\n \r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>):void => setValue(e.target.value)\r\n const handleEnterOpenMenuSm = () => !popup&&setPopup(true)\r\n \r\n const handleLeaveCloseMenuSm = () => popup&&setPopup(false)\r\n \r\n\r\n useEffect(() => {\r\n setValue('')\r\n setDate('') \r\n setModal(false)\r\n setPopup(false)\r\n },[leftIsOpen])\r\n \r\n useEffect(() => {\r\n const handleCloseModal = (e:any) => {\r\n if (e.target.id === 'overlay') {\r\n setModal(false)\r\n setPopup(false)\r\n }\r\n }\r\n if (!modalRoot.current) {\r\n const modalHtml = document.getElementById('modal-root') as HTMLDivElement | null\r\n if (modalHtml) {\r\n modalHtml.addEventListener('click',handleCloseModal)\r\n modalRoot.current = modalHtml\r\n } \r\n }\r\n return () => {\r\n if (modalRoot.current) {\r\n modalRoot.current.removeEventListener('click',handleCloseModal)\r\n modalRoot.current = null \r\n }\r\n }\r\n }, [])\r\n\r\n return (\r\n <Grid item lg={3} style={{ position: 'relative', backgroundColor:'#ffffff'}}\r\n onMouseEnter={handleEnterOpenMenuSm} onMouseLeave={handleLeaveCloseMenuSm}>\r\n {leftIsOpen === '' || leftIsOpen === 'contacts'\r\n || leftIsOpen === 'searchChats' || leftIsOpen === 'searchAllMessages' ?\r\n <SearchBar handleClick={handleClick} handleOpenIsSearch={handleOpenIsSearch} sort={sort} \r\n handleSearch={handleSearch} leftIsOpen={leftIsOpen} value={value} setDate={setDate}\r\n date={date} disabled={disabled}/>:null}\r\n {leftIsOpen === 'searchChats' || leftIsOpen === 'searchAllMessages' ?<SearchLists value={value} setValue={setValue}\r\n sort={sort} date={date} setDate={setDate} setDisabled={setDisabled}/>:null}\r\n {leftIsOpen === ''&&<ChatsList sort={sort}/>}\r\n {leftIsOpen === '' && popup && <SmallMenuBar setPopup={setPopup} />}\r\n {modal && modalRoot.current &&\r\n createPortal(<MenuBar nightMode={nightMode} />, modalRoot.current)}\r\n {leftIsOpen === 'contacts' && <ContactsList handleClick={handleClick} value={value}\r\n sort={sort} date={date} setDisabled={setDisabled} />}\r\n {leftIsOpen === 'contact' && <AddContact handleClick={handleClick}/>}\r\n {leftIsOpen === 'settings' && <SettingsBar handleClick={handleClick}/>}\r\n {leftIsOpen === 'edit' && <EditBar/>}\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default LeftBar","import ListItemButton from '@mui/material/ListItemButton';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../helpers'\r\n\r\nconst Credentials = () => {\r\n const dispatch = useDispatch()\r\n const { name, lastName, avatarUrl, color, online } = useSelector(getChat)\r\n \r\n return (\r\n <ListItemButton onClick={() => dispatch(actionRightIsOpen('credentials'))}>\r\n <ListItemIcon >\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 44, height: 44 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemIcon> \r\n <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondaryTypographyProps={{ color: '#0379af' }} secondary={online === 'true' ?\r\n 'online' : `last seen ${timeStampEU(online)}`} />\r\n </ListItemButton>\r\n )\r\n}\r\n\r\nexport default Credentials","import { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { styled } from '@mui/material/styles';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport NotificationsNoneIcon from '@mui/icons-material/NotificationsNone';\r\nimport VolumeOffIcon from '@mui/icons-material/VolumeOff';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\r\n\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { muteChat } from '../../../../../../api-data'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(-2),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '14px 14px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\n\r\nconst MenuList = ({setModal}:{setModal:any}) => {\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const open = Boolean(anchorEl);\r\n const { companionId, mute } = useSelector(getChat)\r\n \r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\r\n setAnchorEl(e.currentTarget)\r\n }\r\n\r\n const handleClose = (type:string|undefined):void => {\r\n if (type === 'mute') muteChat(companionId)\r\n if (type === 'deleteModal') setModal(true)\r\n setAnchorEl(null)\r\n }\r\n\r\n return (\r\n <>\r\n <IconButton onClick={handleClick} aria-label=\"delete\" size=\"medium\">\r\n <MoreVertIcon fontSize='medium'/>\r\n </IconButton>\r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <MenuItem onClick={() => handleClose('mute')}>\r\n {mute ? <NotificationsNoneIcon /> : <VolumeOffIcon />}\r\n {mute ? 'Unmute':'Mute'}\r\n </MenuItem>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('deleteModal')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete chat\r\n </MenuItem> \r\n </StyledMenu>\r\n </>\r\n );\r\n}\r\n\r\nexport default MenuList","import Button from '@mui/material/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useSelector,useDispatch } from 'react-redux';\r\n\r\nimport { getChat } from '../../../../../../redux/chat/selector';\r\nimport { actionRemoveChat } from '../../../../../../redux/chat/action';\r\nimport { actionRightIsOpen } from '../../../../../../redux/control/action'\r\nimport { removeChatForBoth } from '../../../../../../api-data';\r\nimport { firstLetter,slicedWord,prodBaseURL } from '../../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\nconst DeleteModal = ({setModal}:{setModal:any}) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const {name,lastName,avatarUrl,color,companionId} = useSelector(getChat)\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeChatForBoth(companionId)\r\n setModal(false)\r\n dispatch(actionRemoveChat())\r\n dispatch(actionRightIsOpen(''))\r\n }\r\n }\r\n\r\n return (\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete chat</h3>\r\n </div>\r\n <p style={{color: '#050505'}}>{`Are you sure you want to delete the\r\n chat with ${`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CHAT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div>\r\n </div> \r\n )\r\n}\r\n\r\nexport default DeleteModal","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\nimport { useState } from 'react';\r\n\r\nimport MenuList from './MenuList'\r\nimport DeleteModal from './DeleteModal';\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n marginLeft: 20,\r\n }, \r\n})\r\n\r\nconst Buttons = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [modal,setModal] = useState<boolean>(false)\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\">\r\n <IconButton onClick={() => dispatch(actionRightIsOpen('search'))} aria-label=\"delete\" size=\"medium\">\r\n <SearchIcon fontSize='medium'/>\r\n </IconButton>\r\n <MenuList setModal={setModal}/>\r\n {modal&&<DeleteModal setModal={setModal}/>} \r\n </Stack>\r\n );\r\n}\r\n\r\nexport default Buttons","import Toolbar from '@mui/material/Toolbar'\r\nimport AppBar from '@mui/material/AppBar';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport Credentials from './Credentials'\r\nimport Buttons from './Buttons'\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#6e6d6d',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n backgroundColor: '#ffffff',\r\n height:'7vh'\r\n },\r\n})\r\n\r\nconst HeaderBar = () => {\r\n const classes = useStyles()\r\n return (\r\n <AppBar position=\"static\">\r\n <Toolbar className={classes.toolBar}>\r\n <Credentials/>\r\n <Buttons/>\r\n </Toolbar>\r\n </AppBar> \r\n )\r\n}\r\n\r\nexport default HeaderBar\r\n\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\r\nimport Avatar from '@mui/material/Avatar';\r\n\r\nconst useStyles = makeStyles({ \r\n avatarArrowWrapper: {\r\n position:'absolute',\r\n right: 20,\r\n top: '70vh',\r\n width: 56,\r\n }, \r\n avatarArrow: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n listSeenIcon: {\r\n position: 'absolute',\r\n top: -8,\r\n left: 16,\r\n borderRadius: '50%',\r\n color: '#ffffff',\r\n border: 'none',\r\n height: 24,\r\n width: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n fontSize: 12,\r\n zIndex: 10,\r\n cursor:'pointer',\r\n }, \r\n});\r\n\r\ninterface IArrowBack {\r\n isArrow: boolean,\r\n isNew: {new:number,mute:boolean},\r\n handleScrollTo:() => void\r\n}\r\n\r\nconst ArrowBack = ({ isArrow, handleScrollTo, isNew }: IArrowBack) => {\r\n const classes = useStyles()\r\n\r\nreturn (\r\n <div className={classes.avatarArrowWrapper} style={{display: isArrow ? 'block' : 'none'}}>\r\n <button onClick={handleScrollTo} style={{display: isNew.new ? 'block' : 'none',\r\n background: isNew.mute ? '#a7aaa7' : '#0ac40a'}}\r\n className={classes.listSeenIcon}>{isNew.new}</button>\r\n <Avatar onClick={handleScrollTo} className={classes.avatarArrow}\r\n sx={{backgroundColor: '#ffffff', width: 56, height: 56,color: '#6b6b6b'}}>\r\n <ArrowDownwardIcon fontSize=\"medium\" /> \r\n </Avatar> \r\n </div> \r\n )\r\n}\r\n\r\nexport default ArrowBack","import { makeStyles } from '@material-ui/core'\r\nimport React from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { useEffect } from 'react';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n position:'relative',\r\n },\r\n dropZone: {\r\n width: '100%',\r\n display: 'flex',\r\n position:'relative',\r\n height: 20,\r\n zIndex:10\r\n },\r\n})\r\n\r\ninterface IUploadFile {\r\n children:React.ReactNode,\r\n setFile: any,\r\n setValue: any,\r\n accept: string\r\n}\r\n \r\nconst UploadFile = ({children,setFile,setValue,accept}:IUploadFile) => {\r\n const classes = useStyles()\r\n const { getRootProps, getInputProps, acceptedFiles } = useDropzone({\r\n noDrag: true,\r\n accept\r\n });\r\n useEffect(() => {\r\n if (acceptedFiles.slice(-1)[0]) {\r\n setValue('')\r\n setFile(acceptedFiles.slice(-1)[0])\r\n }\r\n }, [setFile,setValue, acceptedFiles])\r\n \r\n return (\r\n <div className={classes.container} >\r\n {children}\r\n <div {...getRootProps({ className: classes.dropZone })}>\r\n <input placeholder='Photo or Video' {...getInputProps()}/>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UploadFile","import MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport UploadFile from './UploadFile'\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n background: '#fdfdfd',\r\n },\r\n listIcon: {\r\n position: 'absolute',\r\n left:0\r\n },\r\n listText: {\r\n position: 'absolute',\r\n left:40\r\n }, \r\n})\r\n\r\ninterface IFilesMenu {\r\n setIsOpenMenu: any,\r\n setFile: any,\r\n setValue: any,\r\n setType: any\r\n}\r\nconst FilesMenu = ({setIsOpenMenu,setFile,setValue,setType}:IFilesMenu) => {\r\n const classes = useStyles()\r\n const handleClose = (type:string) => {\r\n setType(type)\r\n setIsOpenMenu(false)\r\n }\r\n \r\n return (\r\n <MenuList className={classes.list}>\r\n <MenuItem onClick={() => handleClose('content')}>\r\n <UploadFile setFile={setFile} setValue={setValue} accept='image/*,video/*,audio/*'>\r\n <ListItemIcon className={classes.listIcon}>\r\n <InsertDriveFileIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText className={classes.listText}>Upload Image/Audio/Video</ListItemText>\r\n </UploadFile>\r\n </MenuItem>\r\n <MenuItem onClick={() => handleClose('application')}>\r\n <UploadFile setFile={setFile} setValue={setValue} accept='application/pdf,\r\n application/vnd.openxmlformats-officedocument.wordprocessingml.document'>\r\n <ListItemIcon className={classes.listIcon}>\r\n <InsertDriveFileIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText className={classes.listText}>Upload File</ListItemText>\r\n </UploadFile>\r\n </MenuItem> \r\n </MenuList>\r\n );\r\n}\r\n\r\nexport default FilesMenu","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport SendIcon from '@mui/icons-material/Send';\r\nimport MicNoneIcon from '@mui/icons-material/MicNone';\r\nimport VideocamIcon from '@mui/icons-material/Videocam';\r\nimport PauseIcon from '@mui/icons-material/Pause';\r\nimport AttachFileIcon from '@mui/icons-material/AttachFile';\r\nimport SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Picker from 'emoji-picker-react';\r\n\r\nimport { useReactMediaRecorder } from \"react-media-recorder\";\r\nimport { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport FilesMenu from \"../FilesMenu\";\r\nimport {\r\n sentMessageById, sentImgMessageById, sentAudioMessageById,\r\n sentVideoMessageById,sentFileMessageById\r\n} from '../../../../../api-data'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { getRightIsOpen } from '../../../../../redux/control/selector'\r\nimport { playNotification,prodBaseURL } from \"../../../../../helpers\";\r\nimport { typingChat } from \"../../../../../api-data\";\r\n\r\n\r\nconst useStyles = makeStyles({ \r\n container: {\r\n width: '35vw',\r\n height:'6vh',\r\n position: 'fixed',\r\n bottom: '2vh',\r\n borderRadius: 8,\r\n padding: 10,\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n color: '#6b6b6b',\r\n border:'solid 2px #ffffff',\r\n backgroundColor: '#ffffff', \r\n },\r\n containerActive: {\r\n width: '35vw',\r\n height:'6vh',\r\n position: 'fixed',\r\n bottom: '2vh',\r\n borderRadius: 8,\r\n padding: 10,\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n border:'solid 2px rgb(41, 139, 231)',\r\n backgroundColor: '#ffffff', \r\n }, \r\n textarea: {\r\n width: '100%',\r\n height: '100%',\r\n outline: 'none',\r\n border:'none',\r\n padding: '0px 10px',\r\n marginLeft: 8,\r\n marginRight: 8,\r\n overflowY:'auto',\r\n resize: 'none',\r\n '&::placeholder': {\r\n color: 'inherit',\r\n fontWeight: 600,\r\n fontSize:20\r\n }\r\n }, \r\n attachIcon: {\r\n transform:'rotate(30deg)', \r\n },\r\n borderTop: {\r\n position: 'absolute',\r\n left: 0,\r\n top: '-2vh',\r\n width: '100%',\r\n height: 1,\r\n background:'#ffffff',\r\n },\r\n filesMenu: {\r\n background: '#fdfdfd',\r\n position: 'absolute',\r\n width: '15vw',\r\n maxWidth: '100%',\r\n left: '61%',\r\n bottom:'10vh',\r\n zIndex: 10,\r\n visibility: 'visible',\r\n borderRadius: 10,\r\n padding: '4px 6px',\r\n },\r\n emoji: {\r\n position: 'absolute',\r\n bottom:'10vh',\r\n zIndex: 10,\r\n visibility: 'visible',\r\n },\r\n iconCancel: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n display:'flex',\r\n backgroundColor: '#ffffff',\r\n color: 'rgb(243, 69, 69)',\r\n border:'solid 4px rgb(243, 69, 69)',\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: 'rgb(243, 69, 69)',\r\n color: '#ffffff',\r\n }\r\n }, \r\n avatarCamera: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n display: 'flex',\r\n borderRadius: '50%',\r\n zIndex: 10,\r\n border: 'solid 14px #ffffff',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n border:'solid 14px rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n avatarRight: {\r\n position: 'absolute',\r\n right: -72,\r\n bottom:-1,\r\n display: 'flex',\r\n borderRadius: '50%',\r\n zIndex: 10,\r\n border: 'solid 14px #ffffff',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n border:'solid 14px rgb(41, 139, 231)',\r\n color: '#ffffff'\r\n }\r\n },\r\n pauseLeft: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n zIndex: 10, \r\n },\r\n pauseRight: {\r\n position: 'absolute',\r\n right: -72,\r\n bottom:-1,\r\n zIndex: 10, \r\n }, \r\n avatarPause: {\r\n backgroundColor: '#ffffff',\r\n cursor: 'pointer',\r\n animation: `$shake 1s`,\r\n animationIterationCount:'infinite',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex:100\r\n },\r\n ringContainerLeft: {\r\n position: 'absolute',\r\n left: -25,\r\n top: -25,\r\n zIndex: 10,\r\n }, \r\n ringContainerRight: {\r\n position: 'absolute',\r\n right: -25,\r\n top: -25,\r\n zIndex: 10,\r\n },\r\n circle: {\r\n width: 15,\r\n height: 15,\r\n backgroundColor: 'rgb(255, 4, 4)',\r\n borderRadius: '50%',\r\n position: 'relative'\r\n },\r\n ringRing: {\r\n border: '3px solid rgb(255, 4, 4)',\r\n borderRadius: '50%',\r\n height: 25,\r\n width: 25,\r\n position: 'absolute',\r\n right: -5,\r\n top: -5,\r\n animation: `$pulsate 1s ease-out`,\r\n animationIterationCount: 'infinite',\r\n opacity: 0\r\n },\r\n '@keyframes pulsate': {\r\n '0%': {transform: 'scale(0.1, 0.1)', opacity: 0},\r\n '50%': { opacity: 1},\r\n '100%': {transform: 'scale(1.2, 1.2)', opacity: 0},\r\n },\r\n '@keyframes shake': {\r\n '0%': { transform: 'translate(0.5px, 0.5px) rotate(0deg)'},\r\n '10%': { transform: 'translate(-0.5px, -1px) rotate(-1deg)'},\r\n '20%': { transform: 'translate(-1.5px, 0px) rotate(1deg)'},\r\n '30%': { transform: 'translate(1.5px, 1px) rotate(0deg)'},\r\n '40%': { transform: 'translate(0.5px, -0.5px) rotate(1deg)'},\r\n '50%': { transform: 'translate(-0.5px, 1px) rotate(-1deg)'},\r\n '60%': { transform: 'translate(-1.5px, 0.5px) rotate(0deg)'},\r\n '70%': { transform: 'translate(1.5px, 0.5px) rotate(-1deg)'},\r\n '80%': { transform: 'translate(-0.5px, -0.5px) rotate(1deg)'},\r\n '90%': { transform: 'translate(0.5px, 1px) rotate(0deg)'},\r\n '100%': { transform: 'translate(0.5px, -1px) rotate(-1deg)'},\r\n }, \r\n});\r\n\r\ninterface ISendMessage{\r\n isArrow: boolean,\r\n}\r\n\r\nconst SendMessage = ({isArrow }:ISendMessage) => {\r\n const classes = useStyles();\r\n const { companionId } = useSelector(getChat)\r\n const rightIsOpen = useSelector(getRightIsOpen)\r\n const [value, setValue] = useState<string>('')\r\n const [file, setFile] = useState<any>(false)\r\n const [isOpenMenu, setIsOpenMenu] = useState<boolean>(false)\r\n const [isOpenEmoji, setIsOpenEmoji] = useState<boolean>(false)\r\n const [isRecording, setIsRecording] = useState<boolean>(false)\r\n const [isFilming, setIsFilming] = useState<boolean>(false) \r\n const [type, setType] = useState<string>('')\r\n const { status, startRecording, stopRecording, mediaBlobUrl, clearBlobUrl } = useReactMediaRecorder({ audio: true });\r\n const { status: _status, startRecording: _startRecording, stopRecording: _stopRecording,\r\n mediaBlobUrl: _mediaBlobUrl, clearBlobUrl: _clearBlobUrl } = useReactMediaRecorder({ video: true });\r\n const onEmojiClick = (_e:any, emojiObject:any) => {\r\n setValue(prevValue => prevValue + emojiObject.emoji)\r\n setIsOpenEmoji(false)\r\n }; \r\n const clearMessage = () => {\r\n file &&setFile(false)\r\n isRecording && setIsRecording(false)\r\n isFilming && setIsFilming(false)\r\n value && setValue('')\r\n type && setType('')\r\n mediaBlobUrl && clearBlobUrl()\r\n _mediaBlobUrl && _clearBlobUrl()\r\n isOpenMenu && setIsOpenMenu(false)\r\n isOpenEmoji && setIsOpenEmoji(false)\r\n \r\n }\r\n const sentMessage = async () => {\r\n if (value) sentMessageById(companionId, value)\r\n if (mediaBlobUrl && type === 'recording') {\r\n const audio = new XMLHttpRequest();\r\n audio.open('GET', mediaBlobUrl, true);\r\n audio.responseType = 'blob';\r\n audio.onload = () => {\r\n if (audio.status === 200) {\r\n const blob = audio.response\r\n const file = new File([blob], 'audio.mp3', {\r\n type: 'audio/mpeg'\r\n })\r\n const formData: any = new FormData()\r\n formData.append(\"audio\", file)\r\n sentAudioMessageById(companionId, formData)\r\n clearBlobUrl()\r\n }\r\n }\r\n audio.send();\r\n }\r\n if (_mediaBlobUrl && type === 'filming') {\r\n const video = new XMLHttpRequest();\r\n video.open('GET', _mediaBlobUrl, true);\r\n video.responseType = 'blob';\r\n video.onload = () => {\r\n if (video.status === 200) {\r\n const blob = video.response\r\n const file = new File([blob], 'video.mp4', {\r\n type: 'video/mp4'\r\n })\r\n const formData: any = new FormData()\r\n formData.append(\"video\", file)\r\n sentVideoMessageById(companionId, formData)\r\n _clearBlobUrl()\r\n }\r\n }\r\n video.send();\r\n } \r\n if (file && type) {\r\n if (file.type.includes('image') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"image\", file);\r\n await sentImgMessageById(companionId, formData)\r\n }\r\n if (file.type.includes('audio') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"audio\", file);\r\n sentAudioMessageById(companionId, formData)\r\n } \r\n if (file.type.includes('video') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"video\", file);\r\n sentVideoMessageById(companionId, formData) \r\n }\r\n if (file.type.includes('application') && type === 'application') {\r\n const formData: any = new FormData()\r\n formData.append(\"file\", file);\r\n sentFileMessageById(companionId, formData) \r\n }\r\n }\r\n clearMessage()\r\n playNotification(`${prodBaseURL}/send.mp3`)\r\n } \r\n const handleTextarea = (e: React.ChangeEvent<HTMLTextAreaElement>) => setValue(e.target.value)\r\n const handleFocusTextarea = async () => await typingChat(companionId,true)\r\n const handleBlurTextarea = async () => await typingChat(companionId,false) \r\n const handleOpenFileMenu = () => !isOpenMenu&&setIsOpenMenu(true)\r\n const handleCloseFileMenu = (e:any) => e.target.id === 'overlay'&&isOpenMenu&&setIsOpenMenu(false) \r\n const handleOpenEmoji = () => !isOpenEmoji&&setIsOpenEmoji(true)\r\n const handleCloseEmoji = (e: any) => e.target.id === 'overlay'&&isOpenEmoji&&setIsOpenEmoji(false) \r\n const handleRecording = () => {\r\n if (isRecording) return stopRecording()\r\n startRecording()\r\n setType('recording')\r\n setIsRecording(true) \r\n }\r\n const handleFilming = () => {\r\n if (isFilming) return _stopRecording()\r\n _startRecording()\r\n setType('filming')\r\n setIsFilming(true) \r\n }\r\n\r\n return (\r\n <div className={value || file || status === 'stopped' || _status === 'stopped' ?classes.containerActive:classes.container}>\r\n {isArrow && <div className={classes.borderTop}></div>}\r\n {isFilming && _status !== 'stopped' && \r\n <>\r\n <div className={classes.pauseLeft}>\r\n <Avatar onClick={handleFilming } className={classes.avatarPause}\r\n sx={{backgroundColor: '#ffffff',color:'#6b6b6b',width: 56, height: 56}}>\r\n <PauseIcon fontSize=\"large\"/> \r\n </Avatar> \r\n </div>\r\n <div className={classes.ringContainerLeft}>\r\n <div className={classes.ringRing}></div>\r\n <div className={classes.circle}></div> \r\n </div>\r\n </>} \r\n {isRecording && status !== 'stopped' && \r\n <> \r\n <div className={classes.pauseRight}>\r\n <Avatar onClick={handleRecording} className={classes.avatarPause}\r\n sx={{backgroundColor: '#ffffff',color:'#6b6b6b',width: 56, height: 56}}>\r\n <PauseIcon fontSize=\"large\"/> \r\n </Avatar> \r\n </div> \r\n <div className={classes.ringContainerRight}>\r\n <div className={classes.ringRing}></div>\r\n <div className={classes.circle}></div> \r\n </div>\r\n </>}\r\n <CloseIcon onClick={clearMessage} fontSize=\"small\" className={classes.iconCancel}\r\n sx={{width: 56, height: 56, display: file || value || status === 'stopped'\r\n || _status === 'stopped' ? 'inline-block' : 'none'}} />\r\n <VideocamIcon onClick={handleFilming} className={classes.avatarCamera}\r\n sx={{backgroundColor: '#ffffff', color: '#6b6b6b', width: 56, height: 56}}\r\n style={{display: status !== 'idle' || _status === 'stopped' || file || value || isFilming ? 'none' : 'block'}} />\r\n <SendIcon onClick={sentMessage} className={classes.avatarRight} \r\n sx={{backgroundColor: '#ffffff',color: 'rgb(41, 139, 231)', width: 56, height: 56}}\r\n style={{display: value || file || status === 'stopped' || _status === 'stopped' ? 'block':'none' }}/> \r\n <MicNoneIcon onClick={handleRecording} className={classes.avatarRight} \r\n sx={{backgroundColor:'#ffffff',color: '#6b6b6b', width: 56, height: 56}}\r\n style={{display: !value && !file && status !== 'stopped' && _status === 'idle'&&!isRecording ? 'block' : 'none'}}/>\r\n <SentimentSatisfiedAltIcon onClick={handleOpenEmoji} \r\n fontSize='medium' sx={{color: isOpenEmoji ? 'rgb(41, 139, 231)' : '#6b6b6b', cursor: 'pointer',\r\n pointerEvents: file || status !== 'idle' || _status !== 'idle' ? 'none' : \"auto\",\r\n '&:hover': { color: 'rgb(41, 139, 231)'}}} />\r\n <div onClick={handleCloseEmoji} className={classes.overlay} id='overlay'\r\n style={{ display: isOpenEmoji ? 'block':'none'}}>\r\n <div className={classes.emoji} style={{left: rightIsOpen?'32.5vw':'45vw'}}>\r\n <Picker onEmojiClick={onEmojiClick} />\r\n </div> \r\n </div>\r\n <textarea disabled={file || status !== 'idle' || _status !== 'idle' ? true : false} value={value} onBlur={handleBlurTextarea}\r\n onFocus={handleFocusTextarea} onChange={handleTextarea} className={classes.textarea}\r\n placeholder={file ? 'The File is ready to send' : status === 'idle' && _status === 'idle' ? 'Message ' :\r\n `${status === 'stopped' || _status === 'stopped' ? 'Recorded' : 'Recording in progress'}`} rows={1}\r\n style={{color:value || file || status !== 'idle' || _status !== 'idle' ?'rgb(41, 139, 231)':'#6b6b6b'}}>\r\n </textarea>\r\n <AttachFileIcon onClick={handleOpenFileMenu} className={classes.attachIcon}\r\n fontSize='medium' sx={{color: isOpenMenu ? 'rgb(41, 139, 231)' : '#6b6b6b', cursor: 'pointer',\r\n pointerEvents: value || status !== 'idle' || _status !== 'idle' ? 'none' : \"auto\",'&:hover': { color: 'rgb(41, 139, 231)'}}} />\r\n <div onClick={handleCloseFileMenu} className={classes.overlay} id='overlay'\r\n style={{ display: isOpenMenu ? 'block':'none'}}>\r\n <div className={classes.filesMenu} style={{left: rightIsOpen?'52.5vw':'65vw'}}>\r\n <FilesMenu setFile={setFile} setValue={setValue} setIsOpenMenu={setIsOpenMenu} setType={setType}/>\r\n </div>\r\n </div> \r\n </div> \r\n )\r\n}\r\n\r\nexport default SendMessage","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { firstLetter,slicedWord,timeStampMessage,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n maxWidth: 450,\r\n padding: \"10px\",\r\n paddingBottom:18,\r\n backgroundColor: \"#ffffff\",\r\n border: \"1px solid #f0f0f0\",\r\n borderRadius: 7,\r\n },\r\n message: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ffffff\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ffffff\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n messageActive: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #babdbc\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #babdbc\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n left: \"-17px\"\r\n } \r\n }, \r\n copyIcon: {\r\n color: '#b56ff7',\r\n cursor: 'pointer',\r\n marginRight: 7,\r\n '&:hover': {\r\n color: '#9c3bf8',\r\n },\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 6,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\n\r\ninterface IMessageLeftText {\r\n message:string,\r\n name:string,\r\n lastName:string,\r\n createdAt: string,\r\n _id:string\r\n}\r\n\r\nconst MessageLeftText = ({message,name,lastName,createdAt,_id}:IMessageLeftText) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Message')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)} className={classes.wrapper}\r\n style={{backgroundColor:selected?'#babdbc':undefined,\r\n border:selected?'#babdbc':undefined}}>\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large'/>\r\n </CopyToClipboard>\r\n <ListItemText className={selected?classes.messageActive:classes.message}\r\n primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n primaryTypographyProps={{color: \"#0379af\"}}\r\n secondary={message}\r\n secondaryTypographyProps={{ color: \"#0e0d0d\" }} />\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={message}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy message\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)}; \r\n\r\nexport default MessageLeftText\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport ImageIcon from '@mui/icons-material/Image';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage, timeStampEU,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ffffff',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ffffff\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ffffff\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#babdbc',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #babdbc\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #babdbc\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n }, \r\n image: {\r\n borderRadius: 7,\r\n width: 300,\r\n maxHeight: 400,\r\n cursor: 'pointer',\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapperOverlayImg: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n overlayDownloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n overlayTime: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }, \r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessagesLeftImage {\r\n url:string,\r\n createdAt:string,\r\n color: string,\r\n message: string,\r\n messages: any,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessagesLeftImage = ({url,createdAt,color,message,messages,fullType,_id}:IMessagesLeftImage) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenWatch = () => !watch&&setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapperOverlayImg}>\r\n <span className={classes.overlayTime}>{timeStampEU(createdAt)}</span>\r\n <DownloadForOfflineIcon className={classes.overlayDownloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <ImageIcon fontSize='large' style={{ color: '#bd9a00' }} />\r\n <img onClick={handleOpenWatch} className={classes.image} alt='message pic' src={url}\r\n style={{ backgroundColor: url ? '' : color }} width='300' height='400' />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload} >\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton> \r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Image link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessagesLeftImage\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport AudioFileIcon from '@mui/icons-material/AudioFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport ReactAudioPlayer from 'react-audio-player';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\n\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ffffff',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ffffff\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ffffff\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#babdbc',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #babdbc\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #babdbc\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n },\r\n player: {\r\n margin: '0 5px 0 5px',\r\n borderRadius:7\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageLeftAudio {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageLeftAudio = ({ url,createdAt,fullType,_id }:IMessageLeftAudio) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <AudioFileIcon fontSize='large' style={{ color:'#0294c0'}}/> \r\n <ReactAudioPlayer className={classes.player}\r\n src={url}\r\n controls\r\n />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload} >\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Audio link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageLeftAudio\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport VideoFileIcon from '@mui/icons-material/VideoFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\nconst { Player } = require('video-react')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ffffff',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ffffff\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ffffff\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#babdbc',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #babdbc\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #babdbc\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height: 30,\r\n marginLeft:5,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n player: {\r\n backgroundColor: '#ffffff',\r\n },\r\n playerActive: {\r\n backgroundColor: '#babdbc',\r\n }, \r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageLeftVideo {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageLeftVideo = ({ url,createdAt,fullType,_id }:IMessageLeftVideo) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <VideoFileIcon fontSize='large' style={{ color:'#03b003'}}/> \r\n <Player className={selected?classes.playerActive:classes.player} playsInline src={url}/>\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload} >\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Video link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageLeftVideo\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,copied } from '../../../../../../helpers'\r\n\r\nconst FileViewer = require('react-file-viewer')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#ffffff',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ffffff\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ffffff\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#babdbc',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #babdbc\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: '0px',\r\n left: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #babdbc\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n left: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n },\r\n title: {\r\n margin: '0 30px 0 5px',\r\n color: '#0e0d0d',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#54b0fc',\r\n }\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height:'100%',\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border:'solid 2px #0084ff',\r\n cursor: 'pointer',\r\n zIndex:100\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageLeftFile {\r\n url:string,\r\n createdAt: string,\r\n type: string,\r\n _id:string\r\n}\r\n\r\nconst MessageLeftFile = ({ url,createdAt,type,_id }:IMessageLeftFile) => {\r\n const classes = useStyles();\r\n const [read, setRead] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenRead = () => !read&&setRead(true)\r\n const handleCloseRead = () => read && setRead(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n {read&&<div className={classes.overlay} id='overlay' onClick={handleCloseRead}>\r\n <FileViewer\r\n allowFullScreen={true}\r\n fileType={type}\r\n filePath={url}\r\n onError={handleCloseRead}\r\n />\r\n </div>}\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <InsertDriveFileIcon fontSize='large' style={{ color: '#99b401' }} />\r\n {!read && <span className={classes.title} onClick={handleOpenRead}>Read File</span>}\r\n <a href={url} target=\"_blank\" rel=\"noreferrer\" download>\r\n <IconButton className={classes.bntDownload} >\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n </a>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy File link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageLeftFile\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { firstLetter, slicedWord, timeStampMessage, copied } from '../../../../../../helpers'\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n maxWidth: 450,\r\n padding: \"10px\",\r\n paddingBottom:18,\r\n backgroundColor: \"#deffa9\",\r\n border: \"1px solid #d5ff91\",\r\n borderRadius: 7,\r\n },\r\n message: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n right: \"-17px\"\r\n }\r\n },\r\n messageActive: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n right: \"-17px\"\r\n }\r\n }, \r\n copyIcon: {\r\n color: '#b56ff7',\r\n cursor: 'pointer',\r\n marginRight: 7,\r\n '&:hover': {\r\n color: '#9c3bf8',\r\n },\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 6,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightText {\r\n message:string,\r\n name:string,\r\n lastName:string,\r\n createdAt: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightText = ({message,name,lastName,createdAt,_id}:IMessageRightText) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Message')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)} className={classes.wrapper}\r\n style={{backgroundColor:selected?'#ced8d7':undefined,\r\n border:selected?'#ced8d7':undefined}}>\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large'/>\r\n </CopyToClipboard>\r\n <ListItemText className={selected?classes.messageActive:classes.message} \r\n primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n primaryTypographyProps={{color: \"#42aee0\"}}\r\n secondary={message}\r\n secondaryTypographyProps={{ color: \"#0e0d0d\" }} />\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={message}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy message\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightText\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport ImageIcon from '@mui/icons-material/Image';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage, timeStampEU,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n image: {\r\n borderRadius: 7,\r\n width: 300,\r\n maxHeight: 400,\r\n cursor:'pointer',\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapperOverlayImg: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n overlayDownloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n overlayTime: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }, \r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightImage {\r\n url:string,\r\n createdAt:string,\r\n color: string,\r\n message: string,\r\n messages: any,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightImage = ({url,createdAt,color,message,messages,fullType,_id}:IMessageRightImage) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenWatch = () => !watch&&setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapperOverlayImg}>\r\n <span className={classes.overlayTime}>{timeStampEU(createdAt)}</span>\r\n <DownloadForOfflineIcon className={classes.overlayDownloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <ImageIcon fontSize='large' style={{ color: '#bd9a00' }} />\r\n <img onClick={handleOpenWatch} className={classes.image} alt='message pic' src={url}\r\n style={{ backgroundColor: url ? '' : color }} width='300' height='400' />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Image link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightImage\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport AudioFileIcon from '@mui/icons-material/AudioFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport ReactAudioPlayer from 'react-audio-player';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n },\r\n player: {\r\n margin: '0 5px 0 5px',\r\n borderRadius: 7,\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightAudio {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightAudio = ({ url,createdAt,fullType,_id }:IMessageRightAudio) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <AudioFileIcon fontSize='large' style={{ color:'#0294c0'}}/> \r\n <ReactAudioPlayer className={classes.player} \r\n src={url}\r\n controls\r\n />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Audio link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightAudio\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport VideoFileIcon from '@mui/icons-material/VideoFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst { Player } = require('video-react')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height: 30,\r\n marginLeft:5,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n player: {\r\n backgroundColor: '#deffa9',\r\n },\r\n playerActive: {\r\n backgroundColor: '#ced8d7',\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightVideo {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightVideo = ({ url,createdAt,fullType,_id }:IMessageRightVideo) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n \r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <VideoFileIcon fontSize='large' style={{ color:'#03b003'}}/> \r\n <Player className={selected?classes.playerActive:classes.player} playsInline src={url}/>\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Video link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightVideo\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,copied } from '../../../../../../helpers'\r\n\r\nconst FileViewer = require('react-file-viewer')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n title: {\r\n margin: '0 30px 0 5px',\r\n color: '#0e0d0d',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#54b0fc',\r\n }\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height:'100%',\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border:'solid 2px #0084ff',\r\n cursor: 'pointer',\r\n zIndex:100\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightFile {\r\n url:string,\r\n createdAt: string,\r\n type: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightFile = ({ url,createdAt,type,_id }:IMessageRightFile) => {\r\n const classes = useStyles();\r\n const [read, setRead] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenRead = () => !read&&setRead(true)\r\n const handleCloseRead = () => read && setRead(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n {read&&<div className={classes.overlay} id='overlay' onClick={handleCloseRead}>\r\n <FileViewer\r\n allowFullScreen={true}\r\n fileType={type}\r\n filePath={url}\r\n onError={handleCloseRead}\r\n />\r\n </div>}\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <InsertDriveFileIcon fontSize='large' style={{ color: '#99b401' }} />\r\n {!read && <span className={classes.title} onClick={handleOpenRead}>Read File</span>}\r\n <a href={url} target=\"_blank\" rel=\"noreferrer\" download>\r\n <IconButton className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n </a>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy File link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightFile\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n textAlign: 'center',\r\n padding: '1px 10px 3px 10px',\r\n backgroundColor: 'rgba(104, 105, 104, 0.8)',\r\n color:'#ffffff',\r\n borderRadius: 7,\r\n fontSize: \".85em\",\r\n fontWeight:600,\r\n },\r\n});\r\n\r\ninterface IMessageTime {\r\n message:string,\r\n}\r\n\r\nconst MessageTime = ({ message }:IMessageTime) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.container}>\r\n <span className={classes.wrapper}>{message}</span>\r\n </div> \r\n)};\r\n\r\nexport default MessageTime\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getMessages = (state: IState) => state.messages.messages;\r\nconst getState = (state: IState) => state.messages;\r\nconst getMessagesMemo = createSelector([getMessages], messages => messages);\r\n\r\nexport { getMessages,getState,getMessagesMemo };\r\n\r\n","import {\r\n actionGetMessagesSuccess,\r\n actionGetMessagesReject\r\n} from '../action';\r\nimport { getMessagesById } from '../../../api-data';\r\nimport { IMessagesState } from '../../../typescript/redux/messages/interfaces'\r\n\r\n\r\nconst asyncGetMessagesById= (id:string,cb:any) => async (dispatch:any) => {\r\n try {\r\n const data = await getMessagesById<IMessagesState>(id)\r\n data && dispatch(actionGetMessagesSuccess(data))\r\n cb&&cb()\r\n } catch (e) {\r\n dispatch(actionGetMessagesReject())\r\n } \r\n};\r\n\r\n\r\nexport { asyncGetMessagesById };\r\n\r\n\r\n\r\n\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useState, useEffect, useRef, useCallback } from \"react\";\r\nimport { useSelector,useDispatch } from \"react-redux\";\r\n\r\nimport ArrowBack from \"./ArrowBack\";\r\nimport SendMessage from \"./SendMessage\";\r\nimport MessageLeftText from './Messages/MessageLeftText'\r\nimport MessageLeftImage from './Messages/MessageLeftImage'\r\nimport MessageLeftAudio from './Messages/MessageLeftAudio'\r\nimport MessageLeftVideo from './Messages/MessageLeftVideo'\r\nimport MessageLeftFile from \"./Messages/MessageLeftFile\";\r\nimport MessageRightText from './Messages/MessageRightText'\r\nimport MessageRightImage from './Messages/MessageRightImage'\r\nimport MessageRightAudio from './Messages/MessageRightAudio'\r\nimport MessageRightVideo from './Messages/MessageRightVideo'\r\nimport MessageRightFile from \"./Messages/MessageRightFile\";\r\nimport MessageTime from \"./Messages/MessageTime\";\r\nimport AlertInfo from \"../../../reusableComponents/AlertInfo\";\r\nimport { getMessagesMemo } from '../../../../redux/messages/selector'\r\nimport { getNumber } from '../../../../redux/authorization/selector'\r\nimport { getChat } from '../../../../redux/chat/selector'\r\nimport { getScrollChat } from '../../../../redux/control/selector'\r\nimport { actionScrollChat } from '../../../../redux/control/action'\r\nimport { asyncGetMessagesById } from '../../../../redux/messages/operations'\r\nimport { asyncGetChatById } from \"../../../../redux/chat/operations\";\r\nimport { seenChat } from \"../../../../api-data\";\r\nimport { timeStampFilter,prodBaseURL,refreshAppTime } from \"../../../../helpers\";\r\nconst debounce = require('lodash.debounce');\r\n\r\nconst useStyles = makeStyles({ \r\n container: {\r\n height: '93vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n alignContent:\"center\",\r\n flexDirection: \"column\",\r\n position: \"relative\",\r\n },\r\n messagesScroll: {\r\n paddingTop: 30,\r\n overflowY: \"scroll\",\r\n maxHeight: '83vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n messagesEmpty: {\r\n overflowY: \"hidden\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n paddingTop: 30,\r\n }, \r\n messagesBody: {\r\n width: \"60%\",\r\n }, \r\n});\r\n\r\nconst ChatBar = () => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch()\r\n const messages = useSelector(getMessagesMemo)\r\n const userNumber = useSelector(getNumber)\r\n const { companionId,total,seen,mute } = useSelector(getChat)\r\n const scrollChat = useSelector(getScrollChat)\r\n const [isArrow, setIsArrow] = useState<boolean>(false)\r\n const [isNew, setIsNew] = useState<{new:number,mute:boolean}>({new:0,mute:false})\r\n const divRef = useRef<any | null>(null)\r\n let time:any\r\n const handleScrollTo = () => {\r\n divRef.current&&divRef.current.scrollTo({\r\n top: divRef.current.scrollHeight,\r\n behavior: 'smooth'\r\n })\r\n }\r\n\r\n const handleScroll = useCallback(({ target:{scrollHeight,scrollTop,clientHeight}}: any) => {\r\n const different = scrollHeight - Math.floor(scrollTop)\r\n const reached = different - clientHeight\r\n if (total !== seen&&reached < 10) seenChat(companionId)\r\n setIsArrow(different === clientHeight ? false : true)\r\n }, [total,seen, companionId])\r\n \r\n const debouncedHandleScroll = debounce(handleScroll, 300)\r\n \r\n useEffect(() => {\r\n if (scrollChat) {\r\n dispatch(asyncGetMessagesById(companionId, handleScrollTo))\r\n dispatch(actionScrollChat(false))\r\n }\r\n }, [dispatch, scrollChat, companionId])\r\n \r\n useEffect(() => {\r\n const handleReset = () => {\r\n dispatch(asyncGetChatById(companionId))\r\n dispatch(asyncGetMessagesById(companionId, null))\r\n }\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch, companionId]);\r\n \r\n useEffect(() => {\r\n setIsNew({ new:total-seen,mute})\r\n }, [total,seen,mute]); \r\n\r\n useEffect(() => {\r\n if (divRef.current) {\r\n const { scrollHeight, clientHeight } = divRef.current\r\n if(total !== seen&&scrollHeight === clientHeight) seenChat(companionId)\r\n }\r\n }, [total,seen,companionId]);\r\n\r\n return (\r\n <div className={classes.container} >\r\n <ArrowBack isArrow={isArrow} isNew={isNew} handleScrollTo={handleScrollTo}/>\r\n <div ref={divRef} onScroll={debouncedHandleScroll}\r\n className={messages.length > 0 ? classes.messagesScroll : classes.messagesEmpty}>\r\n <div className={classes.messagesBody}>\r\n {messages.length > 0 ? messages.map(({ message, name, lastName, color,\r\n createdAt,number, type,fullType,_id }) => {\r\n let isTime\r\n if (!time) {\r\n isTime = true\r\n time = createdAt\r\n } else if (timeStampFilter(time) !== timeStampFilter(createdAt)) {\r\n time = createdAt\r\n isTime = true\r\n }\r\n const url = `${prodBaseURL}/${message}`\r\n if (number !== userNumber) {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftText\r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n } else {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightText \r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n }\r\n }) : <AlertInfo name='You do not have messages yet!' />}\r\n </div>\r\n </div> \r\n <SendMessage isArrow={isArrow} /> \r\n </div>\r\n );\r\n}\r\n\r\nexport default ChatBar","import Grid from '@mui/material/Grid'\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport HeaderBar from './HeaderBar'\r\nimport ChatBar from './ChatBar'\r\nimport { TRightIsOpen } from '../../../typescript/redux/control/types'\r\n\r\nconst useStyles = makeStyles({\r\n chatBar: {\r\n background: 'linear-gradient(to bottom right, #e7f097 , #b1e667,#f4f75e)',\r\n },\r\n})\r\n\r\nconst CentralBar = ({rightIsOpen}:{rightIsOpen:TRightIsOpen}) => {\r\n const classes = useStyles()\r\n\r\n return ( \r\n <Grid item lg={rightIsOpen?8:12}>\r\n <Grid item lg={12} >\r\n <HeaderBar/>\r\n </Grid> \r\n <Grid item lg={12} className={classes.chatBar}>\r\n <ChatBar />\r\n </Grid>\r\n </Grid>\r\n ) \r\n}\r\n\r\nexport default CentralBar","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\ninterface IStaticDatePicker {\r\n disabled:boolean,\r\n date: Date,\r\n changeDate: React.Dispatch<React.SetStateAction<any>>,\r\n handleOnOpen: () => void\r\n}\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n\r\n},\r\n})\r\n\r\nconst StaticDatePicker = ({ disabled, date, changeDate,handleOnOpen }: IStaticDatePicker) => {\r\n const classes = useStyles()\r\nreturn (\r\n <DatePicker\r\n disabled={disabled}\r\n className={classes.container}\r\n inputVariant='outlined'\r\n orientation=\"portrait\"\r\n variant=\"dialog\"\r\n openTo=\"date\"\r\n autoOk\r\n value={date?date:new Date()}\r\n onOpen={handleOnOpen}\r\n onChange={changeDate}\r\n />\r\n );\r\n};\r\n\r\nexport default StaticDatePicker;","import InputBase from '@mui/material/InputBase';\r\nimport Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\r\nimport Switch from '@mui/material/Switch';\r\nimport { styled } from '@mui/material/styles';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\n\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\nimport { getMessages } from '../../../../../redux/messages/selector'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { sortChat } from '../../../../../api-data';\r\nimport StaticDatePicker from \"./StaticDatePicker\";\r\n\r\nconst SearchBar = styled('div')(({ theme }:any) => ({\r\n position: 'relative',\r\n borderRadius: '20px',\r\n backgroundColor: '#f1f0f0', \r\n width: '100%',\r\n margin:'0 5% 0 5%'\r\n}));\r\n\r\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\r\n color: 'inherit',\r\n '& .MuiInputBase-input': { \r\n fontWeight: 500,\r\n borderRadius: '20px',\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height:'7vh'\r\n },\r\n searchBarActive: {\r\n outline: '2px solid #2184f7',\r\n color: '#2184f7',\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface ISearch {\r\n handleSearch: (e: React.ChangeEvent<HTMLInputElement>) => void,\r\n value: string,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n}\r\n\r\nconst Search = ({handleSearch,value,setDate,date}:ISearch) => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const { sort, companionId } = useSelector(getChat)\r\n const messages = useSelector(getMessages)\r\n const disabled = messages.length > 0 ? false : true\r\n const handleOnOpen = () => setDate('')\r\n const handleSort = () => sortChat(companionId)\r\n\r\n return (\r\n <Toolbar className={classes.toolBar} >\r\n <IconButton onClick={() => dispatch(actionRightIsOpen(''))} aria-label=\"delete\" size=\"medium\">\r\n <CloseIcon fontSize='medium'/>\r\n </IconButton>\r\n <SearchBar className={!value||disabled?undefined:classes.searchBarActive}>\r\n <SearchIconWrapper>\r\n <SearchIcon />\r\n </SearchIconWrapper>\r\n <StyledInputBase\r\n disabled={disabled}\r\n onChange={handleSearch}\r\n placeholder={disabled?'Disabled':'Search'}\r\n value={value}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n </SearchBar> \r\n <IconButton aria-label=\"delete\" size=\"medium\" disabled={disabled}>\r\n <StaticDatePicker disabled={disabled} date={date}\r\n changeDate={setDate} handleOnOpen={handleOnOpen} /> \r\n <CalendarTodayIcon fontSize='medium'\r\n style={{color:date?'#2184f7':'#b1aeae'}}/>\r\n </IconButton>\r\n <Switch onClick={handleSort} checked={sort} {...label} disabled={disabled} /> \r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default Search","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux'\r\nimport React, { useState } from 'react'\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Typography from '@mui/material/Typography';\r\nimport Divider from '@mui/material/Divider';\r\nimport Search from './Search'\r\nimport AlertInfo from \"../../../reusableComponents/AlertInfo\";\r\nimport { getMessages } from '../../../../redux/messages/selector'\r\nimport { getChat } from '../../../../redux/chat/selector'\r\nimport { timeStampEU, timeStampFilter, firstLetter, slicedWord, handleSort,prodBaseURL } from '../../../../helpers'\r\nimport { TMessages } from '../../../../typescript/redux/messages/types';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n height: '100%',\r\n backgroundColor: '#ffffff'\r\n },\r\n list: {\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n }, \r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n})\r\n\r\nconst SearchList= () => {\r\n const classes = useStyles()\r\n const { sort } = useSelector(getChat)\r\n const messages = useSelector(getMessages)\r\n const [value, setValue] = useState<string>('')\r\n const [date, setDate] = useState<any>('');\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>): void => setValue(e.target.value)\r\n\r\n const filteredMessages = (arr:TMessages) => arr.filter((el) => {\r\n if (!date) {\r\n return el.message.toLowerCase().includes(value.toLowerCase())\r\n } else if (el.message.toLowerCase().includes(value.toLowerCase())\r\n && timeStampFilter(date) === timeStampFilter(el.createdAt)) {\r\n return el\r\n }\r\n })\r\n \r\n const arr: TMessages = filteredMessages(handleSort('createdAt', messages, sort))\r\n \r\nreturn (\r\n <div className={classes.container}>\r\n <Search handleSearch={handleSearch} value={value}\r\n setDate={setDate} date={date} />\r\n <div className={messages.length > 0 ?classes.list:undefined}>\r\n {messages.length > 0 ? arr.length > 0 ?\r\n <List sx={{ width: '100%' }}>\r\n {arr.map(({ name, lastName, avatarUrl, color, message, createdAt }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 44, height: 44, marginRight:2 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondary={<>\r\n <Typography\r\n sx={{ display: 'block',wordBreak:'break-word' }}\r\n component=\"span\"\r\n variant=\"body2\"\r\n color=\"text.primary\"\r\n >\r\n {message}\r\n </Typography>\r\n {timeStampEU(createdAt)}\r\n </>}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List> :\r\n <AlertInfo name={`Can not find message by request: ${value}`}/>:\r\n <AlertInfo name='You do not have messages yet!' />}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SearchList","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useState,useEffect } from 'react';\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\nimport { getContactsMemo } from '../../../../../redux/contacts/selector'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { asyncAddContact } from '../../../../../redux/contacts/operations';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n height:'7vh'\r\n },\r\n iconClose: {\r\n '&:hover': {\r\n transform: 'rotate(180deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n }, \r\n})\r\n\r\nconst ToolBar = () => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const contactsMemo = useSelector(getContactsMemo)\r\n const { number } = useSelector(getChat)\r\n const [isContact, setIsContact] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n const contact = contactsMemo.find((el) => el.number === number)\r\n if (contact) {\r\n setIsContact(true)\r\n } else {\r\n setIsContact(false)\r\n } \r\n }, [contactsMemo,number])\r\n \r\n return (\r\n <Stack className={classes.container} direction=\"row\">\r\n <IconButton onClick={() => dispatch(actionRightIsOpen(''))} aria-label=\"delete\" size=\"medium\">\r\n <CloseIcon className={classes.iconClose} fontSize='medium'/>\r\n </IconButton>\r\n <Typography variant=\"h6\" color=\"initial\" style={{marginLeft:20,color: '#474747'}}>Profile</Typography>\r\n <IconButton style={{marginLeft:'auto',marginRight:'3%'}} aria-label=\"delete\" size=\"medium\">\r\n {isContact ? <EditIcon onClick={() => dispatch(actionRightIsOpen('edit'))} fontSize='medium' /> :\r\n <PersonAddAltIcon onClick={() => dispatch(asyncAddContact(number))} fontSize='medium' />}\r\n </IconButton>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux';\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../helpers'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'relative',\r\n },\r\n nameTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:8,\r\n fontSize: 18,\r\n zIndex:10,\r\n top: '6%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n },\r\n timeTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:4,\r\n fontSize: 15,\r\n top: '1%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n }, \r\n})\r\n\r\nconst ProfilePicture = () => {\r\n const classes = useStyles()\r\n const { name, lastName, online, avatarsArr} = useSelector(getChat)\r\n return (\r\n <div className={classes.container}>\r\n <Carousel>\r\n {avatarsArr.map(({avatarUrl,updatedAt}) => <div>\r\n <img alt='pic' src={`${prodBaseURL}/${avatarUrl}`}/>\r\n <p className=\"legend\">{timeStampEU(updatedAt)}</p>\r\n </div>)}\r\n </Carousel> \r\n <span className={classes.nameTile}>{`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>\r\n <span className={classes.timeTile}>{online === 'true'?'online':`last seen ${timeStampEU(online)}`}</span>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProfilePicture","import { useSelector } from 'react-redux';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport NotificationsIcon from '@mui/icons-material/Notifications';\r\nimport SortIcon from '@mui/icons-material/Sort';\r\nimport Switch from '@mui/material/Switch';\r\nimport Divider from '@mui/material/Divider';\r\nimport AlternateEmailIcon from '@mui/icons-material/AlternateEmail';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { muteChat,sortChat } from '../../../../../api-data'\r\nimport { copied,firstLetter,slicedWord } from '../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n listIcon: {\r\n marginRight: 15,\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\nconst ProfileMenu = ({disabled}:{disabled:boolean}) => {\r\n const classes = useStyles()\r\n const { number, mute,sort,companionId,originalName,originalLastName } = useSelector(getChat)\r\n const handleMute = () => muteChat(companionId)\r\n const handleSort = () => sortChat(companionId)\r\n \r\n const credentials = `${firstLetter(originalName)}${slicedWord(originalName, 15, 1)}\r\n ${firstLetter(originalLastName)}${slicedWord(originalLastName, 15, 1)}`\r\n \r\n return (\r\n <Paper>\r\n <MenuList>\r\n <CopyToClipboard onCopy={() => copied('Number')} text={number}>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIcon}>\r\n <PhoneIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={number} secondary='Phone' />\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <Divider variant=\"inset\" />\r\n <CopyToClipboard onCopy={() => copied('Username')} text={credentials}>\r\n <MenuItem style={{cursor:'pointer'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <AlternateEmailIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={credentials} secondary='Username' />\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <Divider variant=\"inset\"/> \r\n <MenuItem style={{cursor:'default'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <NotificationsIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary='Notification' />\r\n <Switch style={{ cursor:'pointer'}} onClick={handleMute} {...label} checked={!mute} />\r\n </MenuItem>\r\n <Divider variant=\"inset\" />\r\n <MenuItem disabled={disabled} style={{cursor:'default'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <SortIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={`Sort by Date`} />\r\n <Switch style={{ cursor:'pointer'}} onClick={handleSort} {...label} checked={sort} />\r\n </MenuItem> \r\n </MenuList>\r\n </Paper>\r\n );\r\n}\r\n\r\nexport default ProfileMenu","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport LibraryMusicIcon from '@mui/icons-material/LibraryMusic';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\nconst AudioList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <LibraryMusicIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Audio yet!'/> \r\n}\r\n\r\nexport default AudioList","\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport ImageListItem from '@mui/material/ImageListItem';\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { handleDownload,timeStampEU,prodBaseURL } from '../../../../../../../helpers'\r\n\r\nconst useStyles = makeStyles({ \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapper: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n downloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n img: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n scale:0.98\r\n }\r\n },\r\n time: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }\r\n});\r\nconst MediaListItem = ({ message,fullType,updatedAt }: { message: string,fullType:string,updatedAt:string }) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const handleOpenWatch = () => !watch && setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n \r\n const url = `${prodBaseURL}/${message}`\r\n \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapper}>\r\n <span className={classes.time}>{timeStampEU(updatedAt)}</span>\r\n <DownloadForOfflineIcon className={classes.downloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <ImageListItem>\r\n <img onClick={handleOpenWatch} className={classes.img}\r\n src={`${url}?w=164&h=164&fit=crop&auto=format`}\r\n srcSet={`${url}?w=164&h=164&fit=crop&auto=format&dpr=2 2x`}\r\n alt='imageItem' loading=\"lazy\" />\r\n </ImageListItem>\r\n \r\n )\r\n}\r\n\r\nexport default MediaListItem","import ImageList from '@mui/material/ImageList';\r\nimport MediaListItem from './MediaListItem';\r\n\r\nimport AlertInfo from '../../../../../reusableComponents/AlertInfo';\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst MediaList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <ImageList sx={{ width: '100%', height: 'auto',overflow:'hidden' }} cols={3} rowHeight={164}>\r\n {filteredAndSorted.map(({message,createdAt,fullType,updatedAt}) => \r\n <MediaListItem key={createdAt} message={message} fullType={fullType} updatedAt={updatedAt}/>)}\r\n </ImageList>\r\n ): <AlertInfo name='You do not have Media yet!'/> \r\n}\r\n\r\nexport default MediaList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport FolderIcon from '@mui/icons-material/Folder';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\nconst FilesList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <FolderIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Files yet!'/> \r\n}\r\n\r\nexport default FilesList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Divider from '@mui/material/Divider';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,firstLetter,copied,prodBaseURL } from '../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n copyIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n }, \r\n})\r\n\r\nconst TextList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, lastName, name, color, avatarUrl }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText style={{ wordBreak: 'break-word',marginRight:2 }} primary={message}\r\n secondary={timeStampEU(createdAt)} secondaryTypographyProps={{color: '#020202',paddingTop:0.5}}\r\n />\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large' />\r\n </CopyToClipboard> \r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Text yet!'/> \r\n}\r\n\r\nexport default TextList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport VideoLibraryIcon from '@mui/icons-material/VideoLibrary';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\nconst VideoList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n\r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem key={createdAt} alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <VideoLibraryIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Audio yet!'/> \r\n}\r\n\r\nexport default VideoList","import { useState,useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AudioList from './AudioList';\r\nimport MediaList from './MediaList';\r\nimport FilesList from './FilesList';\r\nimport TextList from './TextList';\r\nimport VideoList from './VideoList'\r\nimport { getMessagesMemo } from '../../../../../redux/messages/selector'\r\nimport { handleSort } from '../../../../../helpers';\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { TMessages } from '../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\ncontainer: {\r\n borderBottom: 'solid 2px #dddddd',\r\n display: 'flex',\r\n justifyContent: 'space-around',\r\n alignContent: \"center\",\r\n alignItems:\"center\",\r\n flexWrap: 'nowrap',\r\n height:'7vh',\r\n color:'rgba(0, 0, 0, 0.6)'\r\n },\r\n item: {\r\n height:'100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignContent: \"center\",\r\n alignItems: \"center\",\r\n cursor:'pointer',\r\n },\r\nicon: {\r\n fontSize: '1rem',\r\n lineHeight: 0,\r\n marginBottom: 0,\r\n fontWeight:600\r\n },\r\nunderline: {\r\n fontSize: '2.5rem',\r\n lineHeight: 0,\r\n },\r\n})\r\n\r\nconst ProfileLists = ({setDisabled}:{setDisabled: React.Dispatch<boolean>,}) => {\r\n const classes = useStyles()\r\n const { sort } = useSelector(getChat)\r\n const messagesMemo = useSelector(getMessagesMemo)\r\n const [isActive, setIsActive] = useState<number>(0)\r\n const handleIsActive = (newValue: number): void => setIsActive(newValue)\r\n const filterBy = ['text', 'image', 'text', 'audio', 'video']\r\n \r\n const sorted: TMessages = handleSort('createdAt', messagesMemo, sort)\r\n const filteredAndSorted = sorted.filter((el) => {\r\n if (isActive !== 0) {\r\n if(el.type === filterBy[isActive]) return el\r\n } else {\r\n if(el.type !== filterBy[isActive]) return el\r\n }\r\n })\r\n \r\n useEffect(() => {\r\n setDisabled(filteredAndSorted.length > 0?false:true)\r\n }, [filteredAndSorted, setDisabled])\r\n \r\n return (\r\n <>\r\n <div className={classes.container}>\r\n <div className={classes.item} style={{color:isActive === 0?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(0)}>\r\n <span className={classes.icon}>Files</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 1?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(1)}>\r\n <span className={classes.icon}>Media</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 2?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(2)}>\r\n <span className={classes.icon}>Text</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 3?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(3)}>\r\n <span className={classes.icon}>Audio</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 4?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(4)}>\r\n <span className={classes.icon}>Video</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n </div>\r\n {isActive === 0 && <FilesList filteredAndSorted={filteredAndSorted}/>} \r\n {isActive === 1 && <MediaList filteredAndSorted={filteredAndSorted}/>}\r\n {isActive === 2 && <TextList filteredAndSorted={filteredAndSorted}/>}\r\n {isActive === 3 && <AudioList filteredAndSorted={filteredAndSorted} />}\r\n {isActive === 4 && <VideoList filteredAndSorted={filteredAndSorted}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default ProfileLists","import { makeStyles } from '@material-ui/core'\r\nimport { useState, useEffect } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ToolBar from './ToolBar'\r\nimport ProfilePicture from './ProfilePicture'\r\nimport ProfileMenu from './ProfileMenu'\r\nimport ProfileLists from './ProfileLists'\r\nimport { asyncGetContacts } from '../../../../redux/contacts/operations'\r\nimport { getState } from '../../../../redux/control/selector'\r\nimport { refreshAppTime } from '../../../../helpers'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n backgroundColor: '#ffffff',\r\n height: '100%',\r\n width:'100%',\r\n position:'relative'\r\n },\r\n scrollContainer: {\r\n overflowY: 'scroll',\r\n maxHeight: '93vh',\r\n width: '100%',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n }, \r\n },\r\n})\r\n\r\nconst CredentialsList = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { leftIsOpen } = useSelector(getState)\r\n const [disabled, setDisabled] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n const handleReset = () => leftIsOpen !== 'contacts'&&dispatch(asyncGetContacts())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen, dispatch]);\r\n \r\n return (\r\n <div className={classes.container}>\r\n <ToolBar />\r\n <div className={classes.scrollContainer}>\r\n <ProfilePicture />\r\n <ProfileMenu disabled={disabled}/>\r\n <ProfileLists setDisabled={setDisabled}/>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CredentialsList","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n height:'7vh',\r\n width: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\nconst ToolBar = () => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={() => dispatch(actionRightIsOpen('credentials'))} aria-label=\"delete\" size=\"medium\">\r\n <ArrowBackIcon className={classes.iconArrow} fontSize='medium'/>\r\n </IconButton>\r\n <Typography style={{marginLeft:20,color: '#474747'}} variant=\"h6\" color=\"initial\">Edit chat</Typography>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, TextField, Typography } from '@material-ui/core'\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport { format,firstLetter,slicedWord,prodBaseURL } from '../../../../../helpers'\r\nimport { TChat } from '../../../../../typescript/redux/chat/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: '100%',\r\n margin: '0 auto',\r\n padding: 20,\r\n marginBottom:15,\r\n position: 'relative',\r\n backgroundColor: '#ffffff',\r\n },\r\n textField: {\r\n marginBottom:20\r\n },\r\n notifications: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n marginBottom:'auto'\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n alignSelf: 'flex-end',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Checkbox demo' } };\r\n\r\ninterface IEditList {\r\n chat: TChat,\r\n name: string,\r\n setName: any,\r\n lastName: string,\r\n setLastName: any,\r\n mute: boolean,\r\n setMute: any,\r\n openBtn: boolean,\r\n setOpenBtn: any, \r\n}\r\n\r\nconst EditList = (props: IEditList) => {\r\n const classes = useStyles()\r\n const {chat,name,setName,lastName,setLastName,mute,setMute,openBtn,setOpenBtn} = props\r\n const { avatarUrl, color, originalName, originalLastName } = chat\r\n \r\n const handleNotifications = () => {\r\n setMute(!mute)\r\n !openBtn&&setOpenBtn(true)\r\n }\r\n \r\n const handleTextField = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n !openBtn&&setOpenBtn(true)\r\n const value = format(e.target.value)\r\n const name = e.target.name\r\n switch (name) {\r\n case 'name':\r\n setName(value)\r\n break;\r\n case 'lastName':\r\n setLastName(value)\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n \r\n return (\r\n <div className={classes.container} > \r\n <ListItemAvatar style={{marginBottom:10}}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 120, height: 120,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar> \r\n <Typography style={{color: '#080808',fontSize:22,fontWeight:500}}>\r\n {`${firstLetter(originalName)}${slicedWord(originalName, 15, 1)} \r\n ${firstLetter(originalLastName)}${slicedWord(originalLastName, 15, 1)}`}\r\n </Typography>\r\n <Typography style={{fontSize:17,marginBottom:20}}>original name</Typography> \r\n <TextField\r\n id=\"name\"\r\n name='name'\r\n label=\"Name\"\r\n value={name}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n className={classes.textField}\r\n />\r\n <TextField\r\n id=\"lastName\"\r\n name='lastName'\r\n label=\"LastName\"\r\n value={lastName}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n className={classes.textField}\r\n />\r\n <div className={classes.notifications}>\r\n <Checkbox onChange={handleNotifications} {...label} checked={!mute} style={{marginRight:20}} />\r\n <ListItemText primary=\"Notifications\" primaryTypographyProps={{ color: \"#0e0d0d\" }}\r\n secondary={!mute ? 'Disabled':'Enabled'} />\r\n </div> \r\n </div>\r\n )\r\n};\r\n\r\nexport default EditList;","import { makeStyles } from '@material-ui/core'\r\nimport Button from '@mui/material/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport { useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { actionRightIsOpen } from '../../../../../redux/control/action'\r\nimport { removeContact } from '../../../../../api-data';\r\nimport { TContact } from '../../../../../typescript/redux/contacts/types';\r\nimport { slicedWord,firstLetter,prodBaseURL } from '../../../../../helpers';\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n padding: '20px 10px 20px 10px',\r\n backgroundColor: '#ffffff',\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\nconst Delete = ({ isContact }:{ isContact:TContact}) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const {_id,avatarUrl,color,name,lastName} = isContact\r\n const [modal, setModal] = useState<boolean>(false)\r\n \r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n dispatch(actionRightIsOpen('credentials'))\r\n removeContact(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleOpenModal = () => setModal(true)\r\n return (\r\n <>\r\n <ul className={classes.container}>\r\n <MenuItem onClick={handleOpenModal} style={{fontSize:19,color:'#f02a2a'}} >\r\n <DeleteOutlineIcon fontSize='medium' style={{marginRight:27}}/>\r\n Delete contact\r\n </MenuItem> \r\n </ul>\r\n {modal&&<div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete contact</h3>\r\n </div>\r\n <p style={{ color: '#050505' }}>{`Are you sure you want to delete contact\r\n ${`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CONTACT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>}\r\n </>\r\n );\r\n}\r\n\r\nexport default Delete","import { makeStyles} from '@material-ui/core'\r\nimport Avatar from '@mui/material/Avatar';\r\nimport DoneIcon from '@mui/icons-material/Done';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n top: '92vh',\r\n left: 20,\r\n }, \r\n avatarArrow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\nconst SubmitBtn = ({handleSubmit}:{handleSubmit:() => void}) => {\r\n const classes = useStyles() \r\n\r\n return (\r\n <div className={classes.container}>\r\n <Avatar onClick={handleSubmit} className={classes.avatarArrow}\r\n sx={{width: 56, height: 56,backgroundColor: 'rgb(41, 139, 231)',color: '#ffffff'}}>\r\n <DoneIcon fontSize=\"medium\" /> \r\n </Avatar>\r\n </div> \r\n )\r\n};\r\n\r\nexport default SubmitBtn;","import { makeStyles } from '@material-ui/core'\r\nimport { useState,useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport ToolBar from './ToolBar'\r\nimport EditList from './EditList'\r\nimport Delete from './Delete'\r\nimport SubmitBtn from './SubmitBtn';\r\nimport { getContactsMemo } from '../../../../redux/contacts/selector'\r\nimport { getChat } from '../../../../redux/chat/selector'\r\nimport { muteChat, updateContact } from '../../../../api-data';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n editBar: {\r\n backgroundColor: '#f3f2f2',\r\n height: '100%',\r\n position:'relative'\r\n }\r\n})\r\n\r\nconst EditBar= () => {\r\n const classes = useStyles()\r\n const contactsMemo = useSelector(getContactsMemo)\r\n const chat = useSelector(getChat)\r\n const [isContact, setIsContact] = useState<any>(false)\r\n const [name, setName] = useState<string>('')\r\n const [lastName, setLastName] = useState<string>('')\r\n const [mute, setMute] = useState<boolean>(true)\r\n const [openBtn, setOpenBtn] = useState<boolean>(false)\r\n const {name:Name,lastName:LastName,mute:Mute,companionId,_id} = chat\r\n\r\n const handleSubmit = () => {\r\n if (mute !== !Mute) {\r\n muteChat(companionId)\r\n }\r\n if (name !== Name || lastName !== LastName) {\r\n updateContact(isContact._id,_id,name,lastName,companionId)\r\n } \r\n openBtn&&setOpenBtn(false)\r\n }\r\n\r\n useEffect(() => {\r\n const contact = contactsMemo.find((el) => el.number === chat.number)\r\n contact && setIsContact(contact) \r\n }, [contactsMemo, chat.number])\r\n \r\n useEffect(() => {\r\n setName(Name)\r\n setLastName(LastName)\r\n setMute(!Mute)\r\n }, [Name, LastName, Mute]) \r\n\r\n return (\r\n <div className={classes.editBar}>\r\n {openBtn&&<SubmitBtn handleSubmit={handleSubmit}/>}\r\n <ToolBar />\r\n <EditList chat={chat} name={name} setName={setName} lastName={lastName}\r\n setLastName={setLastName} mute={mute} setMute={setMute}\r\n openBtn={openBtn} setOpenBtn={setOpenBtn} />\r\n <Delete isContact={isContact} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default EditBar","import Grid from '@mui/material/Grid'\r\nimport SearchList from './SearchList'\r\nimport CredentialsList from './CredentialsList'\r\nimport EditBar from './EditBar'\r\nimport { TRightIsOpen } from '../../../typescript/redux/control/types'\r\n\r\nconst RightBar = ({rightIsOpen}:{rightIsOpen:TRightIsOpen}) => {\r\n return (\r\n <Grid item lg={rightIsOpen?4:0}>\r\n {rightIsOpen === 'credentials' && <CredentialsList />}\r\n {rightIsOpen === 'search' && <SearchList />}\r\n {rightIsOpen === 'edit' && <EditBar/>}\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default RightBar","import Grid from '@mui/material/Grid'\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux'\r\nimport LeftBar from './LeftBar'\r\nimport CentralBar from './CentralBar'\r\nimport RightBar from './RightBar'\r\nimport { getRightIsOpen } from '../../redux/control/selector'\r\nimport { getChatMemo } from '../../redux/chat/selector'\r\n\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n minHeight: '100vh',\r\n maxHeight: '100vh',\r\n },\r\n centralAndRight: {\r\n display:'flex'\r\n },\r\n centralBar: {\r\n background: 'linear-gradient(to bottom right, #e7f097 , #b1e667,#f4f75e)',\r\n }, \r\n})\r\n\r\nconst HomePage = () => {\r\n const classes = useStyles()\r\n const rightIsOpen = useSelector(getRightIsOpen)\r\n const { companionId } = useSelector(getChatMemo)\r\n \r\nreturn (\r\n <Grid className={classes.container} container spacing={0} >\r\n <LeftBar />\r\n {companionId ?\r\n <Grid item lg={9} className={classes.centralAndRight}>\r\n <CentralBar rightIsOpen={rightIsOpen}/>\r\n <RightBar rightIsOpen={rightIsOpen}/>\r\n </Grid> :\r\n <Grid item lg={9} className={classes.centralBar}/>}\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default HomePage"],"sourceRoot":""}