import React, { useState, useEffect, Fragment } from 'react'; import { Box, Drawer, IconButton, Toolbar, Typography, AppBar, useMediaQuery, Divider, List, ListItem, ListItemText, useTheme, ListItemAvatar, Stack, Button, Checkbox, Skeleton, Backdrop, Chip } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; import SearchBar from 'components/nearle_components/SearchBar'; import { useQuery } from '@tanstack/react-query'; import Loader from 'components/Loader'; import RiderLocationMap from './RiderLocationMap'; import MainCard from 'components/MainCard'; import dayjs from 'dayjs'; import TaskAltIcon from '@mui/icons-material/TaskAlt'; import error500 from 'assets/images/maintenance/Error500.png'; import { fetchRidersLogs } from '../api/api'; import CircularLoader from 'components/nearle_components/CircularLoader'; const drawerWidth = 350; const RidersLogs = () => { const theme = useTheme(); const isDesktop = useMediaQuery('(min-width:900px)'); const [open, setOpen] = useState(false); const [selectedRiders, setSelectedRiders] = useState([]); const [riderSearch, setRiderSearch] = useState(''); const appId = 1; const { data: riders, isLoading: ridersIsLoading, isFetching: riderIsFetching, refetch: riderLogsRefetch, error: riderLogsError } = useQuery({ queryKey: [appId, dayjs().format('YYYY-MM-DD'), riderSearch], queryFn: fetchRidersLogs, refetchInterval: 5 * 60 * 1000 }); useEffect(() => { console.log('riders', riders); // const sortedRiders = riders?.sort((a, b) => a.firstname.localeCompare(b.firstname)); setSelectedRiders(riders); }, [riders]); useEffect(() => { console.log('selectedRiders', selectedRiders); }, [selectedRiders]); useEffect(() => { setOpen(isDesktop); }, [isDesktop]); return ( { theme.zIndex.drawer + 1 }} open={ridersIsLoading || riderIsFetching} // when loader = true, backdrop covers the page > } {/* Drawer */} !isDesktop && setOpen(false)} ModalProps={{ keepMounted: true }} sx={{ '& .MuiDrawer-paper': { width: drawerWidth, position: 'absolute', left: 0, top: 0, height: '100%', overflowY: 'auto', transition: 'transform 0.35s ease-in-out', zIndex: 13 } }} > {/* Search */} setRiderSearch(e.target.value)} sx={{ height: 60, bgcolor: 'white', '& .MuiOutlinedInput-notchedOutline': { borderBottom: '1px solid', borderColor: theme.palette.secondary.light } }} /> { if (e.target.checked) { setSelectedRiders(riders); } }} /> {/* Rider List */} {/* Individuals */} {ridersIsLoading || riderIsFetching ? Array.from({ length: 10 }).map((_, index) => ( } secondary={} /> )) : riders?.map((row) => { return ( {row.userid} {dayjs(row.logdate).format('DD/MM/YYYY hh:mm A')} } > { if (e.target.checked) { // SELECT ONE RIDER setSelectedRiders([row]); } else { // UNCHECK -> SELECT ALL setSelectedRiders(riders); } }} /> {row.username?.slice(0, 25) || ''} {row.username?.length > 25 && '...'} {/* {row.status === 'active' && } */} ) : ( {row.firstname || ''} {row.lastname ? ` ${row.lastname}` : ''} ) } secondary={ {row.contactno || '##########'} } /> ); })} {/* AppBar */} setOpen(!open)}> Riders Locations {/* Map */} {(ridersIsLoading || riderIsFetching) && ( {/* */} )} {selectedRiders?.length > 0 && } {riderLogsError && ( mantis )} ); }; export default RidersLogs;