SelectQueryDropdown.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import React, { FC, useState, useCallback } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. type Props = {
  4. dropdownLabel: string
  5. dropdownItemList: string[]
  6. setQueryHandler: (query: string | undefined) => void
  7. }
  8. export const SelectQueryDropdown: FC<Props> = (props: Props) => {
  9. const { t } = useTranslation();
  10. const { dropdownLabel, dropdownItemList, setQueryHandler } = props;
  11. const [selectedItem, setSelectedItem] = useState<string | undefined>(undefined);
  12. const onClickItemButton = useCallback((item) => {
  13. if (setQueryHandler == null) {
  14. return;
  15. }
  16. setQueryHandler(item);
  17. setSelectedItem(item);
  18. }, [setQueryHandler, setSelectedItem]);
  19. return (
  20. <div className="btn-group mr-2 mb-3">
  21. <div className="dropdown">
  22. <button className="btn btn-outline-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown">
  23. {selectedItem === undefined ? t(`admin:audit_log_management.${dropdownLabel}`) : selectedItem}
  24. </button>
  25. <ul className="dropdown-menu" aria-labelledby="dropdownMenuButton">
  26. <button
  27. type="button"
  28. className="dropdown-item"
  29. onClick={() => onClickItemButton(undefined)}
  30. >
  31. {t('admin:audit_log_management.unassigned')}
  32. </button>
  33. <div className="dropdown-divider"></div>
  34. {
  35. dropdownItemList.map(item => (
  36. <button
  37. key={item}
  38. type="button"
  39. className="dropdown-item"
  40. onClick={() => onClickItemButton(item)}
  41. >
  42. {item}
  43. </button>
  44. ))
  45. }
  46. </ul>
  47. </div>
  48. </div>
  49. );
  50. };