UNPKG

@diagramers/admin

Version:

Diagramers Admin Template - React starter for admin dashboards.

74 lines (67 loc) 2.6 kB
import React, { useState } from 'react'; import classNames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { MENU_BEHAVIOUR } from 'constants.js'; import CsLineIcons from 'cs-line-icons/CsLineIcons'; import { settingsChangeColor } from 'settings/settingsSlice'; import IconMenuNotifications from './notifications/Notifications'; import SearchModal from './search/SearchModal'; import { menuChangeBehaviour } from './main-menu/menuSlice'; const NavIconMenu = () => { const { pinButtonEnable, behaviour } = useSelector((state) => state.menu); const { color } = useSelector((state) => state.settings); const dispatch = useDispatch(); const onPinButtonClick = (e) => { e.preventDefault(); e.stopPropagation(); if (pinButtonEnable) { dispatch(menuChangeBehaviour(behaviour === MENU_BEHAVIOUR.Pinned ? MENU_BEHAVIOUR.Unpinned : MENU_BEHAVIOUR.Pinned)); } return false; }; const onDisabledPinButtonClick = (e) => { e.preventDefault(); e.stopPropagation(); }; const onLightDarkModeClick = (e) => { e.preventDefault(); e.stopPropagation(); dispatch(settingsChangeColor(color.includes('light') ? color.replace('light', 'dark') : color.replace('dark', 'light'))); }; const [showSearchModal, setShowSearchModal] = useState(false); const onSearchIconClick = (e) => { e.preventDefault(); setShowSearchModal(true); }; return ( <> <ul className="list-unstyled list-inline text-center menu-icons"> <li className="list-inline-item"> <a href="#/" onClick={onSearchIconClick}> <CsLineIcons icon="search" size="18" /> </a> </li> <li className="list-inline-item"> <a href="#/" id="pinButton" onClick={pinButtonEnable ? onPinButtonClick : onDisabledPinButtonClick} className={classNames('pin-button', { disabled: !pinButtonEnable })} > <CsLineIcons icon="lock-on" size="18" className="unpin" /> <CsLineIcons icon="lock-off" size="18" className="pin" /> </a> </li> <li className="list-inline-item"> <a href="#/" id="colorButton" onClick={onLightDarkModeClick}> <CsLineIcons icon="light-on" size="18" className="light" /> <CsLineIcons icon="light-off" size="18" className="dark" /> </a> </li> <IconMenuNotifications /> </ul> <SearchModal show={showSearchModal} setShow={setShowSearchModal} /> </> ); }; export default React.memo(NavIconMenu);