HomePage.ab68b19e.chunk.js.map 398 KB

1
  1. {"version":3,"sources":["components/HomePage/LeftBar/SmallMenuBar/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/RecentItem/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/ChatItem/index.tsx","components/reusableComponents/AlertInfo/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/index.tsx","components/HomePage/LeftBar/SearchLists/FilesList/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/MediaListItem/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/index.tsx","components/HomePage/LeftBar/SearchLists/TextList/index.tsx","components/HomePage/LeftBar/SearchLists/AudioList/index.tsx","components/HomePage/LeftBar/SearchLists/VideoList/index.tsx","redux/chats/operations/index.ts","redux/chats/selector/index.ts","redux/allMessages/selector/index.ts","redux/control/selector/index.ts","redux/chat/operations/index.ts","components/HomePage/LeftBar/SearchLists/index.tsx","redux/allMessages/operations/index.ts","components/HomePage/LeftBar/SearchBar/StaticDatePicker/index.tsx","components/HomePage/LeftBar/SearchBar/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/DeleteModal/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/index.tsx","components/HomePage/LeftBar/ChatsList/index.tsx","components/HomePage/LeftBar/MenuBar/index.tsx","components/HomePage/LeftBar/ContactsList/ContactItem/index.tsx","redux/contacts/selector/index.ts","components/HomePage/LeftBar/ContactsList/index.tsx","redux/contacts/operations/index.ts","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","asyncGetChats","dispatch","a","getChats","data","actionGetChatsSuccess","actionGetChatsReject","getStateMemo","createSelector","state","chats","getAllMessagesMemo","allMessages","messages","getIsOpen","control","isOpen","getScroll","scroll","asyncStartChatById","startChat","actionSelectChat","borderBottom","item","icon","lineHeight","fontWeight","underline","SearchLists","setValue","sort","setDate","useDispatch","useSelector","messagesMemo","isActive","setIsActive","handleIsActive","newValue","useEffect","getAllMessages","actionGetAllMessagesSuccess","actionGetAllMessagesReject","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","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","chatsRef","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","ContactsList","asyncGetContacts","getContacts","actionGetContactsSuccess","actionGetContactsReject","asyncAddContact","addContact","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","Buttons","HeaderBar","AppBar","avatarArrowWrapper","listSeenIcon","ArrowBack","isArrow","handleScrollTo","isNew","new","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","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","MessageLeftFile","read","setRead","handleCloseRead","allowFullScreen","fileType","filePath","onError","rel","download","MessageRightText","MessageRightImage","MessageRightAudio","MessageRightVideo","MessageRightFile","MessageTime","getMessages","getMessagesMemo","asyncGetMessagesById","cb","getMessagesById","actionGetMessagesSuccess","actionGetMessagesReject","debounce","messagesScroll","messagesEmpty","messagesBody","ChatBar","userNumber","setIsArrow","setIsNew","divRef","scrollTo","scrollHeight","behavior","handleScroll","scrollTop","clientHeight","different","Math","floor","seenChat","debouncedHandleScroll","getChatById","actionGetChatById","ref","onScroll","isTime","MessageLeftImage","searchBarActive","sortChat","SearchList","iconClose","contactsMemo","isContact","setIsContact","ProfilePicture","ProfileMenu","overflow","ProfileLists","sortedMessages","scrollContainer","CredentialsList","notifications","setMute","Checkbox","Delete","editBar","Mute","updateContact","RightListsAndBars","chatBar","RightBar","handleIsOpen","minHeight","HomePage","asyncCurrentUser"],"mappings":"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","file":"static/js/HomePage.ab68b19e.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 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 setDate('')\r\n }, [setDate])\r\n \r\n useEffect(() => {\r\n dispatch(asyncGetAllMessages())\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 \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 {\r\n actionGetAllMessagesSuccess,\r\n actionGetAllMessagesReject,\r\n} from '../action';\r\nimport { getAllMessages } from '../../../api-data';\r\nimport { IAllMessagesState } from '../../../typescript/redux/allMessages/interfaces'\r\n\r\n\r\nconst asyncGetAllMessages= () => async (dispatch:any) => {\r\n try {\r\n const data = await getAllMessages<IAllMessagesState>()\r\n data && dispatch(actionGetAllMessagesSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetAllMessagesReject())\r\n } \r\n};\r\n\r\nexport { asyncGetAllMessages };\r\n\r\n\r\n\r\n\r\n","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\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 { updateUser } from '../../../../api-data';\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 handleSort = () => updateUser({ sort: !sort })\r\n const handleOnOpen = () => setDate('') \r\n \r\n const classes = useStyles()\r\n return (\r\n <Toolbar className={classes.toolBar}>\r\n <IconButton onClick={handleClick}>\r\n {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 { 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 chatsRef = 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 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 (chatsRef.current) {\r\n chatsRef.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 chatsRef.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 { 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 handleNightMode = () => updateUser({ nightMode: !nightMode })\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 List from '@mui/material/List';\r\nimport { makeStyles } from '@material-ui/core'\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 { 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 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 {\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 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 { removeUserAvatar } from '../../../../../../api-data';\r\n\r\nconst useStyles = makeStyles({\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\ninterface IDeleteModal {\r\n setModal: (a: boolean) => void,\r\n index: number,\r\n setIndex: any\r\n}\r\nconst DeleteModal = ({setModal,index,setIndex}:IDeleteModal) => {\r\n const classes = useStyles()\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeUserAvatar(index)\r\n setIndex(index-1)\r\n setModal(false)\r\n }\r\n }\r\n \r\n return (\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete image</h3>\r\n </div>\r\n <p style={{color: '#050505'}}>{`Are you sure you want to delete the Image?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE IMAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div>\r\n </div> \r\n )\r\n}\r\n\r\nexport default DeleteModal","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux';\r\nimport { useState } from 'react';\r\nimport { 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 } 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 { 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 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 }\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 setValue('')\r\n 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 setValue('')\r\n 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\n\r\nimport { actionIsOpen } from '../../../../../redux/control/action'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../helpers'\r\n\r\nconst Credentials = () => {\r\n const dispatch = useDispatch()\r\n const { name, lastName, avatarUrl, color, online } = useSelector(getChat)\r\n \r\n return (\r\n <ListItemButton onClick={() => dispatch(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}\r\n\r\nconst SendMessage = ({isArrow }: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 } \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: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height:'100%',\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border:'solid 2px #0084ff',\r\n cursor: 'pointer',\r\n zIndex:100\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageLeftFile {\r\n url:string,\r\n createdAt: string,\r\n type: string,\r\n _id:string\r\n}\r\n\r\nconst MessageLeftFile = ({ url,createdAt,type,_id }:IMessageLeftFile) => {\r\n const classes = useStyles();\r\n const [read, setRead] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenRead = () => !read&&setRead(true)\r\n const handleCloseRead = () => read && setRead(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n {read&&<div className={classes.overlay} id='overlay' onClick={handleCloseRead}>\r\n <FileViewer\r\n allowFullScreen={true}\r\n fileType={type}\r\n filePath={url}\r\n onError={handleCloseRead}\r\n />\r\n </div>}\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <InsertDriveFileIcon fontSize='large' style={{ color: '#99b401' }} />\r\n {!read && <span className={classes.title} onClick={handleOpenRead}>Read File</span>}\r\n <a href={url} target=\"_blank\" rel=\"noreferrer\" download>\r\n <IconButton className={classes.bntDownload} >\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n </a>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy File link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageLeftFile\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { firstLetter, slicedWord, timeStampMessage, copied } from '../../../../../../helpers'\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n maxWidth: 450,\r\n padding: \"10px\",\r\n paddingBottom:18,\r\n backgroundColor: \"#deffa9\",\r\n border: \"1px solid #d5ff91\",\r\n borderRadius: 7,\r\n },\r\n message: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n right: \"-17px\"\r\n }\r\n },\r\n messageActive: {\r\n wordBreak:'break-word',\r\n textAlign: \"left\",\r\n font: \"400 .9em 'Open Sans', sans-serif\",\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"-1px\",\r\n right: \"-17px\"\r\n }\r\n }, \r\n copyIcon: {\r\n color: '#b56ff7',\r\n cursor: 'pointer',\r\n marginRight: 7,\r\n '&:hover': {\r\n color: '#9c3bf8',\r\n },\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 6,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightText {\r\n message:string,\r\n name:string,\r\n lastName:string,\r\n createdAt: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightText = ({message,name,lastName,createdAt,_id}:IMessageRightText) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Message')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)} className={classes.wrapper}\r\n style={{backgroundColor:selected?'#ced8d7':undefined,\r\n border:selected?'#ced8d7':undefined}}>\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large'/>\r\n </CopyToClipboard>\r\n <ListItemText className={selected?classes.messageActive:classes.message} \r\n primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n primaryTypographyProps={{color: \"#42aee0\"}}\r\n secondary={message}\r\n secondaryTypographyProps={{ color: \"#0e0d0d\" }} />\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={message}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy message\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightText\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport ImageIcon from '@mui/icons-material/Image';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage, timeStampEU,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n width: 400,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent: 'center',\r\n justifyContent: 'space-between',\r\n borderRadius: 7,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n image: {\r\n borderRadius: 7,\r\n width: 300,\r\n maxHeight: 400,\r\n cursor:'pointer',\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapperOverlayImg: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n overlayDownloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n overlayTime: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }, \r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightImage {\r\n url:string,\r\n createdAt:string,\r\n color: string,\r\n message: string,\r\n messages: any,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightImage = ({url,createdAt,color,message,messages,fullType,_id}:IMessageRightImage) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenWatch = () => !watch&&setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapperOverlayImg}>\r\n <span className={classes.overlayTime}>{timeStampEU(createdAt)}</span>\r\n <DownloadForOfflineIcon className={classes.overlayDownloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <ImageIcon fontSize='large' style={{ color: '#bd9a00' }} />\r\n <img onClick={handleOpenWatch} className={classes.image} alt='message pic' src={url}\r\n style={{ backgroundColor: url ? '' : color }} width='300' height='400' />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Image link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightImage\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport AudioFileIcon from '@mui/icons-material/AudioFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport ReactAudioPlayer from 'react-audio-player';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n },\r\n player: {\r\n margin: '0 5px 0 5px',\r\n borderRadius: 7,\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightAudio {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightAudio = ({ url,createdAt,fullType,_id }:IMessageRightAudio) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <AudioFileIcon fontSize='large' style={{ color:'#0294c0'}}/> \r\n <ReactAudioPlayer className={classes.player} \r\n src={url}\r\n controls\r\n />\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Audio link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightAudio\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport VideoFileIcon from '@mui/icons-material/VideoFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,handleDownload,copied } from '../../../../../../helpers'\r\n\r\nconst { Player } = require('video-react')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 400,\r\n padding: '12px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height: 30,\r\n marginLeft:5,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n player: {\r\n backgroundColor: '#deffa9',\r\n },\r\n playerActive: {\r\n backgroundColor: '#ced8d7',\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightVideo {\r\n url:string,\r\n createdAt: string,\r\n fullType: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightVideo = ({ url,createdAt,fullType,_id }:IMessageRightVideo) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n \r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n \r\n return (\r\n <div className={classes.container}>\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <VideoFileIcon fontSize='large' style={{ color:'#03b003'}}/> \r\n <Player className={selected?classes.playerActive:classes.player} playsInline src={url}/>\r\n <IconButton onClick={() => handleDownload(url, fullType)} className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy Video link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightVideo\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { styled } from '@mui/material/styles';\r\nimport { useState } from \"react\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\r\nimport Button from '@mui/material/Button';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { removeMessageById } from \"../../../../../../api-data\";\r\nimport { timeStampMessage,copied } from '../../../../../../helpers'\r\n\r\nconst FileViewer = require('react-file-viewer')\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '4px 4px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#deffa9',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #deffa9\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #deffa9\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n },\r\n wrapperActive: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n width: 200,\r\n padding: '5px 5px 12px 5px',\r\n backgroundColor: '#ced8d7',\r\n borderRadius: 7,\r\n \"&:after\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"15px solid #ced8d7\",\r\n borderLeft: \"15px solid transparent\",\r\n borderRight: \"15px solid transparent\",\r\n bottom: \"0\",\r\n right: \"-15px\"\r\n },\r\n \"&:before\": {\r\n content: \"''\",\r\n position: \"absolute\",\r\n width: \"0\",\r\n height: \"0\",\r\n borderBottom: \"17px solid #ced8d7\",\r\n borderLeft: \"16px solid transparent\",\r\n borderRight: \"16px solid transparent\",\r\n bottom: \"0px\",\r\n right: \"-17px\"\r\n } \r\n }, \r\n bntDownload: {\r\n backgroundColor: 'inherit',\r\n color: '#54b0fc',\r\n width: 30,\r\n height:30,\r\n '&:hover': {\r\n backgroundColor: '#54b0fc',\r\n color:'#ffffff'\r\n }\r\n }, \r\n title: {\r\n margin: '0 30px 0 5px',\r\n color: '#0e0d0d',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#54b0fc',\r\n }\r\n },\r\n time: {\r\n position: \"absolute\",\r\n fontSize: \".65em\",\r\n fontWeight:600,\r\n bottom: 0,\r\n right: 6,\r\n color: '#414141',\r\n padding: 3,\r\n borderRadius: 5,\r\n },\r\n overlay: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height:'100%',\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n border:'solid 2px #0084ff',\r\n cursor: 'pointer',\r\n zIndex:100\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlayDelete: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n }, \r\n});\r\n\r\ninterface IMessageRightFile {\r\n url:string,\r\n createdAt: string,\r\n type: string,\r\n _id:string\r\n}\r\n\r\nconst MessageRightFile = ({ url,createdAt,type,_id }:IMessageRightFile) => {\r\n const classes = useStyles();\r\n const [read, setRead] = useState<boolean>(false)\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl); \r\n const handleOpenRead = () => !read&&setRead(true)\r\n const handleCloseRead = () => read && setRead(false)\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Link')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n removeMessageById(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div className={classes.container}>\r\n {read&&<div className={classes.overlay} id='overlay' onClick={handleCloseRead}>\r\n <FileViewer\r\n allowFullScreen={true}\r\n fileType={type}\r\n filePath={url}\r\n onError={handleCloseRead}\r\n />\r\n </div>}\r\n <div onContextMenu={(e) => handleContextMenu(e)}\r\n className={selected? classes.wrapperActive:classes.wrapper}>\r\n <InsertDriveFileIcon fontSize='large' style={{ color: '#99b401' }} />\r\n {!read && <span className={classes.title} onClick={handleOpenRead}>Read File</span>}\r\n <a href={url} target=\"_blank\" rel=\"noreferrer\" download>\r\n <IconButton className={classes.bntDownload}>\r\n <FileDownloadIcon fontSize='medium'/>\r\n </IconButton>\r\n </a>\r\n <div className={classes.time}>{timeStampMessage(createdAt)}</div>\r\n <StyledMenu id=\"demo-positioned-menu\" aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl} open={open} onClose={handleClose}> \r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={url}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy File link\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete message\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal &&\r\n <div onClick={handleDeleteModal} className={classes.overlayDelete} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <h3 style={{color: '#2c2c2c'}}>Delete message</h3>\r\n <p style={{ color: '#050505' }}>Are you sure you want to delete message?</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE MESSAGE\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>} \r\n </div>\r\n </div> \r\n)};\r\n\r\nexport default MessageRightFile\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n marginBottom:15\r\n },\r\n wrapper: {\r\n textAlign: 'center',\r\n padding: '1px 10px 3px 10px',\r\n backgroundColor: 'rgba(104, 105, 104, 0.8)',\r\n color:'#ffffff',\r\n borderRadius: 7,\r\n fontSize: \".85em\",\r\n fontWeight:600,\r\n },\r\n});\r\n\r\ninterface IMessageTime {\r\n message:string,\r\n}\r\n\r\nconst MessageTime = ({ message }:IMessageTime) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.container}>\r\n <span className={classes.wrapper}>{message}</span>\r\n </div> \r\n)};\r\n\r\nexport default MessageTime\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getMessages = (state: IState) => state.messages.messages;\r\nconst getState = (state: IState) => state.messages;\r\nconst getMessagesMemo = createSelector([getMessages], messages => messages);\r\n\r\nexport { getMessages,getState,getMessagesMemo };\r\n\r\n","import {\r\n actionGetMessagesSuccess,\r\n actionGetMessagesReject\r\n} from '../action';\r\nimport { getMessagesById } from '../../../api-data';\r\nimport { IMessagesState } from '../../../typescript/redux/messages/interfaces'\r\n\r\n\r\nconst asyncGetMessagesById= (id:string,cb:any) => async (dispatch:any) => {\r\n try {\r\n const data = await getMessagesById<IMessagesState>(id)\r\n data && dispatch(actionGetMessagesSuccess(data))\r\n cb&&cb()\r\n } catch (e) {\r\n dispatch(actionGetMessagesReject())\r\n } \r\n};\r\n\r\n\r\nexport { asyncGetMessagesById };\r\n\r\n\r\n\r\n\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useState, useEffect, useRef, useCallback } from \"react\";\r\nimport { useSelector,useDispatch } from \"react-redux\";\r\n\r\nimport ArrowBack from \"./ArrowBack\";\r\nimport SendMessage from \"./SendMessage\";\r\nimport MessageLeftText from './Messages/MessageLeftText'\r\nimport MessageLeftImage from './Messages/MessageLeftImage'\r\nimport MessageLeftAudio from './Messages/MessageLeftAudio'\r\nimport MessageLeftVideo from './Messages/MessageLeftVideo'\r\nimport MessageLeftFile from \"./Messages/MessageLeftFile\";\r\nimport MessageRightText from './Messages/MessageRightText'\r\nimport MessageRightImage from './Messages/MessageRightImage'\r\nimport MessageRightAudio from './Messages/MessageRightAudio'\r\nimport MessageRightVideo from './Messages/MessageRightVideo'\r\nimport MessageRightFile from \"./Messages/MessageRightFile\";\r\nimport MessageTime from \"./Messages/MessageTime\";\r\nimport AlertInfo from \"../../../reusableComponents/AlertInfo\";\r\nimport { getMessagesMemo } from '../../../../redux/messages/selector'\r\nimport { getNumber } from '../../../../redux/authorization/selector'\r\nimport { getChat } from '../../../../redux/chat/selector'\r\nimport { getScroll } from '../../../../redux/control/selector'\r\nimport { actionScroll } from '../../../../redux/control/action'\r\nimport { asyncGetMessagesById } from '../../../../redux/messages/operations'\r\nimport { asyncGetChatById } from \"../../../../redux/chat/operations\";\r\nimport { seenChat } from \"../../../../api-data\";\r\nimport { timeStampFilter,prodBaseURL } from \"../../../../helpers\";\r\nconst debounce = require('lodash.debounce');\r\n\r\nconst useStyles = makeStyles({ \r\n container: {\r\n height: '93vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n alignContent:\"center\",\r\n flexDirection: \"column\",\r\n position: \"relative\",\r\n },\r\n messagesScroll: {\r\n paddingTop: 30,\r\n overflowY: \"scroll\",\r\n maxHeight: '83vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n messagesEmpty: {\r\n overflowY: \"hidden\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n paddingTop: 30,\r\n }, \r\n messagesBody: {\r\n width: \"60%\",\r\n }, \r\n});\r\n\r\nconst ChatBar = () => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch()\r\n const messages = useSelector(getMessagesMemo)\r\n const userNumber = useSelector(getNumber)\r\n const { companionId,total,seen,mute } = useSelector(getChat)\r\n const scroll = useSelector(getScroll)\r\n const [isArrow, setIsArrow] = useState<boolean>(false)\r\n const [isNew, setIsNew] = useState<{new:number,mute:boolean}>({new:0,mute:false})\r\n const divRef = useRef<any | null>(null)\r\n let time:any\r\n const handleScrollTo = () => {\r\n divRef.current&&divRef.current.scrollTo({\r\n top: divRef.current.scrollHeight,\r\n behavior: 'smooth'\r\n })\r\n }\r\n\r\n const handleScroll = useCallback(({ target:{scrollHeight,scrollTop,clientHeight}}: any) => {\r\n const different = scrollHeight - Math.floor(scrollTop)\r\n const reached = different - clientHeight\r\n if (total !== seen&&reached < 10) seenChat(companionId)\r\n setIsArrow(different === clientHeight ? false : true)\r\n }, [total,seen, companionId])\r\n \r\n const debouncedHandleScroll = debounce(handleScroll, 300)\r\n \r\n useEffect(() => {\r\n if (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(asyncGetChatById(companionId))\r\n dispatch(asyncGetMessagesById(companionId, null))\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 setIsNew({ new:total-seen,mute})\r\n }, [total,seen,mute]); \r\n\r\n useEffect(() => {\r\n if (divRef.current) {\r\n const { scrollHeight, clientHeight } = divRef.current\r\n if(total !== seen&&scrollHeight === clientHeight) seenChat(companionId)\r\n }\r\n }, [total,seen,companionId]);\r\n\r\n return (\r\n <div className={classes.container} >\r\n <ArrowBack isArrow={isArrow} isNew={isNew} handleScrollTo={handleScrollTo}/>\r\n <div ref={divRef} onScroll={debouncedHandleScroll}\r\n className={messages.length > 0 ? classes.messagesScroll : classes.messagesEmpty}>\r\n <div className={classes.messagesBody}>\r\n {messages.length > 0 ? messages.map(({ message, name, lastName, color,\r\n createdAt,number, type,fullType,_id }) => {\r\n let isTime\r\n if (!time) {\r\n isTime = true\r\n time = createdAt\r\n } else if (timeStampFilter(time) !== timeStampFilter(createdAt)) {\r\n time = createdAt\r\n isTime = true\r\n }\r\n const url = `${prodBaseURL}/${message}`\r\n if (number !== userNumber) {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftText\r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n } else {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightText \r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n }\r\n }) : <AlertInfo name='You do not have messages yet!' />}\r\n </div>\r\n </div> \r\n <SendMessage isArrow={isArrow} /> \r\n </div>\r\n );\r\n}\r\n\r\nexport default ChatBar","import { 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 { sortChat } from '../../../../../../api-data';\r\nimport StaticDatePicker from \"./StaticDatePicker\";\r\n\r\nconst SearchBar = styled('div')(({ theme }:any) => ({\r\n position: 'relative',\r\n borderRadius: '20px',\r\n backgroundColor: '#f1f0f0', \r\n width: '100%',\r\n margin:'0 5% 0 5%'\r\n}));\r\n\r\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\r\n color: 'inherit',\r\n '& .MuiInputBase-input': { \r\n fontWeight: 500,\r\n borderRadius: '20px',\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height:'7vh'\r\n },\r\n searchBarActive: {\r\n outline: '2px solid #2184f7',\r\n color: '#2184f7',\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface ISearch {\r\n handleSearch: (e: React.ChangeEvent<HTMLInputElement>) => void,\r\n value: string,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n}\r\n\r\nconst Search = ({handleSearch,value,setDate,date}:ISearch) => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const { sort, companionId } = useSelector(getChat)\r\n const messages = useSelector(getMessages)\r\n const disabled = messages.length > 0 ? false : true\r\n const handleOnOpen = () => setDate('')\r\n const handleSort = () => sortChat(companionId)\r\n\r\n return (\r\n <Toolbar className={classes.toolBar} >\r\n <IconButton onClick={() => dispatch(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 { asyncAddContact } from '../../../../../../redux/contacts/operations';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n height:'7vh'\r\n },\r\n iconClose: {\r\n '&:hover': {\r\n transform: 'rotate(180deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n }, \r\n})\r\n\r\nconst ToolBar = () => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const contactsMemo = useSelector(getContactsMemo)\r\n const { number } = useSelector(getChat)\r\n const [isContact, setIsContact] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n const contact = contactsMemo.find((el) => el.number === number)\r\n if (contact) {\r\n setIsContact(true)\r\n } else {\r\n setIsContact(false)\r\n } \r\n }, [contactsMemo,number])\r\n \r\n return (\r\n <Stack className={classes.container} direction=\"row\">\r\n <IconButton onClick={() => dispatch(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 } from 'react-redux';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport NotificationsIcon from '@mui/icons-material/Notifications';\r\nimport SortIcon from '@mui/icons-material/Sort';\r\nimport Switch from '@mui/material/Switch';\r\nimport Divider from '@mui/material/Divider';\r\nimport AlternateEmailIcon from '@mui/icons-material/AlternateEmail';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { muteChat,sortChat } from '../../../../../../api-data'\r\nimport { copied,firstLetter,slicedWord } from '../../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n listIcon: {\r\n marginRight: 15,\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\nconst ProfileMenu = () => {\r\n const classes = useStyles()\r\n const { number, mute,sort,companionId,originalName,originalLastName } = useSelector(getChat)\r\n const handleMute = () => muteChat(companionId)\r\n const handleSort = () => sortChat(companionId)\r\n \r\n const credentials = `${firstLetter(originalName)}${slicedWord(originalName, 15, 1)}\r\n ${firstLetter(originalLastName)}${slicedWord(originalLastName, 15, 1)}`\r\n 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} checked={!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\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 setName(Name)\r\n setLastName(LastName)\r\n setMute(!Mute)\r\n }, [Name, LastName, Mute]) \r\n\r\n return (\r\n <div className={classes.editBar}>\r\n {openBtn&&<SubmitBtn handleSubmit={handleSubmit}/>}\r\n <ToolBar />\r\n <EditList chat={chat} name={name} setName={setName} lastName={lastName}\r\n setLastName={setLastName} mute={mute} setMute={setMute}\r\n openBtn={openBtn} setOpenBtn={setOpenBtn} />\r\n <Delete isContact={isContact} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default EditBar","import { 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\nimport { useDispatch } from 'react-redux'\r\nimport { useEffect } from 'react'\r\nimport { asyncGetContacts } from '../../redux/contacts/operations'\r\nimport { asyncGetChats } from '../../redux/chats/operations'\r\nimport { asyncCurrentUser } from '../../redux/authorization/operations'\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 const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n dispatch(asyncGetChats())\r\n dispatch(asyncGetContacts())\r\n dispatch(asyncCurrentUser())\r\n const handleReset = () => {\r\n dispatch(asyncGetChats())\r\n dispatch(asyncGetContacts())\r\n dispatch(asyncCurrentUser())\r\n }\r\n const idInterval = setInterval(handleReset, 3000);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\r\n \r\nreturn (\r\n <Grid className={classes.container} container spacing={0} >\r\n <LeftBar/>\r\n <RightBar/>\r\n </Grid>\r\n )\r\n}\r\n\r\nexport default HomePage"],"sourceRoot":""}