Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

DropdownList.js 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, { useState } from "react";
  2. import {
  3. DropdownListContainer,
  4. DropdownHeader,
  5. DropdownIcon,
  6. DropdownTitle,
  7. ListContainer,
  8. ToggleIconClosed,
  9. ToggleIconOpened,
  10. DropdownOptions,
  11. ToggleContainer,
  12. } from "./DropdownList.styled";
  13. import PropTypes from "prop-types";
  14. const DropdownList = (props) => {
  15. const [listShown, setListShown] = useState(props.defaultOpen);
  16. const handleShow = () => {
  17. if (props.setIsOpened) {
  18. props.setIsOpened(!listShown);
  19. }
  20. setListShown((prevState) => !prevState);
  21. };
  22. return (
  23. <DropdownListContainer fullwidth={props.fullWidth ? 1 : 0}>
  24. <DropdownHeader>
  25. {props.dropdownIcon && (
  26. <DropdownIcon onClick={() => handleShow()}>
  27. {props.dropdownIcon}
  28. </DropdownIcon>
  29. )}
  30. <DropdownTitle onClick={() => handleShow()} textcolor={props.textcolor}>
  31. {props.title}
  32. </DropdownTitle>
  33. {listShown ? (
  34. <ToggleIconOpened
  35. style={props.toggleIconStyles}
  36. onClick={() => handleShow()}
  37. >
  38. {props.toggleIconOpened}
  39. </ToggleIconOpened>
  40. ) : (
  41. <ToggleIconClosed
  42. style={props.toggleIconStyles}
  43. onClick={() => handleShow()}
  44. >
  45. {props.toggleIconClosed}
  46. </ToggleIconClosed>
  47. )}
  48. </DropdownHeader>
  49. <ToggleContainer shouldShow={listShown}>
  50. <DropdownOptions>{props.headerOptions}</DropdownOptions>
  51. <ListContainer>{props.children}</ListContainer>
  52. </ToggleContainer>
  53. </DropdownListContainer>
  54. );
  55. };
  56. export default DropdownList;
  57. DropdownList.propTypes = {
  58. title: PropTypes.string,
  59. dropdownIcon: PropTypes.node,
  60. toggleIconOpened: PropTypes.node,
  61. toggleIconClosed: PropTypes.node,
  62. children: PropTypes.node,
  63. fullWidth: PropTypes.bool,
  64. defaultOpen: PropTypes.bool,
  65. toggleIconStyles: PropTypes.any,
  66. headerOptions: PropTypes.node,
  67. textcolor: PropTypes.string,
  68. setIsOpened: PropTypes.func,
  69. };
  70. DropdownList.defaultProps = {
  71. fullWidth: false,
  72. defaultOpen: false,
  73. };