diff --git a/package-lock.json b/package-lock.json index d29146e..2812484 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,11 +50,13 @@ "react-google-autocomplete": "^2.7.3", "react-icons": "^4.12.0", "react-intl": "^6.4.1", + "react-loading-icons": "^1.1.0", "react-redux": "^8.0.5", "react-router": "^6.10.0", "react-router-dom": "^6.10.0", "react-scripts": "^5.0.1", "react-timer-hook": "^3.0.5", + "react-to-print": "^2.15.1", "react-virtuoso": "^4.7.0", "react18-input-otp": "^1.1.3", "redux": "^4.2.1", @@ -16923,6 +16925,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-loading-icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz", + "integrity": "sha512-Y9eZ6HAufmUd8DIQd6rFrx5Bt/oDlTM9Nsjvf8YpajTa3dI8cLNU8jUN5z7KTANU+Yd6/KJuBjxVlrU2dMw33g==", + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/react-redux": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", @@ -17529,6 +17539,15 @@ "react-dom": ">=16.8.0" } }, + "node_modules/react-to-print": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.15.1.tgz", + "integrity": "sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw==", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -32278,6 +32297,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-loading-icons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz", + "integrity": "sha512-Y9eZ6HAufmUd8DIQd6rFrx5Bt/oDlTM9Nsjvf8YpajTa3dI8cLNU8jUN5z7KTANU+Yd6/KJuBjxVlrU2dMw33g==" + }, "react-redux": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", @@ -32678,6 +32702,12 @@ "integrity": "sha512-n+98SdmYvui2ne3KyWb3Ldu4k0NYQa3g/VzW6VEIfZJ8GAk/jJsIY700M8Nd2vNSTj05c7wKyQfJBqZ0x7zfiA==", "requires": {} }, + "react-to-print": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.15.1.tgz", + "integrity": "sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw==", + "requires": {} + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", diff --git a/package.json b/package.json index 5aa9a9a..160531b 100644 --- a/package.json +++ b/package.json @@ -45,11 +45,13 @@ "react-google-autocomplete": "^2.7.3", "react-icons": "^4.12.0", "react-intl": "^6.4.1", + "react-loading-icons": "^1.1.0", "react-redux": "^8.0.5", "react-router": "^6.10.0", "react-router-dom": "^6.10.0", "react-scripts": "^5.0.1", "react-timer-hook": "^3.0.5", + "react-to-print": "^2.15.1", "react-virtuoso": "^4.7.0", "react18-input-otp": "^1.1.3", "redux": "^4.2.1", diff --git a/src/layout/MainLayout/Drawer/DrawerContent/Navigation/NavCollapse.js b/src/layout/MainLayout/Drawer/DrawerContent/Navigation/NavCollapse.js index 82a1ad6..6d24c1c 100644 --- a/src/layout/MainLayout/Drawer/DrawerContent/Navigation/NavCollapse.js +++ b/src/layout/MainLayout/Drawer/DrawerContent/Navigation/NavCollapse.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import React, { useEffect, useState, useMemo } from 'react'; +import React, { useEffect, useState, useMemo, useRef } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; // material-ui @@ -117,7 +117,7 @@ const NavCollapse = ({ menu, level, parentId, setSelectedItems, selectedItems, s } } else { if (level === selectedLevel) { - setOpen(false); + // setOpen(false); if (!miniMenuOpened && !drawerOpen && !selected) { setSelected(null); } @@ -147,7 +147,7 @@ const NavCollapse = ({ menu, level, parentId, setSelectedItems, selectedItems, s }; useEffect(() => { - setOpen(false); + // setOpen(false); if (!miniMenuOpened) { setSelected(null); } @@ -228,7 +228,12 @@ const NavCollapse = ({ menu, level, parentId, setSelectedItems, selectedItems, s disableRipple selected={selected === menu.id} {...(!drawerOpen && { onMouseEnter: handleClick, onMouseLeave: handleClose })} - onClick={handleClick} + onClick={() => { + handleClick(); + if (open == true) { + setOpen(false); + } + }} sx={{ pl: drawerOpen ? `${level * 28}px` : 1.5, py: !drawerOpen && level === 1 ? 1.25 : 1, @@ -236,7 +241,7 @@ const NavCollapse = ({ menu, level, parentId, setSelectedItems, selectedItems, s ...(drawerOpen && { '&:hover': { // bgcolor: theme.palette.mode === ThemeMode.DARK ? 'divider' : 'primary.lighter' - bgcolor: '#7b1fa2' + bgcolor: theme.palette.mode === ThemeMode.DARK ? 'divider' : '#7b1fa2' }, '&.Mui-selected': { bgcolor: 'transparent', @@ -247,7 +252,6 @@ const NavCollapse = ({ menu, level, parentId, setSelectedItems, selectedItems, s ...(!drawerOpen && { '&:hover': { bgcolor: 'transparent' - // bgcolor:'#7b1fa2' }, '&.Mui-selected': { '&:hover': { diff --git a/src/layout/MainLayout/Drawer/DrawerHeader/index.js b/src/layout/MainLayout/Drawer/DrawerHeader/index.js index fab34d9..5f5a2c7 100644 --- a/src/layout/MainLayout/Drawer/DrawerHeader/index.js +++ b/src/layout/MainLayout/Drawer/DrawerHeader/index.js @@ -11,8 +11,8 @@ import Logo from 'components/logo'; import { MenuOrientation } from 'config'; import useConfig from 'hooks/useConfig'; -import logo from 'assets/images/logo-nearle9.png' -import logo1 from 'assets/images/logo-sm1.png' +import logo from 'assets/images/logo-nearle9.png'; +import logo1 from 'assets/images/logo-sm1.png'; // ==============================|| DRAWER HEADER ||============================== // const DrawerHeader = ({ open }) => { @@ -36,18 +36,16 @@ const DrawerHeader = ({ open }) => { > {/* */} - {(open) && - logo - } - {(!open) && - logo - } + {open && ( + logo + )} + {!open && logo} ); }; diff --git a/src/layout/MainLayout/Header/HeaderContent/index.js b/src/layout/MainLayout/Header/HeaderContent/index.js index 3bc5240..41606cb 100644 --- a/src/layout/MainLayout/Header/HeaderContent/index.js +++ b/src/layout/MainLayout/Header/HeaderContent/index.js @@ -1,9 +1,21 @@ -import { useMemo ,useState} from 'react'; +import { useMemo, useState } from 'react'; // material-ui -import { Box, useMediaQuery ,Stack,Tooltip,IconButton,Popper, - ClickAwayListener,List,ListItem,ListItemButton,ListItemText, - Grid,ListItemIcon,Typography +import { + Box, + useMediaQuery, + Stack, + Tooltip, + IconButton, + Popper, + ClickAwayListener, + List, + ListItem, + ListItemButton, + ListItemText, + Grid, + ListItemIcon, + Typography } from '@mui/material'; import Transitions from 'components/@extended/Transitions'; @@ -33,19 +45,19 @@ const HeaderContent = () => { // eslint-disable-next-line react-hooks/exhaustive-deps const megaMenu = useMemo(() => , []); - const [open, setOpen] = useState(false) + const [open, setOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const theme = useTheme(); // eslint-disable-next-line react-hooks/exhaustive-deps // const megaMenu = useMemo(() => , []); const iconBackColorOpen = 'grey.300'; const iconBackColor = 'grey.100'; -const navigate = useNavigate() + const navigate = useNavigate(); const handleToggle = (e) => { setOpen(!open); setAnchorEl(e.currentTarget); - } + }; const handleClickAway = () => { setOpen(false); }; @@ -53,108 +65,113 @@ const navigate = useNavigate() return ( <> {/* {!matchesXs && } */} - - {/* {!matchesXs && megaMenu} */} - {localStorage.getItem('firstname') || ''} - {matchesXs && } - - - - - - - - + {/* {!matchesXs && megaMenu} */} + + {localStorage.getItem('firstname') || ''} + + {matchesXs && } + + + + + + + + - - {/* + + {/* */} - + + {/* */} + - - - {/* */} - - - { - // console.log(const location = useLocation();) - navigate('/orders/create') - handleClickAway() - }} > - - - - - Create Order - - + [theme.breakpoints.down('md')]: { + maxWidth: 250 } - /> - - {/* + { + // console.log(const location = useLocation();) + navigate('/orders/create'); + handleClickAway(); + }} + > + + + + + Create Order + + } + /> + + {/* { navigate('/clients/create') @@ -172,26 +189,26 @@ const navigate = useNavigate() } /> */} - { - navigate('/customers/create') - handleClickAway() - }} > - - - - - Create Customer + { + navigate('/customers/create'); + handleClickAway(); + }} + > + + + + + Create Customer + + } + /> + - - } - /> - - - {/* + {/* { navigate('/create_order') handleClickAway() @@ -226,26 +243,23 @@ const navigate = useNavigate() */} - - - {/* */} - - - - + + + {/* */} + + + + + - - - - {/* */} - {/* {!matchesXs && } + {/* */} + {/* {!matchesXs && } {matchesXs && } */} - - - - - + + + + ); diff --git a/src/layout/MainLayout/Header/index.js b/src/layout/MainLayout/Header/index.js index f06d4d6..0e1b3a4 100644 --- a/src/layout/MainLayout/Header/index.js +++ b/src/layout/MainLayout/Header/index.js @@ -46,11 +46,16 @@ const Header = () => { // color="secondary" // variant="light" // sx={{ color: 'text.primary', bgcolor: drawerOpen ? iconBackColorOpen : iconBackColor, ml: { xs: 0, lg: -2 } }} - sx={{ color: '#fff', bgcolor: 'transparent', ml: { xs: 0, lg: -2 }, - fontSize:'25px', - ':hover':{ - color: '#fff', bgcolor: 'transparent' - } }} + sx={{ + color: '#fff', + bgcolor: 'transparent', + ml: { xs: 0, lg: -2 }, + fontSize: '25px', + ':hover': { + color: '#fff', + bgcolor: 'transparent' + } + }} > {!drawerOpen ? : } @@ -69,7 +74,7 @@ const Header = () => { zIndex: 1200, width: isHorizontal ? '100%' : drawerOpen ? 'calc(100% - 260px)' : { xs: '100%', lg: 'calc(100% - 60px)' }, // boxShadow: theme.customShadows.z1 - bgcolor:'#662582' + bgcolor: '#662582' } }; diff --git a/src/menu-items/other.js b/src/menu-items/other.js index 9d80823..a34d9a5 100644 --- a/src/menu-items/other.js +++ b/src/menu-items/other.js @@ -1,6 +1,9 @@ // third-party import { FormattedMessage } from 'react-intl'; import { AiOutlineBarChart } from 'react-icons/ai'; +import { AiOutlineDashboard } from 'react-icons/ai'; +import { TbListDetails } from 'react-icons/tb'; +import { LiaFileInvoiceSolid } from 'react-icons/lia'; // assets import { @@ -55,29 +58,36 @@ const other = { title: , type: 'item', url: '/orders', - icon: icons.ClockCircleOutlined + icon: AiOutlineDashboard }, { - id: 'Customers', + id: 'customers', title: , type: 'item', url: '/customers', icon: icons.UserOutlined }, { - id: 'Reports', + id: 'reports', title: , type: 'collapse', icon: AiOutlineBarChart, children: [ { - id: 'OrdersDetails', + id: 'ordersDetails', title: , type: 'item', url: 'reports/ordersdetails', - icon: icons.UserOutlined + icon: TbListDetails } ] + }, + { + id: 'invoice', + title: , + type: 'item', + url: '/invoice', + icon: LiaFileInvoiceSolid } // { diff --git a/src/pages/nearle/clients/clients1.js b/src/pages/nearle/clients/clients1.js index e121138..66a1ab3 100644 --- a/src/pages/nearle/clients/clients1.js +++ b/src/pages/nearle/clients/clients1.js @@ -1,13 +1,13 @@ -import React from "react"; -import { Avatar, Pagination, Tooltip, stepContentClasses } from "@mui/material"; -import { useEffect, useRef, useState, Fragment } from "react"; +import React from 'react'; +import { Avatar, Pagination, Tooltip, stepContentClasses } from '@mui/material'; +import { useEffect, useRef, useState, Fragment } from 'react'; // import { useTheme, styled } from "@mui/material/styles"; -import { useTheme } from "@mui/material/styles"; -import Skeleton from "@mui/material/Skeleton"; -import HeartFilled from "@mui/icons-material/Favorite"; +import { useTheme } from '@mui/material/styles'; +import Skeleton from '@mui/material/Skeleton'; +import HeartFilled from '@mui/icons-material/Favorite'; // import dayjs from "dayjs"; -import Loader from "components/Loader"; -import CloseIcon from "@mui/icons-material/Close"; +import Loader from 'components/Loader'; +import CloseIcon from '@mui/icons-material/Close'; import { FilterList } from '@mui/icons-material'; import { @@ -43,17 +43,17 @@ import { TableCell, TableBody, TableRow -} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; -import { MdPersonAdd } from "react-icons/md"; +} from '@mui/material'; +import ClearIcon from '@mui/icons-material/Clear'; +import { MdPersonAdd } from 'react-icons/md'; // import { MdAccountCircle } from "react-icons/md"; -import { MdPersonAddDisabled } from "react-icons/md"; +import { MdPersonAddDisabled } from 'react-icons/md'; // import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; // import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; // import { DatePicker } from "@mui/x-date-pickers/DatePicker"; -import { ThemeMode } from "config"; +import { ThemeMode } from 'config'; // import { FaUserLarge } from "react-icons/fa6"; -import { enqueueSnackbar } from "notistack"; +import { enqueueSnackbar } from 'notistack'; import { RightOutlined, LeftOutlined, @@ -81,29 +81,28 @@ import { ClockCircleFilled, MinusCircleFilled, DeleteFilled -} from "@ant-design/icons"; +} from '@ant-design/icons'; // import ChatDrawer from "sections/apps/chat/ChatDrawer"; // import ChatHistory from "sections/apps/chat/ChatHistory"; // import UserAvatar from "sections/apps/chat/UserAvatar"; // import UserDetails from "sections/apps/chat/UserDetails"; -import MainCard from "components/MainCard"; +import MainCard from 'components/MainCard'; // import IconButton from "components/@extended/IconButton"; // import SimpleBar from "components/third-party/SimpleBar"; -import { PopupTransition } from "components/@extended/Transitions"; -import axios from "axios"; +import { PopupTransition } from 'components/@extended/Transitions'; +import axios from 'axios'; // import HoverSocialCard from "../../pages/reports/HoverSocialCard"; import HoverSocialCard from 'components/cards/statistics/HoverSocialCard'; // import TasksCard from "sections/widget/data/TasksCard"; // import ApplicationSales from "sections/widget/data/ApplicationSales"; // import Button from "themes/overrides/Button"; -import { styled } from "@mui/material/styles"; +import { styled } from '@mui/material/styles'; // import TableRow from "themes/overrides/TableRow"; import dayjs from 'dayjs'; -var utc = require('dayjs/plugin/utc') -dayjs.extend(utc) -import { DateRangePicker } from "mui-daterange-picker"; - +var utc = require('dayjs/plugin/utc'); +dayjs.extend(utc); +import { DateRangePicker } from 'mui-daterange-picker'; import { addDays, @@ -114,7 +113,7 @@ import { endOfWeek, // endOfYear, startOfMonth, - startOfWeek, + startOfWeek // startOfYear, } from 'date-fns'; const drawerWidth = 320; @@ -141,28 +140,28 @@ const drawerWidth = 320; // ); const BootstrapDialog = styled(Dialog)(({ theme }) => ({ - "& .MuiDialog-paperWidthSm": { - maxWidth: "60%", - width: "100%", - margin: 0, + '& .MuiDialog-paperWidthSm': { + maxWidth: '60%', + width: '100%', + margin: 0 }, - "& .MuiDialogContent-root": { - padding: theme.spacing(2), - }, - "& .MuiDialogActions-root": { - padding: theme.spacing(1), + '& .MuiDialogContent-root': { + padding: theme.spacing(2) }, + '& .MuiDialogActions-root': { + padding: theme.spacing(1) + } })); const Clients1 = () => { const theme = useTheme(); - const [search, setSearch] = useState(""); + const [search, setSearch] = useState(''); const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [users, setUsers] = useState([]); - const [userName, setUserName] = useState(""); + const [userName, setUserName] = useState(''); const [usernameload, setUsernameload] = useState(false); - const [customerId, setCustomerId] = useState(""); + const [customerId, setCustomerId] = useState(''); const [custVisits, setCustVisits] = useState([]); const [custService, setCustService] = useState([]); const [custMembership, setCustMembership] = useState({}); @@ -171,39 +170,55 @@ const Clients1 = () => { const [promotions, setPromotions] = useState(0); const [discount, setDiscount] = useState(0); const [pageno, setPageno] = useState(1); - const [contactno, setContactno] = useState(""); + const [contactno, setContactno] = useState(''); const ref = useRef(null); const [open, setOpen] = React.useState(false); const [open3, setOpen3] = React.useState(false); const [packDays, setPackDays] = useState(0); - const [startDate, setStartDate] = useState(""); - const [validDate, setValidDate] = useState(""); - const [orderlist,setOrderlist]=useState([]); - const [allorders, setAllorders] = useState('') - const [coveredorders, setCoveredorders] = useState('') + const [startDate, setStartDate] = useState(''); + const [validDate, setValidDate] = useState(''); + const [orderlist, setOrderlist] = useState([]); + const [allorders, setAllorders] = useState(''); + const [coveredorders, setCoveredorders] = useState(''); const [uncoveredorders, setUncoveredorders] = useState(''); const [cancelled, setCancelled] = useState(''); - const [percentage1, setPercentage1] = useState('0') - const [percentage2, setPercentage2] = useState('0') - const [percentage3, setPercentage3] = useState('0') + const [percentage1, setPercentage1] = useState('0'); + const [percentage2, setPercentage2] = useState('0'); + const [percentage3, setPercentage3] = useState('0'); const [percentage4, setPercentage4] = useState('0'); - const [tempusers,setTempusers]=useState([]); + const [tempusers, setTempusers] = useState([]); - const [startdate, setStartdate] = useState( - dayjs().format('YYYY-MM-DD') - ); - const [enddate, setEnddate] = useState( - dayjs().format('YYYY-MM-DD') - ); + const [startdate, setStartdate] = useState(dayjs().format('YYYY-MM-DD')); + const [enddate, setEnddate] = useState(dayjs().format('YYYY-MM-DD')); - const [datestatus,setDatestatus]=useState('Today'); - const [tenid,setTenid]=useState(''); - const [loading1,setLoading1]=useState(false); - const [currentcustomerid,setCurrentcustomerid]=useState('') + const [datestatus, setDatestatus] = useState('Today'); + const [tenid, setTenid] = useState(''); + const [loading1, setLoading1] = useState(false); + const [currentcustomerid, setCurrentcustomerid] = useState(''); + /* ============================================= || handleKeyPress (ctrl+k)| ============================================= */ + const textFieldRef = useRef(null); + useEffect(() => { + const handleKeyPress = (event) => { + if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); + + textFieldRef.current.focus(); + } + if (event.key === 'Escape' && document.activeElement === textFieldRef.current) { + // Remove focus from the TextField + textFieldRef.current.blur(); + } + }; + document.addEventListener('keydown', handleKeyPress); + + return () => { + document.removeEventListener('keydown', handleKeyPress); + }; + }, []); const handleClickOpen = () => { setOpen(true); }; @@ -218,7 +233,7 @@ const Clients1 = () => { // const tenid = window.localStorage.getItem("tenantid"); useEffect(() => { // setUsernameload(false); - console.log("username", userName); + console.log('username', userName); }, [userName]); const [anchorEl, setAnchorEl] = useState(); @@ -239,20 +254,19 @@ const Clients1 = () => { useEffect(() => { if (localStorage.getItem('tenantid')) { - fetchtable(localStorage.getItem('tenantid')) - + fetchtable(localStorage.getItem('tenantid')); } -}, []) + }, []); -// useEffect(() => { -// if (tenid) { -// fetchData1(); -// } -// }, []); + // useEffect(() => { + // if (tenid) { + // fetchData1(); + // } + // }, []); useEffect(() => { if (tenid && !search) { - // fetchData1(); + // fetchData1(); } }, [pageno]); @@ -261,9 +275,7 @@ const Clients1 = () => { setLoading(true); try { await axios - .get( - `${process.env.REACT_APP_URL}/customers/search?tenantid=${tenid}&keyword=${search}` - ) + .get(`${process.env.REACT_APP_URL}/customers/search?tenantid=${tenid}&keyword=${search}`) .then((response) => { if (response.data.status) { setUsers(response.data.details || []); @@ -275,194 +287,185 @@ const Clients1 = () => { setLoading(false); }); } catch (error) { - console.error("Error fetching data:", error); + console.error('Error fetching data:', error); setLoading(false); } }; if (search.length > 2) { // fetchsearch(); } else if (!search) { - // fetchData1(); + // fetchData1(); setPageno(1); } }, [search]); - useEffect(()=>{ - + useEffect(() => { if (search) { let arr = tempusers.filter((val) => { - - return (val.firstname.toLowerCase().includes(search.toLowerCase()) + return ( + val.firstname.toLowerCase().includes(search.toLowerCase()) || // || val.deliveryaddress.toLowerCase().includes(searchword.toLowerCase()) // || val.customername.toLowerCase().includes(searchword.toLowerCase()) // || val.pickupaddress.toString().toLowerCase().includes(searchword.toLowerCase()) // || val.ordernotes.toString().toLowerCase().includes(searchword.toLowerCase()) - || val.contactno.toString().toLowerCase().includes(search.toLowerCase()) - - ) - }) - console.log(arr) - setUsers([...arr]) + val.contactno.toString().toLowerCase().includes(search.toLowerCase()) + ); + }); + console.log(arr); + setUsers([...arr]); } else { - setUsers([...tempusers]) + setUsers([...tempusers]); } + }, [search]); - },[search]) - - useEffect(()=>{ -if(tenid){ - fetchData(tenid) -} - },[startdate,enddate]) - + useEffect(() => { + if (tenid) { + fetchData(tenid); + } + }, [startdate, enddate]); const fetchpercentage = async (tid) => { - setLoading(true) + setLoading(true); try { // await axios.get(`${process.env.REACT_APP_URL}/orders/getordersummary/?tenantid=${tid}&fromdate=${startdate}&todate=${enddate}`) - await axios.get(`${process.env.REACT_APP_URL}/orders/getordersummary/?customerid=${tid}`) + await axios + .get(`${process.env.REACT_APP_URL}/orders/getordersummary/?customerid=${tid}`) .then((res) => { - console.log(res) + console.log(res); // setConfirmed(res.data.details.confirmed.toString()); // setModified(res.data.details.modified.toString()); - setAllorders(res.data.details.total.toString()) - setCoveredorders(res.data.details.delivered.toString()) + setAllorders(res.data.details.total.toString()); + setCoveredorders(res.data.details.delivered.toString()); - setCancelled(res.data.details.cancelled.toString()) - setUncoveredorders(res.data.details.pending.toString()) + setCancelled(res.data.details.cancelled.toString()); + setUncoveredorders(res.data.details.pending.toString()); // setActiveorders(res.data.details.assigned.toString()); // setAssigned(res.data.details.accepted.toString()); // setCreated(res.data.details.created.toString()) // setClosed(res.data.details.delivered.toString()); // setPicked(res.data.details.picked.toString()) - setPercentage1((Math.round((res.data.details.total / res.data.details.total) * 100) || 0).toString()) - setPercentage3((Math.round((res.data.details.delivered / res.data.details.total) * 100) || 0).toString()) + setPercentage1((Math.round((res.data.details.total / res.data.details.total) * 100) || 0).toString()); + setPercentage3((Math.round((res.data.details.delivered / res.data.details.total) * 100) || 0).toString()); - setPercentage4((Math.round((res.data.details.cancelled / res.data.details.total) * 100) || 0).toString()) + setPercentage4((Math.round((res.data.details.cancelled / res.data.details.total) * 100) || 0).toString()); - setPercentage2((Math.round((res.data.details.pending / res.data.details.total) * 100) || 0).toString()) + setPercentage2((Math.round((res.data.details.pending / res.data.details.total) * 100) || 0).toString()); - - setLoading(false) - }).catch((err) => { - console.log(err) - setLoading(false) + setLoading(false); + }) + .catch((err) => { + console.log(err); + setLoading(false); // enqueueSnackbar(err.message, { // variant: 'error', anchorOrigin: { vertical: 'top', horizontal: 'right' }, // autoHideDuration: 2000 // }) - }) - + }); } catch (err) { console.log(err); - setLoading(false) + setLoading(false); } - - } - + }; const removeclient = async () => { - setLoading(true) + setLoading(true); try { - await axios.delete(`${process.env.REACT_APP_URL}/customers/delete/?customerid=${currentcustomerid}`) - - .then((res) => { - if (res.data.status) { - enqueueSnackbar("Deleted Successfully", { - variant: 'success', anchorOrigin: { vertical: 'top', horizontal: 'right' }, - autoHideDuration: 2000 - }) - setCurrentcustomerid('') - // fetchtable(localStorage.getItem('tenantid')) - }else{ - enqueueSnackbar(res.data.message, { - variant: 'error', anchorOrigin: { vertical: 'top', horizontal: 'right' }, - autoHideDuration: 2000 - }) - } - setLoading(false) - - }).catch((err) => { - console.log(err) - enqueueSnackbar(err.message, { - variant: 'error', anchorOrigin: { vertical: 'top', horizontal: 'right' }, - autoHideDuration: 2000 - }) - setLoading(false) - - }) + await axios + .delete(`${process.env.REACT_APP_URL}/customers/delete/?customerid=${currentcustomerid}`) + .then((res) => { + if (res.data.status) { + enqueueSnackbar('Deleted Successfully', { + variant: 'success', + anchorOrigin: { vertical: 'top', horizontal: 'right' }, + autoHideDuration: 2000 + }); + setCurrentcustomerid(''); + // fetchtable(localStorage.getItem('tenantid')) + } else { + enqueueSnackbar(res.data.message, { + variant: 'error', + anchorOrigin: { vertical: 'top', horizontal: 'right' }, + autoHideDuration: 2000 + }); + } + setLoading(false); + }) + .catch((err) => { + console.log(err); + enqueueSnackbar(err.message, { + variant: 'error', + anchorOrigin: { vertical: 'top', horizontal: 'right' }, + autoHideDuration: 2000 + }); + setLoading(false); + }); } catch (err) { - console.log(err); - setLoading(false) - + console.log(err); + setLoading(false); } -} + }; const fetchtable = async (tid) => { - setLoading1(true) + setLoading1(true); try { - - // await axios.get(`${process.env.REACT_APP_URL}/tenants/gettenants/?partnerid=${tid}&status=active`) - await axios.get(`${process.env.REACT_APP_URL}/customers/getbytid/?tenantid=${tid}`) + // await axios.get(`${process.env.REACT_APP_URL}/tenants/gettenants/?partnerid=${tid}&status=active`) + await axios + .get(`${process.env.REACT_APP_URL}/customers/getbytid/?tenantid=${tid}`) + .then((res) => { + if (res.data.message === 'Success') { + let arr = []; + res.data.details.map((val, i) => { + arr = [...arr, { ...val, sno: i + 1 }]; + }); + // setArr(arr) + // setRows([...arr]) + // setStafflist([...arr]) + setUsers([...arr]); + setTempusers([...arr]); + // if(arr[0].customerid){ + setTenid(arr[0].customerid); + setUserName(arr[0].firstname || ''); + setContactno(arr[0].contactno || ''); + fetchpercentage(arr[0].customerid); + fetchData(arr[0].customerid); + // } - .then((res) => { - if (res.data.message === "Success") { - let arr = [] - res.data.details.map((val, i) => { - arr = [...arr, { ...val, sno: i + 1 }]; - }) - // setArr(arr) - // setRows([...arr]) - // setStafflist([...arr]) - setUsers([...arr]) - setTempusers([...arr]) - // if(arr[0].customerid){ - setTenid(arr[0].customerid) - setUserName(arr[0].firstname || ""); - setContactno(arr[0].contactno || ""); - fetchpercentage(arr[0].customerid); - fetchData(arr[0].customerid) - // } - - console.log(res.data.Details) - console.log(arr) - setLoading1(false) - } - - }).catch((err) => { - console.log(err) - setLoading1(false) - enqueueSnackbar(err.message, { - variant: 'error', anchorOrigin: { vertical: 'top', horizontal: 'right' }, - autoHideDuration: 2000 - }) - }) - + console.log(res.data.Details); + console.log(arr); + setLoading1(false); + } + }) + .catch((err) => { + console.log(err); + setLoading1(false); + enqueueSnackbar(err.message, { + variant: 'error', + anchorOrigin: { vertical: 'top', horizontal: 'right' }, + autoHideDuration: 2000 + }); + }); } catch (err) { - console.log(err); - setLoading1(false) - + console.log(err); + setLoading1(false); } -} + }; const fetchData1 = async () => { setLoading(true); try { await axios - .get( - `${process.env.REACT_APP_URL}/customers/getbytid?tenantid=${tenid}&pageno=${pageno}&pagesize=20` - ) + .get(`${process.env.REACT_APP_URL}/customers/getbytid?tenantid=${tenid}&pageno=${pageno}&pagesize=20`) .then((response) => { if (response.data.status) { setUsers( response.data.details // .slice(0, 10) ); - setUserName(response.data.details[0].firstname || ""); - setContactno(response.data.details[0].contactno || ""); + setUserName(response.data.details[0].firstname || ''); + setContactno(response.data.details[0].contactno || ''); fetchData(response.data.details[0].customerid); // fetchData(user.customerid); @@ -474,7 +477,7 @@ if(tenid){ setLoading(false); }); } catch (error) { - console.error("Error fetching data:", error); + console.error('Error fetching data:', error); setLoading(false); } }; @@ -506,69 +509,62 @@ if(tenid){ // } // }; - const fetchData = async (tid) => { - try { - await axios.get(`${process.env.REACT_APP_URL}/orders/customer/getorders/?customerid=${tid}&status=delivered&fromdate=${startdate}&todate=${enddate}`) + await axios + .get( + `${process.env.REACT_APP_URL}/orders/customer/getorders/?customerid=${tid}&status=delivered&fromdate=${startdate}&todate=${enddate}` + ) .then((res) => { - if (res.data.message === "Success") { - let arr = [] + if (res.data.message === 'Success') { + let arr = []; res.data.details.map((val, i) => { arr = [...arr, { ...val, sno: i + 1 }]; - }) + }); // setArruncovered(arr) - setOrderlist([...arr]) + setOrderlist([...arr]); } - - }).catch((err) => { - console.log(err) }) - + .catch((err) => { + console.log(err); + }); } catch (err) { console.log(err); } - - } + }; useEffect(() => { - console.log("packDays", packDays); - console.log("startDate", startDate); - const formattedDate = dayjs(startDate, "DD/MM/YYYY") - .add(packDays, "day") - .format("DD/MM/YYYY"); + console.log('packDays', packDays); + console.log('startDate', startDate); + const formattedDate = dayjs(startDate, 'DD/MM/YYYY').add(packDays, 'day').format('DD/MM/YYYY'); setValidDate(formattedDate); }, [packDays, startDate]); - function AlertCustomerDelete({ // title, - open, handleClose}) { + open, + handleClose + }) { // const [deletepassword, setDeletepassword] = useState(''); return ( - handleClose(false)} - maxWidth="xs" - - > - - - - - - {/* + handleClose(false)} maxWidth="xs"> + + + + + + {/* */} - - - Are you sure you want to Remove this Customer? - + + + Are you sure you want to Remove this Customer? + - {/* + {/* Please type in the order number to confirm. */} - {/* { console.log(e.target.value) @@ -577,33 +573,41 @@ if(tenid){ error={deletepassword !== orderid.slice(4)} value={deletepassword} /> */} + - - - - - - - - - - + + + + + + + ); -} + } return ( <> @@ -611,32 +615,29 @@ if(tenid){ - - - Customers - - + + + Customers + + */} setSearch(e.target.value)} // onChange={handleSearch} sx={{ - "& .MuiOutlinedInput-input": { - p: "10.5px 0px 12px", - }, + '& .MuiOutlinedInput-input': { + p: '10.5px 0px 12px' + } }} startAdornment={ - + } endAdornment={ - { - setSearch(""); - }} - > - - + + { + setSearch(''); + }} + > + + + } /> @@ -713,21 +717,21 @@ if(tenid){ {/* */} @@ -736,21 +740,11 @@ if(tenid){ {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((val1) => { return ( <> - - - - - + + + + + @@ -807,63 +801,47 @@ if(tenid){ { - setTenid(user.customerid) + setTenid(user.customerid); setUserName(user.firstname); setContactno(user.contactno); fetchData(user.customerid); - fetchpercentage(user.customerid) + fetchpercentage(user.customerid); }} > + {user.firstname} - + {/* {user.lastMessage} */} } secondary={ - + {user.contactno} @@ -934,13 +912,11 @@ if(tenid){ */} {/* */} - + - {users.length} Customers + {users.length} Customers - + {/* @@ -971,33 +947,30 @@ if(tenid){ // md={emailDetails ? 8 : 12} // xl={emailDetails ? 9 : 12} sx={{ - transition: theme.transitions.create("width", { + transition: theme.transitions.create('width', { easing: theme.transitions.easing.easeOut, - duration: theme.transitions.duration.shorter + 200, + duration: theme.transitions.duration.shorter + 200 // height: "100%", - }), + }) }} > - + - + {userName ? ( - - - {userName} - - + + {userName} + {contactno} ) : ( - - - + + + )} - - {custMembership.membershipid == 0 && - custMembership.startdate == "" ? ( + + {custMembership.membershipid == 0 && custMembership.startdate == '' ? ( <>{/*

