| import { useState, useEffect } from 'react' |
| import PropTypes from 'prop-types' |
|
|
| |
| import { useTheme } from '@mui/material/styles' |
| import { Box, List, Paper, Popper, ClickAwayListener } from '@mui/material' |
|
|
| |
| import PerfectScrollbar from 'react-perfect-scrollbar' |
|
|
| |
| import MainCard from 'ui-component/cards/MainCard' |
| import Transitions from 'ui-component/extended/Transitions' |
| import NavItem from 'layout/MainLayout/Sidebar/MenuList/NavItem' |
|
|
| import settings from 'menu-items/settings' |
|
|
| |
|
|
| const Settings = ({ chatflow, isSettingsOpen, anchorEl, onSettingsItemClick, onUploadFile, onClose }) => { |
| const theme = useTheme() |
| const [settingsMenu, setSettingsMenu] = useState([]) |
|
|
| const [open, setOpen] = useState(false) |
|
|
| useEffect(() => { |
| if (chatflow && !chatflow.id) { |
| const settingsMenu = settings.children.filter((menu) => menu.id === 'loadChatflow') |
| setSettingsMenu(settingsMenu) |
| } else if (chatflow && chatflow.id) { |
| const settingsMenu = settings.children |
| setSettingsMenu(settingsMenu) |
| } |
| }, [chatflow]) |
|
|
| useEffect(() => { |
| setOpen(isSettingsOpen) |
| }, [isSettingsOpen]) |
|
|
| |
| const items = settingsMenu.map((menu) => { |
| return ( |
| <NavItem |
| key={menu.id} |
| item={menu} |
| level={1} |
| navType='SETTINGS' |
| onClick={(id) => onSettingsItemClick(id)} |
| onUploadFile={onUploadFile} |
| /> |
| ) |
| }) |
|
|
| return ( |
| <> |
| <Popper |
| placement='bottom-end' |
| open={open} |
| anchorEl={anchorEl} |
| role={undefined} |
| transition |
| disablePortal |
| popperOptions={{ |
| modifiers: [ |
| { |
| name: 'offset', |
| options: { |
| offset: [170, 20] |
| } |
| } |
| ] |
| }} |
| sx={{ zIndex: 1000 }} |
| > |
| {({ TransitionProps }) => ( |
| <Transitions in={open} {...TransitionProps}> |
| <Paper> |
| <ClickAwayListener onClickAway={onClose}> |
| <MainCard border={false} elevation={16} content={false} boxShadow shadow={theme.shadows[16]}> |
| <PerfectScrollbar style={{ height: '100%', maxHeight: 'calc(100vh - 250px)', overflowX: 'hidden' }}> |
| <Box sx={{ p: 2 }}> |
| <List>{items}</List> |
| </Box> |
| </PerfectScrollbar> |
| </MainCard> |
| </ClickAwayListener> |
| </Paper> |
| </Transitions> |
| )} |
| </Popper> |
| </> |
| ) |
| } |
|
|
| Settings.propTypes = { |
| chatflow: PropTypes.object, |
| isSettingsOpen: PropTypes.bool, |
| anchorEl: PropTypes.any, |
| onSettingsItemClick: PropTypes.func, |
| onUploadFile: PropTypes.func, |
| onClose: PropTypes.func |
| } |
|
|
| export default Settings |
|
|