index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { Box, Button, Menu, MenuItem } from '@mui/material';
  2. import { useEffect, useState } from 'react';
  3. import { sortOptions } from '../../../helpers/sortOptions';
  4. export const SortOptions = ({ onClick, options = sortOptions || [] } = {}) => {
  5. const [anchorEl, setAnchorEl] = useState(null);
  6. const [selectedOption, setSelectedOption] = useState(options[0] || null);
  7. const open = Boolean(anchorEl);
  8. const handleClick = (event) => {
  9. setAnchorEl(event.currentTarget);
  10. };
  11. const handleSelect = (option) => {
  12. option && setSelectedOption(option);
  13. console.log(option);
  14. setAnchorEl(null);
  15. };
  16. useEffect(() => {
  17. if (selectedOption) {
  18. console.log(selectedOption);
  19. onClick(selectedOption);
  20. }
  21. }, [selectedOption]);
  22. return (
  23. <Box className="SortOptions">
  24. <Button
  25. id="demo-positioned-button"
  26. aria-controls={open ? 'demo-positioned-menu' : undefined}
  27. aria-haspopup="true"
  28. aria-expanded={open ? 'true' : undefined}
  29. onClick={handleClick}
  30. >
  31. {selectedOption.label}
  32. </Button>
  33. <Menu
  34. id="demo-positioned-menu"
  35. aria-labelledby="demo-positioned-button"
  36. anchorEl={anchorEl}
  37. open={open}
  38. onClose={() => setAnchorEl(null)}
  39. anchorOrigin={{
  40. vertical: 'top',
  41. horizontal: 'left',
  42. }}
  43. transformOrigin={{
  44. vertical: 'top',
  45. horizontal: 'left',
  46. }}
  47. >
  48. {(options || []).map((option) => (
  49. <MenuItem key={option.value} onClick={(e) => handleSelect(option)}>
  50. {option.label}
  51. </MenuItem>
  52. ))}
  53. </Menu>
  54. </Box>
  55. );
  56. };