roleSelectControl.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import styled from '@emotion/styled';
  2. import SelectControl, {ControlProps} from 'sentry/components/forms/selectControl';
  3. import {MemberRole} from 'sentry/types';
  4. type OptionType = {
  5. details: React.ReactNode;
  6. disabled: boolean;
  7. label: string;
  8. value: string;
  9. };
  10. type Props = Omit<ControlProps<OptionType>, 'onChange' | 'value'> & {
  11. disableUnallowed: boolean;
  12. roles: MemberRole[];
  13. /**
  14. * Narrower type than SelectControl because there is no empty value
  15. */
  16. onChange?: (value: OptionType) => void;
  17. value?: string | null;
  18. };
  19. function RoleSelectControl({roles, disableUnallowed, ...props}: Props) {
  20. return (
  21. <SelectControl
  22. options={roles?.map(
  23. (r: MemberRole) =>
  24. ({
  25. value: r.id,
  26. label: r.name,
  27. disabled: disableUnallowed && !r.allowed,
  28. details: <Details>{r.desc}</Details>,
  29. } as OptionType)
  30. )}
  31. showDividers
  32. {...props}
  33. />
  34. );
  35. }
  36. export default RoleSelectControl;
  37. const Details = styled('span')`
  38. display: inline-block;
  39. width: 20rem;
  40. `;