// ** React Imports import { Fragment, useEffect, useState } from 'react' import { Link } from 'react-router-dom' // ** Third Party Components import * as Icon from 'react-feather' import classnames from 'classnames' import Autocomplete from '@components/autocomplete' import { NavItem, NavLink, UncontrolledTooltip, UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip } from 'reactstrap' // ** Store & Actions import { useDispatch, useSelector } from 'react-redux' import { getBookmarks, updateBookmarked, handleSearchQuery } from '@store/actions/navbar' const NavbarBookmarks = props => { // ** Props const { setMenuVisibility } = props // ** State const [value, setValue] = useState('') const [openSearch, setOpenSearch] = useState(false) // ** Store Vars const dispatch = useDispatch() const store = useSelector(state => state.navbar) // ** ComponentDidMount useEffect(() => { dispatch(getBookmarks()) }, []) // ** Function to toggle Theme (Light/Dark) const ThemeToggler = () => { if (props.skin === 'dark') { return props.setSkin('light')} /> } else { return props.setSkin('dark')} /> } } const [tooltipOpen, setTooltipOpen] = useState(false) const toggle = () => setTooltipOpen(!tooltipOpen) const [mailtpOpen, setMailtpOpen] = useState(false) const mailtoggle = () => setMailtpOpen(!mailtpOpen) const [smstpOpen, setSmstpOpen] = useState(false) const smstoggle = () => setSmstpOpen(!smstpOpen) const [doctpOpen, setDoctpOpen] = useState(false) const doctoggle = () => setDoctpOpen(!doctpOpen) const [markettpOpen, setMarkettpOpen] = useState(false) const markettoggle = () => setMarkettpOpen(!markettpOpen) const [zoomtpOpen, setZoomtpOpen] = useState(false) const zoomtoggle = () => setZoomtpOpen(!zoomtpOpen) const [linkedtpOpen, setLinkedtpOpen] = useState(false) const linkedtoggle = () => setLinkedtpOpen(!linkedtpOpen) const [swthemetpOpen, setSwitchThemetpOpen] = useState(false) const switchThemetoggle = () => setSwitchThemetpOpen(!swthemetpOpen) // ** Loops through Bookmarks Array to return Bookmarks const renderBookmarks = () => { if (store.bookmarks.length) { return store.bookmarks .map(item => { const IconTag = Icon[item.icon] return ( {item.title} ) }) .slice(0, 10) } else { return null } } // ** If user has more than 10 bookmarks then add the extra Bookmarks to a dropdown const renderExtraBookmarksDropdown = () => { if (store.bookmarks.length && store.bookmarks.length >= 11) { return ( {store.bookmarks .map(item => { const IconTag = Icon[item.icon] return ( {item.title} ) }) .slice(10)} ) } else { return null } } // ** Removes query in store const handleClearQueryInStore = () => dispatch(handleSearchQuery('')) // ** Loops through Bookmarks Array to return Bookmarks const onKeyDown = e => { if (e.keyCode === 27 || e.keyCode === 13) { setTimeout(() => { setOpenSearch(false) handleClearQueryInStore() }, 1) } } // ** Function to toggle Bookmarks const handleBookmarkUpdate = id => dispatch(updateBookmarked(id)) // ** Function to handle Bookmarks visibility const handleBookmarkVisibility = () => { setOpenSearch(!openSearch) setValue('') handleClearQueryInStore() } // ** Function to handle Input change const handleInputChange = e => { setValue(e.target.value) dispatch(handleSearchQuery(e.target.value)) } // ** Function to handle external Input click const handleExternalClick = () => { if (openSearch === true) { setOpenSearch(false) handleClearQueryInStore() } } // ** Function to clear input value const handleClearInput = setUserInput => { if (!openSearch) { setUserInput('') handleClearQueryInStore() } } return (
    Switch Theme
    Xero Email SMS Documents Marketting Zoom LinkedIn
    {renderExtraBookmarksDropdown()}
    {openSearch && store.suggestions.length ? ( handleClearInput(setUserInput)} onKeyDown={onKeyDown} value={value} onChange={handleInputChange} customRender={( item, i, filteredData, activeSuggestion, onSuggestionItemClick, onSuggestionItemHover ) => { const IconTag = Icon[item.icon ? item.icon : 'X'] return (
  • onSuggestionItemHover(filteredData.indexOf(item))} className={classnames('suggestion-item d-flex align-items-center justify-content-between', { active: filteredData.indexOf(item) === activeSuggestion })} > { setOpenSearch(false) handleClearQueryInStore() }} style={{ width: 'calc(90%)' }} >
    {item.title}
    handleBookmarkUpdate(item.id)} />
  • ) }} /> ) : null}
) } export default NavbarBookmarks