|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import React, { useState, useRef, useEffect } from 'react'; | 
|---|
|  |  |  | import { useTranslate } from "react-admin"; | 
|---|
|  |  |  | import { Drawer, Box, Typography, Tabs, Tab, IconButton, Stack, useTheme, Card, CardContent, Divider } from '@mui/material'; | 
|---|
|  |  |  | import CloseIcon from '@mui/icons-material/Close'; | 
|---|
|  |  |  | import { PAGE_DRAWER_WIDTH } from '@/config/setting'; | 
|---|
|  |  |  | import MapSettings from './MapSettings'; | 
|---|
|  |  |  | import ConfigSettings from './ConfigSettings'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const Settings = (props) => { | 
|---|
|  |  |  | const { open, onCancel } = props; | 
|---|
|  |  |  | const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH, title, setSpriteSettings } = props; | 
|---|
|  |  |  | const theme = useTheme(); | 
|---|
|  |  |  | const themeMode = theme.palette.mode; | 
|---|
|  |  |  | const translate = useTranslate(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const [lastCopiedSprites, setLastCopiedSprites] = useState([]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleClose = () => { | 
|---|
|  |  |  | onCancel(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const [activeTab, setActiveTab] = useState(0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleTabChange = (event, newValue) => { | 
|---|
|  |  |  | setActiveTab(newValue); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | <> | 
|---|
|  |  |  | <Drawer | 
|---|
|  |  |  | variant="persistent" | 
|---|
|  |  |  | open={open} | 
|---|
|  |  |  | anchor="right" | 
|---|
|  |  |  | onClose={handleClose} | 
|---|
|  |  |  | sx={{ zIndex: 100, opacity: .8 }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | {open && ( | 
|---|
|  |  |  | <Box pt={12} width={{ xs: '100vW', sm: width }} height={'calc(100vh - 200px);'} mt={{ xs: 2, sm: 1 }} sx={{ | 
|---|
|  |  |  | }}> | 
|---|
|  |  |  | <Stack direction="row" p={2}> | 
|---|
|  |  |  | <Typography variant="h6" flex="1"> | 
|---|
|  |  |  | {sprite | 
|---|
|  |  |  | ? translate(`page.map.devices.${sprite?.data?.type?.toLowerCase()}`) + ' - ' + sprite?.data?.uuid | 
|---|
|  |  |  | : translate('page.map.settings.title')} | 
|---|
|  |  |  | </Typography> | 
|---|
|  |  |  | <IconButton onClick={handleClose} size="small"> | 
|---|
|  |  |  | <CloseIcon /> | 
|---|
|  |  |  | </IconButton> | 
|---|
|  |  |  | </Stack> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <Box p={3}> | 
|---|
|  |  |  | <Card sx={{ | 
|---|
|  |  |  | transition: '0.3s', | 
|---|
|  |  |  | boxShadow: themeMode === 'light' | 
|---|
|  |  |  | ? '0px 2px 8px rgba(0, 0, 0, 0.1)' | 
|---|
|  |  |  | : '0px 2px 2px rgba(255, 255, 255, 0.1)', | 
|---|
|  |  |  | '&:hover': { | 
|---|
|  |  |  | boxShadow: themeMode === 'light' | 
|---|
|  |  |  | ? '0px 4px 16px rgba(0, 0, 0, 0.2)' | 
|---|
|  |  |  | : '0px 4px 8px rgba(255, 255, 255, 0.2)', | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | borderRadius: '8px', | 
|---|
|  |  |  | }}> | 
|---|
|  |  |  | <CardContent> | 
|---|
|  |  |  | <Tabs | 
|---|
|  |  |  | value={activeTab} | 
|---|
|  |  |  | onChange={handleTabChange} | 
|---|
|  |  |  | indicatorColor="primary" | 
|---|
|  |  |  | textColor="primary" | 
|---|
|  |  |  | variant="fullWidth" | 
|---|
|  |  |  | sx={{ mb: 2 }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Tab label={translate('page.map.settings.map.title')} /> | 
|---|
|  |  |  | <Tab label={translate('page.map.settings.config.title')} /> | 
|---|
|  |  |  | </Tabs> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <Divider /> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <Box p={3}> | 
|---|
|  |  |  | {activeTab === 0 && ( | 
|---|
|  |  |  | <MapSettings | 
|---|
|  |  |  | sprite={sprite} | 
|---|
|  |  |  | setSpriteSettings={setSpriteSettings} | 
|---|
|  |  |  | onSubmit={() => { | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | width={width} | 
|---|
|  |  |  | lastCopiedSprites={lastCopiedSprites} | 
|---|
|  |  |  | setLastCopiedSprites={setLastCopiedSprites} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | {activeTab === 1 && ( | 
|---|
|  |  |  | <ConfigSettings | 
|---|
|  |  |  | sprite={sprite} | 
|---|
|  |  |  | onSubmit={() => { | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </CardContent> | 
|---|
|  |  |  | </Card> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | </Drawer> | 
|---|
|  |  |  | </> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export default Settings; | 
|---|