Dropdown.jsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React from "react";
  2. import styled from "styled-components";
  3. const Dropdown = styled.div`
  4. width: 100%;
  5. margin-bottom: 5px;
  6. position: relative;
  7. display: inline-block;
  8. `
  9. const DropdownButton = styled.div`
  10. text-align: center;
  11. padding: 4px;
  12. background-color: #555;
  13. color: #fff;
  14. font-weight: 600;
  15. cursor: pointer;
  16. ${Dropdown}:hover & {
  17. background-color: #333;
  18. }
  19. `
  20. const DropdownList = styled.div`
  21. display: none;
  22. position: absolute;
  23. background-color: #333;
  24. width: 100%;
  25. z-index: 1;
  26. ${Dropdown}:hover & {
  27. display: block;
  28. }
  29. `
  30. const DropdownItem = styled.div`
  31. padding: 12px 16px;
  32. display: block;
  33. cursor: pointer;
  34. &:hover {
  35. background-color: #555;
  36. }
  37. `
  38. export default ({
  39. options,
  40. onChange,
  41. children,
  42. }) => (
  43. <Dropdown>
  44. <DropdownButton>
  45. {children}
  46. </DropdownButton>
  47. <DropdownList>
  48. {
  49. Object.entries(options).map(([text, option]) => (
  50. <DropdownItem key={option} onClick={() => onChange(option)}>{text}</DropdownItem>
  51. ))
  52. }
  53. </DropdownList>
  54. </Dropdown>
  55. );