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/allMessages/operations/index.ts","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","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/RightBar/HeaderBar/Credentials/index.tsx","components/HomePage/RightBar/HeaderBar/Buttons/MenuList/index.tsx","components/HomePage/RightBar/HeaderBar/Buttons/DeleteModal/index.tsx","components/HomePage/RightBar/HeaderBar/Buttons/index.tsx","components/HomePage/RightBar/HeaderBar/index.tsx","components/HomePage/RightBar/ChatBar/ArrowBack/index.tsx","components/HomePage/RightBar/ChatBar/FilesMenu/UploadFile/index.tsx","components/HomePage/RightBar/ChatBar/FilesMenu/index.tsx","components/HomePage/RightBar/ChatBar/SendMessage/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageLeftText/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageLeftImage/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageLeftAudio/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageLeftVideo/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageLeftFile/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageRightText/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageRightImage/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageRightAudio/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageRightVideo/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageRightFile/index.tsx","components/HomePage/RightBar/ChatBar/Messages/MessageTime/index.tsx","redux/messages/selector/index.ts","redux/messages/operations/index.ts","components/HomePage/RightBar/ChatBar/index.tsx","components/HomePage/RightBar/RightListsAndBars/SearchList/Search/StaticDatePicker/index.tsx","components/HomePage/RightBar/RightListsAndBars/SearchList/Search/index.tsx","components/HomePage/RightBar/RightListsAndBars/SearchList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ToolBar/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfilePicture/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileMenu/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/AudioList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/MediaList/MediaListItem/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/MediaList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/FilesList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/TextList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/VideoList/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/ProfileLists/index.tsx","components/HomePage/RightBar/RightListsAndBars/CredentialsList/index.tsx","components/HomePage/RightBar/RightListsAndBars/EditBar/ToolBar/index.tsx","components/HomePage/RightBar/RightListsAndBars/EditBar/EditList/index.tsx","components/HomePage/RightBar/RightListsAndBars/EditBar/Delete/index.tsx","components/HomePage/RightBar/RightListsAndBars/EditBar/SubmitBtn/index.tsx","components/HomePage/RightBar/RightListsAndBars/EditBar/index.tsx","components/HomePage/RightBar/RightListsAndBars/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","handleSelectedMenu","setIsMenuSm","classes","useState","anchorEl","setAnchorEl","open","Boolean","handleClose","className","Avatar","onClick","e","currentTarget","sx","bgcolor","width","height","id","aria-labelledby","onClose","MenuItem","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","allMessagesMemo","filteredMessagesMemo","filter","type","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","asyncGetAllMessages","dispatch","a","getAllMessages","data","actionGetAllMessagesSuccess","actionGetAllMessagesReject","asyncGetChats","getChats","actionGetChatsSuccess","actionGetChatsReject","getStateMemo","createSelector","state","chats","getAllMessagesMemo","allMessages","messages","getIsOpen","control","isOpen","getScroll","scroll","asyncStartChatById","startChat","actionSelectChat","asyncGetChatById","getChatById","actionGetChatById","borderBottom","item","icon","lineHeight","fontWeight","underline","SearchLists","setValue","sort","setDate","useDispatch","useSelector","messagesMemo","isActive","setIsActive","handleIsActive","newValue","useEffect","idInterval","setInterval","clearInterval","sortByRecent","el","credentials","toLowerCase","includes","timeStampFilter","arr","filteredMessages","handleSort","actionIsOpen","StaticDatePicker","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","handleFocus","handleSearch","isSearch","Toolbar","IconButton","onFocus","placeholder","size","Switch","updateUser","asyncCurrentUser","checked","modalDelete","bottom","titleWrapper","DeleteModal","setModal","removeChatForBoth","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","total","watched","typing","online","muteChat","onContextMenu","preventDefault","handleContextMenu","overlap","list","ChatsList","ref","useRef","sortedChats","setSortedChats","getChatMemo","filteredChats","useCallback","stopPropagation","actionScroll","sorted","find","actionRemoveChat","current","forEach","i","oldDifferent","playNotificationWithoutPermission","notification","number","visibility","listItemLast","listIcon","listIconText","MenuBar","nightMode","Paper","textDecoration","href","ContactItem","contact","_id","removeContact","getState","contacts","getContactsMemo","asyncGetContacts","getContacts","actionGetContactsSuccess","actionGetContactsReject","asyncAddContact","addContact","ContactsList","ToolBar","title","buttonNext","textField","AddContact","setSelectedIndex","setNumber","handleAddContact","isValidNumber","onKeyDown","code","TextField","fullWidth","split","join","trim","required","MenuList","asyncLogout","index","setIndex","removeUserAvatar","nameTile","timeTile","iconDeleteWrapper","iconDelete","SettingsPicture","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","setIsSearch","isMenu","setIsMenu","isMenuSm","selectedIndex","modalRoot","handleCloseModal","document","getElementById","addEventListener","removeEventListener","Grid","lg","onMouseEnter","onMouseLeave","createPortal","Credentials","getChat","localStorage","setItem","JSON","stringify","new","Buttons","HeaderBar","AppBar","avatarArrowWrapper","listSeenIcon","ArrowBack","isArrow","handleScrollTo","isNew","dropZone","UploadFile","children","listText","FilesMenu","setIsOpenMenu","setType","textarea","resize","attachIcon","borderTop","filesMenu","emoji","iconCancel","avatarCamera","avatarRight","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","setTimeout","handleFocusTextarea","typingChat","handleBlurTextarea","onEmojiClick","_e","emojiObject","prevValue","disabled","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","minHeight","overflow","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","isScroll","setIsScroll","setIsNew","divRef","scrollTo","scrollHeight","behavior","handleScroll","different","scrollTop","seenChat","debouncedHandleScroll","getItem","parse","clientHeight","onScroll","isTime","MessageLeftImage","searchBarActive","sortChat","SearchList","iconClose","contactsMemo","isContact","setIsContact","ProfilePicture","ProfileMenu","defaultChecked","ProfileLists","sortedMessages","scrollContainer","CredentialsList","notifications","setMute","Checkbox","Delete","editBar","Mute","updateContact","RightListsAndBars","chatBar","RightBar","handleIsOpen","HomePage"],"mappings":"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","file":"static/js/HomePage.25b757c8.chunk.js","sourcesContent":["import { makeStyles } from '@material-ui/core'\r\nimport React, { useState } from 'react';\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 ChatIcon from '@mui/icons-material/Chat';\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\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 handleSelectedMenu:(i:number) => void,\r\n setIsMenuSm:React.Dispatch<React.SetStateAction<boolean>>,\r\n}\r\nconst SmallMenuBar = ({handleSelectedMenu,setIsMenuSm}:ISmallMenuBar) => {\r\n const classes = useStyles()\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 setIsMenuSm(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 handleSelectedMenu(3)\r\n }}>\r\n <PersonAddAltIcon/>\r\n New Contact\r\n </MenuItem> \r\n <MenuItem onClick={() => {\r\n handleClose();\r\n handleSelectedMenu(1)\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\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,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\nconst FilesList = ({ allMessagesMemo,value,date }: { allMessagesMemo: TAllMessages,value: string,date:any }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = allMessagesMemo.filter(({type}) => type !== 'text')\r\n return (\r\n <>\r\n {filteredMessagesMemo.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredMessagesMemo.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)&& filteredMessagesMemo.length === 0 && <AlertInfo name={`Can not find Files by request: ${value}`} />}\r\n {!value && !date && filteredMessagesMemo.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\n\r\nimport MediaListItem from './MediaListItem';\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\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\nconst MediaList = ({ allMessagesMemo,value,date }: { allMessagesMemo: TAllMessages,value:string,date:any }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = allMessagesMemo.filter(({ type }) => type === 'image')\r\n return (\r\n <>\r\n {filteredMessagesMemo.length > 0 &&\r\n <ImageList className={classes.container} cols={3} rowHeight={164}>\r\n {filteredMessagesMemo.map(({message,createdAt,fullType,updatedAt}) => \r\n <MediaListItem key={createdAt} message={message} fullType={fullType} updatedAt={updatedAt}/>)}\r\n </ImageList>}\r\n {(value || date) && filteredMessagesMemo.length === 0 && <AlertInfo name={`Can not find Media by request: ${value}`} />}\r\n {!value && !date && filteredMessagesMemo.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\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,firstLetter,copied,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\nconst TextList = ({ allMessagesMemo,value,date }: { allMessagesMemo: TAllMessages,value: string,date: any }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = allMessagesMemo.filter(({type}) => type === 'text')\r\n return (\r\n <>\r\n {filteredMessagesMemo.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredMessagesMemo.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) && filteredMessagesMemo.length === 0 && <AlertInfo name={`Can not find Text by request: ${value}`} />}\r\n {!value && !date && filteredMessagesMemo.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\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,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\nconst AudioList = ({ allMessagesMemo,value,date }: { allMessagesMemo: TAllMessages,value:string,date:any }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = allMessagesMemo.filter(({type}) => type === 'audio')\r\n return(\r\n <>\r\n {filteredMessagesMemo.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredMessagesMemo.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) && filteredMessagesMemo.length === 0 && <AlertInfo name={`Can not find Audio by request: ${value}`} />}\r\n {!value && !date && filteredMessagesMemo.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\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,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\nconst VideoList = ({ allMessagesMemo,value,date }: { allMessagesMemo: TAllMessages,value:string,date:any }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = allMessagesMemo.filter(({type}) => type === 'video')\r\n return (\r\n <>\r\n {filteredMessagesMemo.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredMessagesMemo.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)&& filteredMessagesMemo.length === 0 && <AlertInfo name={`Can not find Video by request: ${value}`} />}\r\n {!value && !date && filteredMessagesMemo.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 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 {\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 getIsOpen = (state: IState) => state.control.isOpen;\nconst getScroll = (state: IState) => state.control.scroll;\nconst getState = (state:IState) => state.control;\n\nexport { getIsOpen,getScroll,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 { getIsOpen } from '../../../../redux/control/selector';\r\nimport { sortByRecent,handleSort,timeStampFilter } from '../../../../helpers';\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations';\r\nimport { actionIsOpen } from '../../../../redux/control/action';\r\nimport { TAllMessages } from '../../../../typescript/redux/allMessages/types';\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\n\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}\r\n\r\nconst SearchLists = ({ value,setValue,sort,date,setDate }: ISearchLists) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { chats } = useSelector(getStateMemo)\r\n const messagesMemo = useSelector(getAllMessagesMemo)\r\n const isOpen = useSelector(getIsOpen)\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 isOpen&&dispatch(actionIsOpen(''))\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 const filteredMessages = (arr: TAllMessages) => arr.filter((el) => {\r\n if (!date) {\r\n if (!el.fullType && el.message.toLowerCase().includes(value.toLowerCase())) {\r\n return el\r\n }\r\n if (el.fullType && el.fullType.toLowerCase().includes(value.toLowerCase())) {\r\n return el\r\n }\r\n } else {\r\n if (!el.fullType && el.message.toLowerCase().includes(value.toLowerCase())\r\n && timeStampFilter(date) === timeStampFilter(el.createdAt)) {\r\n return el\r\n }\r\n if (el.fullType && el.fullType.toLowerCase().includes(value.toLowerCase())\r\n && timeStampFilter(date) === timeStampFilter(el.createdAt)) {\r\n return el\r\n }\r\n }\r\n })\r\n \r\n useEffect(() => {\r\n dispatch(asyncGetAllMessages())\r\n dispatch(asyncGetChats())\r\n const handleReset = () => {\r\n dispatch(asyncGetAllMessages())\r\n dispatch(asyncGetChats())\r\n }\r\n const idInterval = setInterval(handleReset, 5000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\r\n \r\n useEffect(() => {\r\n setDate('')\r\n },[setDate])\r\n \r\n const filteredAndSorted = filteredChats(sortByRecent(chats,sort))\r\n const allMessagesMemo = filteredMessages(handleSort('createdAt',messagesMemo,sort))\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}>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 allMessagesMemo={allMessagesMemo} value={value} date={date}/>}\r\n {isActive === 2 && <MediaList allMessagesMemo={allMessagesMemo} value={value} date={date}/>}\r\n {isActive === 3 && <TextList allMessagesMemo={allMessagesMemo} value={value} date={date}/>}\r\n {isActive === 4 && <AudioList allMessagesMemo={allMessagesMemo} value={value} date={date}/>}\r\n {isActive === 5 && <VideoList allMessagesMemo={allMessagesMemo} value={value} date={date}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default SearchLists","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\ninterface IStaticDatePicker {\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\ncontainer: {\r\n position: 'absolute',\r\n},\r\n})\r\n\r\nconst StaticDatePicker = ({ date, 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 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 { useDispatch } from 'react-redux';\r\nimport { updateUser } from '../../../../api-data';\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\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 handleFocus:() => void,\r\n handleSearch:(e: React.ChangeEvent<HTMLInputElement>) => void,\r\n isSearch: boolean,\r\n value: string,\r\n sort: boolean,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n}\r\n\r\nconst SearchBar = ({ handleClick, handleFocus, handleSearch, isSearch,\r\n value, sort,setDate,date }: ISearchBar) => {\r\n const dispatch = useDispatch()\r\n const handleSort = () => {\r\n updateUser({ sort: !sort })\r\n dispatch(asyncCurrentUser())\r\n }\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 {isSearch ? <ArrowBackIcon className={classes.iconArrow} /> : <MenuIcon className={classes.iconBtn} />}\r\n </IconButton>\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 onFocus={handleFocus}\r\n onChange={handleSearch}\r\n placeholder='Search'\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n </Search>\r\n <IconButton aria-label=\"delete\" size=\"medium\">\r\n <StaticDatePicker 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} />\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\n\r\nimport { removeChatForBoth } from '../../../../../../api-data';\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 {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 }\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 { useState,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 { asyncGetChats } from '../../../../redux/chats/operations'\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations'\r\nimport { actionRemoveChat } from '../../../../redux/chat/action'\r\nimport { actionScroll, actionIsOpen } from '../../../../redux/control/action'\r\nimport { getIsOpen } from '../../../../redux/control/selector';\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\nimport { timeStampFilter,prodBaseURL } 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 date: any,\r\n value: string\r\n}\r\n\r\nconst ChatsList = ({sort,date,value}:IChatsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const ref = useRef<any>(null)\r\n const [sortedChats, setSortedChats] = useState<TChats>([]);\r\n const { total, chats } = useSelector(getStateMemo)\r\n const chat = useSelector(getChatMemo)\r\n const isOpen = useSelector(getIsOpen)\r\n const filteredChats = useCallback((arr: TChats) => arr.filter((el) => {\r\n if (!date) {\r\n return el\r\n } else if (timeStampFilter(date) === timeStampFilter(el.lastMessageCreatedAt ?\r\n el.lastMessageCreatedAt : el.createdAt)) {\r\n return el\r\n }\r\n }),[date])\r\n\r\n const handleListItemClick = (companionId: string) => {\r\n isOpen&&dispatch(actionIsOpen(''))\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(actionScroll(true))\r\n isOpen&&dispatch(actionIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n useEffect(() => {\r\n dispatch(asyncGetChats())\r\n const handleReset = () => dispatch(asyncGetChats())\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n const handleNotification= (companionId: string) => {\r\n dispatch(asyncStartChatById(companionId))\r\n dispatch(actionScroll(true))\r\n }\r\n const sorted = filteredChats(sortByRecent(chats,sort))\r\n setSortedChats(sorted)\r\n if (chat.companionId&&!sorted.find((el) => el.companionId === chat.companionId))dispatch(actionRemoveChat())\r\n if (ref.current) {\r\n ref.current.forEach(({total,seen}: any,i:number) => {\r\n const oldDifferent = total - seen\r\n const chat = sorted[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}/notifications/receive.mp3`)\r\n notification(chat.name,() => handleNotification(chat.companionId))\r\n } \r\n })\r\n }\r\n ref.current = sorted\r\n }, [chats, chat,sort,filteredChats,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.length > 0 ? sortedChats.map((el) => <ChatItem key={el.number} chat={el} \r\n handleListItemClick={handleListItemClick} handleNewMsgs={handleNewMsgs} />):\r\n <AlertInfo name={`Can not find Chats by request : ${value}`} />}\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 { useDispatch } from 'react-redux';\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { updateUser } from '../../../../api-data';\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 handleSelectedMenu: (i: number) => void,\r\n nightMode: boolean\r\n}\r\n\r\nconst MenuBar = ({handleSelectedMenu,nightMode}:IContactsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const handleNightMode = () => {\r\n updateUser({ nightMode: !nightMode })\r\n dispatch(asyncCurrentUser())\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={() => handleSelectedMenu(3)}>\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={() => handleSelectedMenu(1)}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <PermContactCalendarIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText>Contacts</ListItemText>\r\n </MenuItem>\r\n \r\n <MenuItem onClick={() => handleSelectedMenu(2)}>\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 { actionIsOpen } from '../../../../../redux/control/action';\r\nimport { TContact } from '../../../../../typescript/redux/contacts/types';\r\nimport { TIsOpen } 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 isOpen: TIsOpen,\r\n}\r\nconst ContactItem = ({contact,handleListItemClick,isOpen}: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 isOpen === 'edit'&&dispatch(actionIsOpen('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 { useEffect } from 'react';\r\nimport { useSelector,useDispatch } from 'react-redux';\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 { getIsOpen } from '../../../../redux/control/selector'\r\nimport { actionIsOpen } from '../../../../redux/control/action';\r\nimport { handleSort,timeStampFilter } 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: any,\r\n sort: boolean,\r\n date: any\r\n}\r\nconst ContactsList = ({value,handleClick,sort,date} : IContactList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { total, contacts } = useSelector(getState)\r\n const isOpen = useSelector(getIsOpen)\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 isOpen&&dispatch(actionIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n useEffect(() => {\r\n dispatch(asyncGetContacts())\r\n const handleReset = () => isOpen !== 'credentials' &&dispatch(asyncGetContacts())\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch,isOpen]);\r\n\r\n const arr = filteredContacts()\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} isOpen={isOpen}/>) :\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 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 setSelectedIndex: React.Dispatch<React.SetStateAction<number | null>>,\r\n handleClick: () => void\r\n}\r\n\r\nconst AddContact = ({setSelectedIndex,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 setNumber('')\r\n setSelectedIndex(1) \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 MenuList from './MenuList';\r\nimport { makeStyles, Typography } from '@material-ui/core'\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 setSelectedIndex: (selectedIndex: number | null) => void,\r\n handleClick:() => void\r\n}\r\n\r\nconst ToolBar = ({setSelectedIndex,handleClick}:IToolBar) => {\r\n const classes = useStyles()\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={() => setSelectedIndex(4)} 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 { useDispatch } from 'react-redux';\r\nimport { removeUserAvatar } from '../../../../../../api-data';\r\nimport { asyncCurrentUser } from '../../../../../../redux/authorization/operations';\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 dispatch = useDispatch()\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 dispatch(asyncCurrentUser())\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 { getState } 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(getState)\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 ToolBar from \"./ToolBar\"\r\nimport SettingsPicture from \"./SettingsPicture\"\r\nimport SettingsMenu from \"./SettingsMenu\"\r\n\r\ninterface ISettingsBar {\r\n setSelectedIndex: (selectedIndex: number | null) => void,\r\n handleClick:() => void\r\n}\r\n\r\nconst SettingsBar = ({setSelectedIndex,handleClick}:ISettingsBar) => {\r\n return (\r\n <div style={{backgroundColor: '#f3f2f2',height:'100%',width:'100%'}}>\r\n <ToolBar setSelectedIndex={setSelectedIndex} 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\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\ninterface IToolBar {\r\n setSelectedIndex: React.Dispatch<React.SetStateAction<number | null>>\r\n}\r\n\r\nconst ToolBar = ({setSelectedIndex}:IToolBar) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={() => setSelectedIndex(2)} 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 { getState } from '../../../../redux/authorization/selector'\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { updateCredentials,updateUserAvatar } from '../../../../api-data';\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\ninterface IEditBar {\r\n setSelectedIndex: React.Dispatch<React.SetStateAction<number | null>>\r\n}\r\n\r\nconst EditBar= ({setSelectedIndex}:IEditBar) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const user = useSelector(getState)\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 dispatch(asyncCurrentUser())\r\n }\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 setSelectedIndex={setSelectedIndex}/>\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 } 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 { getState } from '../../../redux/authorization/selector'\r\n\r\nconst LeftBar = () => {\r\n const { sort,nightMode } = useSelector(getState)\r\n const [isSearch, setIsSearch] = useState<boolean>(false)\r\n const [isMenu, setIsMenu] = useState<boolean>(false)\r\n const [isMenuSm, setIsMenuSm] = useState<boolean>(false);\r\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null)\r\n const [value, setValue] = useState<string>('')\r\n const [date, setDate] = useState<any>('');\r\n const modalRoot = useRef<HTMLDivElement|null>(null);\r\n const handleFocus = (): void => setIsSearch(true)\r\n const handleClick = (): void => {\r\n value&&setValue('')\r\n date&&setDate('')\r\n if (selectedIndex) setSelectedIndex(null)\r\n if(!isSearch) return setIsMenu(!isMenu)\r\n setIsSearch(false)\r\n }\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>):void => setValue(e.target.value)\r\n const handleEnterOpenMenuSm = (): void => {\r\n if(!isMenuSm) setIsMenuSm(true)\r\n }\r\n const handleLeaveCloseMenuSm = (): void => {\r\n if(isMenuSm) setIsMenuSm(false)\r\n }\r\n const handleSelectedMenu = (i: number) => {\r\n setIsSearch(true)\r\n setIsMenu(false)\r\n setIsMenuSm(false)\r\n value&&setValue('')\r\n date&&setDate('')\r\n setSelectedIndex(i)\r\n }\r\n \r\n useEffect(() => {\r\n const handleCloseModal = (e:any) => {\r\n if (e.target.id === 'overlay') {\r\n setIsMenu(false)\r\n setIsMenuSm(false)\r\n }\r\n }\r\n if (!modalRoot.current) {\r\n const modal = document.getElementById('modal-root') as HTMLDivElement | null\r\n if (modal) {\r\n modal.addEventListener('click',handleCloseModal)\r\n modalRoot.current = modal\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 {selectedIndex !== 2 && selectedIndex !== 3 && selectedIndex !== 4 &&\r\n <SearchBar handleClick={handleClick} handleFocus={handleFocus} sort={sort} \r\n handleSearch={handleSearch} isSearch={isSearch}\r\n value={value} setDate={setDate} date={date}/>}\r\n {!selectedIndex && isSearch && <SearchLists value={value} setValue={setValue}\r\n sort={sort} date={date} setDate={setDate}/>}\r\n {!selectedIndex&&!isSearch &&<ChatsList sort={sort} date={date} value={value}/>}\r\n {!selectedIndex && isMenuSm && !isSearch && <SmallMenuBar\r\n handleSelectedMenu={handleSelectedMenu} setIsMenuSm={setIsMenuSm} />}\r\n {isMenu && modalRoot.current &&\r\n createPortal(<MenuBar handleSelectedMenu={handleSelectedMenu} nightMode={nightMode}/>, modalRoot.current)}\r\n {selectedIndex === 1 && <ContactsList handleClick={handleClick} value={value} sort={sort} date={date}/>}\r\n {selectedIndex === 2 && <SettingsBar setSelectedIndex={setSelectedIndex} handleClick={handleClick}/>}\r\n {selectedIndex === 3 && <AddContact setSelectedIndex={setSelectedIndex} handleClick={handleClick}/>}\r\n {selectedIndex === 4 && <EditBar setSelectedIndex={setSelectedIndex}/>}\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\nimport { useEffect,useRef } from 'react';\r\n\r\nimport { actionIsOpen } from '../../../../../redux/control/action'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { asyncGetChatById } from '../../../../../redux/chat/operations'\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, companionId,seen,total,mute } = useSelector(getChat)\r\n const ref = useRef<any>(null)\r\n useEffect(() => {\r\n const handleReset = () => companionId&&dispatch(asyncGetChatById(companionId))\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch, companionId]);\r\n \r\n useEffect(() => {\r\n if (ref.current) {\r\n localStorage.setItem('isNew', JSON.stringify({ new: total - seen, mute }))\r\n }\r\n ref.current = { seen,total}\r\n }, [seen, total, mute]);\r\n \r\n return (\r\n <ListItemButton onClick={() => dispatch(actionIsOpen('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 { useDispatch,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 { actionIsOpen } from '../../../../../../redux/control/action'\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 dispatch = useDispatch()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const open = Boolean(anchorEl);\r\n const { companionId,mute } = useSelector(getChat)\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\r\n dispatch(actionIsOpen('menu'))\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 dispatch(actionIsOpen(''))\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 } from 'react-redux';\r\n\r\nimport { getChat } from '../../../../../../redux/chat/selector';\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 {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 }\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 { actionIsOpen } 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(actionIsOpen('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 AttachFileIcon from '@mui/icons-material/AttachFile';\r\nimport SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Picker from 'emoji-picker-react';\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 { getIsOpen } from '../../../../../redux/control/selector'\r\nimport { playNotification,prodBaseURL } from \"../../../../../helpers\";\r\nimport { typingChat } from \"../../../../../api-data\";\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 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: 'rgb(82, 82, 82)',\r\n fontWeight: 600\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 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});\r\n\r\ninterface ISendMessage{\r\n isArrow: boolean,\r\n handleScrollTo:() => void\r\n}\r\n\r\nconst SendMessage = ({isArrow,handleScrollTo}:ISendMessage) => {\r\n const classes = useStyles();\r\n const { companionId } = useSelector(getChat)\r\n const isOpen = useSelector(getIsOpen)\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}/notifications/send.mp3`)\r\n setTimeout(handleScrollTo, 4000);\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={classes.container}>\r\n {isArrow&&<div className={classes.borderTop}></div>} \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: '#7c7c7c', width: 56, height: 56}}\r\n style={{display: status !== 'idle' || _status === 'stopped' || file || value ? 'none' : 'block',\r\n animation: isFilming ? 'ripple 1.2s infinite ease-in-out' : 'none'\r\n }} />\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: isRecording ? 'rgb(41, 139, 231)' : '#ffffff',\r\n color: isRecording ? '#ffffff' : '#6b6b6b', width: 56, height: 56}}\r\n style={{display: !value && !file && status !== 'stopped' && _status === 'idle' ? 'block' : 'none',\r\n animation:isRecording ? 'ripple 1.2s infinite ease-in-out': '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: isOpen&&isOpen !== 'menu'?'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 </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: isOpen&&isOpen !== 'menu'?'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: 'sticky',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n minHeight:'100%', \r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border: 'solid 1px rgba(179, 179, 179, 0.6)',\r\n overflow: 'hidden',\r\n cursor:'pointer'\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: 'sticky',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n minHeight:'100%',\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border: 'solid 1px rgba(179, 179, 179, 0.6)',\r\n overflow: 'hidden',\r\n cursor:'pointer'\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 { getScroll } from '../../../../redux/control/selector'\r\nimport { actionScroll } from '../../../../redux/control/action'\r\nimport { asyncGetMessagesById } from '../../../../redux/messages/operations'\r\nimport { seenChat } from \"../../../../api-data\";\r\nimport { timeStampFilter,prodBaseURL } 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 } = useSelector(getChat)\r\n const scroll = useSelector(getScroll)\r\n const [isArrow, setIsArrow] = useState<boolean>(false)\r\n const [isScroll, setIsScroll] = useState<boolean>(true)\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 }: any) => {\r\n isScroll&&setIsScroll(false)\r\n const different = target.scrollHeight - target.scrollTop\r\n if (different < 900) seenChat(companionId)\r\n setIsArrow(different < 1300 ? false : true)\r\n }, [isScroll, companionId])\r\n \r\n const debouncedHandleScroll = debounce(handleScroll, 300)\r\n \r\n useEffect(() => {\r\n if (scroll) {\r\n dispatch(asyncGetMessagesById(companionId, handleScrollTo))\r\n dispatch(actionScroll(false))\r\n }\r\n }, [dispatch,scroll, companionId]) \r\n\r\n useEffect(() => {\r\n dispatch(asyncGetMessagesById(companionId, handleScrollTo))\r\n const handleReset = () => {\r\n dispatch(asyncGetMessagesById(companionId, null))\r\n const arr: any = localStorage.getItem('isNew')\r\n if(arr) setIsNew(JSON.parse(arr))\r\n }\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch, companionId]);\r\n\r\n useEffect(() => {\r\n const scrollHeight = divRef.current.scrollHeight\r\n const clientHeight = divRef.current.clientHeight\r\n if(isScroll&&scrollHeight === clientHeight) seenChat(companionId)\r\n }, [isScroll, companionId, total]);\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} handleScrollTo={handleScrollTo}/> \r\n </div>\r\n );\r\n}\r\n\r\nexport default ChatBar","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 { actionIsOpen } from '../../../../../../redux/control/action'\r\nimport { getMessages } from '../../../../../../redux/messages/selector'\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { asyncGetChatById } from '../../../../../../redux/chat/operations';\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 = () => {\r\n sortChat(companionId)\r\n dispatch(asyncGetChatById(companionId))\r\n }\r\n\r\n return (\r\n <Toolbar className={classes.toolBar} >\r\n <IconButton onClick={() => dispatch(actionIsOpen(''))} 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=\"Search\"\r\n value={value}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n </SearchBar> \r\n <IconButton aria-label=\"delete\" size=\"medium\">\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 const arr:TMessages = filteredMessages(handleSort('createdAt',messages,sort))\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 { actionIsOpen } from '../../../../../../redux/control/action'\r\nimport { getContactsMemo } from '../../../../../../redux/contacts/selector'\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { asyncGetContacts,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 dispatch(asyncGetContacts())\r\n const handleReset = () => dispatch(asyncGetContacts())\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\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(actionIsOpen(''))} 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(actionIsOpen('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,useDispatch } 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 { asyncGetChatById } from '../../../../../../redux/chat/operations';\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 = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { number, mute,sort,companionId,originalName,originalLastName } = useSelector(getChat)\r\n const handleMute = () => muteChat(companionId)\r\n const handleSort = () => {\r\n sortChat(companionId)\r\n dispatch(asyncGetChatById(companionId))\r\n }\r\n const credentials = `${firstLetter(originalName)}${slicedWord(originalName, 15, 1)}\r\n ${firstLetter(originalLastName)}${slicedWord(originalLastName, 15, 1)}`\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 <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} defaultChecked={!mute} />\r\n </MenuItem>\r\n <Divider variant=\"inset\" />\r\n <MenuItem 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 <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 </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 = ({ messagesMemo }: { messagesMemo: TMessages }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = messagesMemo.filter(({type}) => type === 'audio')\r\n return filteredMessagesMemo.length > 0 ?(\r\n <List>\r\n {filteredMessagesMemo.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 = ({ messagesMemo }: { messagesMemo: TMessages }) => {\r\n const filteredMessagesMemo = messagesMemo.filter(({ type }) => type === 'image')\r\n return filteredMessagesMemo.length > 0 ?(\r\n <ImageList sx={{ width: '100%', height: 'auto',overflow:'hidden' }} cols={3} rowHeight={164}>\r\n {filteredMessagesMemo.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 = ({ messagesMemo }: { messagesMemo: TMessages }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = messagesMemo.filter(({type}) => type !== 'text')\r\n return filteredMessagesMemo.length > 0 ?(\r\n <List>\r\n {filteredMessagesMemo.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 = ({ messagesMemo }: { messagesMemo: TMessages }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = messagesMemo.filter(({type}) => type === 'text')\r\n return filteredMessagesMemo.length > 0 ?(\r\n <List>\r\n {filteredMessagesMemo.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 = ({ messagesMemo }: { messagesMemo: TMessages }) => {\r\n const classes = useStyles()\r\n const filteredMessagesMemo = messagesMemo.filter(({type}) => type === 'video')\r\n return filteredMessagesMemo.length > 0 ?(\r\n <List>\r\n {filteredMessagesMemo.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 } 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 = () => {\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 sortedMessages: TMessages = handleSort('createdAt', messagesMemo, 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}>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 messagesMemo={sortedMessages}/>} \r\n {isActive === 1 && <MediaList messagesMemo={sortedMessages}/>}\r\n {isActive === 2 && <TextList messagesMemo={sortedMessages}/>}\r\n {isActive === 3 && <AudioList messagesMemo={sortedMessages} />}\r\n {isActive === 4 && <VideoList messagesMemo={sortedMessages}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default ProfileLists","import { makeStyles } from '@material-ui/core'\r\nimport ToolBar from './ToolBar'\r\nimport ProfilePicture from './ProfilePicture'\r\nimport ProfileMenu from './ProfileMenu'\r\nimport ProfileLists from './ProfileLists'\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 return (\r\n <div className={classes.container}>\r\n <ToolBar />\r\n <div className={classes.scrollContainer}>\r\n <ProfilePicture />\r\n <ProfileMenu />\r\n <ProfileLists />\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 { actionIsOpen } 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(actionIsOpen('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 const handleNotifications = () => {\r\n setMute(!mute)\r\n !openBtn&&setOpenBtn(true)\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 { actionIsOpen } 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\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 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(actionIsOpen('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\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 Name&&setName(Name)\r\n LastName && 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 { useSelector } from 'react-redux'\r\nimport SearchList from './SearchList'\r\nimport CredentialsList from './CredentialsList'\r\nimport EditBar from './EditBar'\r\nimport { getIsOpen } from '../../../../redux/control/selector'\r\n\r\n\r\nconst RightListsAndBars = () => {\r\n const isOpen = useSelector(getIsOpen)\r\n return (\r\n <>\r\n {isOpen === 'credentials' && <CredentialsList />}\r\n {isOpen === 'search' && <SearchList />}\r\n {isOpen === 'edit' && <EditBar/>}\r\n </>\r\n )\r\n}\r\n\r\nexport default RightListsAndBars","import Grid from '@mui/material/Grid'\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux'\r\nimport { getIsOpen } from '../../../redux/control/selector'\r\nimport { getChatMemo } from '../../../redux/chat/selector'\r\n\r\nimport HeaderBar from './HeaderBar'\r\nimport ChatBar from './ChatBar'\r\nimport RightListsAndBars from './RightListsAndBars'\r\n\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 RightBar = () => {\r\n const classes = useStyles()\r\n const isOpen = useSelector(getIsOpen)\r\n const { _id } = useSelector(getChatMemo)\r\n const handleIsOpen = isOpen&&isOpen !== 'menu'\r\n\r\n return _id?\r\n <Grid item lg={9} style={{display:'flex'}}>\r\n <Grid item lg={handleIsOpen?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 <Grid item lg={handleIsOpen?4:0}>\r\n <RightListsAndBars/>\r\n </Grid> \r\n </Grid>\r\n : <Grid item lg={9} className={classes.chatBar}/>\r\n}\r\n\r\nexport default RightBar","import Grid from '@mui/material/Grid'\r\nimport LeftBar from './LeftBar'\r\nimport RightBar from './RightBar'\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n minHeight: '100vh',\r\n maxHeight: '100vh',\r\n },\r\n})\r\n\r\nconst HomePage = () => {\r\n const classes = useStyles()\r\n return (\r\n <Grid className={classes.container}\r\n container spacing={0} >\r\n <LeftBar/>\r\n <RightBar/>\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default HomePage"],"sourceRoot":""}
|