SlackAppIntegrationControl.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React, { FC } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. type Props = {
  4. slackAppIntegration: {
  5. _id: string,
  6. isPrimary?: boolean,
  7. },
  8. onIsPrimaryChanged?: (slackAppIntegration: unknown, newValue: boolean) => void,
  9. onDeleteButtonClicked?: (slackAppIntegration: unknown) => void,
  10. }
  11. export const SlackAppIntegrationControl: FC<Props> = (props: Props) => {
  12. const { t } = useTranslation();
  13. const { slackAppIntegration, onIsPrimaryChanged, onDeleteButtonClicked } = props;
  14. const inputId = `cb-primary-${slackAppIntegration._id}`;
  15. const isPrimary = slackAppIntegration.isPrimary === true;
  16. return (
  17. <div className="d-flex align-items-center">
  18. <div className="my-1 form-check form-switch">
  19. <input
  20. className="form-check-input"
  21. id={inputId}
  22. type="checkbox"
  23. checked={isPrimary}
  24. disabled={isPrimary}
  25. onChange={(e) => {
  26. if (onIsPrimaryChanged != null) {
  27. onIsPrimaryChanged(slackAppIntegration, e.target.checked);
  28. }
  29. }}
  30. />
  31. <label className="form-label form-check-label" htmlFor={inputId}>
  32. Primary
  33. </label>
  34. </div>
  35. <button
  36. className="btn btn-outline-danger ms-3"
  37. type="button"
  38. onClick={() => {
  39. if (onDeleteButtonClicked != null) {
  40. onDeleteButtonClicked(slackAppIntegration);
  41. }
  42. }}
  43. >
  44. <span className="material-symbols-outlined">delete</span>
  45. {t('admin:slack_integration.delete')}
  46. </button>
  47. </div>
  48. );
  49. };