UsersList.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import React from 'react';
  2. import { Container, Typography, Paper, Link } from '@mui/material';
  3. import { Table, TableBody, TableContainer, TableHead, TableRow } from "@mui/material";
  4. import { StyledTableCell, StyledTableRow } from './StyledTableElements';
  5. import { COrdersPagination } from './Pagination';
  6. import { COrdersSearchInput } from './SearchInput';
  7. import { MyLink } from '.';
  8. import { useSelector } from 'react-redux';
  9. import { useGetOrdersCountQuery, useGetOrdersQuery } from '../reducers';
  10. const UsersList = ({ orders, fromPage, pageSize }) => {
  11. let headCells = [
  12. {
  13. id: '#',
  14. numeric: true,
  15. disablePadding: true,
  16. label: '#',
  17. align: "center"
  18. },
  19. {
  20. id: 'Date',
  21. numeric: true,
  22. disablePadding: true,
  23. label: 'Date',
  24. },
  25. {
  26. id: 'Order ID',
  27. numeric: true,
  28. disablePadding: true,
  29. label: 'Order ID',
  30. },
  31. {
  32. id: 'Total ($)',
  33. numeric: true,
  34. disablePadding: true,
  35. label: 'Total ($)',
  36. align: "right"
  37. },
  38. {
  39. id: 'Owner',
  40. numeric: true,
  41. disablePadding: true,
  42. label: 'Owner',
  43. align: "right"
  44. },
  45. {
  46. id: 'Note',
  47. numeric: true,
  48. disablePadding: true,
  49. label: 'Note',
  50. align: "right"
  51. },
  52. ]
  53. return (
  54. <>
  55. <Container maxWidth="lg">
  56. <COrdersSearchInput />
  57. <TableContainer component={Paper} >
  58. <Table sx={{ overflow: 'scroll' }} >
  59. <TableHead>
  60. <TableRow>
  61. {
  62. headCells.map(headCell => {
  63. return <StyledTableCell key={headCell.id} align={headCell.align}>{headCell.label}</StyledTableCell>
  64. })
  65. }
  66. </TableRow>
  67. </TableHead>
  68. {orders?.length > 0 && (
  69. <TableBody>
  70. {
  71. orders.map((order, index) => {
  72. return (
  73. <StyledTableRow key={order._id}>
  74. <StyledTableCell align="right" >
  75. <Typography>
  76. {(fromPage * pageSize) + index + 1}.
  77. </Typography>
  78. </StyledTableCell>
  79. <StyledTableCell >
  80. {new Date(+order.createdAt).toLocaleString()}
  81. </StyledTableCell>
  82. <StyledTableCell >
  83. <MyLink to={`/order/${order._id}`}>
  84. <Typography >
  85. {order._id}
  86. </Typography>
  87. </MyLink>
  88. </StyledTableCell>
  89. <StyledTableCell align="right" >
  90. <Typography >
  91. {order.total}
  92. </Typography>
  93. </StyledTableCell>
  94. <StyledTableCell align="right" >
  95. <Link href='#'>
  96. <Typography>
  97. {order.owner?.nick}
  98. </Typography>
  99. </Link>
  100. </StyledTableCell>
  101. <StyledTableCell align="right" >
  102. <Typography>
  103. {order.notes}
  104. </Typography>
  105. </StyledTableCell>
  106. </StyledTableRow>
  107. )
  108. })
  109. }
  110. </TableBody>
  111. )}
  112. <COrdersPagination />
  113. </Table>
  114. </TableContainer>
  115. </Container>
  116. </>
  117. )
  118. }
  119. const COrdersList = () => {
  120. let state = useSelector(state => state);
  121. const searchStr = state.frontend.ordersSearchStr;
  122. const fromPage = state.frontend.ordersPaging.fromPage;
  123. const pageSize = state.frontend.ordersPaging.pageSize;
  124. const ordersResult = useGetOrdersQuery({ fromPage, pageSize, searchStr });
  125. const ordersCountResult = useGetOrdersCountQuery({ searchStr });
  126. let isLoading = ordersResult.isLoading || ordersCountResult.isLoading;
  127. let orders = !isLoading && ordersResult.data?.OrderFind;
  128. return !isLoading && orders && <OrderList orders={orders} fromPage={fromPage} pageSize={pageSize} />
  129. }
  130. ////export { COrdersList };