assigneeSelector.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import {useEffect} from 'react';
  2. import {fetchOrgMembers} from 'sentry/actionCreators/members';
  3. import {getOwnerList} from 'sentry/components/group/assignedTo';
  4. import {
  5. AssigneeSelector,
  6. useHandleAssigneeChange,
  7. } from 'sentry/components/group/assigneeSelector';
  8. import type {Event} from 'sentry/types/event';
  9. import type {Group} from 'sentry/types/group';
  10. import type {Project} from 'sentry/types/project';
  11. import useApi from 'sentry/utils/useApi';
  12. import useCommitters from 'sentry/utils/useCommitters';
  13. import {useIssueEventOwners} from 'sentry/utils/useIssueEventOwners';
  14. import useOrganization from 'sentry/utils/useOrganization';
  15. interface GroupHeaderAssigneeSelectorProps {
  16. event: Event | null;
  17. group: Group;
  18. project: Project;
  19. }
  20. export function GroupHeaderAssigneeSelector({
  21. group,
  22. project,
  23. event,
  24. }: GroupHeaderAssigneeSelectorProps) {
  25. const api = useApi();
  26. const organization = useOrganization();
  27. const {handleAssigneeChange, assigneeLoading} = useHandleAssigneeChange({
  28. organization,
  29. group,
  30. });
  31. const {data: eventOwners} = useIssueEventOwners({
  32. eventId: event?.id ?? '',
  33. projectSlug: project.slug,
  34. });
  35. const {data: committersResponse} = useCommitters({
  36. eventId: event?.id ?? '',
  37. projectSlug: project.slug,
  38. });
  39. useEffect(() => {
  40. // TODO: We should check if this is already loaded
  41. fetchOrgMembers(api, organization.slug, [project.id]);
  42. }, [api, organization, project]);
  43. const owners = getOwnerList(
  44. committersResponse?.committers ?? [],
  45. eventOwners,
  46. group.assignedTo
  47. );
  48. return (
  49. <AssigneeSelector
  50. group={group}
  51. owners={owners}
  52. assigneeLoading={assigneeLoading}
  53. handleAssigneeChange={handleAssigneeChange}
  54. />
  55. );
  56. }