- Select Filter Options
+
-
-
>
);
};
diff --git a/src/pages/nearle/invoice/invoice.js b/src/pages/nearle/invoice/invoice.js
new file mode 100644
index 0000000..721749b
--- /dev/null
+++ b/src/pages/nearle/invoice/invoice.js
@@ -0,0 +1,541 @@
+import React, { useEffect, useState, useRef } from 'react';
+import HoverSocialCard from 'components/cards/statistics/HoverSocialCard';
+import { Empty } from 'antd';
+
+import {
+ Grid,
+ Button,
+ Divider,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TablePagination,
+ TableRow,
+ Tabs,
+ Tab,
+ Typography,
+ Box,
+ OutlinedInput,
+ InputAdornment,
+ IconButton,
+ Tooltip,
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ Stack,
+ Chip
+} from '@mui/material';
+import axios from 'axios';
+import dayjs from 'dayjs';
+import { useNavigate } from 'react-router-dom';
+import VisibilityIcon from '@mui/icons-material/Visibility';
+import { useTheme } from '@mui/material/styles';
+import { DateRangePicker } from 'mui-daterange-picker';
+import { addDays, addMonths, addWeeks, addYears, endOfMonth, endOfWeek, endOfYear, startOfMonth, startOfWeek, startOfYear } from 'date-fns';
+import Loader from 'components/Loader';
+import { DownloadOutlined, PrinterFilled } from '@ant-design/icons';
+import ReactToPrint from 'react-to-print';
+// import nearleLogo from '../../assets/images/nearleLogo.png';
+import { DashboardOutlined } from '@ant-design/icons';
+import { HiHandThumbDown, HiHandThumbUp } from 'react-icons/hi2';
+import LoadingIcons from 'react-loading-icons';
+
+import AddIcon from '@mui/icons-material/Add';
+import MainCard from 'components/MainCard';
+import { SearchOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons';
+import ClearIcon from '@mui/icons-material/Clear';
+
+const columns = [
+ { id: 'sno', label: 'sno' },
+ { id: 'client', label: 'client' },
+ { id: 'invoice ', label: 'Invoice Id ' },
+
+ {
+ id: 'invoice date',
+ label: 'invoice date',
+ align: 'left'
+ // format: (value) => value.toLocaleString("en-US"),
+ },
+ {
+ id: 'due date',
+ label: 'due date',
+ align: 'left'
+ // format: (value) => value.toLocaleString("en-US"),
+ },
+ {
+ id: 'itemcount',
+ label: 'Count',
+ align: 'left'
+ // format: (value) => typeof value === "number" && value.toFixed(2),
+ },
+
+ { id: 'amount', label: 'amount', align: 'right' },
+ { id: 'action', label: 'action', align: 'center' }
+];
+function CustomTabPanel(props) {
+ const { children, value, index, ...other } = props;
+
+ return (
+
+ {value === index && (
+
+ {children}
+
+ )}
+
+ );
+}
+function a11yProps(index) {
+ return {
+ id: `simple-tab-${index}`,
+ 'aria-controls': `simple-tabpanel-${index}`
+ };
+}
+function formatNumberToRupees(value) {
+ return new Intl.NumberFormat('en-IN', {
+ style: 'currency',
+ currency: 'INR',
+ minimumFractionDigits: 2
+ }).format(value);
+}
+const Invoice = () => {
+ const theme = useTheme();
+ const navigate = useNavigate();
+ const [page, setPage] = React.useState(0);
+ const [rowsPerPage, setRowsPerPage] = React.useState(10);
+ const [value, setValue] = React.useState(0);
+ const [content, setcontent] = React.useState('one');
+ const [opendate, setOpendate] = useState(false);
+ const [deliveryList, setDeliveryList] = useState([]);
+ const [predialog, setpredialog] = useState(false);
+ const [selected, setselected] = useState({});
+ const componentRef = useRef(null);
+ const [billStatus, setBillStatus] = useState(0);
+ const [isloader, setIsLoader] = useState(false);
+ const [insightdata, setinsightdata] = useState(false);
+ const [search, setSearch] = useState('');
+ const tenid = localStorage.getItem('tenantid');
+ 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);
+ };
+ }, []);
+
+ const handleChangePage = (event, newPage) => {
+ setPage(newPage);
+ };
+
+ const handleChangeRowsPerPage = (event) => {
+ setRowsPerPage(+event?.target?.value);
+ setPage(0);
+ };
+
+ const handleChange = (event, newValue) => {
+ setValue(newValue);
+ };
+
+ /* ============================================= || fetchinvoiceinsight| ============================================= */
+ const fetchinvoiceinsight = async () => {
+ try {
+ const insightResponse = await axios.get(`${process.env.REACT_APP_URL}/invoice/getinvoiceinsight/?tenantid=${tenid}`);
+ console.log('insightResponse', insightResponse.data.details);
+ setinsightdata(insightResponse.data.details);
+ } catch (error) {
+ console.log('insightResponse', error);
+ }
+ };
+ useEffect(() => {
+ fetchinvoiceinsight();
+ }, []);
+
+ /* ============================================= || fetchdeliverylist| ============================================= */
+ const fetchdeliverylist = async () => {
+ setIsLoader(true);
+ console.log('billstatus', billStatus);
+ try {
+ let url = `${process.env.REACT_APP_URL}/invoice/getallinvoice/?billstatus=${billStatus}&tenantid=${tenid}`;
+ const deliveyResponse = await axios.get(url);
+ console.log('fetchdeliverylist', deliveyResponse.data.details);
+ setDeliveryList(deliveyResponse.data.details);
+ setIsLoader(false);
+ } catch (error) {
+ console.log('fetchdeliverylist', error);
+ }
+ };
+ useEffect(() => {
+ fetchdeliverylist();
+ }, [billStatus]);
+ useEffect(() => {
+ console.log('selected', selected);
+ }, [selected]);
+
+ const filteredList = () => {
+ let filterdata = deliveryList.filter((data) => data.invoiceno.toLowerCase().includes(search.toLowerCase()));
+ setDeliveryList(filterdata);
+ };
+ useEffect(() => {
+ filteredList();
+ }, [search]);
+ return (
+ <>
+ {isloader && }
+
+
+ Invoice
+
+
+
+ {' '}
+ {
+ setValue(0);
+ setBillStatus(0);
+ setcontent('one');
+ }}
+ >
+
+ {' '}
+ {
+ setValue(1);
+ setBillStatus(1);
+ setcontent('two');
+ }}
+ >
+
+
+ {
+ setValue(2);
+ setBillStatus(2);
+ setcontent('three');
+ }}
+ >
+
+
+ {
+ setValue(3);
+ setBillStatus(3);
+ setcontent('four');
+ }}
+ >
+
+
+
+ {/* ============================================= || Invoice Table || ============================================= */}
+
+
+
+ {
+ setValue(0);
+ setBillStatus(0);
+ setcontent('one');
+ }}
+ />
+ {
+ setValue(1);
+ setBillStatus(1);
+ setcontent('two');
+ }}
+ />
+ {
+ setValue(2);
+ setBillStatus(2);
+ setcontent('three');
+ }}
+ />
+ {
+ setValue(3);
+ setBillStatus(3);
+ setcontent('four');
+ }}
+ />
+
+
+
+
+
+ {/*
+ setOpendate(true)}
+ >
+
+
+ */}
+
+
+ }
+ // secondary={}
+ sx={{ mt: 3 }}
+ >
+
+
+
+
+
+ {columns.map((column) => (
+
+ {column.label}
+
+ ))}
+
+
+
+ {deliveryList.length == 0 ? (
+ <>
+
+
+
+
+
+ >
+ ) : (
+ deliveryList.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((item, index) => (
+ //
+ // {columns.map((column) => {
+ // const value = row[column.id];
+ // return (
+ //
+ // {column.format && typeof value === "number"
+ // ? column.format(value)
+ // : value}
+ //
+ // );
+ // })}
+
+ //
+
+ {index + 1}
+
+ {item.tenantname}
+
+
+ {item.contactperson}{' '}
+
+
+
+ {item.invoiceno}
+
+
+
+ {dayjs(item.transactiondate).format('DD-MM-YYYY')}
+
+ {dayjs(item.transactiondate).format('hh:mm a')}
+
+
+
+
+ {dayjs(item.duedate).format('DD-MM-YYYY')}
+
+ {dayjs(item.duedate).format('hh:mm a')}
+
+
+
+
+ {' '}
+ {item.itemcount}
+
+
+ {formatNumberToRupees(item.totalamount)}
+
+
+ {
+ setIsLoader(true);
+ console.log('selected', item);
+ setselected(item);
+ setTimeout(() => {
+ setIsLoader(false);
+ // setpredialog(true);
+ navigate('/invoice/preview', {
+ state: item
+ });
+ }, 500);
+ }}
+ >
+
+ {' '}
+
+
+ ))
+ )}
+
+
+
+
+
+
+ {/* table pagination */}
+
+
+ >
+ );
+};
+
+export default Invoice;
diff --git a/src/pages/nearle/invoice/invoicePreview.js b/src/pages/nearle/invoice/invoicePreview.js
new file mode 100644
index 0000000..8c23a27
--- /dev/null
+++ b/src/pages/nearle/invoice/invoicePreview.js
@@ -0,0 +1,499 @@
+import React, { useRef, useState, useEffect } from 'react';
+import { useLocation } from 'react-router-dom';
+import { useTheme } from '@mui/material/styles';
+// import nearleLogo from '../../assets/images/nearleLogo.png';
+import logo_nearle1 from '../../../assets/images/logo-nearle1.png';
+import axios from 'axios';
+import dayjs from 'dayjs';
+import Loader from 'components/Loader';
+import { enqueueSnackbar } from 'notistack';
+import { DownloadOutlined, PrinterFilled } from '@ant-design/icons';
+import ReactToPrint, { useReactToPrint } from 'react-to-print';
+import { SearchOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons';
+import ArrowBackIcon from '@mui/icons-material/ArrowBack';
+// import jsPDF from 'jspdf';
+import { useNavigate } from 'react-router-dom';
+import { FaArrowLeft } from 'react-icons/fa6';
+import { FaIndianRupeeSign } from 'react-icons/fa6';
+
+// import autoTable from 'jspdf-autotable';
+import {
+ Grid,
+ Button,
+ Divider,
+ Table,
+ TableBody,
+ TableCell,
+ TableContainer,
+ TableHead,
+ TablePagination,
+ TableRow,
+ Tabs,
+ Tab,
+ Typography,
+ Box,
+ OutlinedInput,
+ InputAdornment,
+ IconButton,
+ Tooltip,
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ Stack,
+ Chip,
+ DialogActions,
+ TextField
+} from '@mui/material';
+
+const InvoicePreview = () => {
+ const [selected, setselected] = useState({});
+ const location = useLocation();
+ const navigate = useNavigate();
+ console.log('previewSelect', location.state);
+ const componentRef = useRef(null);
+ const [tabletype, settabletype] = useState(true);
+ const [paydialog, setpaydialog] = useState(false);
+ const [refnumber, setRefnumber] = useState('');
+ const [remarks, setRemarks] = useState('');
+ const theme = useTheme();
+ useEffect(() => {
+ setselected(location.state);
+ }, []);
+ // ================================================= || formatNumberToRupees || =================================================
+
+ function formatNumberToRupees(value) {
+ return new Intl.NumberFormat('en-IN', {
+ style: 'currency',
+ currency: 'INR',
+ minimumFractionDigits: 2
+ }).format(value);
+ }
+
+ useEffect(() => {
+ console.log('refnumber', refnumber);
+ console.log('remarks', remarks);
+ }, [refnumber, remarks]);
+
+ // ================================================= || updatePayment || =================================================
+
+ const updatePayment = async () => {
+ try {
+ const updateResponse = await axios.put(`${process.env.REACT_APP_URL}/invoice/updatestatus`, {
+ salesid: selected.salesid,
+ referenceno: refnumber,
+ referencedate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+ billstatus: 2,
+ paymentremarks: remarks
+ });
+ if (updateResponse.status) {
+ enqueueSnackbar(' Updated Successfully ', {
+ variant: 'success',
+ anchorOrigin: { vertical: 'top', horizontal: 'right' },
+ autoHideDuration: 1000
+ });
+ }
+ console.log('updateResponse', updateResponse);
+ } catch (error) {
+ console.log('updateResponse', error);
+ }
+ };
+
+ return (
+ <>
+
+ {/* // ================================================= || Invoice Details || ================================================= */}
+
+
+
+ {
+ navigate('/invoice');
+ }}
+ >
+
+
+
+
+
+
+ Invoice Details
+
+
+
+
+
+
+ {/* */}
+ (
+ }
+ variant="outlined"
+ color="primary"
+ sx={{
+ '&:hover': {
+ backgroundColor: 'primary.main',
+ color: 'primary.contrastText'
+ }
+ }}
+ >
+ Print
+
+ )}
+ 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 || ================================================= */}
+
+ >
+ );
+};
+
+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 = () => {
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==