Untitled
unknown
plain_text
2 years ago
3.4 kB
46
Indexable
import React, { useState } from "react";
import { Box, useTheme } from "@mui/material";
import { DataGrid } from "@mui/x-data-grid";
import { useGetTransactionsQuery } from "state/api";
import Header from "components/Header";
import DataGridCustomToolbar from "components/DataGridCustomeToolbar";
const Transactions = () => {
const theme = useTheme();
// values to be sent to the backend
const [page, setPage] = useState(0);
const [pageSize, setPageSize] = useState(20);
const [sort, setSort] = useState({
/* field: "userId",
sort: "asc",*/
});
//sort initialized as {}
const [search, setSearch] = useState("");
const [searchInput, setSearchInput] = useState("");
//const sortParsed = JSON.parse(sort);
//any time parameters change it automatically makes another api request
const { data, isLoading } = useGetTransactionsQuery({
page,
pageSize,
sort: JSON.stringify(sort),
search,
});
console.log("transactions");
console.log(data);
const columns = [
{
field: "_id",
headerName: "ID",
flex: 1,
},
{
field: "userId",
headerName: "User ID",
flex: 1,
},
{
field: "createdAt",
headerName: "CreatedAt",
flex: 1,
},
{
field: "products",
headerName: "# of Products",
flex: 0.5,
sortable: false,
renderCell: (params) => params.value.length,
},
{
field: "cost",
headerName: "Cost",
flex: 1,
renderCell: (params) => `$${Number(params.value).toFixed(2)}`,
},
];
return (
<Box m="1.5rem 2.5rem">
<Header title="TRANSACTIONS" subtitle="Entire list of transactions" />
<Box
height="80vh"
sx={{
"& .MuiDataGrid-root": {
border: "none",
},
"& .MuiDataGrid-cell": {
borderBottom: "none",
},
"& .MuiDataGrid-columnHeaders": {
backgroundColor: theme.palette.background.alt,
color: theme.palette.secondary[100],
borderBottom: "none",
},
"& .MuiDataGrid-virtualScroller": {
backgroundColor: theme.palette.primary.light,
},
"& .MuiDataGrid-footerContainer": {
backgroundColor: theme.palette.background.alt,
color: theme.palette.secondary[100],
borderTop: "none",
},
"& .MuiDataGrid-toolbarContainer .MuiButton-text": {
color: `${theme.palette.secondary[200]} !important`,
},
}}
>
<DataGrid
loading={isLoading || !data}
getRowId={(row) => row._id}
rows={(data && data.transactions) || []}
columns={columns}
rowCount={(data && data.total) || 0}
rowsPerPageOptions={[20, 50, 100]}
pagination
page={page}
pageSize={pageSize}
paginationMode="server"
sortingMode="server"
onPageChange={(newPage) => setPage(newPage)}
onPageSizeChange={(newPageSize) => setPageSize(newPageSize)}
onSortModelChange={(newSortModel) => setSort(...newSortModel)}
components={{ Toolbar: DataGridCustomToolbar }}
componentsProps={{
toolbar: { searchInput, setSearchInput, setSearch },
}}
/>
</Box>
</Box>
);
};
export default Transactions;
Editor is loading...