import * as React from 'react';
import { DataGrid } from '@mui/x-data-grid';
import { GridColDef } from '@mui/x-data-grid';
import TextField from '@mui/material/TextField';
import { Button, CardContent, IconButton, Typography } from '@mui/material';
import CurrencyTextField from '@lupus-ai/mui-currency-textfield';
import { DateField } from '@mui/x-date-pickers/DateField';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import X from '@mui/icons-material/X';
import { Close, Upload } from '@mui/icons-material';
import Tooltip from '@mui/material/Tooltip';
import dayjs from 'dayjs';
import { useRouter } from 'next/router';
import { ClipboardCheck, OpenInNew } from 'mdi-material-ui';
import Chip from '@mui/material/Chip';
import {Check, Refresh } from '@mui/icons-material';
import PriceCheckIcon from '@mui/icons-material/PriceCheck';
import AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn';
import AssignmentLateIcon from '@mui/icons-material/AssignmentLate';
import { Card, CardHeader } from '@mui/material';
import { Dialog, DialogActions, DialogContent, DialogTitle, Grid, Stack } from '@mui/material';
import { useMediaQuery } from '@mui/material';
export default function ServerPaginationGrid() {
const isSmallScreen = useMediaQuery(theme => theme.breakpoints.down('sm')); // Check if the screen size is small
const router = useRouter();
let columns = []
if(isSmallScreen){
columns = [
{ field: 'id', headerName: 'ID', flex: 0.1, filterable: false, sortable: false},
{ field: 'status', headerName: 'Status', flex: 0.15, filterable: false, sortable: false,
renderCell: (params) => {
if(params.row.completed){
return
}
else if(params.row.paid){
return
}
else if(params.row.accepted && params.row.paid==false){
return
}
else if(params.row.accepted && params.row.paid){
return
}
else if(params.row.declined){
return
}
else{
return
}
}
},
{ field: 'amount', headerName: 'Amount', flex: 0.15, filterable: false, sortable: false, renderCell: (params) => {
return ;
}},
{ field: 'action', headerName: '', flex:0.1, filterable: false, sortable: false,
renderCell: (params) =>{
const acceptRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/accept", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const viewRequest = async () => {
}
const denyRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/deny", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const completeRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/complete", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const [open, setOpen] = React.useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
let formattedTime = ""
const date = new Date(params.row.requestDate);
formattedTime = date.toLocaleTimeString('en-US', { month: 'long', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); // Example format
return (<>
{ router.push("/dashboard/artist/requests/"+params.row["id"])}} aria-label="accept" color="primary" >
{((params.row.accepted==false && params.row.declined==false && params.row.completed==false) ? (
<>
>
): null
)}
{((params.row.accepted==true && params.row.declined==false && params.row.completed==false && params.row.paid==true) ? (
<>
>
): null
)}
>
)
} }
];
}
else{
columns = [
{ field: 'id', headerName: 'ID', flex: 0.1, filterable: false, sortable: false},
{ field: 'status', headerName: 'Status', flex: 0.15, filterable: false, sortable: false, filterable: false,
renderCell: (params) => {
if(params.row.completed){
return } label="Completed" variant="outlined" color="success" />
}
else if(params.row.paid){
return } label="Paid" variant="outlined" color="success" />
}
else if(params.row.accepted && params.row.paid==false){
return } label="Pending Payment" variant="outlined" color="warning" />
}
else if(params.row.accepted && params.row.paid){
return } label="Accepted" variant="outlined" color="info" />
}
else if(params.row.declined){
return } label="Declined" variant="outlined" color="error" />
}
else{
return } label="Pending" variant="outlined" color="secondary" />
}
}
},
{ field: 'message', headerName: 'Message', flex: 0.5, filterable: false, sortable: false,
renderCell: (params) => {
return ;
}},
{ field: 'amount', headerName: 'Amount', flex: 0.1, filterable: false, sortable: false, renderCell: (params) => {
return ;
}},
{ field: 'requestDate', headerName: 'Request Date', flex:0.15, filterable: false, sortable: false,
renderCell: (params) =>{
let formattedTime = ""
const date = new Date(params.row.requestDate);
formattedTime = date.toLocaleTimeString('en-US', { month: 'long', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); // Example format
return
} },
{ field: 'action', headerName: '', flex:0.15, filterable: false, sortable: false,
renderCell: (params) =>{
const acceptRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/accept", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const viewRequest = async () => {
}
const denyRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/deny", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const completeRequest = async () => {
let response = await fetch('/api/artist/requests/'+params.row["id"]+"/complete", { method: 'PUT' })
if(response.status === 200){
router.push("/dashboard/artist/requests/"+params.row["id"])
}
else{
alert("Error accepting request.")
}
}
const [open, setOpen] = React.useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
let formattedTime = ""
const date = new Date(params.row.requestDate);
formattedTime = date.toLocaleTimeString('en-US', { month: 'long', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); // Example format
return (<>
{ router.push("/dashboard/artist/requests/"+params.row["id"])}} aria-label="accept" color="primary" >
{((params.row.accepted==false && params.row.declined==false && params.row.completed==false) ? (
<>
>
): null
)}
{((params.row.accepted==true && params.row.declined==false && params.row.completed==false && params.row.paid==true) ? (
<>
>
): null
)}
>
)
} }
];
}
const [isLoading, setIsLoading] = React.useState(true);
const [requestCount, setRequestCount] = React.useState(null);
const [requestData, setRequestData] = React.useState({});
const [paginationModel, setPaginationModel] = React.useState({
page: 0,
pageSize: 15,
});
const handlePageChange = async (params) => {
setPaginationModel(params);
}
const getRequests = async () => {
setIsLoading(true);
const response = await fetch('/api/artist/requests', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
completed: true, // Example query parameter
declined: true, // Example query parameter
accepted: true, // Example query parameter
paid: true, // Example query parameter
offset: paginationModel.page*paginationModel.pageSize, // Example query parameter
pageSize: paginationModel.pageSize
}),
});
const data = await response.json();
setRequestData(data);
setIsLoading(false);
}
const getRequestsCount = async () => {
const response = await fetch('/api/artist/requestcount', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
completed: true, // Example query parameter
declined: true, // Example query parameter
accepted: true, // Example query parameter
paid: true, // Example query parameter
offset: paginationModel.page*paginationModel.pageSize, // Example query parameter
pageSize: paginationModel.pageSize
})
});
const data = await response.json();
setRequestCount(data);
setRowCountState((prevRowCountState) =>
data !== undefined
? data
: prevRowCountState,
);
return data;
}
// Some API clients return undefined while loading
// Following lines are here to prevent `rowCountState` from being undefined during the loading
const [rowCountState, setRowCountState] = React.useState(0);
React.useEffect(() => {
getRequestsCount();
getRequests();
}, [requestCount, setRowCountState,paginationModel]);
return (
);
}