SlackNotification.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* eslint-disable react/prop-types */
  2. import React, { FC } from 'react';
  3. import { useTranslation } from 'react-i18next';
  4. import { PopoverBody, PopoverHeader, UncontrolledPopover } from 'reactstrap';
  5. type SlackNotificationProps = {
  6. id: string;
  7. isSlackEnabled: boolean;
  8. slackChannels: string;
  9. onEnabledFlagChange?: (isSlackEnabled: boolean) => void;
  10. onChannelChange?: (value: string) => void;
  11. };
  12. export const SlackNotification: FC<SlackNotificationProps> = ({
  13. id, isSlackEnabled, slackChannels, onEnabledFlagChange, onChannelChange,
  14. }) => {
  15. const { t } = useTranslation();
  16. const idForSlackPopover = `${id}ForSlackPopover`;
  17. const updateCheckboxHandler = (event: { target: { checked: boolean }; }) => {
  18. const value = event.target.checked;
  19. if (onEnabledFlagChange != null) {
  20. onEnabledFlagChange(value);
  21. }
  22. };
  23. const updateSlackChannelsHandler = (event: { target: { value: string } }) => {
  24. const value = event.target.value;
  25. if (onChannelChange != null) {
  26. onChannelChange(value);
  27. }
  28. };
  29. return (
  30. <div className="grw-slack-notification w-100">
  31. <div className="grw-input-group-slack-notification input-group extended-setting">
  32. <label className="input-group-addon">
  33. <div className="custom-control custom-switch custom-switch-lg custom-switch-slack">
  34. <input
  35. type="checkbox"
  36. className="custom-control-input border-0"
  37. id={id}
  38. checked={isSlackEnabled}
  39. onChange={updateCheckboxHandler}
  40. />
  41. <label className="custom-control-label align-center" htmlFor={id}></label>
  42. </div>
  43. </label>
  44. <input
  45. className="grw-form-control-slack-notification form-control align-top pl-0"
  46. id={idForSlackPopover}
  47. type="text"
  48. value={slackChannels}
  49. placeholder="Input channels"
  50. onChange={updateSlackChannelsHandler}
  51. />
  52. <UncontrolledPopover trigger="focus" placement="top" target={idForSlackPopover}>
  53. <PopoverHeader>{t('slack_notification.popover_title')}</PopoverHeader>
  54. <PopoverBody>{t('slack_notification.popover_desc')}</PopoverBody>
  55. </UncontrolledPopover>
  56. </div>
  57. </div>
  58. );
  59. };