SlackNotification.tsx 2.4 KB

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