2
0

SlackNotification.tsx 2.3 KB

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