No Membership Found

*/} ) : ( <> {custMembership.membershipid && ( <> - + } variant="caption" - label={ - custMembership.membershipno || "" - } + label={custMembership.membershipno || ''} style={{ - width: "auto", - height: "auto", + width: 'auto', + height: 'auto', - color: "black", - background: "white", + color: 'black', + background: 'white' }} /> - + - + @@ -1140,19 +1061,15 @@ if(tenid){ label={custMembership.string} color="error" style={{ - width: "auto", - height: "auto", + width: 'auto', + height: 'auto' }} /> - )}{" "} + )}{' '} )} - + @@ -1163,36 +1080,36 @@ if(tenid){ open={Boolean(anchorEl)} onClose={handleCloseSort} anchorOrigin={{ - vertical: "bottom", - horizontal: "right", + vertical: 'bottom', + horizontal: 'right' }} transformOrigin={{ - vertical: "top", - horizontal: "right", + vertical: 'top', + horizontal: 'right' }} sx={{ p: 0, - "& .MuiMenu-list": { - p: 0, - }, + '& .MuiMenu-list': { + p: 0 + } }} > {/* ======================================== || Add Membership dialog|| ======================================== */} @@ -1367,7 +1284,7 @@ if(tenid){ */} - {/* + {/* */} + ( + + )} + content={() => componentRef.current} + /> +
+
+ + {/* // ================================================= || Date row || ================================================= */} + + +
+ + + + + + {' '} + + + + + Invoice No : + + {`${'\u00a0\u00a0'}${selected.invoiceno}`} + + + + + + Date :{' '} + + + {dayjs(selected.transactiondate).format('DD-MM-YYYY')} + + + + + Due Date : + + {dayjs(selected.dueDate).format('DD-MM-YYYY')} + + + + {/* // ================================================= || from to || ================================================= */} + + + + + + + + + From: + + Nearle Technology Privite Limited. + + 424, 4thfloor, + + Red rose towers, + DB Road, RS Puram, + 641002. + care@nearle.in + 9047968666 + + + + + + + + + + + + To: + + {selected.tenantname} + {selected.address} + {selected.suburb} + {selected.city} + {selected.state}{' '} + + + + + + + + + + {/* // ================================================= || invoice table || ================================================= */} + + + + + + S.No + Date + Order Id + Pickup + Drop + {/* Customer + Contact no + KMS */} + Amount + + + {selected.tenantsalesdetails && ( + + {selected.tenantsalesdetails.map((item, index) => ( + + {index + 1} + + + {dayjs(item.orderdate).format('DD-MM-YYYY')} + + + {dayjs(item.orderdate).format('hh:mm a')} + + + + + {' '} + {item.orderid} + + + + {' '} + {item.pickup} + + + {item.drop} + + + {formatNumberToRupees(item.totalamount)} + + {/* + + {item.actualkms == "" || 0 + ? parseInt(item.kms).toFixed(1) + : parseInt(item.actualkms).toFixed(1)} + + */} + {/* + + {item.deliveryamt == "" || 0 + ? `₹ ${item.deliverycharges}.00` + : `₹ ${item.deliveryamt}.00`} + + */} + + ))} + + )} +
+
+ + + + + + + Sub Total: + {formatNumberToRupees(selected.salesamount)} + + + Discount: + + - {formatNumberToRupees(selected.discountamt)} + + + + Tax: + + + {formatNumberToRupees(selected.taxamount)} + + + + + Grand Total: + + {formatNumberToRupees(Math.round(selected.totalamount))} + + + + + +
+ + + Notes: {selected.remarks} + + + +
+
+ + {/* ================================================= || updatePayment Dialog || ================================================= */} + { + setpaydialog(false); + }} + maxWidth={'sm'} + fullWidth + > + + + + ₹ + + + Update Payment + + + + + + Reference No + { + setRefnumber(e.target.value); + }} + /> + + + Remarks + { + setRemarks(e.target.value); + }} + /> + + + + + + + + + ); +}; + +export default InvoicePreview; diff --git a/src/pages/nearle/orders/orders.js b/src/pages/nearle/orders/orders.js index 088a5b1..4e029d1 100644 --- a/src/pages/nearle/orders/orders.js +++ b/src/pages/nearle/orders/orders.js @@ -1,9 +1,7 @@ -// import React from 'react'; -// import Createstaff from 'pages/createstaff' +import * as React from 'react'; import { enqueueSnackbar } from 'notistack'; import { DeleteFilled, NotificationOutlined } from '@ant-design/icons'; - -import { useState, useEffect, Fragment } from 'react'; +import { useState, useEffect, Fragment, useRef } from 'react'; import { Empty } from 'antd'; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; @@ -52,28 +50,11 @@ import { Skeleton, CircularProgress, DialogActions - // Popper, - // ClickAwayListener - - // Checkbox } from '@mui/material'; import MainCard from 'components/MainCard'; -// import { useSelector } from 'store'; -// import { useDispatch } from 'react-redux'; - -import { - SearchOutlined, - EnvironmentOutlined, - UserOutlined, - // MoreOutlined , - CloseOutlined -} from '@ant-design/icons'; -import { PopupTransition } from 'components/@extended/Transitions'; - -// import FilterList from '@mui/icons-material/FilterList'; -import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; -import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; +import { SearchOutlined, CloseOutlined } from '@ant-design/icons'; +import ClearIcon from '@mui/icons-material/Clear'; import { addDays, @@ -88,52 +69,15 @@ import { // startOfYear, } from 'date-fns'; -// import { DateRangePicker } from '@mui/x-date-pickers-pro/DateRangePicker'; -// import { DesktopDateRangePicker } from '@mui/x-date-pickers-pro/DesktopDateRangePicker'; -// import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; -// import { DateRangePicker } from "mui-daterange-picker-orient"; import { DateRangePicker } from 'mui-daterange-picker'; - -// import EnhancedTable from 'components/tablemuiedit' -import { - // CloseOutlined, - // PlusOutlined, - EyeTwoTone - // EditTwoTone, - // DeleteTwoTone -} from '@ant-design/icons'; - import { useNavigate } from 'react-router'; - -import * as React from 'react'; import PropTypes from 'prop-types'; -// import { alpha } from '@mui/material/styles'; -// import Box from '@mui/material/Box'; -// import Table from '@mui/material/Table'; -// import TableBody from '@mui/material/TableBody'; -// import TableCell from '@mui/material/TableCell'; import TableContainer from '@mui/material/TableContainer'; -// import TableHead from '@mui/material/TableHead'; import TablePagination from '@mui/material/TablePagination'; -// import TableRow from '@mui/material/TableRow'; -// import TablePagination from '@mui/material/TablePagination'; import TableSortLabel from '@mui/material/TableSortLabel'; -// import Toolbar from '@mui/material/Toolbar'; -// import Typography from '@mui/material/Typography'; -// import Paper from '@mui/material/Paper'; -// import Checkbox from '@mui/material/Checkbox'; -// import IconButton from '@mui/material/IconButton'; -// import Tooltip from '@mui/material/Tooltip'; -// import FormControlLabel from '@mui/material/FormControlLabel'; -// // import Switch from '@mui/material/Switch'; -// import DeleteIcon from '@mui/icons-material/Delete'; -// import FilterListIcon from '@mui/icons-material/FilterList'; import { visuallyHidden } from '@mui/utils'; import Loader from 'components/Loader'; import { FilterList } from '@mui/icons-material'; -// import MainCard from 'components/MainCard'; -// import DialogTitle from 'themes/overrides/DialogTitle'; -// import MainCard from 'components/MainCard'; const Orders = () => { function descendingComparator(a, b, orderBy) { @@ -150,10 +94,6 @@ const Orders = () => { return order === 'desc' ? (a, b) => descendingComparator(a, b, orderBy) : (a, b) => -descendingComparator(a, b, orderBy); } - // Since 2020 all major browsers ensure sort stability with Array.prototype.sort(). - // stableSort() brings sort stability to non-modern browsers (notably IE11). If you - // only support modern browsers you can replace stableSort(exampleArray, exampleComparator) - // with exampleArray.slice().sort(exampleComparator) function stableSort(array, comparator) { const stabilizedThis = array.map((el, index) => [el, index]); stabilizedThis.sort((a, b) => { @@ -1073,7 +1013,6 @@ const Orders = () => { const [closed, setClosed] = useState(''); const [picked, setPicked] = useState(''); const [created, setCreated] = useState(''); - const [tabstatus, setTabstatus] = useState('Created'); const [loading, setLoading] = useState(true); const theme = useTheme(); @@ -1082,7 +1021,6 @@ const Orders = () => { let navigate = useNavigate(); const [open, setOpen] = useState(false); const [dateselect, setDateselect] = useState('select'); - // const [tabstatus1, setTabstatus1] = useState('All'); const [tabstatus1, setTabstatus1] = useState('Today'); @@ -1189,7 +1127,28 @@ const Orders = () => { const okclicked = () => { setOpen(false); }; + const textFieldRef = useRef(null); + /* ============================================= || handleKeyPress (ctrl+k)| ============================================= */ + + useEffect(() => { + const handleKeyPress = (event) => { + if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); + + textFieldRef.current.focus(); + } + if (event.key === 'Escape' && document.activeElement === textFieldRef.current) { + // Remove focus from the TextField + textFieldRef.current.blur(); + } + }; + document.addEventListener('keydown', handleKeyPress); + + return () => { + document.removeEventListener('keydown', handleKeyPress); + }; + }, []); useEffect(() => { var day = 60 * 60 * 24 * 1000; var startDate = new Date(); @@ -1958,23 +1917,36 @@ const Orders = () => { - - - } aria-describedby="header-search-text" inputProps={{ 'aria-label': 'weight' }} - placeholder="Search" + placeholder="Search (ctrl+k)" value={searchword} onChange={(e) => { setSearchword(e.target.value); }} autoComplete="off" + startAdornment={ + + + + } + endAdornment={ + + { + setSearchword(''); + }} + > + + + + } /> diff --git a/src/pages/nearle/reports/ordersDetails.js b/src/pages/nearle/reports/ordersDetails.js index 77a3c15..6b44342 100644 --- a/src/pages/nearle/reports/ordersDetails.js +++ b/src/pages/nearle/reports/ordersDetails.js @@ -458,16 +458,18 @@ export default function ordersDetails() { } endAdornment={ - { - setSearchword(''); - // setPages(1); - // fetchCustomersList(1); - }} - > - - + + { + setSearchword(''); + // setPages(1); + // fetchCustomersList(1); + }} + > + + + } /> diff --git a/src/routes/MainRoutes.js b/src/routes/MainRoutes.js index 80d2c46..a00ad63 100644 --- a/src/routes/MainRoutes.js +++ b/src/routes/MainRoutes.js @@ -31,6 +31,9 @@ const Createorder1 = Loadable(lazy(() => import('pages/nearle/orders/createorder const OrdersDetails = Loadable(lazy(() => import('pages/nearle/reports/ordersDetails'))); +const Invoice = Loadable(lazy(() => import('pages/nearle/invoice/invoice'))); +const InvoicePreview = Loadable(lazy(() => import('../pages/nearle/invoice/invoicePreview'))); + // ==============================|| MAIN ROUTING ||============================== // const MainRoutes = { @@ -87,6 +90,14 @@ const MainRoutes = { { path: 'reports/ordersdetails', element: + }, + { + path: 'invoice', + element: + }, + { + path: 'invoice/preview', + element: } ] }, diff --git a/yarn.lock b/yarn.lock index e4d9339..72da94b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9159,7 +9159,7 @@ react-dnd@^16.0.1: fast-deep-equal "^3.1.3" hoist-non-react-statics "^3.3.2" -react-dom@*, "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", react-dom@^17.0.2, react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 0.14.0", "react-dom@>=16 || >=17 || >= 18", react-dom@>=16.0.0, react-dom@>=16.11.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=16.9.0, "react-dom@16.2.0 - 18": +react-dom@*, "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", react-dom@^17.0.2, react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 0.14.0", "react-dom@>=16 || >=17 || >= 18", react-dom@>=16.0.0, react-dom@>=16.11.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=16.9.0, "react-dom@16.2.0 - 18": version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -9238,6 +9238,11 @@ react-is@^18.2.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-loading-icons@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz" + integrity sha512-Y9eZ6HAufmUd8DIQd6rFrx5Bt/oDlTM9Nsjvf8YpajTa3dI8cLNU8jUN5z7KTANU+Yd6/KJuBjxVlrU2dMw33g== + "react-redux@^7.2.1 || ^8.0.2", react-redux@^8.0.5: version "8.0.5" resolved "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz" @@ -9330,6 +9335,11 @@ react-timer-hook@^3.0.5: resolved "https://registry.npmjs.org/react-timer-hook/-/react-timer-hook-3.0.5.tgz" integrity sha512-n+98SdmYvui2ne3KyWb3Ldu4k0NYQa3g/VzW6VEIfZJ8GAk/jJsIY700M8Nd2vNSTj05c7wKyQfJBqZ0x7zfiA== +react-to-print@^2.15.1: + version "2.15.1" + resolved "https://registry.npmjs.org/react-to-print/-/react-to-print-2.15.1.tgz" + integrity sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw== + react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" @@ -9345,7 +9355,7 @@ react-virtuoso@^4.7.0: resolved "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.7.0.tgz" integrity sha512-cpgvI1rSOETGDMhqVAVDuH+XHbWO1uIGKv5I6l4CyC71xWYUeGrE5n7sgTZklROB4+Vbv85pcgfWloTlY48HGQ== -react@*, "react@^16.6.0 || 17 || 18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", "react@^17.0.0 || ^18.0.0", react@^17.0.2, react@^18.0.0, react@^18.2.0, "react@>= 0.14.0", "react@>= 16", "react@>= 16.14", "react@>=16 || >=17 || >= 18", react@>=16.0.0, react@>=16.11.0, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.9.0, "react@16.2.0 - 18": +react@*, "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", "react@^17.0.0 || ^18.0.0", react@^17.0.2, react@^18.0.0, react@^18.2.0, "react@>= 0.14.0", "react@>= 16", "react@>= 16.14", "react@>=16 || >=17 || >= 18", react@>=16.0.0, react@>=16.11.0, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.9.0, "react@16.2.0 - 18": version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==