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, Stack, 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 Chip from '@mui/material/Chip'; import {Check, Close, Download, OpenInFull, OpenInNew, Refresh, Star, Upload } 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 ShoppingCartCheckoutIcon from '@mui/icons-material/ShoppingCartCheckout'; import { IconButton } from '@mui/material'; import Tooltip from '@mui/material/Tooltip'; import { Card, CardContent } from '@mui/material'; import Rating from '@mui/material/Rating'; import dayjs from 'dayjs'; import { DownloadBox, StarOutline } from 'mdi-material-ui'; import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, FormControl, InputLabel, Box } from '@mui/material'; import { Grid } from '@mui/material'; import { useRouter } from 'next/router'; export default function ServerPaginationGrid() { const router = useRouter(); const columns = [ { field: 'id', headerName: 'ID', flex: 0.1}, { field: 'status', headerName: 'Status', flex: 0.15, renderCell: (params) => { if(params.row.completed){ return } label="Completed" variant="filled" color="success" /> } else if(params.row.paid){ return } label="Paid" variant="filled" color="success" /> } else if(params.row.accepted && params.row.paid==false){ return } label="Pending Payment" variant="filled" color="warning" /> } else if(params.row.accepted && params.row.paid){ return } label="Accepted" variant="filled" color="info" /> } else if(params.row.declined){ return } label="Declined" variant="filled" color="error" /> } else{ return } label="Pending" variant="filled" color="secondary" /> } } }, { field: 'message', headerName: 'Message', flex: 0.5, renderCell: (params) => { return ; }}, { field: 'amount', headerName: 'Amount', flex: 0.1, renderCell: (params) => { return ; }}, { field: 'requestDate', headerName: 'Request Date', flex:0.15, 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: 'download', headerName: '', flex:0.1, renderCell: (params) =>{ const acceptRequest = async () => { let response = await fetch('/api/artist/requests/'+params.row["id"]+"/accept", { method: 'PUT' }) if(response.status === 200){ router.reload() } 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.reload() } 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.reload() } else{ alert("Error accepting request.") } } const handlePay = async () => { var paymentUrlRequest = await fetch('/api/requests/'+params.row.id+'/payment') //console.log(paymentUrlRequest); var paymentUrlJson = await paymentUrlRequest.json(); var paymentUrl = paymentUrlJson.paymentUrl; window.open(paymentUrl); } const [open, setOpen] = React.useState(false); const [rating, setRating] = React.useState(params.row.reviewRating); const [review, setReview] = React.useState(params.row.reviewMessage); const [alreadyReviewed, setAlreadyReviewed] = React.useState(params.row.reviewMessage != null && params.row.reviewMessage != ""); const handleClickOpen = () => { setOpen(true); }; const handleClose = () => { setOpen(false); }; const handleReviewChange = (event) => { setReview(event.target.value); } const handleRatingChange = async (event) => { var rating = event.target.value; var response = await fetch('/api/requests/'+params.row.id+'/review', { method:"PUT", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ rating: rating, message: review }) }); if(response.ok){ router.push("/dashboard/requests") } else{ alert("Could not submit review!") } } 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 (<> Request submitted on {formattedTime ?? ''} {(!params.row.declined && !params.row.accepted && !params.row.paid && !params.row.completed ? ( } label="Pending" variant="filled" color="secondary" /> ):null)} {(params.row.declined ? ( } label="Declined" variant="filled" color="error" /> ):null)} {(params.row.accepted ? ( } label="Accepted" variant="filled" color="info" /> ):null)} {(params.row.paid && params.row.acccepted ? ( ):null)} {(params.row.paid==false && params.row.accepted ? ( } label="Pending Payment" variant="filled" color="warning" /> ):null)} {(params.row.completed ? ( } label="Completed" variant="filled" color="success" /> ):null)} {(params.row.completed) ? ( ):null} {((params.row.accepted==true &¶ms.row.declined==false && params.row.paid==false) ? ( ): null )} {((params.row.completed) ? ( ): 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 getRequests = async () => { setIsLoading(true); const response = await fetch('/api/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/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(() => { getRequests(); getRequestsCount(); }, [requestCount, setRowCountState,paginationModel]); return (
); }