SelectQueryItemsDropdown.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React, {
  2. FC, useState, useCallback, useEffect,
  3. } from 'react';
  4. import { useTranslation } from 'react-i18next';
  5. type Props = {
  6. dropdownLabel: string
  7. dropdownItemList: string[]
  8. onCheckItem: (items: string[]) => void
  9. }
  10. export const SelectQueryItemsDropdown: FC<Props> = (props: Props) => {
  11. const { t } = useTranslation();
  12. const { dropdownLabel, dropdownItemList, onCheckItem } = props;
  13. const [checkedItems, setCheckedItems] = useState<string[]>(dropdownItemList);
  14. const handleChange = useCallback((checkedItem: string) => {
  15. setCheckedItems(
  16. checkedItems.includes(checkedItem)
  17. ? checkedItems.filter(item => item !== checkedItem)
  18. : [...checkedItems, checkedItem],
  19. );
  20. }, [checkedItems]);
  21. useEffect(() => {
  22. if (onCheckItem != null) {
  23. onCheckItem(checkedItems);
  24. }
  25. }, [onCheckItem, checkedItems]);
  26. return (
  27. <div className="btn-group mr-2 mb-3">
  28. <div className="dropdown">
  29. <button className="btn btn-outline-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown">
  30. {t(`admin:audit_log_management.${dropdownLabel}`)}
  31. </button>
  32. <ul className="dropdown-menu" aria-labelledby="dropdownMenuButton">
  33. <div className="dropdown-item">
  34. <div className="form-group px-2 m-0">
  35. <input type="checkbox" className="form-check-input" />
  36. <label className="form-check-label">Page</label>
  37. </div>
  38. </div>
  39. {
  40. dropdownItemList.map(item => (
  41. <div className="dropdown-item" key={item}>
  42. <div className="form-group px-4 m-0">
  43. <input
  44. type="checkbox"
  45. className="form-check-input"
  46. id={`checkbox${item}`}
  47. onChange={() => { handleChange(item) }}
  48. checked={checkedItems.includes(item)}
  49. />
  50. <label
  51. className="form-check-label"
  52. htmlFor={`checkbox${item}`}
  53. >
  54. {item}
  55. </label>
  56. </div>
  57. </div>
  58. ))
  59. }
  60. </ul>
  61. </div>
  62. </div>
  63. );
  64. };