AdminGoodList.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { AdminGoodListHeader } from "./AdminGoodListHeader";
  2. import { AdminGoodItem } from "./AdminGoodItem";
  3. import { connect } from "react-redux";
  4. import { SearchBar, SearchResults } from "../../common/SearchBar";
  5. import { actionGoodsFind } from "../../../actions/actionGoodsFind";
  6. import { actionPromiseClear } from "../../../reducers";
  7. import { Box, LinearProgress, Table, TableBody, TableCell, TableHead, TableRow } from "@mui/material";
  8. import { createSearchParams, useNavigate, useSearchParams } from "react-router-dom";
  9. const CSearchBar = connect(null, {
  10. onSearch: (text) => actionGoodsFind({ promiseName: "adminGoodsFind", text, limit: 5 }),
  11. onSearchEnd: () => actionPromiseClear("adminGoodsFind"),
  12. })(SearchBar);
  13. const CSearchResults = connect((state) => ({ items: state.promise.adminGoodsFind?.payload || [] }))(SearchResults);
  14. const AdminGoodList = ({ goods, orderBy = "_id", promiseStatus = null } = {}) => {
  15. const navigate = useNavigate();
  16. const [searchParams, setSearchParams] = useSearchParams();
  17. return (
  18. <Box className="AdminGoodList">
  19. <Box className="searchBarWrapper">
  20. <CSearchBar
  21. render={CSearchResults}
  22. searchLink="/admin/goods/search"
  23. renderParams={{ itemLink: "/admin/good/" }}
  24. onSearchButtonClick={(text) => {
  25. searchParams.set("text", text);
  26. setSearchParams(searchParams);
  27. navigate({ pathname: "/admin/goods/search", search: createSearchParams(searchParams).toString() });
  28. }}
  29. />
  30. </Box>
  31. <Table>
  32. <TableHead>
  33. <AdminGoodListHeader
  34. sort={orderBy}
  35. onSortChange={(orderBy) => {
  36. searchParams.set("orderBy", orderBy);
  37. setSearchParams(searchParams);
  38. }}
  39. />
  40. </TableHead>
  41. <TableBody>
  42. {(goods || []).map((good) => (
  43. <AdminGoodItem good={good} key={good._id} />
  44. ))}
  45. {promiseStatus === "PENDING" && (
  46. <TableRow>
  47. <TableCell colSpan="7">
  48. <LinearProgress />
  49. </TableCell>
  50. </TableRow>
  51. )}
  52. </TableBody>
  53. </Table>
  54. </Box>
  55. );
  56. };
  57. const CAdminGoodList = connect((state) => ({
  58. goods: state.feed?.payload || [],
  59. promiseStatus: state?.promise?.feedGoodsAll?.status || state?.promise?.feedGoodsFind?.status || null,
  60. }))(AdminGoodList);
  61. export { AdminGoodList, CAdminGoodList };