annoucements doen
Some checks failed
NPM Installation / build (16.x, ubuntu-latest) (push) Has been cancelled
NPM Installation / build (16.x, windows-latest) (push) Has been cancelled
NPM Installation / build (17.x, ubuntu-latest) (push) Has been cancelled
NPM Installation / build (17.x, windows-latest) (push) Has been cancelled
NPM Installation / build (18.x, ubuntu-latest) (push) Has been cancelled
NPM Installation / build (18.x, windows-latest) (push) Has been cancelled

This commit is contained in:
ROSHAN GARG 2024-10-16 14:40:08 +05:30
parent fc3afef769
commit 0109739a88
3 changed files with 160 additions and 0 deletions

View File

@ -44,6 +44,12 @@ const _nav = [
to: '/orders-placed',
icon: <CIcon icon={cilPaperPlane} customClassName="nav-icon" />,
},
{
component: CNavItem,
name: 'Announcements',
to: '/announcements',
icon: <CIcon icon={cilPaperPlane} customClassName="nav-icon" />,
},
// {
// component: CNavItem,
// name: 'Product manual',

View File

@ -5,6 +5,8 @@ import Cart from './views/pages/cart/cart'
import OrderDetails from './views/orders/OrderDetails'
import ProductManual from './views/pages/productManual/productManual'
import ViewProductManual from './views/pages/productManual/viewProductManual'
import { Announcement } from '@mui/icons-material'
import Announcements from './views/pages/announcements/announcements'
const Dashboard = React.lazy(() => import('./views/dashboard/Dashboard'))
const Shop = React.lazy(() => import('./views/shops/Shop'))
@ -32,6 +34,7 @@ const routes = [
{ path: '/change-password', name: 'Change password', element: ChangePassword },
{ path: '/cart', name: 'Cart', element: Cart },
{ path: '/announcements', name: 'Announcements', element: Announcements },
]
export default routes

View File

@ -0,0 +1,151 @@
import React, { useState, useEffect } from 'react'
import {
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
TablePagination,
Paper,
Button,
Typography,
Skeleton,
Box,
} from '@mui/material'
import axios from 'axios'
// import { Box } from '@material-ui/core'
import { useNavigate } from 'react-router-dom'
import { isAutheticated } from '../../../auth'
import Axios from '../../../axios'
const Announcements = () => {
const [announcements, setAnnouncements] = useState([])
const [loading, setLoading] = useState(true)
const [page, setPage] = useState(0)
const [rowsPerPage, setRowsPerPage] = useState(5)
const [totalAnnouncements, setTotalAnnouncements] = useState(0)
const token = isAutheticated()
const fetchAnnouncements = async (page, rowsPerPage) => {
setLoading(true)
try {
const response = await Axios.get('/api/announcement/RDs', {
params: {
page: page + 1, // backend uses 1-based index
rowsPerPage,
},
headers: {
Authorization: `Bearer ${token}`, // if token is necessary for authorization
},
})
console.log(response, 'this is the response ')
const { announcements, totalAnnouncements } = response.data
setAnnouncements(announcements)
setTotalAnnouncements(totalAnnouncements)
} catch (error) {
console.error('Error fetching announcements', error)
} finally {
setLoading(false)
}
}
useEffect(() => {
fetchAnnouncements(page, rowsPerPage)
}, [page, rowsPerPage])
const handleChangePage = (event, newPage) => {
setPage(newPage)
}
const handleChangeRowsPerPage = (event) => {
setRowsPerPage(parseInt(event.target.value, 10))
setPage(0) // Reset page to 0 when changing rows per page
}
const formatAMPM = (dateString) => {
const date = new Date(dateString)
let hours = date.getHours()
let minutes = date.getMinutes()
const ampm = hours >= 12 ? 'PM' : 'AM'
hours = hours % 12 || 12
minutes = minutes < 10 ? '0' + minutes : minutes
return `${hours}:${minutes} ${ampm}`
}
const navigate = useNavigate()
return (
<Box>
<Box display={'flex'} mb={2}>
<Typography flex={1} textAlign={'center'} fontWeight={'bold'} variant="h4">
Announcements
</Typography>
</Box>
<TableContainer component={Paper}>
<Table>
<TableHead sx={{ fontWeight: 'bold' }}>
<TableRow>
<TableCell>ID</TableCell>
<TableCell>Time</TableCell>
{/* <TableCell>Sent to</TableCell> */}
<TableCell>Message</TableCell>
{/* <TableCell>Action</TableCell> */}
</TableRow>
</TableHead>
<TableBody>
{loading ? (
Array.from(new Array(rowsPerPage)).map((_, index) => (
<TableRow key={index}>
<TableCell colSpan={5}>
<Skeleton height={40} />
</TableCell>
</TableRow>
))
) : announcements.length > 0 ? (
announcements.map((announcement) => (
<TableRow key={announcement._id}>
<TableCell>{announcement.uniqueId}</TableCell>
<TableCell>
{new Date(announcement.createdAt).toDateString()}
<span>, {formatAMPM(announcement.createdAt)}</span>
</TableCell>
{/* <TableCell>{announcement.sentTo.join(', ')}</TableCell> */}
<TableCell>{announcement.message}</TableCell>
{/* <TableCell>
<Button
variant="contained"
color="primary"
onClick={() =>
alert(`Viewing announcement ${announcement.id}`)
}
>
View
</Button>
</TableCell> */}
</TableRow>
))
) : (
<TableRow>
<TableCell colSpan={5} align="center">
<Typography variant="body1">Data not found</Typography>
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
<TablePagination
rowsPerPageOptions={[5, 10, 25]}
component="div"
count={totalAnnouncements}
rowsPerPage={rowsPerPage}
page={page}
onPageChange={handleChangePage}
onRowsPerPageChange={handleChangeRowsPerPage}
/>
</TableContainer>
</Box>
)
}
export default Announcements