SlackNotification.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* eslint-disable react/prop-types */
  2. import type { FC } from 'react';
  3. import { useTranslation } from 'next-i18next';
  4. import {
  5. FormGroup, Input, InputGroup, InputGroupText,
  6. PopoverBody, PopoverHeader, UncontrolledPopover,
  7. } from 'reactstrap';
  8. import styles from './SlackNotification.module.scss';
  9. type SlackNotificationProps = {
  10. id: string;
  11. isSlackEnabled: boolean;
  12. slackChannels: string;
  13. onEnabledFlagChange?: (isSlackEnabled: boolean) => void;
  14. onChannelChange?: (value: string) => void;
  15. };
  16. export const SlackNotification: FC<SlackNotificationProps> = ({
  17. id, isSlackEnabled, slackChannels, onEnabledFlagChange, onChannelChange,
  18. }) => {
  19. const { t } = useTranslation();
  20. const idForSlackPopover = `${id}ForSlackPopover`;
  21. const updateCheckboxHandler = (event: { target: { checked: boolean }; }) => {
  22. const value = event.target.checked;
  23. if (onEnabledFlagChange != null) {
  24. onEnabledFlagChange(value);
  25. }
  26. };
  27. const updateSlackChannelsHandler = (event: { target: { value: string } }) => {
  28. const value = event.target.value;
  29. if (onChannelChange != null) {
  30. onChannelChange(value);
  31. }
  32. };
  33. return (
  34. <InputGroup className={`d-flex align-items-center ${styles['grw-slack-switch']}`}>
  35. <InputGroupText className="rounded-pill rounded-end border-end-0 p-0 pe-1 grw-slack-switch">
  36. <FormGroup switch className="position-relative pe-4 py-3 m-0 me-2">
  37. <Input
  38. className="position-absolute bottom-0 start-0 p-0 m-0 w-100 h-100 border-0"
  39. type="switch"
  40. role="switch"
  41. id={id}
  42. checked={isSlackEnabled}
  43. onChange={updateCheckboxHandler}
  44. />
  45. </FormGroup>
  46. </InputGroupText>
  47. <Input
  48. className="rounded-pill rounded-start border-start-0 py-1"
  49. id={idForSlackPopover}
  50. type="text"
  51. value={slackChannels}
  52. placeholder={`${t('slack_notification.input_channels')}`}
  53. onChange={updateSlackChannelsHandler}
  54. />
  55. <UncontrolledPopover trigger="focus" placement="top" target={idForSlackPopover}>
  56. <PopoverHeader>{t('slack_notification.popover_title')}</PopoverHeader>
  57. <PopoverBody>{t('slack_notification.popover_desc')}</PopoverBody>
  58. </UncontrolledPopover>
  59. </InputGroup>
  60. );
  61. };