SlackAppIntegrationControl.tsx 1.5 KB

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