// ** React Imports import { useState, useRef, HTMLAttributes } from 'react' // ** MUI Imports import Box from '@mui/material/Box' import Chip from '@mui/material/Chip' import List from '@mui/material/List' import Menu from '@mui/material/Menu' import Input from '@mui/material/Input' import Button from '@mui/material/Button' import Drawer from '@mui/material/Drawer' import MenuItem from '@mui/material/MenuItem' import ListItem from '@mui/material/ListItem' import TextField from '@mui/material/TextField' import IconButton from '@mui/material/IconButton' import Typography from '@mui/material/Typography' import InputLabel from '@mui/material/InputLabel' import ButtonGroup from '@mui/material/ButtonGroup' import Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete' // ** Icon Imports import Icon from 'src/@core/components/icon' // ** Third Party Components import { EditorState } from 'draft-js' // ** Custom Components Imports import OptionsMenu from 'src/@core/components/option-menu' import CustomAvatar from 'src/@core/components/mui/avatar' import ReactDraftWysiwyg from 'src/@core/components/react-draft-wysiwyg' // ** Styled Component Imports import { EditorWrapper } from 'src/@core/styles/libs/react-draft-wysiwyg' // ** Types import { MailComposeType, FieldMenuItems } from 'src/types/apps/emailTypes' // ** Utils Import import { getInitials } from 'src/@core/utils/get-initials' // ** Styles import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' interface MailFields { cc: boolean bcc: boolean } const menuItemsArr = [ { name: 'Ross Geller', value: 'ross', src: '/images/avatars/1.png' }, { name: 'Pheobe Buffay', value: 'pheobe', src: '/images/avatars/2.png' }, { name: 'Joey Tribbiani', value: 'joey', src: '/images/avatars/3.png' }, { name: 'Rachel Green', value: 'rachel', src: '/images/avatars/4.png' }, { name: 'Chandler Bing', value: 'chandler', src: '/images/avatars/5.png' }, { name: 'Monica Geller', value: 'monica', src: '/images/avatars/8.png' } ] const filter = createFilterOptions() const ComposePopup = (props: MailComposeType) => { // ** Props const { mdAbove, composeOpen, composePopupWidth, toggleComposeOpen } = props // ** States const [emailTo, setEmailTo] = useState([]) const [ccValue, setccValue] = useState([]) const [subjectValue, setSubjectValue] = useState('') const [bccValue, setbccValue] = useState([]) const [sendBtnOpen, setSendBtnOpen] = useState(false) const [messageValue, setMessageValue] = useState(EditorState.createEmpty()) const [visibility, setVisibility] = useState({ cc: false, bcc: false }) // ** Ref const anchorRefSendBtn = useRef(null) const toggleVisibility = (value: 'cc' | 'bcc') => setVisibility({ ...visibility, [value]: !visibility[value] }) const handleSendMenuItemClick = () => { setSendBtnOpen(false) } const handleSendBtnToggle = () => { setSendBtnOpen(prevOpen => !prevOpen) } const handleMailDelete = (value: string, state: FieldMenuItems[], setState: (val: FieldMenuItems[]) => void) => { const arr = state const index = arr.findIndex((i: FieldMenuItems) => i.value === value) arr.splice(index, 1) setState([...arr]) } const handlePopupClose = () => { toggleComposeOpen() setEmailTo([]) setccValue([]) setbccValue([]) setSubjectValue('') setMessageValue(EditorState.createEmpty()) setVisibility({ cc: false, bcc: false }) } const handleMinimize = () => { toggleComposeOpen() setEmailTo(emailTo) setccValue(ccValue) setbccValue(bccValue) setVisibility(visibility) setMessageValue(messageValue) setSubjectValue(subjectValue) } const renderCustomChips = ( array: FieldMenuItems[], getTagProps: ({ index }: { index: number }) => {}, state: FieldMenuItems[], setState: (val: FieldMenuItems[]) => void ) => { return array.map((item, index) => ( } onDelete={() => handleMailDelete(item.value, state, setState)} /> )) } const renderListItem = ( props: HTMLAttributes, option: FieldMenuItems, array: FieldMenuItems[], setState: (val: FieldMenuItems[]) => void ) => { return ( setState([...array, option])}> {option.src.length ? ( ) : ( {getInitials(option.name)} )} {option.name} ) } const addNewOption = (options: FieldMenuItems[], params: any): FieldMenuItems[] => { const filtered = filter(options, params) const { inputValue } = params const isExisting = options.some(option => inputValue === option.name) if (inputValue !== '' && !isExisting) { filtered.push({ name: inputValue, value: inputValue, src: '' }) } // @ts-ignore return filtered } return ( `${theme.zIndex.drawer} + 1`, '& .MuiDrawer-paper': { borderRadius: 1, position: 'static', width: composePopupWidth } }} > `rgba(${theme.palette.customColors.main}, 0.08)` }} > Compose Mail `1px solid ${theme.palette.divider}` }} >
To:
(option as FieldMenuItems).name as string} renderOption={(props, option) => renderListItem(props, option, emailTo, setEmailTo)} renderTags={(array: FieldMenuItems[], getTagProps) => renderCustomChips(array, getTagProps, emailTo, setEmailTo) } sx={{ width: '100%', '& .MuiOutlinedInput-root': { p: 2 }, '& .MuiAutocomplete-endAdornment': { display: 'none' } }} renderInput={params => ( )} />
toggleVisibility('cc')}> Cc | toggleVisibility('bcc')}> Bcc
{visibility.cc ? ( `1px solid ${theme.palette.divider}` }} >
Cc:
) : null} {visibility.bcc ? ( `1px solid ${theme.palette.divider}` }} >
Bcc:
) : null} `1px solid ${theme.palette.divider}` }} >
Subject:
setSubjectValue(e.target.value)} sx={{ '&:before, &:after': { display: 'none' }, '& .MuiInput-input': { py: 1.875 } }} />
setMessageValue(editorState)} placeholder='Message' toolbar={{ options: ['inline', 'textAlign'], inline: { inDropdown: false, options: ['bold', 'italic', 'underline', 'strikethrough'] } }} /> `1px solid ${theme.palette.divider}` }} > Schedule Send Save as Draft
) } export default ComposePopup