HomePage.64718e77.chunk.js.map 412 KB

1
  1. {"version":3,"sources":["components/HomePage/LeftBar/SmallMenuBar/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/RecentItem/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/ChatItem/index.tsx","components/reusableComponents/AlertInfo/index.tsx","components/HomePage/LeftBar/SearchLists/ChatListRecent/index.tsx","components/HomePage/LeftBar/SearchLists/FilesList/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/MediaListItem/index.tsx","components/HomePage/LeftBar/SearchLists/MediaList/index.tsx","components/HomePage/LeftBar/SearchLists/TextList/index.tsx","components/HomePage/LeftBar/SearchLists/AudioList/index.tsx","components/HomePage/LeftBar/SearchLists/VideoList/index.tsx","redux/chats/operations/index.ts","redux/chats/selector/index.ts","redux/allMessages/selector/index.ts","redux/control/selector/index.ts","redux/chat/operations/index.ts","components/HomePage/LeftBar/SearchLists/index.tsx","redux/allMessages/operations/index.ts","components/HomePage/LeftBar/SearchBar/StaticDatePicker/index.tsx","components/HomePage/LeftBar/SearchBar/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/DeleteModal/index.tsx","components/HomePage/LeftBar/ChatsList/ChatItem/index.tsx","components/HomePage/LeftBar/ChatsList/index.tsx","components/HomePage/LeftBar/MenuBar/index.tsx","components/HomePage/LeftBar/ContactsList/ContactItem/index.tsx","redux/contacts/selector/index.ts","redux/contacts/operations/index.ts","components/HomePage/LeftBar/ContactsList/index.tsx","components/HomePage/LeftBar/AddContact/ToolBar/index.tsx","components/HomePage/LeftBar/AddContact/index.tsx","components/HomePage/LeftBar/SettingsBar/ToolBar/MenuList/index.tsx","components/HomePage/LeftBar/SettingsBar/ToolBar/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsPicture/DeleteModal/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsPicture/index.tsx","components/HomePage/LeftBar/SettingsBar/SettingsMenu/index.tsx","components/HomePage/LeftBar/SettingsBar/index.tsx","components/HomePage/LeftBar/EditBar/ToolBar/index.tsx","components/HomePage/LeftBar/EditBar/EditList/index.tsx","components/HomePage/LeftBar/EditBar/SubmitBtn/index.tsx","components/HomePage/LeftBar/EditBar/index.tsx","components/HomePage/LeftBar/index.tsx","components/HomePage/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","messagesMemo","sort","setDisabled","filtered","filter","type","filteredMessages","handleSort","useEffect","message","fullType","ListItem","ListItemAvatar","handleDownload","Divider","overlay","left","boxSizing","wrapper","downloadIcon","content","img","scale","time","MediaListItem","updatedAt","watch","setWatch","url","target","ImageListItem","srcSet","loading","MediaList","ImageList","cols","rowHeight","copyIcon","TextList","style","wordBreak","secondaryTypographyProps","onCopy","copied","AudioList","VideoList","asyncGetChats","dispatch","a","getChats","data","actionGetChatsSuccess","actionGetChatsReject","getStateMemo","createSelector","state","chats","getAllMessagesMemo","allMessages","messages","getRightIsOpen","control","rightIsOpen","getScrollChat","scrollChat","getState","asyncStartChatById","startChat","actionSelectChat","borderBottom","item","icon","lineHeight","fontWeight","underline","SearchLists","setValue","setDate","useDispatch","useSelector","total","leftIsOpen","isActive","setIsActive","handleIsActive","newValue","actionLeftIsOpen","handleReset","getAllMessages","actionGetAllMessagesSuccess","actionGetAllMessagesReject","idInterval","setInterval","refreshAppTime","clearInterval","sortByRecent","el","credentials","toLowerCase","includes","timeStampFilter","actionRightIsOpen","StaticDatePicker","disabled","changeDate","handleOnOpen","DatePicker","inputVariant","orientation","openTo","autoOk","Date","onOpen","onChange","Search","margin","SearchIconWrapper","pointerEvents","StyledInputBase","InputBase","paddingLeft","transition","transitions","create","toolBar","activeSearch","outline","iconBtn","transform","iconArrow","label","inputProps","SearchBar","handleClick","handleOpenIsSearch","handleSearch","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","watched","typing","online","muteChat","onContextMenu","preventDefault","handleContextMenu","overlap","list","ChatsList","chatsRef","useRef","getChatMemo","stopPropagation","actionScrollChat","handleNotification","useCallback","sortedChats","find","actionRemoveChat","current","forEach","i","oldDifferent","playNotificationWithoutPermission","notification","number","visibility","listItemLast","listIcon","listIconText","MenuBar","nightMode","asyncCurrentUser","Paper","textDecoration","href","ContactItem","contact","_id","removeContact","contacts","getContactsMemo","asyncGetContacts","getContacts","actionGetContactsSuccess","actionGetContactsReject","asyncAddContact","addContact","ContactsList","controlSelector","arr","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","containerActive","textarea","resize","attachIcon","borderTop","filesMenu","emoji","iconCancel","avatarCamera","avatarRight","pauseLeft","pauseRight","avatarPause","animationIterationCount","ringContainerLeft","ringContainerRight","circle","ringRing","SendMessage","isOpenMenu","isOpenEmoji","setIsOpenEmoji","isRecording","setIsRecording","isFilming","setIsFilming","useReactMediaRecorder","audio","status","startRecording","stopRecording","mediaBlobUrl","clearBlobUrl","video","_status","_startRecording","_stopRecording","_mediaBlobUrl","_clearBlobUrl","clearMessage","sentMessage","sentMessageById","XMLHttpRequest","responseType","onload","blob","response","File","sentAudioMessageById","send","sentVideoMessageById","sentImgMessageById","sentFileMessageById","playNotification","handleFocusTextarea","typingChat","handleBlurTextarea","handleRecording","handleFilming","onEmojiClick","_e","emojiObject","prevValue","onBlur","rows","font","borderLeft","borderRight","messageActive","MessageLeftText","primaryTypographyProps","timeStampMessage","removeMessageById","wrapperActive","image","bntDownload","wrapperOverlayImg","overlayDownloadIcon","overlayTime","overlayDelete","MessagesLeftImage","player","MessageLeftAudio","controls","Player","require","playerActive","MessageLeftVideo","playsInline","FileViewer","MessageLeftFile","read","setRead","handleCloseRead","allowFullScreen","fileType","filePath","onError","rel","download","MessageRightText","MessageRightImage","MessageRightAudio","MessageRightVideo","MessageRightFile","MessageTime","getMessages","getMessagesMemo","asyncGetMessagesById","cb","getMessagesById","actionGetMessagesSuccess","actionGetMessagesReject","debounce","messagesScroll","messagesEmpty","messagesBody","ChatBar","userNumber","setIsArrow","setIsNew","divRef","scrollTo","scrollHeight","behavior","handleScroll","scrollTop","clientHeight","different","Math","floor","seenChat","debouncedHandleScroll","getChatById","actionGetChatById","ref","onScroll","isTime","MessageLeftImage","searchBarActive","sortChat","SearchList","iconClose","contactsMemo","isContact","setIsContact","ProfilePicture","ProfileMenu","overflow","ProfileLists","filterBy","scrollContainer","CredentialsList","notifications","setMute","Checkbox","Delete","editBar","Mute","updateContact","RightListsAndBars","chatBar","RightBar","handleRightIsOpen","minHeight","HomePage"],"mappings":"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","file":"static/js/HomePage.64718e77.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\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IFilesList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst FilesList = ({ messagesMemo,value,date,sort,setDisabled }: IFilesList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type !== 'text')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <FolderIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>}\r\n {(value || date)&& filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Files by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Files yet!'/>}\r\n </>\r\n )\r\n}\r\n\r\nexport default FilesList","\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport ImageListItem from '@mui/material/ImageListItem';\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { handleDownload,timeStampEU,prodBaseURL } from '../../../../../../helpers'\r\n\r\nconst useStyles = makeStyles({ \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapper: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n downloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n img: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n scale:0.98\r\n }\r\n },\r\n time: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }\r\n});\r\nconst MediaListItem = ({ message,fullType,updatedAt }: { message: string,fullType:string,updatedAt:string }) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const handleOpenWatch = () => !watch && setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n \r\n const url = `${prodBaseURL}/${message}`\r\n \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapper}>\r\n <span className={classes.time}>{timeStampEU(updatedAt)}</span>\r\n <DownloadForOfflineIcon className={classes.downloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <ImageListItem>\r\n <img onClick={handleOpenWatch} className={classes.img}\r\n src={`${url}?w=164&h=164&fit=crop&auto=format`}\r\n srcSet={`${url}?w=164&h=164&fit=crop&auto=format&dpr=2 2x`}\r\n alt='imageItem' loading=\"lazy\" />\r\n </ImageListItem>\r\n \r\n )\r\n}\r\n\r\nexport default MediaListItem","import ImageList from '@mui/material/ImageList';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport MediaListItem from './MediaListItem';\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { filteredMessages,handleSort } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n})\r\n\r\ninterface IMediaList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst MediaList = ({ messagesMemo,value,date,sort,setDisabled }: IMediaList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'image')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort), date, value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <ImageList className={classes.container} cols={3} rowHeight={164}>\r\n {filteredAndSorted.map(({message,createdAt,fullType,updatedAt}) => \r\n <MediaListItem key={createdAt} message={message} fullType={fullType} updatedAt={updatedAt}/>)}\r\n </ImageList>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Media by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Media yet!'/>}\r\n </>\r\n )\r\n}\r\n\r\nexport default MediaList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Divider from '@mui/material/Divider';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,firstLetter,copied,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n copyIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n }, \r\n})\r\n\r\ninterface ITextList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst TextList = ({ messagesMemo,value,date,sort,setDisabled }: ITextList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'text')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, lastName, name, color, avatarUrl }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText style={{ wordBreak: 'break-word',marginRight:2 }} primary={message}\r\n secondary={timeStampEU(createdAt)} secondaryTypographyProps={{color: '#020202',paddingTop:0.5}}\r\n />\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large' />\r\n </CopyToClipboard> \r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Text by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Text yet!'/>} \r\n </>\r\n ) \r\n}\r\n\r\nexport default TextList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport LibraryMusicIcon from '@mui/icons-material/LibraryMusic';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IAudioList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst AudioList = ({ messagesMemo,value,date,sort,setDisabled }: IAudioList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'audio')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort), date,value)\r\n \r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n \r\n return(\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <LibraryMusicIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>}\r\n {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Audio by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Audio yet!'/>}\r\n </>)\r\n}\r\nexport default AudioList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport VideoLibraryIcon from '@mui/icons-material/VideoLibrary';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,filteredMessages,handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TAllMessages } from '../../../../../typescript/redux/allMessages/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n maxHeight: '86vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n }, \r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\ninterface IVideoList {\r\n messagesMemo: TAllMessages,\r\n value: string,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n sort: boolean\r\n}\r\n\r\nconst VideoList = ({ messagesMemo,value,date,sort,setDisabled }: IVideoList) => {\r\n const classes = useStyles()\r\n const filtered = messagesMemo.filter(({type}) => type === 'video')\r\n const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)\r\n useEffect(() => {\r\n setDisabled(filtered.length > 0?false:true)\r\n }, [filtered, setDisabled])\r\n\r\n return (\r\n <>\r\n {filteredAndSorted.length > 0 &&\r\n <List className={classes.container}>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem key={createdAt} alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <VideoLibraryIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>}\r\n {(value || date)&& filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Video by request: ${value}`} />}\r\n {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Video yet!'/>}\r\n </>\r\n ) \r\n}\r\n\r\nexport default VideoList","import {\r\n actionGetChatsSuccess,\r\n actionGetChatsReject,\r\n} from '../action';\r\nimport { getChats} from '../../../api-data';\r\nimport { IChatsRes } from '../../../typescript/redux/chats/interfaces'\r\n\r\nconst asyncGetChats = () => async (dispatch:any) => {\r\n try {\r\n const data = await getChats<IChatsRes>()\r\n data&&dispatch(actionGetChatsSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetChatsReject())\r\n }\r\n};\r\n\r\nexport { asyncGetChats };\r\n\r\n\r\n\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getTotal = (state: IState) => state.chats.total;\r\nconst getLimit = (state:IState) => state.chats.limit;\r\nconst getPage = (state: IState) => state.chats.page;\r\nconst getChats = (state: IState) => state.chats.chats;\r\nconst getState = (state: IState) => state.chats;\r\nconst getStateMemo = createSelector([getState], state => state);\r\n\r\nexport { getTotal,getLimit,getPage,getChats,getState,getStateMemo };\r\n","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getAllMessages = (state: IState) => state.allMessages.messages;\r\nconst getState = (state: IState) => state.allMessages;\r\nconst getAllMessagesMemo = createSelector([getAllMessages], messages => messages);\r\n\r\nexport { getAllMessages,getState,getAllMessagesMemo };\r\n\r\n","import { IState } from '../../../typescript/redux/interfaces'\n\nconst getLeftIsOpen = (state: IState) => state.control.leftIsOpen;\nconst getRightIsOpen = (state: IState) => state.control.rightIsOpen;\nconst getScrollChat = (state: IState) => state.control.scrollChat;\nconst getState = (state:IState) => state.control;\n\nexport { getLeftIsOpen,getRightIsOpen,getScrollChat,getState };\n","import {\r\n actionSelectChat,\r\n actionGetChatById\r\n} from '../action';\r\nimport { startChat,getChatById } from '../../../api-data';\r\n\r\nimport { TChat } from '../../../typescript/redux/chat/types'\r\n\r\nconst asyncStartChatById = (id:string) => async (dispatch:any) => {\r\n try {\r\n const data = await startChat<TChat>(id)\r\n data&&dispatch(actionSelectChat(data))\r\n } catch(e) {}\r\n};\r\n\r\nconst asyncGetChatById = (id:string) => async (dispatch:any) => {\r\n try {\r\n const data = await getChatById<TChat>(id)\r\n data&&dispatch(actionGetChatById(data))\r\n } catch(e) {}\r\n};\r\n\r\n\r\n\r\nexport { asyncStartChatById,asyncGetChatById };\r\n\r\n\r\n\r\n\r\n","import { useState, useEffect } from 'react';\r\nimport { useDispatch,useSelector } from 'react-redux';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport ChatListRecent from './ChatListRecent'\r\nimport FilesList from './FilesList';\r\nimport MediaList from './MediaList';\r\nimport TextList from './TextList';\r\nimport AudioList from './AudioList'\r\nimport VideoList from './VideoList';\r\nimport { asyncGetAllMessages } from '../../../../redux/allMessages/operations';\r\nimport { asyncGetChats } from '../../../../redux/chats/operations';\r\nimport { getStateMemo } from '../../../../redux/chats/selector';\r\nimport { getAllMessagesMemo } from '../../../../redux/allMessages/selector';\r\nimport { getState } from '../../../../redux/control/selector';\r\nimport { sortByRecent,timeStampFilter,refreshAppTime } from '../../../../helpers';\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations';\r\nimport { actionLeftIsOpen,actionRightIsOpen } from '../../../../redux/control/action';\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\n\r\n\r\nconst useStyles = makeStyles({\r\ncontainer: {\r\n height:'7vh',\r\n borderBottom: 'solid 2px #dddddd',\r\n display: 'flex',\r\n justifyContent: 'space-around',\r\n alignContent: \"center\",\r\n alignItems:\"center\",\r\n flexWrap: 'nowrap',\r\n color:'rgba(0, 0, 0, 0.6)'\r\n},\r\nitem: {\r\n height:'100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignContent: \"center\",\r\n alignItems: \"center\",\r\n cursor:'pointer',\r\n},\r\nicon: {\r\n fontSize: '1rem',\r\n lineHeight: 0,\r\n marginBottom: 0,\r\n fontWeight:600\r\n },\r\nunderline: {\r\n fontSize: '2.2rem',\r\n lineHeight: 0,\r\n },\r\n})\r\n\r\ninterface ISearchLists {\r\n value: string,\r\n setValue: React.Dispatch<string>\r\n sort: boolean,\r\n date: any,\r\n setDate: React.Dispatch<any>,\r\n setDisabled: React.Dispatch<boolean>,\r\n}\r\n\r\nconst SearchLists = ({ value,setValue,sort,date,setDate,setDisabled }: ISearchLists) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { chats,total } = useSelector(getStateMemo)\r\n const messagesMemo = useSelector(getAllMessagesMemo)\r\n const {leftIsOpen,rightIsOpen} = useSelector(getState)\r\n const [isActive, setIsActive] = useState<number>(0)\r\n const handleIsActive = (newValue: number): void => {\r\n setIsActive(newValue)\r\n value && setValue('')\r\n date&&setDate('')\r\n } \r\n\r\n const handleListItemClick = (companionId: string) => {\r\n rightIsOpen&&dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n const filteredChats = (arr: TChats) => arr.filter((el) => {\r\n const credentials = el.name + ' ' + el.lastName\r\n if (!date) {\r\n return credentials.toLowerCase().includes(value.toLowerCase())\r\n } else if (credentials.toLowerCase().includes(value.toLowerCase())\r\n &&timeStampFilter(date) === timeStampFilter(el.lastMessageCreatedAt ?\r\n el.lastMessageCreatedAt : el.createdAt)) {\r\n return el\r\n }\r\n })\r\n \r\n useEffect(() => {\r\n setDate('')\r\n }, [setDate])\r\n \r\n useEffect(() => {\r\n if (isActive === 0) {\r\n dispatch(actionLeftIsOpen('chats'))\r\n } else {\r\n dispatch(actionLeftIsOpen('allMessages'))\r\n }\r\n }, [isActive,dispatch]) \r\n \r\n useEffect(() => {\r\n if (isActive === 0) setDisabled(total === '0'?true:false)\r\n }, [isActive,total,setDisabled])\r\n \r\n useEffect(() => {\r\n const handleReset = () => {\r\n if (leftIsOpen === 'chats') {\r\n dispatch(asyncGetChats())\r\n } else if (leftIsOpen === 'allMessages') {\r\n dispatch(asyncGetAllMessages())\r\n }\r\n }\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen,dispatch]);\r\n \r\n \r\n const filteredAndSorted = filteredChats(sortByRecent(chats,sort))\r\n return (\r\n <>\r\n <div className={classes.container}>\r\n <div className={classes.item} style={{color:isActive === 0?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(0)}>\r\n <span className={classes.icon}>Chats</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 1?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(1)}>\r\n <span className={classes.icon}>Files</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 2?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(2)}>\r\n <span className={classes.icon}>Media</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 3?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(3)}>\r\n <span className={classes.icon}>Text</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 4?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(4)}>\r\n <span className={classes.icon}>Audio</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 5?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(5)}>\r\n <span className={classes.icon}>Video</span>\r\n <span className={classes.underline}>___</span>\r\n </div> \r\n </div>\r\n {isActive === 0 && <ChatListRecent value={value} date={date}\r\n filteredAndSorted={filteredAndSorted} handleListItemClick={handleListItemClick} />}\r\n {isActive === 1 && <FilesList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 2 && <MediaList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 3 && <TextList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 4 && <AudioList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n {isActive === 5 && <VideoList messagesMemo={messagesMemo} value={value} date={date} sort={sort} setDisabled={setDisabled}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default SearchLists","import {\r\n actionGetAllMessagesSuccess,\r\n actionGetAllMessagesReject,\r\n} from '../action';\r\nimport { getAllMessages } from '../../../api-data';\r\nimport { IAllMessagesState } from '../../../typescript/redux/allMessages/interfaces'\r\n\r\n\r\nconst asyncGetAllMessages= () => async (dispatch:any) => {\r\n try {\r\n const data = await getAllMessages<IAllMessagesState>()\r\n data && dispatch(actionGetAllMessagesSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetAllMessagesReject())\r\n } \r\n};\r\n\r\nexport { asyncGetAllMessages };\r\n\r\n\r\n\r\n\r\n","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n },\r\n})\r\n\r\ninterface IStaticDatePicker {\r\n date: Date,\r\n disabled: boolean,\r\n changeDate: React.Dispatch<React.SetStateAction<any>>,\r\n handleOnOpen: () => void,\r\n}\r\n\r\nconst StaticDatePicker = ({ date,disabled, changeDate,handleOnOpen }: IStaticDatePicker) => {\r\n const classes = useStyles()\r\nreturn (\r\n <DatePicker\r\n className={classes.container}\r\n inputVariant='outlined'\r\n orientation=\"portrait\"\r\n variant=\"dialog\"\r\n openTo=\"date\"\r\n autoOk\r\n disabled={disabled}\r\n value={date?date:new Date()}\r\n onOpen={handleOnOpen}\r\n onChange={changeDate}\r\n />\r\n );\r\n};\r\n\r\nexport default StaticDatePicker;","import Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton'\r\nimport MenuIcon from '@mui/icons-material/Menu';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport InputBase from '@mui/material/InputBase';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport Switch from '@mui/material/Switch';\r\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\r\nimport { styled } from '@mui/material/styles';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { updateUser } from '../../../../api-data';\r\nimport StaticDatePicker from \"./StaticDatePicker\";\r\n\r\n\r\nconst Search = styled('div')(({ theme }:any) => ({\r\n position: 'relative',\r\n borderRadius: '20px',\r\n backgroundColor: '#f1f0f0',\r\n width: '100%',\r\n margin:'0 5% 0 5%'\r\n}));\r\n\r\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\r\n color: 'inherit',\r\n '& .MuiInputBase-input': { \r\n fontWeight: 500,\r\n borderRadius: '20px',\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height: '7vh',\r\n },\r\n activeSearch: {\r\n outline: '2px solid #2184f7',\r\n color: '#2184f7'\r\n },\r\n iconBtn: {\r\n '&:hover': {\r\n transform: 'rotate(180deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface ISearchBar {\r\n handleClick:() => void,\r\n handleOpenIsSearch:() => void,\r\n handleSearch:(e: React.ChangeEvent<HTMLInputElement>) => void,\r\n isSearch: boolean,\r\n value: string,\r\n sort: boolean,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n disabled: boolean\r\n}\r\n\r\nconst SearchBar = ({ handleClick, handleOpenIsSearch, handleSearch, isSearch,\r\n value, sort,setDate,date,disabled }: ISearchBar) => {\r\n const handleSort = () => updateUser({ sort: !sort })\r\n const handleOnOpen = () => setDate('') \r\n \r\n const classes = useStyles()\r\n return (\r\n <Toolbar className={classes.toolBar}>\r\n <IconButton onClick={handleClick}>\r\n {isSearch ? <ArrowBackIcon className={classes.iconArrow} /> : <MenuIcon className={classes.iconBtn} />}\r\n </IconButton>\r\n <div onFocus={handleOpenIsSearch} style={{display:'flex',width:'100%'}}>\r\n <Search className={value?classes.activeSearch:undefined}>\r\n <SearchIconWrapper>\r\n <SearchIcon />\r\n </SearchIconWrapper>\r\n <StyledInputBase\r\n value={value}\r\n onChange={handleSearch}\r\n placeholder={disabled?'Disabled':'Search'}\r\n inputProps={{ 'aria-label': 'search' }}\r\n disabled={disabled}/>\r\n </Search>\r\n <IconButton aria-label=\"delete\" size=\"medium\" disabled={disabled}>\r\n <StaticDatePicker date={date} disabled={disabled} \r\n changeDate={setDate} handleOnOpen={handleOnOpen} /> \r\n <CalendarTodayIcon fontSize='medium'\r\n style={{color:date?'#2184f7':'#b1aeae'}}/>\r\n </IconButton>\r\n <Switch onClick={handleSort} checked={sort} {...label} disabled={disabled} />\r\n </div>\r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default SearchBar","import Button from '@mui/material/Button';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { makeStyles } from '@material-ui/core'\r\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 { useEffect,useRef,useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport AlertInfo from '../../../reusableComponents/AlertInfo'\r\nimport ChatItem from './ChatItem';\r\nimport { notification,playNotificationWithoutPermission,sortByRecent } from '../../../../helpers'\r\nimport { getStateMemo } from '../../../../redux/chats/selector'\r\nimport { getChatMemo } from '../../../../redux/chat/selector'\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations'\r\nimport { asyncGetChats } from '../../../../redux/chats/operations';\r\nimport { actionRemoveChat } from '../../../../redux/chat/action'\r\nimport { actionLeftIsOpen,actionRightIsOpen,actionScrollChat } from '../../../../redux/control/action'\r\nimport { getState } from '../../../../redux/control/selector';\r\nimport { TChats } from '../../../../typescript/redux/chats/types';\r\nimport { prodBaseURL,refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n width: '100%',\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n})\r\n\r\ninterface IChatsList {\r\n sort: boolean,\r\n}\r\n\r\nconst ChatsList = ({sort}:IChatsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const chatsRef = useRef<any>(null)\r\n const { total, chats } = useSelector(getStateMemo)\r\n const chat = useSelector(getChatMemo)\r\n const { leftIsOpen,rightIsOpen} = useSelector(getState)\r\n const handleListItemClick = (companionId: string) => {\r\n rightIsOpen&&dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const handleNewMsgs = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, companionId: string) => {\r\n e.stopPropagation()\r\n dispatch(actionScrollChat(true))\r\n rightIsOpen&&dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const handleNotification= useCallback((companionId: string) => {\r\n dispatch(asyncStartChatById(companionId))\r\n dispatch(actionScrollChat(true))\r\n }, [dispatch])\r\n\r\n const sortedChats: TChats = sortByRecent(chats, sort)\r\n \r\n useEffect(() => {\r\n dispatch(actionLeftIsOpen('chats'))\r\n }, [dispatch])\r\n \r\n useEffect(() => {\r\n const handleReset = () => leftIsOpen === 'chats' && dispatch(asyncGetChats())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen,dispatch]); \r\n\r\n useEffect(() => {\r\n if (chat.companionId&&!sortedChats.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 = sortedChats[i]\r\n if(chat === undefined) return\r\n const newDifferent = chat.total - chat.seen\r\n if (newDifferent > oldDifferent && !chat.mute) {\r\n playNotificationWithoutPermission(`${prodBaseURL}/receive.mp3`)\r\n notification(chat.name,() => handleNotification(chat.companionId))\r\n } \r\n })\r\n }\r\n chatsRef.current = sortedChats\r\n }, [chat,sortedChats,handleNotification,dispatch])\r\n\r\n return total !== '0' ? (\r\n <List className={classes.list} component=\"nav\"\r\n aria-label=\"main mailbox folders\">\r\n {sortedChats.map((el) => <ChatItem key={el.number} chat={el} \r\n handleListItemClick={handleListItemClick} handleNewMsgs={handleNewMsgs} />)}\r\n </List>\r\n ):<AlertInfo name='You do not have Chats yet!' />;\r\n}\r\n\r\nexport default ChatsList","import Divider from '@mui/material/Divider';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PermContactCalendarIcon from '@mui/icons-material/PermContactCalendar';\r\nimport SettingsIcon from '@mui/icons-material/Settings';\r\nimport Brightness3Icon from '@mui/icons-material/Brightness3'; \r\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\r\nimport BugReportIcon from '@mui/icons-material/BugReport';\r\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\r\nimport Switch from '@mui/material/Switch';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { updateUser } from '../../../../api-data';\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex:100\r\n },\r\n container: {\r\n position: 'absolute',\r\n width: 270,\r\n maxWidth: '100%',\r\n top: 60,\r\n left: 15,\r\n zIndex: 10,\r\n visibility: 'visible',\r\n },\r\n list: {\r\n background:'#fdfdfd'\r\n },\r\n listItemLast: {\r\n textAlign: 'center',\r\n },\r\n listIcon: {\r\n marginRight: 15,\r\n },\r\n listIconText: {\r\n marginRight: 15,\r\n paddingLeft:6\r\n }\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface IContactsList {\r\n handleSelectedMenu: (i: number) => void,\r\n nightMode: boolean,\r\n}\r\n\r\nconst MenuBar = ({handleSelectedMenu,nightMode}:IContactsList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const handleNightMode = () => updateUser({ nightMode: !nightMode })\r\n\r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]); \r\n\r\n return (\r\n <div className={classes.overlay} id='overlay'>\r\n <Paper className={classes.container}>\r\n <MenuList className={classes.list}>\r\n <MenuItem onClick={() => 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 <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 { actionRightIsOpen } from '../../../../../redux/control/action';\r\nimport { TContact } from '../../../../../typescript/redux/contacts/types';\r\nimport { TRightIsOpen } from '../../../../../typescript/redux/control/types';\r\nimport { firstLetter,slicedWord,timeStampEU,copied,prodBaseURL } from '../../../../../helpers';\r\n\r\nconst StyledMenu = styled((props:any) => (\r\n <Menu\r\n elevation={0}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'right',\r\n }}\r\n {...props}\r\n />\r\n))(({ theme }:any) => ({\r\n '& .MuiPaper-root': {\r\n borderRadius: 10,\r\n marginTop: theme.spacing(0),\r\n minWidth: 220,\r\n color:\r\n theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[500],\r\n boxShadow:\r\n 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px',\r\n '& .MuiMenu-list': {\r\n padding: '8px 8px',\r\n },\r\n '& .MuiMenuItem-root': {\r\n marginBottom: theme.spacing(1),\r\n '& .MuiSvgIcon-root': {\r\n fontSize: 21,\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(4),\r\n }\r\n },\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n listItem_iconAvatar: {\r\n marginRight:10\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n }, \r\n})\r\ninterface IContactItem {\r\n contact: TContact,\r\n handleListItemClick: (companionId: string) => void,\r\n rightIsOpen: TRightIsOpen,\r\n}\r\nconst ContactItem = ({contact,handleListItemClick,rightIsOpen}:IContactItem) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [anchorEl, setAnchorEl] = useState<any>(null);\r\n const [selected, setSelected] = useState<boolean>(false);\r\n const [modal,setModal] = useState<boolean>(false)\r\n const open = Boolean(anchorEl);\r\n const { name, lastName, avatarUrl, color, companionId,createdAt, number,_id } = contact\r\n\r\n const handleClose = (type: string | undefined): void => {\r\n if (type === 'copy') copied('Number')\r\n if (type === 'delete') setModal(true)\r\n setAnchorEl(null)\r\n setSelected(false)\r\n }\r\n\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n rightIsOpen === 'edit'&&dispatch(actionRightIsOpen('credentials'))\r\n removeContact(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleContextMenu = (e: React.MouseEvent<HTMLDivElement>):void => {\r\n e.preventDefault()\r\n setAnchorEl(e.currentTarget)\r\n setSelected(true)\r\n } \r\n\r\n return (\r\n <div>\r\n <ListItemButton\r\n selected={selected}\r\n onClick={() => handleListItemClick(companionId)}\r\n onContextMenu={(e) => handleContextMenu(e)}\r\n >\r\n <ListItemIcon className={classes.listItem_iconAvatar}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 54, height: 54 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemIcon> \r\n <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondary={`Registered since ${timeStampEU(createdAt)}`} />\r\n </ListItemButton> \r\n <StyledMenu\r\n id=\"demo-positioned-menu\"\r\n aria-labelledby=\"demo-positioned-button\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={handleClose}\r\n >\r\n <CopyToClipboard onCopy={() => handleClose('copy')} text={number}>\r\n <MenuItem>\r\n <ContentCopyIcon />\r\n Copy number\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <MenuItem style={{color:'#f02a2a'}} onClick={() => handleClose('delete')}>\r\n <DeleteOutlineIcon style={{color:'#f02a2a'}}/>\r\n Delete contact\r\n </MenuItem> \r\n </StyledMenu>\r\n {modal&&<div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete contact</h3>\r\n </div>\r\n <p style={{ color: '#050505' }}>{`Are you sure you want to delete contact\r\n ${`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CONTACT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>}\r\n </div>\r\n );\r\n}\r\nexport default ContactItem","import { createSelector } from 'reselect';\r\nimport { IState } from '../../../typescript/redux/interfaces'\r\n\r\nconst getTotal = (state: IState) => state.contacts.total;\r\nconst getLimit = (state:IState) => state.contacts.limit;\r\nconst getPage = (state: IState) => state.contacts.page;\r\nconst getContacts = (state: IState) => state.contacts.contacts;\r\nconst getState = (state: IState) => state.contacts;\r\n\r\nconst getContactsMemo = createSelector([getContacts], state => state);\r\n\r\nexport { getTotal,getLimit,getPage,getContacts,getState,getContactsMemo };\r\n","import {\r\n actionGetContactsSuccess,\r\n actionGetContactsReject\r\n} from '../action';\r\nimport { addContact,getContacts} from '../../../api-data';\r\nimport { IContactsState } from '../../../typescript/redux/contacts/interfaces'\r\n\r\nconst asyncGetContacts = () => async (dispatch:any) => {\r\n try {\r\n const data = await getContacts<IContactsState>()\r\n data&&dispatch(actionGetContactsSuccess(data))\r\n } catch (e) {\r\n dispatch(actionGetContactsReject())\r\n } \r\n};\r\n\r\nconst asyncAddContact = (number:string) => async (dispatch:any) => {\r\n try {\r\n await addContact(number)\r\n } catch(e) {}\r\n};\r\n\r\n\r\nexport { asyncAddContact,asyncGetContacts };\r\n","import List from '@mui/material/List';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useEffect } from 'react';\r\n\r\nimport AlertInfo from '../../../reusableComponents/AlertInfo'\r\nimport ContactItem from './ContactItem';\r\nimport { getState } from '../../../../redux/contacts/selector'\r\nimport { asyncGetContacts } from '../../../../redux/contacts/operations';\r\nimport { asyncStartChatById } from '../../../../redux/chat/operations'\r\nimport * as controlSelector from '../../../../redux/control/selector'\r\nimport { actionLeftIsOpen,actionRightIsOpen } from '../../../../redux/control/action';\r\nimport { handleSort,timeStampFilter,refreshAppTime } from '../../../../helpers';\r\nimport { TContacts,TContact } from '../../../../typescript/redux/contacts/types';\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n width: '100%',\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n})\r\n\r\ninterface IContactList {\r\n value: string,\r\n handleClick: () => void,\r\n sort: boolean,\r\n date: any,\r\n setDisabled: React.Dispatch<boolean>,\r\n}\r\nconst ContactsList = ({value,handleClick,sort,date,setDisabled} : IContactList) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { total, contacts } = useSelector(getState)\r\n const { leftIsOpen,rightIsOpen } = useSelector(controlSelector.getState)\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 rightIsOpen&&dispatch(actionRightIsOpen(''))\r\n dispatch(asyncStartChatById(companionId))\r\n }\r\n\r\n const arr = filteredContacts()\r\n\r\n useEffect(() => {\r\n dispatch(actionLeftIsOpen('contacts'))\r\n }, [dispatch]) \r\n\r\n useEffect(() => {\r\n setDisabled(total === '0'?true:false)\r\n }, [total, setDisabled])\r\n \r\n useEffect(() => {\r\n const handleReset = () => leftIsOpen === 'contacts' && dispatch(asyncGetContacts())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen,dispatch]); \r\n \r\n return total !== '0' ? (\r\n <List\r\n className={classes.list} component=\"nav\"\r\n aria-label=\"main mailbox folders\">\r\n {arr.length > 0 ? arr.map((contact) => <ContactItem key={contact.number}\r\n contact={contact} handleListItemClick={handleListItemClick} rightIsOpen={rightIsOpen}/>) :\r\n <AlertInfo name={`Can not find Contact by request : ${value}`} />}\r\n </List>\r\n ):<AlertInfo name='You do not have Contact yet!' />;\r\n}\r\n\r\nexport default ContactsList","import Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton'\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height: '7vh',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\ninterface ISearchBar {\r\n handleClick:() => void,\r\n}\r\n\r\nconst ToolBar = ({ handleClick }:ISearchBar) => {\r\n \r\n const classes = useStyles()\r\n return (\r\n <Toolbar className={classes.toolBar}>\r\n <IconButton onClick={handleClick}>\r\n <ArrowBackIcon className={classes.iconArrow} /> \r\n </IconButton>\r\n\r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, Button, TextField, Typography } from '@material-ui/core'\r\nimport React, { useState,useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { asyncAddContact } from '../../../../redux/contacts/operations'\r\nimport { actionLeftIsOpen } from '../../../../redux/control/action';\r\nimport ToolBar from './ToolBar';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: 350,\r\n margin: '0 auto',\r\n paddingBottom: 24,\r\n },\r\n title: {\r\n marginBottom: 20,\r\n textAlign: 'center',\r\n },\r\n buttonNext: {\r\n marginTop: 20,\r\n height: 50,\r\n color: '#f8f8f8',\r\n backgroundColor:'#1d74c5',\r\n },\r\n textField: {\r\n marginBottom:20\r\n }\r\n})\r\n\r\ninterface IAddContact {\r\n 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 useEffect(() => {\r\n dispatch(actionLeftIsOpen(''))\r\n }, [dispatch]) \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 { useEffect } from \"react\"\r\nimport { useDispatch } from \"react-redux\"\r\nimport ToolBar from \"./ToolBar\"\r\nimport SettingsPicture from \"./SettingsPicture\"\r\nimport SettingsMenu from \"./SettingsMenu\"\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations'\r\nimport { refreshAppTime } from '../../../../helpers'\r\n\r\ninterface ISettingsBar {\r\n setSelectedIndex: (selectedIndex: number | null) => void,\r\n handleClick:() => void\r\n}\r\n\r\nconst SettingsBar = ({ setSelectedIndex, handleClick }: ISettingsBar) => {\r\n const dispatch = useDispatch()\r\n\r\n useEffect(() => {\r\n const handleReset = () => dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch]);\r\n \r\n return (\r\n <div style={{backgroundColor: '#f3f2f2',height:'100%',width:'100%'}}>\r\n <ToolBar setSelectedIndex={setSelectedIndex} handleClick={handleClick}/>\r\n <SettingsPicture />\r\n <SettingsMenu/>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SettingsBar","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n paddingLeft: 10,\r\n height:'7vh',\r\n width: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\ninterface IToolBar {\r\n setSelectedIndex: React.Dispatch<React.SetStateAction<number | null>>\r\n}\r\n\r\nconst ToolBar = ({setSelectedIndex}:IToolBar) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={() => setSelectedIndex(2)} aria-label=\"delete\" size=\"medium\">\r\n <ArrowBackIcon className={classes.iconArrow} fontSize='medium'/>\r\n </IconButton>\r\n <Typography style={{marginLeft:20,color: '#474747'}} variant=\"h6\" color=\"initial\">Edit profile</Typography>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, TextField } from '@material-ui/core'\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport AddAPhotoIcon from '@mui/icons-material/AddAPhoto';\r\nimport { useEffect } from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { format,firstLetter,prodBaseURL } from '../../../../../helpers'\r\nimport { IAuthorizationState } from '../../../../../typescript/redux/authorization/interfaces'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: '100%',\r\n padding: 20,\r\n paddingTop:0,\r\n position: 'relative',\r\n backgroundColor: '#ffffff',\r\n },\r\n imgWrapper: {\r\n cursor: 'pointer',\r\n marginBottom: 30,\r\n position: 'relative',\r\n },\r\n imgDropZoneOverlay: {\r\n position: 'absolute',\r\n width: 120,\r\n height: 120,\r\n borderRadius: '50%',\r\n backgroundColor: '#6868687d',\r\n left: 0,\r\n zIndex: 1,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n addPhoto: {\r\n color: '#ffffff',\r\n transform: 'scale(1.1)',\r\n '&:hover': {\r\n transform: 'scale(1.3)',\r\n },\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n alignSelf: 'flex-end',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\ninterface IEditList {\r\n user: IAuthorizationState,\r\n name: string,\r\n setName: any,\r\n lastName: string,\r\n setLastName: any,\r\n openBtn: boolean,\r\n setOpenBtn: any,\r\n file:any,\r\n setFile: (file:any) => void\r\n}\r\n\r\nconst EditList = (props: IEditList) => {\r\n const classes = useStyles()\r\n const { user, name, setName, lastName, setLastName,\r\n openBtn, setOpenBtn,setFile } = props\r\n const { avatarUrl, color } = user\r\n const { getRootProps, getInputProps, acceptedFiles } = useDropzone({\r\n noDrag: true,\r\n accept:'image/*'\r\n });\r\n\r\n const handleTextField = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n !openBtn&&setOpenBtn(true)\r\n const value = format(e.target.value)\r\n const name = e.target.name\r\n switch (name) {\r\n case 'name':\r\n setName(value)\r\n break;\r\n case 'lastName':\r\n setLastName(value)\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (acceptedFiles.slice(-1)[0]) {\r\n setFile(acceptedFiles.slice(-1)[0])\r\n setOpenBtn(true)\r\n }\r\n }, [setFile,setOpenBtn,acceptedFiles])\r\n\r\n return (\r\n <div className={classes.container} > \r\n <ListItemAvatar className={classes.imgWrapper}>\r\n <div {...getRootProps({ className: classes.imgDropZoneOverlay })}>\r\n <AddAPhotoIcon className={classes.addPhoto} fontSize='large' />\r\n <input {...getInputProps()}/>\r\n </div>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 120, height: 120}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar> \r\n <TextField\r\n id=\"name\"\r\n name='name'\r\n label=\"Name\"\r\n value={name}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n style={{marginBottom:20}}\r\n />\r\n <TextField\r\n id=\"lastName\"\r\n name='lastName'\r\n label=\"LastName\"\r\n value={lastName}\r\n fullWidth\r\n variant='outlined'\r\n onChange={handleTextField}\r\n /> \r\n </div>\r\n )\r\n};\r\n\r\nexport default EditList;","import { makeStyles} from '@material-ui/core'\r\nimport Avatar from '@mui/material/Avatar';\r\nimport DoneIcon from '@mui/icons-material/Done';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n content: '',\r\n top: '92vh',\r\n right:20,\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n },\r\n})\r\n\r\nconst SubmitBtn = ({handleSubmit}:{handleSubmit:() => void}) => {\r\n const classes = useStyles() \r\n\r\n return (\r\n <div className={classes.container}>\r\n <Avatar onClick={handleSubmit} className={classes.avatarArrow}\r\n sx={{width: 56, height: 56,backgroundColor: 'rgb(41, 139, 231)',color: '#ffffff'}}>\r\n <DoneIcon fontSize=\"medium\" /> \r\n </Avatar>\r\n </div> \r\n )\r\n};\r\n\r\nexport default SubmitBtn;","import { makeStyles } from '@material-ui/core'\r\nimport { useState,useEffect } from 'react';\r\nimport { useSelector,useDispatch } from 'react-redux';\r\nimport ToolBar from './ToolBar'\r\nimport EditList from './EditList'\r\nimport SubmitBtn from './SubmitBtn';\r\nimport { getState } from '../../../../redux/authorization/selector'\r\nimport { asyncCurrentUser } from '../../../../redux/authorization/operations';\r\nimport { updateCredentials, updateUserAvatar } from '../../../../api-data';\r\nimport { refreshAppTime } from '../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#f3f2f2',\r\n position:'relative'\r\n }\r\n})\r\n\r\ninterface IEditBar {\r\n setSelectedIndex: React.Dispatch<React.SetStateAction<number | null>>\r\n}\r\n\r\nconst EditBar= ({setSelectedIndex}:IEditBar) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const user = useSelector(getState)\r\n const [name, setName] = useState<string>('')\r\n const [lastName, setLastName] = useState<string>('')\r\n const [openBtn, setOpenBtn] = useState<boolean>(false)\r\n const [file,setFile] = useState<any>(null)\r\n const {name:Name,lastName:LastName} = user\r\n\r\n const handleSubmit = async () => {\r\n if (name !== Name || lastName !== LastName){\r\n await updateCredentials({ name, lastName, originalName: name, originalLastName: lastName })\r\n }\r\n if (file) {\r\n const formData: any = new FormData()\r\n formData.append(\"avatar\", file);\r\n await updateUserAvatar(formData)\r\n }\r\n file && setFile(null)\r\n openBtn && setOpenBtn(false)\r\n }\r\n\r\n useEffect(() => {\r\n const handleReset = () => !openBtn && dispatch(asyncCurrentUser())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [openBtn,dispatch]); \r\n \r\n useEffect(() => {\r\n Name&&setName(Name)\r\n LastName && setLastName(LastName)\r\n }, [Name, LastName])\r\n\r\n return (\r\n <div className={classes.container}>\r\n {openBtn&&<SubmitBtn handleSubmit={handleSubmit}/>}\r\n <ToolBar 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,useDispatch } from 'react-redux';\r\nimport { createPortal } from 'react-dom';\r\n\r\nimport Grid from '@mui/material/Grid'\r\nimport SmallMenuBar from './SmallMenuBar'\r\nimport SearchLists from './SearchLists';\r\nimport SearchBar from './SearchBar'\r\nimport ChatsList from './ChatsList'\r\nimport MenuBar from './MenuBar'\r\nimport ContactsList from './ContactsList'\r\nimport AddContact from './AddContact'\r\nimport SettingsBar from './SettingsBar';\r\nimport EditBar from './EditBar';\r\nimport { getState } from '../../../redux/authorization/selector';\r\nimport { actionLeftIsOpen } from '../../../redux/control/action';\r\n\r\nconst LeftBar = () => {\r\n const dispatch = useDispatch()\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 [disabled, setDisabled] = useState<boolean>(false)\r\n const [value, setValue] = useState<string>('')\r\n const [date, setDate] = useState<any>('');\r\n const modalRoot = useRef<HTMLDivElement|null>(null);\r\n const handleOpenIsSearch = () => !isSearch&&setIsSearch(true)\r\n const handleClick = (): void => {\r\n dispatch(actionLeftIsOpen(''))\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 setDisabled(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} handleOpenIsSearch={handleOpenIsSearch} sort={sort} \r\n handleSearch={handleSearch} isSearch={isSearch} value={value} setDate={setDate}\r\n date={date} disabled={disabled} />}\r\n {!selectedIndex && isSearch && <SearchLists value={value} setValue={setValue}\r\n sort={sort} date={date} setDate={setDate} setDisabled={setDisabled}/>}\r\n {!selectedIndex&&!isSearch &&<ChatsList sort={sort}/>}\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}\r\n sort={sort} date={date} setDisabled={setDisabled} />}\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 { actionRightIsOpen } from '../../../../../redux/control/action'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../helpers'\r\n\r\nconst Credentials = () => {\r\n const dispatch = useDispatch()\r\n const { name, lastName, avatarUrl, color, online } = useSelector(getChat)\r\n \r\n return (\r\n <ListItemButton onClick={() => dispatch(actionRightIsOpen('credentials'))}>\r\n <ListItemIcon >\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 44, height: 44 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemIcon> \r\n <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondaryTypographyProps={{ color: '#0379af' }} secondary={online === 'true' ?\r\n 'online' : `last seen ${timeStampEU(online)}`} />\r\n </ListItemButton>\r\n )\r\n}\r\n\r\nexport default Credentials","import { useState } from 'react';\r\nimport { 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 { actionRightIsOpen } 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 \r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\r\n dispatch(actionRightIsOpen('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(actionRightIsOpen(''))\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 { actionRightIsOpen } from '../../../../../redux/control/action'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n marginLeft: 20,\r\n }, \r\n})\r\n\r\nconst Buttons = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const [modal,setModal] = useState<boolean>(false)\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\">\r\n <IconButton onClick={() => dispatch(actionRightIsOpen('search'))} aria-label=\"delete\" size=\"medium\">\r\n <SearchIcon fontSize='medium'/>\r\n </IconButton>\r\n <MenuList setModal={setModal}/>\r\n {modal&&<DeleteModal setModal={setModal}/>} \r\n </Stack>\r\n );\r\n}\r\n\r\nexport default Buttons","import Toolbar from '@mui/material/Toolbar'\r\nimport AppBar from '@mui/material/AppBar';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport Credentials from './Credentials'\r\nimport Buttons from './Buttons'\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#6e6d6d',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n backgroundColor: '#ffffff',\r\n height:'7vh'\r\n },\r\n})\r\n\r\nconst HeaderBar = () => {\r\n const classes = useStyles()\r\n return (\r\n <AppBar position=\"static\">\r\n <Toolbar className={classes.toolBar}>\r\n <Credentials/>\r\n <Buttons/>\r\n </Toolbar>\r\n </AppBar> \r\n )\r\n}\r\n\r\nexport default HeaderBar\r\n\r\n","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\r\nimport Avatar from '@mui/material/Avatar';\r\n\r\nconst useStyles = makeStyles({ \r\n avatarArrowWrapper: {\r\n position:'absolute',\r\n right: 20,\r\n top: '70vh',\r\n width: 56,\r\n }, \r\n avatarArrow: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n listSeenIcon: {\r\n position: 'absolute',\r\n top: -8,\r\n left: 16,\r\n borderRadius: '50%',\r\n color: '#ffffff',\r\n border: 'none',\r\n height: 24,\r\n width: 24,\r\n textAlign: 'center',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n fontSize: 12,\r\n zIndex: 10,\r\n cursor:'pointer',\r\n }, \r\n});\r\n\r\ninterface IArrowBack {\r\n isArrow: boolean,\r\n isNew: {new:number,mute:boolean},\r\n handleScrollTo:() => void\r\n}\r\n\r\nconst ArrowBack = ({ isArrow, handleScrollTo, isNew }: IArrowBack) => {\r\n const classes = useStyles()\r\n\r\nreturn (\r\n <div className={classes.avatarArrowWrapper} style={{display: isArrow ? 'block' : 'none'}}>\r\n <button onClick={handleScrollTo} style={{display: isNew.new ? 'block' : 'none',\r\n background: isNew.mute ? '#a7aaa7' : '#0ac40a'}}\r\n className={classes.listSeenIcon}>{isNew.new}</button>\r\n <Avatar onClick={handleScrollTo} className={classes.avatarArrow}\r\n sx={{backgroundColor: '#ffffff', width: 56, height: 56,color: '#6b6b6b'}}>\r\n <ArrowDownwardIcon fontSize=\"medium\" /> \r\n </Avatar> \r\n </div> \r\n )\r\n}\r\n\r\nexport default ArrowBack","import { makeStyles } from '@material-ui/core'\r\nimport React from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { useEffect } from 'react';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n position:'relative',\r\n },\r\n dropZone: {\r\n width: '100%',\r\n display: 'flex',\r\n position:'relative',\r\n height: 20,\r\n zIndex:10\r\n },\r\n})\r\n\r\ninterface IUploadFile {\r\n children:React.ReactNode,\r\n setFile: any,\r\n setValue: any,\r\n accept: string\r\n}\r\n \r\nconst UploadFile = ({children,setFile,setValue,accept}:IUploadFile) => {\r\n const classes = useStyles()\r\n const { getRootProps, getInputProps, acceptedFiles } = useDropzone({\r\n noDrag: true,\r\n accept\r\n });\r\n useEffect(() => {\r\n if (acceptedFiles.slice(-1)[0]) {\r\n setValue('')\r\n setFile(acceptedFiles.slice(-1)[0])\r\n }\r\n }, [setFile,setValue, acceptedFiles])\r\n \r\n return (\r\n <div className={classes.container} >\r\n {children}\r\n <div {...getRootProps({ className: classes.dropZone })}>\r\n <input placeholder='Photo or Video' {...getInputProps()}/>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UploadFile","import MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport UploadFile from './UploadFile'\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n background: '#fdfdfd',\r\n },\r\n listIcon: {\r\n position: 'absolute',\r\n left:0\r\n },\r\n listText: {\r\n position: 'absolute',\r\n left:40\r\n }, \r\n})\r\n\r\ninterface IFilesMenu {\r\n setIsOpenMenu: any,\r\n setFile: any,\r\n setValue: any,\r\n setType: any\r\n}\r\nconst FilesMenu = ({setIsOpenMenu,setFile,setValue,setType}:IFilesMenu) => {\r\n const classes = useStyles()\r\n const handleClose = (type:string) => {\r\n setType(type)\r\n setIsOpenMenu(false)\r\n }\r\n \r\n return (\r\n <MenuList className={classes.list}>\r\n <MenuItem onClick={() => handleClose('content')}>\r\n <UploadFile setFile={setFile} setValue={setValue} accept='image/*,video/*,audio/*'>\r\n <ListItemIcon className={classes.listIcon}>\r\n <InsertDriveFileIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText className={classes.listText}>Upload Image/Audio/Video</ListItemText>\r\n </UploadFile>\r\n </MenuItem>\r\n <MenuItem onClick={() => handleClose('application')}>\r\n <UploadFile setFile={setFile} setValue={setValue} accept='application/pdf,\r\n application/vnd.openxmlformats-officedocument.wordprocessingml.document'>\r\n <ListItemIcon className={classes.listIcon}>\r\n <InsertDriveFileIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText className={classes.listText}>Upload File</ListItemText>\r\n </UploadFile>\r\n </MenuItem> \r\n </MenuList>\r\n );\r\n}\r\n\r\nexport default FilesMenu","import { makeStyles } from \"@material-ui/core/styles\";\r\nimport SendIcon from '@mui/icons-material/Send';\r\nimport MicNoneIcon from '@mui/icons-material/MicNone';\r\nimport VideocamIcon from '@mui/icons-material/Videocam';\r\nimport PauseIcon from '@mui/icons-material/Pause';\r\nimport AttachFileIcon from '@mui/icons-material/AttachFile';\r\nimport SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Picker from 'emoji-picker-react';\r\n\r\nimport { useReactMediaRecorder } from \"react-media-recorder\";\r\nimport { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport FilesMenu from \"../FilesMenu\";\r\nimport {\r\n sentMessageById, sentImgMessageById, sentAudioMessageById,\r\n sentVideoMessageById,sentFileMessageById\r\n} from '../../../../../api-data'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { getRightIsOpen } from '../../../../../redux/control/selector'\r\nimport { playNotification,prodBaseURL } from \"../../../../../helpers\";\r\nimport { typingChat } from \"../../../../../api-data\";\r\n\r\n\r\nconst useStyles = makeStyles({ \r\n container: {\r\n width: '35vw',\r\n height:'6vh',\r\n position: 'fixed',\r\n bottom: '2vh',\r\n borderRadius: 8,\r\n padding: 10,\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n color: '#6b6b6b',\r\n border:'solid 2px #ffffff',\r\n backgroundColor: '#ffffff', \r\n },\r\n containerActive: {\r\n width: '35vw',\r\n height:'6vh',\r\n position: 'fixed',\r\n bottom: '2vh',\r\n borderRadius: 8,\r\n padding: 10,\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n border:'solid 2px rgb(41, 139, 231)',\r\n backgroundColor: '#ffffff', \r\n }, \r\n textarea: {\r\n width: '100%',\r\n height: '100%',\r\n outline: 'none',\r\n border:'none',\r\n padding: '0px 10px',\r\n marginLeft: 8,\r\n marginRight: 8,\r\n overflowY:'auto',\r\n resize: 'none',\r\n '&::placeholder': {\r\n color: 'inherit',\r\n fontWeight: 600,\r\n fontSize:20\r\n }\r\n }, \r\n attachIcon: {\r\n transform:'rotate(30deg)', \r\n },\r\n borderTop: {\r\n position: 'absolute',\r\n left: 0,\r\n top: '-2vh',\r\n width: '100%',\r\n height: 1,\r\n background:'#ffffff',\r\n },\r\n filesMenu: {\r\n background: '#fdfdfd',\r\n position: 'absolute',\r\n width: '15vw',\r\n maxWidth: '100%',\r\n left: '61%',\r\n bottom:'10vh',\r\n zIndex: 10,\r\n visibility: 'visible',\r\n borderRadius: 10,\r\n padding: '4px 6px',\r\n },\r\n emoji: {\r\n position: 'absolute',\r\n bottom:'10vh',\r\n zIndex: 10,\r\n visibility: 'visible',\r\n },\r\n iconCancel: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n display:'flex',\r\n backgroundColor: '#ffffff',\r\n color: 'rgb(243, 69, 69)',\r\n border:'solid 4px rgb(243, 69, 69)',\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: 'rgb(243, 69, 69)',\r\n color: '#ffffff',\r\n }\r\n }, \r\n avatarCamera: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n display: 'flex',\r\n borderRadius: '50%',\r\n zIndex: 10,\r\n border: 'solid 14px #ffffff',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n border:'solid 14px rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n avatarRight: {\r\n position: 'absolute',\r\n right: -72,\r\n bottom:-1,\r\n display: 'flex',\r\n borderRadius: '50%',\r\n zIndex: 10,\r\n border: 'solid 14px #ffffff',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n border:'solid 14px rgb(41, 139, 231)',\r\n color: '#ffffff'\r\n }\r\n },\r\n pauseLeft: {\r\n position: 'absolute',\r\n left: -72,\r\n bottom:-1,\r\n zIndex: 10, \r\n },\r\n pauseRight: {\r\n position: 'absolute',\r\n right: -72,\r\n bottom:-1,\r\n zIndex: 10, \r\n }, \r\n avatarPause: {\r\n backgroundColor: '#ffffff',\r\n cursor: 'pointer',\r\n animation: `$shake 1s`,\r\n animationIterationCount:'infinite',\r\n '&:hover': {\r\n backgroundColor: 'rgb(41, 139, 231)',\r\n color: '#ffffff',\r\n }\r\n },\r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex:100\r\n },\r\n ringContainerLeft: {\r\n position: 'absolute',\r\n left: -25,\r\n top: -25,\r\n zIndex: 10,\r\n }, \r\n ringContainerRight: {\r\n position: 'absolute',\r\n right: -25,\r\n top: -25,\r\n zIndex: 10,\r\n },\r\n circle: {\r\n width: 15,\r\n height: 15,\r\n backgroundColor: 'rgb(255, 4, 4)',\r\n borderRadius: '50%',\r\n position: 'relative'\r\n },\r\n ringRing: {\r\n border: '3px solid rgb(255, 4, 4)',\r\n borderRadius: '50%',\r\n height: 25,\r\n width: 25,\r\n position: 'absolute',\r\n right: -5,\r\n top: -5,\r\n animation: `$pulsate 1s ease-out`,\r\n animationIterationCount: 'infinite',\r\n opacity: 0\r\n },\r\n '@keyframes pulsate': {\r\n '0%': {transform: 'scale(0.1, 0.1)', opacity: 0},\r\n '50%': { opacity: 1},\r\n '100%': {transform: 'scale(1.2, 1.2)', opacity: 0},\r\n },\r\n '@keyframes shake': {\r\n '0%': { transform: 'translate(0.5px, 0.5px) rotate(0deg)'},\r\n '10%': { transform: 'translate(-0.5px, -1px) rotate(-1deg)'},\r\n '20%': { transform: 'translate(-1.5px, 0px) rotate(1deg)'},\r\n '30%': { transform: 'translate(1.5px, 1px) rotate(0deg)'},\r\n '40%': { transform: 'translate(0.5px, -0.5px) rotate(1deg)'},\r\n '50%': { transform: 'translate(-0.5px, 1px) rotate(-1deg)'},\r\n '60%': { transform: 'translate(-1.5px, 0.5px) rotate(0deg)'},\r\n '70%': { transform: 'translate(1.5px, 0.5px) rotate(-1deg)'},\r\n '80%': { transform: 'translate(-0.5px, -0.5px) rotate(1deg)'},\r\n '90%': { transform: 'translate(0.5px, 1px) rotate(0deg)'},\r\n '100%': { transform: 'translate(0.5px, -1px) rotate(-1deg)'},\r\n }, \r\n});\r\n\r\ninterface ISendMessage{\r\n isArrow: boolean,\r\n}\r\n\r\nconst SendMessage = ({isArrow }:ISendMessage) => {\r\n const classes = useStyles();\r\n const { companionId } = useSelector(getChat)\r\n const rightIsOpen = useSelector(getRightIsOpen)\r\n const [value, setValue] = useState<string>('')\r\n const [file, setFile] = useState<any>(false)\r\n const [isOpenMenu, setIsOpenMenu] = useState<boolean>(false)\r\n const [isOpenEmoji, setIsOpenEmoji] = useState<boolean>(false)\r\n const [isRecording, setIsRecording] = useState<boolean>(false)\r\n const [isFilming, setIsFilming] = useState<boolean>(false) \r\n const [type, setType] = useState<string>('')\r\n const { status, startRecording, stopRecording, mediaBlobUrl, clearBlobUrl } = useReactMediaRecorder({ audio: true });\r\n const { status: _status, startRecording: _startRecording, stopRecording: _stopRecording,\r\n mediaBlobUrl: _mediaBlobUrl, clearBlobUrl: _clearBlobUrl } = useReactMediaRecorder({ video: true });\r\n const onEmojiClick = (_e:any, emojiObject:any) => {\r\n setValue(prevValue => prevValue + emojiObject.emoji)\r\n setIsOpenEmoji(false)\r\n }; \r\n const clearMessage = () => {\r\n file &&setFile(false)\r\n isRecording && setIsRecording(false)\r\n isFilming && setIsFilming(false)\r\n value && setValue('')\r\n type && setType('')\r\n mediaBlobUrl && clearBlobUrl()\r\n _mediaBlobUrl && _clearBlobUrl()\r\n isOpenMenu && setIsOpenMenu(false)\r\n isOpenEmoji && setIsOpenEmoji(false)\r\n \r\n }\r\n const sentMessage = async () => {\r\n if (value) sentMessageById(companionId, value)\r\n if (mediaBlobUrl && type === 'recording') {\r\n const audio = new XMLHttpRequest();\r\n audio.open('GET', mediaBlobUrl, true);\r\n audio.responseType = 'blob';\r\n audio.onload = () => {\r\n if (audio.status === 200) {\r\n const blob = audio.response\r\n const file = new File([blob], 'audio.mp3', {\r\n type: 'audio/mpeg'\r\n })\r\n const formData: any = new FormData()\r\n formData.append(\"audio\", file)\r\n sentAudioMessageById(companionId, formData)\r\n clearBlobUrl()\r\n }\r\n }\r\n audio.send();\r\n }\r\n if (_mediaBlobUrl && type === 'filming') {\r\n const video = new XMLHttpRequest();\r\n video.open('GET', _mediaBlobUrl, true);\r\n video.responseType = 'blob';\r\n video.onload = () => {\r\n if (video.status === 200) {\r\n const blob = video.response\r\n const file = new File([blob], 'video.mp4', {\r\n type: 'video/mp4'\r\n })\r\n const formData: any = new FormData()\r\n formData.append(\"video\", file)\r\n sentVideoMessageById(companionId, formData)\r\n _clearBlobUrl()\r\n }\r\n }\r\n video.send();\r\n } \r\n if (file && type) {\r\n if (file.type.includes('image') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"image\", file);\r\n await sentImgMessageById(companionId, formData)\r\n }\r\n if (file.type.includes('audio') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"audio\", file);\r\n sentAudioMessageById(companionId, formData)\r\n } \r\n if (file.type.includes('video') && type === 'content') {\r\n const formData: any = new FormData()\r\n formData.append(\"video\", file);\r\n sentVideoMessageById(companionId, formData) \r\n }\r\n if (file.type.includes('application') && type === 'application') {\r\n const formData: any = new FormData()\r\n formData.append(\"file\", file);\r\n sentFileMessageById(companionId, formData) \r\n }\r\n }\r\n clearMessage()\r\n playNotification(`${prodBaseURL}/send.mp3`)\r\n } \r\n const handleTextarea = (e: React.ChangeEvent<HTMLTextAreaElement>) => setValue(e.target.value)\r\n const handleFocusTextarea = async () => await typingChat(companionId,true)\r\n const handleBlurTextarea = async () => await typingChat(companionId,false) \r\n const handleOpenFileMenu = () => !isOpenMenu&&setIsOpenMenu(true)\r\n const handleCloseFileMenu = (e:any) => e.target.id === 'overlay'&&isOpenMenu&&setIsOpenMenu(false) \r\n const handleOpenEmoji = () => !isOpenEmoji&&setIsOpenEmoji(true)\r\n const handleCloseEmoji = (e: any) => e.target.id === 'overlay'&&isOpenEmoji&&setIsOpenEmoji(false) \r\n const handleRecording = () => {\r\n if (isRecording) return stopRecording()\r\n startRecording()\r\n setType('recording')\r\n setIsRecording(true) \r\n }\r\n const handleFilming = () => {\r\n if (isFilming) return _stopRecording()\r\n _startRecording()\r\n setType('filming')\r\n setIsFilming(true) \r\n }\r\n\r\n return (\r\n <div className={value || file || status === 'stopped' || _status === 'stopped' ?classes.containerActive:classes.container}>\r\n {isArrow && <div className={classes.borderTop}></div>}\r\n {isFilming && _status !== 'stopped' && \r\n <>\r\n <div className={classes.pauseLeft}>\r\n <Avatar onClick={handleFilming } className={classes.avatarPause}\r\n sx={{backgroundColor: '#ffffff',color:'#6b6b6b',width: 56, height: 56}}>\r\n <PauseIcon fontSize=\"large\"/> \r\n </Avatar> \r\n </div>\r\n <div className={classes.ringContainerLeft}>\r\n <div className={classes.ringRing}></div>\r\n <div className={classes.circle}></div> \r\n </div>\r\n </>} \r\n {isRecording && status !== 'stopped' && \r\n <> \r\n <div className={classes.pauseRight}>\r\n <Avatar onClick={handleRecording} className={classes.avatarPause}\r\n sx={{backgroundColor: '#ffffff',color:'#6b6b6b',width: 56, height: 56}}>\r\n <PauseIcon fontSize=\"large\"/> \r\n </Avatar> \r\n </div> \r\n <div className={classes.ringContainerRight}>\r\n <div className={classes.ringRing}></div>\r\n <div className={classes.circle}></div> \r\n </div>\r\n </>}\r\n <CloseIcon onClick={clearMessage} fontSize=\"small\" className={classes.iconCancel}\r\n sx={{width: 56, height: 56, display: file || value || status === 'stopped'\r\n || _status === 'stopped' ? 'inline-block' : 'none'}} />\r\n <VideocamIcon onClick={handleFilming} className={classes.avatarCamera}\r\n sx={{backgroundColor: '#ffffff', color: '#6b6b6b', width: 56, height: 56}}\r\n style={{display: status !== 'idle' || _status === 'stopped' || file || value || isFilming ? 'none' : 'block'}} />\r\n <SendIcon onClick={sentMessage} className={classes.avatarRight} \r\n sx={{backgroundColor: '#ffffff',color: 'rgb(41, 139, 231)', width: 56, height: 56}}\r\n style={{display: value || file || status === 'stopped' || _status === 'stopped' ? 'block':'none' }}/> \r\n <MicNoneIcon onClick={handleRecording} className={classes.avatarRight} \r\n sx={{backgroundColor:'#ffffff',color: '#6b6b6b', width: 56, height: 56}}\r\n style={{display: !value && !file && status !== 'stopped' && _status === 'idle'&&!isRecording ? 'block' : 'none'}}/>\r\n <SentimentSatisfiedAltIcon onClick={handleOpenEmoji} \r\n fontSize='medium' sx={{color: isOpenEmoji ? 'rgb(41, 139, 231)' : '#6b6b6b', cursor: 'pointer',\r\n pointerEvents: file || status !== 'idle' || _status !== 'idle' ? 'none' : \"auto\",\r\n '&:hover': { color: 'rgb(41, 139, 231)'}}} />\r\n <div onClick={handleCloseEmoji} className={classes.overlay} id='overlay'\r\n style={{ display: isOpenEmoji ? 'block':'none'}}>\r\n <div className={classes.emoji} style={{left: rightIsOpen&&rightIsOpen !== '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 style={{color:value || file || status !== 'idle' || _status !== 'idle' ?'rgb(41, 139, 231)':'#6b6b6b'}}>\r\n </textarea>\r\n <AttachFileIcon onClick={handleOpenFileMenu} className={classes.attachIcon}\r\n fontSize='medium' sx={{color: isOpenMenu ? 'rgb(41, 139, 231)' : '#6b6b6b', cursor: 'pointer',\r\n pointerEvents: value || status !== 'idle' || _status !== 'idle' ? 'none' : \"auto\",'&:hover': { color: 'rgb(41, 139, 231)'}}} />\r\n <div onClick={handleCloseFileMenu} className={classes.overlay} id='overlay'\r\n style={{ display: isOpenMenu ? 'block':'none'}}>\r\n <div className={classes.filesMenu} style={{left: rightIsOpen&&rightIsOpen !== '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 { getScrollChat } from '../../../../redux/control/selector'\r\nimport { actionScrollChat } from '../../../../redux/control/action'\r\nimport { asyncGetMessagesById } from '../../../../redux/messages/operations'\r\nimport { asyncGetChatById } from \"../../../../redux/chat/operations\";\r\nimport { seenChat } from \"../../../../api-data\";\r\nimport { timeStampFilter,prodBaseURL,refreshAppTime } from \"../../../../helpers\";\r\nconst debounce = require('lodash.debounce');\r\n\r\nconst useStyles = makeStyles({ \r\n container: {\r\n height: '93vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n alignContent:\"center\",\r\n flexDirection: \"column\",\r\n position: \"relative\",\r\n },\r\n messagesScroll: {\r\n paddingTop: 30,\r\n overflowY: \"scroll\",\r\n maxHeight: '83vh',\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n },\r\n messagesEmpty: {\r\n overflowY: \"hidden\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: 'center',\r\n paddingTop: 30,\r\n }, \r\n messagesBody: {\r\n width: \"60%\",\r\n }, \r\n});\r\n\r\nconst ChatBar = () => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch()\r\n const messages = useSelector(getMessagesMemo)\r\n const userNumber = useSelector(getNumber)\r\n const { companionId,total,seen,mute } = useSelector(getChat)\r\n const scrollChat = useSelector(getScrollChat)\r\n const [isArrow, setIsArrow] = useState<boolean>(false)\r\n const [isNew, setIsNew] = useState<{new:number,mute:boolean}>({new:0,mute:false})\r\n const divRef = useRef<any | null>(null)\r\n let time:any\r\n const handleScrollTo = () => {\r\n divRef.current&&divRef.current.scrollTo({\r\n top: divRef.current.scrollHeight,\r\n behavior: 'smooth'\r\n })\r\n }\r\n\r\n const handleScroll = useCallback(({ target:{scrollHeight,scrollTop,clientHeight}}: any) => {\r\n const different = scrollHeight - Math.floor(scrollTop)\r\n const reached = different - clientHeight\r\n if (total !== seen&&reached < 10) seenChat(companionId)\r\n setIsArrow(different === clientHeight ? false : true)\r\n }, [total,seen, companionId])\r\n \r\n const debouncedHandleScroll = debounce(handleScroll, 300)\r\n \r\n useEffect(() => {\r\n if (scrollChat) {\r\n dispatch(asyncGetMessagesById(companionId, handleScrollTo))\r\n dispatch(actionScrollChat(false))\r\n }\r\n }, [dispatch, scrollChat, companionId])\r\n \r\n useEffect(() => {\r\n const handleReset = () => {\r\n dispatch(asyncGetChatById(companionId))\r\n dispatch(asyncGetMessagesById(companionId, null))\r\n }\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [dispatch, companionId]);\r\n \r\n useEffect(() => {\r\n setIsNew({ new:total-seen,mute})\r\n }, [total,seen,mute]); \r\n\r\n useEffect(() => {\r\n if (divRef.current) {\r\n const { scrollHeight, clientHeight } = divRef.current\r\n if(total !== seen&&scrollHeight === clientHeight) seenChat(companionId)\r\n }\r\n }, [total,seen,companionId]);\r\n\r\n return (\r\n <div className={classes.container} >\r\n <ArrowBack isArrow={isArrow} isNew={isNew} handleScrollTo={handleScrollTo}/>\r\n <div ref={divRef} onScroll={debouncedHandleScroll}\r\n className={messages.length > 0 ? classes.messagesScroll : classes.messagesEmpty}>\r\n <div className={classes.messagesBody}>\r\n {messages.length > 0 ? messages.map(({ message, name, lastName, color,\r\n createdAt,number, type,fullType,_id }) => {\r\n let isTime\r\n if (!time) {\r\n isTime = true\r\n time = createdAt\r\n } else if (timeStampFilter(time) !== timeStampFilter(createdAt)) {\r\n time = createdAt\r\n isTime = true\r\n }\r\n const url = `${prodBaseURL}/${message}`\r\n if (number !== userNumber) {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftText\r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageLeftFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n } else {\r\n if (type === 'text') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightText \r\n message={message}\r\n createdAt={createdAt}\r\n name={name}\r\n lastName={lastName}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'image') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightImage \r\n url={url}\r\n createdAt={createdAt}\r\n color={color}\r\n message={message}\r\n messages={messages}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'audio') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightAudio \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type === 'video') return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightVideo \r\n url={url}\r\n createdAt={createdAt}\r\n fullType={fullType}\r\n _id={_id}\r\n /></div>)\r\n if (type) return (<div key={createdAt}>\r\n {isTime&&<MessageTime message={timeStampFilter(createdAt)}/>}\r\n <MessageRightFile \r\n url={url}\r\n createdAt={createdAt}\r\n type={type}\r\n _id={_id}\r\n /></div>) \r\n }\r\n }) : <AlertInfo name='You do not have messages yet!' />}\r\n </div>\r\n </div> \r\n <SendMessage isArrow={isArrow} /> \r\n </div>\r\n );\r\n}\r\n\r\nexport default ChatBar","import { DatePicker } from \"@material-ui/pickers\";\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\ninterface IStaticDatePicker {\r\n disabled:boolean,\r\n date: Date,\r\n changeDate: React.Dispatch<React.SetStateAction<any>>,\r\n handleOnOpen: () => void\r\n}\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n\r\n},\r\n})\r\n\r\nconst StaticDatePicker = ({ disabled, date, changeDate,handleOnOpen }: IStaticDatePicker) => {\r\n const classes = useStyles()\r\nreturn (\r\n <DatePicker\r\n disabled={disabled}\r\n className={classes.container}\r\n inputVariant='outlined'\r\n orientation=\"portrait\"\r\n variant=\"dialog\"\r\n openTo=\"date\"\r\n autoOk\r\n value={date?date:new Date()}\r\n onOpen={handleOnOpen}\r\n onChange={changeDate}\r\n />\r\n );\r\n};\r\n\r\nexport default StaticDatePicker;","import InputBase from '@mui/material/InputBase';\r\nimport Toolbar from '@mui/material/Toolbar'\r\nimport IconButton from '@mui/material/IconButton';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\r\nimport Switch from '@mui/material/Switch';\r\nimport { styled } from '@mui/material/styles';\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\n\r\nimport { actionRightIsOpen } from '../../../../../../redux/control/action'\r\nimport { getMessages } from '../../../../../../redux/messages/selector'\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { sortChat } from '../../../../../../api-data';\r\nimport StaticDatePicker from \"./StaticDatePicker\";\r\n\r\nconst SearchBar = styled('div')(({ theme }:any) => ({\r\n position: 'relative',\r\n borderRadius: '20px',\r\n backgroundColor: '#f1f0f0', \r\n width: '100%',\r\n margin:'0 5% 0 5%'\r\n}));\r\n\r\nconst SearchIconWrapper = styled('div')(({ theme }) => ({\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n}));\r\n\r\nconst StyledInputBase = styled(InputBase)(({ theme }) => ({\r\n color: 'inherit',\r\n '& .MuiInputBase-input': { \r\n fontWeight: 500,\r\n borderRadius: '20px',\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: `calc(1em + ${theme.spacing(4)})`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n },\r\n}));\r\n\r\nconst useStyles = makeStyles({\r\n toolBar: {\r\n color: '#b1aeae',\r\n height:'7vh'\r\n },\r\n searchBarActive: {\r\n outline: '2px solid #2184f7',\r\n color: '#2184f7',\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\ninterface ISearch {\r\n handleSearch: (e: React.ChangeEvent<HTMLInputElement>) => void,\r\n value: string,\r\n setDate: React.Dispatch<any>,\r\n date:any,\r\n}\r\n\r\nconst Search = ({handleSearch,value,setDate,date}:ISearch) => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const { sort, companionId } = useSelector(getChat)\r\n const messages = useSelector(getMessages)\r\n const disabled = messages.length > 0 ? false : true\r\n const handleOnOpen = () => setDate('')\r\n const handleSort = () => sortChat(companionId)\r\n\r\n return (\r\n <Toolbar className={classes.toolBar} >\r\n <IconButton onClick={() => dispatch(actionRightIsOpen(''))} aria-label=\"delete\" size=\"medium\">\r\n <CloseIcon fontSize='medium'/>\r\n </IconButton>\r\n <SearchBar className={!value||disabled?undefined:classes.searchBarActive}>\r\n <SearchIconWrapper>\r\n <SearchIcon />\r\n </SearchIconWrapper>\r\n <StyledInputBase\r\n disabled={disabled}\r\n onChange={handleSearch}\r\n placeholder={disabled?'Disabled':'Search'}\r\n value={value}\r\n inputProps={{ 'aria-label': 'search' }}\r\n />\r\n </SearchBar> \r\n <IconButton aria-label=\"delete\" size=\"medium\" disabled={disabled}>\r\n <StaticDatePicker disabled={disabled} date={date}\r\n changeDate={setDate} handleOnOpen={handleOnOpen} /> \r\n <CalendarTodayIcon fontSize='medium'\r\n style={{color:date?'#2184f7':'#b1aeae'}}/>\r\n </IconButton>\r\n <Switch onClick={handleSort} checked={sort} {...label} disabled={disabled} /> \r\n </Toolbar>\r\n )\r\n}\r\n\r\nexport default Search","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux'\r\nimport React, { useState } from 'react'\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Typography from '@mui/material/Typography';\r\nimport Divider from '@mui/material/Divider';\r\nimport Search from './Search'\r\nimport AlertInfo from \"../../../../reusableComponents/AlertInfo\";\r\nimport { getMessages } from '../../../../../redux/messages/selector'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { timeStampEU, timeStampFilter, firstLetter, slicedWord, handleSort,prodBaseURL } from '../../../../../helpers'\r\nimport { TMessages } from '../../../../../typescript/redux/messages/types';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n height: '100%',\r\n backgroundColor: '#ffffff'\r\n },\r\n list: {\r\n maxHeight: '93vh',\r\n overflowY: 'scroll',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n }, \r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n})\r\n\r\nconst SearchList= () => {\r\n const classes = useStyles()\r\n const { sort } = useSelector(getChat)\r\n const messages = useSelector(getMessages)\r\n const [value, setValue] = useState<string>('')\r\n const [date, setDate] = useState<any>('');\r\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>): void => setValue(e.target.value)\r\n\r\n const filteredMessages = (arr:TMessages) => arr.filter((el) => {\r\n if (!date) {\r\n return el.message.toLowerCase().includes(value.toLowerCase())\r\n } else if (el.message.toLowerCase().includes(value.toLowerCase())\r\n && timeStampFilter(date) === timeStampFilter(el.createdAt)) {\r\n return el\r\n }\r\n })\r\n \r\n const arr: TMessages = filteredMessages(handleSort('createdAt', messages, sort))\r\n \r\nreturn (\r\n <div className={classes.container}>\r\n <Search handleSearch={handleSearch} value={value}\r\n setDate={setDate} date={date} />\r\n <div className={messages.length > 0 ?classes.list:undefined}>\r\n {messages.length > 0 ? arr.length > 0 ?\r\n <List sx={{ width: '100%' }}>\r\n {arr.map(({ name, lastName, avatarUrl, color, message, createdAt }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 44, height: 44, marginRight:2 }}>\r\n {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={`${firstLetter(name)}${slicedWord(name, 15, 1)} \r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}\r\n secondary={<>\r\n <Typography\r\n sx={{ display: 'block',wordBreak:'break-word' }}\r\n component=\"span\"\r\n variant=\"body2\"\r\n color=\"text.primary\"\r\n >\r\n {message}\r\n </Typography>\r\n {timeStampEU(createdAt)}\r\n </>}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List> :\r\n <AlertInfo name={`Can not find message by request: ${value}`}/>:\r\n <AlertInfo name='You do not have messages yet!' />}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SearchList","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useState,useEffect } from 'react';\r\nimport { actionRightIsOpen } from '../../../../../../redux/control/action'\r\nimport { getContactsMemo } from '../../../../../../redux/contacts/selector'\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { asyncAddContact } from '../../../../../../redux/contacts/operations';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n height:'7vh'\r\n },\r\n iconClose: {\r\n '&:hover': {\r\n transform: 'rotate(180deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n }, \r\n})\r\n\r\nconst ToolBar = () => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n const contactsMemo = useSelector(getContactsMemo)\r\n const { number } = useSelector(getChat)\r\n const [isContact, setIsContact] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n const contact = contactsMemo.find((el) => el.number === number)\r\n if (contact) {\r\n setIsContact(true)\r\n } else {\r\n setIsContact(false)\r\n } \r\n }, [contactsMemo,number])\r\n \r\n return (\r\n <Stack className={classes.container} direction=\"row\">\r\n <IconButton onClick={() => dispatch(actionRightIsOpen(''))} aria-label=\"delete\" size=\"medium\">\r\n <CloseIcon className={classes.iconClose} fontSize='medium'/>\r\n </IconButton>\r\n <Typography variant=\"h6\" color=\"initial\" style={{marginLeft:20,color: '#474747'}}>Profile</Typography>\r\n <IconButton style={{marginLeft:'auto',marginRight:'3%'}} aria-label=\"delete\" size=\"medium\">\r\n {isContact ? <EditIcon onClick={() => dispatch(actionRightIsOpen('edit'))} fontSize='medium' /> :\r\n <PersonAddAltIcon onClick={() => dispatch(asyncAddContact(number))} fontSize='medium' />}\r\n </IconButton>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles } from '@material-ui/core'\r\nimport { useSelector } from 'react-redux';\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport { firstLetter,slicedWord,timeStampEU,prodBaseURL } from '../../../../../../helpers'\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'relative',\r\n },\r\n nameTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:8,\r\n fontSize: 18,\r\n zIndex:10,\r\n top: '6%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n },\r\n timeTile: {\r\n position:'absolute',\r\n color: '#ffffff',\r\n backgroundColor: 'rgb(0,0,0)',\r\n borderRadius: 10,\r\n padding:4,\r\n fontSize: 15,\r\n top: '1%',\r\n left: '50%', \r\n marginLeft: '-45%',\r\n opacity: 0.7,\r\n transition: 'opacity .35s ease-in-out'\r\n }, \r\n})\r\n\r\nconst ProfilePicture = () => {\r\n const classes = useStyles()\r\n const { name, lastName, online, avatarsArr} = useSelector(getChat)\r\n return (\r\n <div className={classes.container}>\r\n <Carousel>\r\n {avatarsArr.map(({avatarUrl,updatedAt}) => <div>\r\n <img alt='pic' src={`${prodBaseURL}/${avatarUrl}`}/>\r\n <p className=\"legend\">{timeStampEU(updatedAt)}</p>\r\n </div>)}\r\n </Carousel> \r\n <span className={classes.nameTile}>{`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>\r\n <span className={classes.timeTile}>{online === 'true'?'online':`last seen ${timeStampEU(online)}`}</span>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProfilePicture","import { useSelector } from 'react-redux';\r\nimport Paper from '@mui/material/Paper';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport NotificationsIcon from '@mui/icons-material/Notifications';\r\nimport SortIcon from '@mui/icons-material/Sort';\r\nimport Switch from '@mui/material/Switch';\r\nimport Divider from '@mui/material/Divider';\r\nimport AlternateEmailIcon from '@mui/icons-material/AlternateEmail';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { muteChat,sortChat } from '../../../../../../api-data'\r\nimport { copied,firstLetter,slicedWord } from '../../../../../../helpers';\r\n\r\nconst useStyles = makeStyles({\r\n listIcon: {\r\n marginRight: 15,\r\n },\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Switch demo' } };\r\n\r\nconst ProfileMenu = ({disabled}:{disabled:boolean}) => {\r\n const classes = useStyles()\r\n const { number, mute,sort,companionId,originalName,originalLastName } = useSelector(getChat)\r\n const handleMute = () => muteChat(companionId)\r\n const handleSort = () => sortChat(companionId)\r\n \r\n const credentials = `${firstLetter(originalName)}${slicedWord(originalName, 15, 1)}\r\n ${firstLetter(originalLastName)}${slicedWord(originalLastName, 15, 1)}`\r\n \r\n return (\r\n <Paper>\r\n <MenuList>\r\n <CopyToClipboard onCopy={() => copied('Number')} text={number}>\r\n <MenuItem>\r\n <ListItemIcon className={classes.listIcon}>\r\n <PhoneIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={number} secondary='Phone' />\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <Divider variant=\"inset\" />\r\n <CopyToClipboard onCopy={() => copied('Username')} text={credentials}>\r\n <MenuItem style={{cursor:'pointer'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <AlternateEmailIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={credentials} secondary='Username' />\r\n </MenuItem>\r\n </CopyToClipboard>\r\n <Divider variant=\"inset\"/> \r\n <MenuItem style={{cursor:'default'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <NotificationsIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary='Notification' />\r\n <Switch style={{ cursor:'pointer'}} onClick={handleMute} {...label} checked={!mute} />\r\n </MenuItem>\r\n <Divider variant=\"inset\" />\r\n <MenuItem disabled={disabled} style={{cursor:'default'}}>\r\n <ListItemIcon className={classes.listIcon}>\r\n <SortIcon fontSize=\"medium\" />\r\n </ListItemIcon>\r\n <ListItemText primary={`Sort by Date`} />\r\n <Switch style={{ cursor:'pointer'}} onClick={handleSort} {...label} checked={sort} />\r\n </MenuItem> \r\n </MenuList>\r\n </Paper>\r\n );\r\n}\r\n\r\nexport default ProfileMenu","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport LibraryMusicIcon from '@mui/icons-material/LibraryMusic';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\nconst AudioList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <LibraryMusicIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Audio yet!'/> \r\n}\r\n\r\nexport default AudioList","\r\nimport { makeStyles } from '@material-ui/core'\r\nimport { useState } from 'react';\r\nimport ImageListItem from '@mui/material/ImageListItem';\r\nimport DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline';\r\nimport { handleDownload,timeStampEU,prodBaseURL } from '../../../../../../../../helpers'\r\n\r\nconst useStyles = makeStyles({ \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n boxSizing: 'border-box',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n },\r\n wrapper: {\r\n width: '30%',\r\n maxHeight: '80%',\r\n position: 'relative',\r\n display: 'flex',\r\n },\r\n downloadIcon: {\r\n position: 'absolute',\r\n content: '',\r\n right: 0,\r\n top: -40,\r\n cursor: 'pointer',\r\n color: '#e9e7e7',\r\n padding: 0,\r\n borderRadius: '50%',\r\n '&:hover': {\r\n backgroundColor: '#ffffff',\r\n color: '#b8b7b7',\r\n }\r\n },\r\n img: {\r\n cursor:'pointer',\r\n '&:hover': {\r\n scale:0.98\r\n }\r\n },\r\n time: {\r\n position: 'absolute',\r\n content: '', \r\n color: '#ffffff',\r\n top: -30,\r\n left: 0,\r\n borderRadius: 10,\r\n padding:'2px 6px 2px 6px',\r\n backgroundColor:'#707070'\r\n }\r\n});\r\nconst MediaListItem = ({ message,fullType,updatedAt }: { message: string,fullType:string,updatedAt:string }) => {\r\n const classes = useStyles();\r\n const [watch, setWatch] = useState<boolean>(false)\r\n const handleOpenWatch = () => !watch && setWatch(true)\r\n const handleCloseWatch = (e:any) => e.target.id === 'overlay'&&watch&&setWatch(false)\r\n \r\n const url = `${prodBaseURL}/${message}`\r\n \r\n return (watch ?\r\n <div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>\r\n <div className={classes.wrapper}>\r\n <span className={classes.time}>{timeStampEU(updatedAt)}</span>\r\n <DownloadForOfflineIcon className={classes.downloadIcon} fontSize='large'\r\n onClick={() => handleDownload(url, fullType)}/>\r\n <img width='100%' height='auto' alt='imageItem' src={url} />\r\n </div>\r\n </div> :\r\n <ImageListItem>\r\n <img onClick={handleOpenWatch} className={classes.img}\r\n src={`${url}?w=164&h=164&fit=crop&auto=format`}\r\n srcSet={`${url}?w=164&h=164&fit=crop&auto=format&dpr=2 2x`}\r\n alt='imageItem' loading=\"lazy\" />\r\n </ImageListItem>\r\n \r\n )\r\n}\r\n\r\nexport default MediaListItem","import ImageList from '@mui/material/ImageList';\r\nimport MediaListItem from './MediaListItem';\r\n\r\nimport AlertInfo from '../../../../../../reusableComponents/AlertInfo';\r\nimport { TMessages } from '../../../../../../../typescript/redux/messages/types'\r\n\r\nconst MediaList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <ImageList sx={{ width: '100%', height: 'auto',overflow:'hidden' }} cols={3} rowHeight={164}>\r\n {filteredAndSorted.map(({message,createdAt,fullType,updatedAt}) => \r\n <MediaListItem key={createdAt} message={message} fullType={fullType} updatedAt={updatedAt}/>)}\r\n </ImageList>\r\n ): <AlertInfo name='You do not have Media yet!'/> \r\n}\r\n\r\nexport default MediaList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport FolderIcon from '@mui/icons-material/Folder';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\n\r\nconst FilesList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <FolderIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Files yet!'/> \r\n}\r\n\r\nexport default FilesList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Divider from '@mui/material/Divider';\r\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,firstLetter,copied,prodBaseURL } from '../../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n },\r\n copyIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n }, \r\n})\r\n\r\nconst TextList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n \r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, lastName, name, color, avatarUrl }) =>\r\n <div key={createdAt}>\r\n <ListItem alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n </ListItemAvatar>\r\n <ListItemText style={{ wordBreak: 'break-word',marginRight:2 }} primary={message}\r\n secondary={timeStampEU(createdAt)} secondaryTypographyProps={{color: '#020202',paddingTop:0.5}}\r\n />\r\n <CopyToClipboard onCopy={() => copied('Message')} text={message}>\r\n <ContentCopyIcon className={classes.copyIcon} fontSize='large' />\r\n </CopyToClipboard> \r\n </ListItem>\r\n <Divider variant=\"inset\" />\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Text yet!'/> \r\n}\r\n\r\nexport default TextList","import List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport VideoLibraryIcon from '@mui/icons-material/VideoLibrary';\r\nimport Divider from '@mui/material/Divider';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AlertInfo from '../../../../../../reusableComponents/AlertInfo';\r\nimport { timeStampEU,handleDownload,prodBaseURL } from '../../../../../../../helpers'\r\nimport { TMessages } from '../../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\n folderIcon: {\r\n color: '#54b0fc',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n color: '#016cc3'\r\n },\r\n },\r\n listItem: {\r\n '&:hover': {\r\n backgroundColor: '#f0f0f0',\r\n }\r\n }, \r\n})\r\nconst VideoList = ({ filteredAndSorted }: { filteredAndSorted: TMessages }) => {\r\n const classes = useStyles()\r\n\r\n return filteredAndSorted.length > 0 ?(\r\n <List>\r\n {filteredAndSorted.map(({ message, createdAt, fullType }) =>\r\n <div key={createdAt}>\r\n <ListItem key={createdAt} alignItems=\"flex-start\" className={classes.listItem}>\r\n <ListItemAvatar>\r\n <VideoLibraryIcon onClick={() =>\r\n handleDownload(`${prodBaseURL}/${message}`, fullType)}\r\n className={classes.folderIcon} fontSize='large' />\r\n </ListItemAvatar>\r\n <ListItemText\r\n primary={fullType}\r\n secondary={timeStampEU(createdAt)}\r\n />\r\n </ListItem>\r\n <Divider variant=\"inset\"/>\r\n </div>)}\r\n </List>\r\n ): <AlertInfo name='You do not have Audio yet!'/> \r\n}\r\n\r\nexport default VideoList","import { useState,useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nimport AudioList from './AudioList';\r\nimport MediaList from './MediaList';\r\nimport FilesList from './FilesList';\r\nimport TextList from './TextList';\r\nimport VideoList from './VideoList'\r\nimport { getMessagesMemo } from '../../../../../../redux/messages/selector'\r\nimport { handleSort } from '../../../../../../helpers';\r\nimport { getChat } from '../../../../../../redux/chat/selector'\r\nimport { TMessages } from '../../../../../../typescript/redux/messages/types'\r\n\r\nconst useStyles = makeStyles({\r\ncontainer: {\r\n borderBottom: 'solid 2px #dddddd',\r\n display: 'flex',\r\n justifyContent: 'space-around',\r\n alignContent: \"center\",\r\n alignItems:\"center\",\r\n flexWrap: 'nowrap',\r\n height:'7vh',\r\n color:'rgba(0, 0, 0, 0.6)'\r\n },\r\n item: {\r\n height:'100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignContent: \"center\",\r\n alignItems: \"center\",\r\n cursor:'pointer',\r\n },\r\nicon: {\r\n fontSize: '1rem',\r\n lineHeight: 0,\r\n marginBottom: 0,\r\n fontWeight:600\r\n },\r\nunderline: {\r\n fontSize: '2.5rem',\r\n lineHeight: 0,\r\n },\r\n})\r\n\r\nconst ProfileLists = ({setDisabled}:{setDisabled: React.Dispatch<boolean>,}) => {\r\n const classes = useStyles()\r\n const { sort } = useSelector(getChat)\r\n const messagesMemo = useSelector(getMessagesMemo)\r\n const [isActive, setIsActive] = useState<number>(0)\r\n const handleIsActive = (newValue: number): void => setIsActive(newValue)\r\n const filterBy = ['text', 'image', 'text', 'audio', 'video']\r\n \r\n const sorted: TMessages = handleSort('createdAt', messagesMemo, sort)\r\n const filteredAndSorted = sorted.filter((el) => {\r\n if (isActive !== 0) {\r\n if(el.type === filterBy[isActive]) return el\r\n } else {\r\n if(el.type !== filterBy[isActive]) return el\r\n }\r\n })\r\n \r\n useEffect(() => {\r\n setDisabled(filteredAndSorted.length > 0?false:true)\r\n }, [filteredAndSorted, setDisabled])\r\n \r\n return (\r\n <>\r\n <div className={classes.container}>\r\n <div className={classes.item} style={{color:isActive === 0?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(0)}>\r\n <span className={classes.icon}>Files</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 1?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(1)}>\r\n <span className={classes.icon}>Media</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 2?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(2)}>\r\n <span className={classes.icon}>Text</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 3?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(3)}>\r\n <span className={classes.icon}>Audio</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n <div className={classes.item} style={{color:isActive === 4?'#1976d2':\"rgba(0, 0, 0, 0.6)\"}}\r\n onClick={() => handleIsActive(4)}>\r\n <span className={classes.icon}>Video</span>\r\n <span className={classes.underline}>___</span>\r\n </div>\r\n </div>\r\n {isActive === 0 && <FilesList filteredAndSorted={filteredAndSorted}/>} \r\n {isActive === 1 && <MediaList filteredAndSorted={filteredAndSorted}/>}\r\n {isActive === 2 && <TextList filteredAndSorted={filteredAndSorted}/>}\r\n {isActive === 3 && <AudioList filteredAndSorted={filteredAndSorted} />}\r\n {isActive === 4 && <VideoList filteredAndSorted={filteredAndSorted}/>}\r\n </> \r\n )\r\n}\r\n\r\nexport default ProfileLists","import { makeStyles } from '@material-ui/core'\r\nimport { useState, useEffect } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ToolBar from './ToolBar'\r\nimport ProfilePicture from './ProfilePicture'\r\nimport ProfileMenu from './ProfileMenu'\r\nimport ProfileLists from './ProfileLists'\r\nimport { asyncGetContacts } from '../../../../../redux/contacts/operations'\r\nimport { getState } from '../../../../../redux/control/selector'\r\nimport { refreshAppTime } from '../../../../../helpers'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n backgroundColor: '#ffffff',\r\n height: '100%',\r\n width:'100%',\r\n position:'relative'\r\n },\r\n scrollContainer: {\r\n overflowY: 'scroll',\r\n maxHeight: '93vh',\r\n width: '100%',\r\n '&::-webkit-scrollbar': {\r\n width: '0.4em'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',\r\n backgroundColor: '#eceeec',\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#ccc8c8',\r\n },\r\n \"&::-webkit-scrollbar-thumb:focus\": {\r\n backgroundColor: \"#959595\",\r\n },\r\n \"&::-webkit-scrollbar-thumb:active\": {\r\n backgroundColor: \"#959595\",\r\n }, \r\n },\r\n})\r\n\r\nconst CredentialsList = () => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const { leftIsOpen } = useSelector(getState)\r\n const [disabled, setDisabled] = useState<boolean>(false)\r\n\r\n useEffect(() => {\r\n const handleReset = () => leftIsOpen !== 'contacts'&&dispatch(asyncGetContacts())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen, dispatch]);\r\n \r\n return (\r\n <div className={classes.container}>\r\n <ToolBar />\r\n <div className={classes.scrollContainer}>\r\n <ProfilePicture />\r\n <ProfileMenu disabled={disabled}/>\r\n <ProfileLists setDisabled={setDisabled}/>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CredentialsList","import Stack from '@mui/material/Stack';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { makeStyles, Typography } from '@material-ui/core'\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { actionRightIsOpen } from '../../../../../../redux/control/action'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n height:'7vh',\r\n width: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#ffffff',\r\n },\r\n iconArrow: {\r\n '&:hover': {\r\n transform: 'rotate(360deg)',\r\n transition: 'all 250ms ease-out ',\r\n }\r\n },\r\n})\r\n\r\nconst ToolBar = () => {\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n\r\n return (\r\n <Stack className={classes.container} direction=\"row\" spacing={21}>\r\n <IconButton onClick={() => dispatch(actionRightIsOpen('credentials'))} aria-label=\"delete\" size=\"medium\">\r\n <ArrowBackIcon className={classes.iconArrow} fontSize='medium'/>\r\n </IconButton>\r\n <Typography style={{marginLeft:20,color: '#474747'}} variant=\"h6\" color=\"initial\">Edit chat</Typography>\r\n </Stack>\r\n )\r\n}\r\n\r\nexport default ToolBar","import { makeStyles, TextField, Typography } from '@material-ui/core'\r\nimport ListItemAvatar from '@mui/material/ListItemAvatar';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport { format,firstLetter,slicedWord,prodBaseURL } from '../../../../../../helpers'\r\nimport { TChat } from '../../../../../../typescript/redux/chat/types'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n alignContent:'center',\r\n flexDirection: 'column',\r\n width: '100%',\r\n margin: '0 auto',\r\n padding: 20,\r\n marginBottom:15,\r\n position: 'relative',\r\n backgroundColor: '#ffffff',\r\n },\r\n textField: {\r\n marginBottom:20\r\n },\r\n notifications: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'start',\r\n alignItems: 'start',\r\n marginBottom:'auto'\r\n },\r\n avatarArrow: {\r\n cursor: 'pointer',\r\n alignSelf: 'flex-end',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\nconst label = { inputProps: { 'aria-label': 'Checkbox demo' } };\r\n\r\ninterface IEditList {\r\n chat: TChat,\r\n name: string,\r\n setName: any,\r\n lastName: string,\r\n setLastName: any,\r\n mute: boolean,\r\n setMute: any,\r\n openBtn: boolean,\r\n setOpenBtn: any, \r\n}\r\n\r\nconst EditList = (props: IEditList) => {\r\n const classes = useStyles()\r\n const {chat,name,setName,lastName,setLastName,mute,setMute,openBtn,setOpenBtn} = props\r\n const { avatarUrl,color,originalName,originalLastName } = chat\r\n 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 { actionRightIsOpen } from '../../../../../../redux/control/action'\r\nimport { removeContact } from '../../../../../../api-data';\r\nimport { TContact } from '../../../../../../typescript/redux/contacts/types';\r\nimport { slicedWord,firstLetter,prodBaseURL } from '../../../../../../helpers';\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n padding: '20px 10px 20px 10px',\r\n backgroundColor: '#ffffff',\r\n },\r\n modalDelete: {\r\n background: '#ffffff',\r\n position: 'absolute',\r\n content:'',\r\n width: '20%',\r\n height:'auto',\r\n left: '40%',\r\n bottom: '48.5%',\r\n borderRadius: 10,\r\n padding: 10,\r\n display: 'flex',\r\n flexDirection:'column'\r\n }, \r\n overlay: {\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: 100,\r\n backgroundColor: 'rgba(104, 105, 104, 0.6)',\r\n overflowY: 'hidden',\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n alignContent: 'center',\r\n alignItems:'center'\r\n },\r\n})\r\n\r\nconst Delete = ({ isContact }:{ isContact:TContact}) => {\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const {_id,avatarUrl,color,name,lastName} = isContact\r\n const [modal,setModal] = useState<boolean>(false)\r\n const handleDeleteModal = (e: any) => {\r\n const id = e.target.id\r\n if (id === 'overlay' || id === 'cancel') return setModal(false)\r\n if (id === 'delete') {\r\n dispatch(actionRightIsOpen('credentials'))\r\n removeContact(_id)\r\n setModal(false)\r\n }\r\n } \r\n const handleOpenModal = () => setModal(true)\r\n return (\r\n <>\r\n <ul className={classes.container}>\r\n <MenuItem onClick={handleOpenModal} style={{fontSize:19,color:'#f02a2a'}} >\r\n <DeleteOutlineIcon fontSize='medium' style={{marginRight:27}}/>\r\n Delete contact\r\n </MenuItem> \r\n </ul>\r\n {modal&&<div onClick={handleDeleteModal} className={classes.overlay} id='overlay'>\r\n <div className={classes.modalDelete}>\r\n <div className={classes.titleWrapper}>\r\n <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}\r\n sx={{ background: color, width: 38, height: 38,marginRight:2}}>\r\n {`${firstLetter(name)}${firstLetter(lastName)}`}\r\n </Avatar>\r\n <h3 style={{color: '#2c2c2c'}}>Delete contact</h3>\r\n </div>\r\n <p style={{ color: '#050505' }}>{`Are you sure you want to delete contact\r\n ${`${firstLetter(name)}${slicedWord(name, 15, 1)}\r\n ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}?`}</p>\r\n <Button id='delete' variant=\"text\" color=\"error\" style={{fontWeight:500,fontSize:22}}>\r\n DELETE CONTACT\r\n </Button> \r\n <Button id='cancel' variant=\"text\" style={{fontWeight:500,fontSize:22}}>\r\n CANCEL\r\n </Button>\r\n </div> \r\n </div>}\r\n </>\r\n );\r\n}\r\n\r\nexport default Delete","import { makeStyles} from '@material-ui/core'\r\nimport Avatar from '@mui/material/Avatar';\r\nimport DoneIcon from '@mui/icons-material/Done';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n position: 'absolute',\r\n top: '92vh',\r\n left: 20,\r\n }, \r\n avatarArrow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgb(62, 149, 231)'\r\n }\r\n }\r\n})\r\n\r\nconst SubmitBtn = ({handleSubmit}:{handleSubmit:() => void}) => {\r\n const classes = useStyles() \r\n\r\n return (\r\n <div className={classes.container}>\r\n <Avatar onClick={handleSubmit} className={classes.avatarArrow}\r\n sx={{width: 56, height: 56,backgroundColor: 'rgb(41, 139, 231)',color: '#ffffff'}}>\r\n <DoneIcon fontSize=\"medium\" /> \r\n </Avatar>\r\n </div> \r\n )\r\n};\r\n\r\nexport default SubmitBtn;","import { makeStyles } from '@material-ui/core'\r\nimport { useState,useEffect } from 'react';\r\nimport { useSelector,useDispatch } 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 { getState } from '../../../../../redux/control/selector'\r\nimport { asyncGetContacts } from '../../../../../redux/contacts/operations'\r\nimport { getChat } from '../../../../../redux/chat/selector'\r\nimport { muteChat, updateContact } from '../../../../../api-data';\r\nimport { refreshAppTime } from '../../../../../helpers';\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 dispatch = useDispatch()\r\n const { leftIsOpen } = useSelector(getState)\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 handleReset = () => leftIsOpen !== 'contacts'&&dispatch(asyncGetContacts())\r\n handleReset()\r\n const idInterval = setInterval(handleReset, refreshAppTime);\r\n return () => clearInterval(idInterval);\r\n }, [leftIsOpen, dispatch]); \r\n\r\n 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 { getRightIsOpen } from '../../../../redux/control/selector'\r\n\r\n\r\nconst RightListsAndBars = () => {\r\n const rightIsOpen = useSelector(getRightIsOpen)\r\n return (\r\n <>\r\n {rightIsOpen === 'credentials' && <CredentialsList />}\r\n {rightIsOpen === 'search' && <SearchList />}\r\n {rightIsOpen === '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 { getRightIsOpen } 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 rightIsOpen = useSelector(getRightIsOpen)\r\n const { _id } = useSelector(getChatMemo)\r\n const handleRightIsOpen = rightIsOpen&&rightIsOpen !== 'menu'\r\n\r\n return _id?\r\n <Grid item lg={9} style={{display:'flex'}}>\r\n <Grid item lg={handleRightIsOpen?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={handleRightIsOpen?4:0}>\r\n <RightListsAndBars/>\r\n </Grid> \r\n </Grid>\r\n : <Grid item lg={9} className={classes.chatBar}/>\r\n}\r\n\r\nexport default RightBar","import Grid from '@mui/material/Grid'\r\nimport LeftBar from './LeftBar'\r\nimport RightBar from './RightBar'\r\nimport { makeStyles } from '@material-ui/core'\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n minHeight: '100vh',\r\n maxHeight: '100vh',\r\n },\r\n})\r\n\r\nconst HomePage = () => {\r\n const classes = useStyles()\r\n \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":""}