import { FunctionComponent, useMemo } from 'react'; import { CheckSvg, DoubleCaretSvg, UnassignedAvatarSvg } from '../icons'; import { DropdownMenu } from '../../molecules/DropdownMenu/DropdownMenu'; import { DropdownMenuItem } from '../../molecules/DropdownMenu/DropdownMenu.Item'; import { DropdownMenuTrigger } from '../../molecules/DropdownMenu/DropdownMenu.Trigger'; import { DropdownMenuContent } from '../../molecules/DropdownMenu/DropdownMenu.Content'; import { UserAvatar } from '../UserAvatar/UserAvatar'; import { TAuthenticatedUser } from '../../../../domains/auth/types'; import { filterUsersByRole, TUserRole } from '@/domains/users/utils/filter-users-by-role'; export type TAssignee = Pick; interface IAssignDropdownProps { assignees: TAuthenticatedUser[]; assignedUser?: TAssignee; authenticatedUserId: string; onAssigneeSelect: (id: string) => void; isDisabled?: boolean; excludedRoles?: TUserRole[]; } export const AssignDropdown: FunctionComponent = ({ assignedUser, assignees, onAssigneeSelect, authenticatedUserId, isDisabled, excludedRoles = [], }) => { const filteredAssignees = useMemo( () => filterUsersByRole(assignees, excludedRoles), [assignees, excludedRoles], ); const sortedAssignees = useMemo( () => filteredAssignees ?.slice() ?.sort((a, b) => a?.id === authenticatedUserId ? -1 : b?.id === authenticatedUserId ? 1 : 0, ), [filteredAssignees, authenticatedUserId], ); return (
{assignedUser?.fullName ? ( ) : ( )} {assignedUser?.fullName ?? 'Unassigned'}
{Array.isArray(sortedAssignees) && sortedAssignees.map(assignee => ( onAssigneeSelect(assignedUser?.id !== assignee?.id ? assignee?.id : null) } >
{`${assignee?.fullName}${assignee?.id === authenticatedUserId ? ' (You)' : ''}`}
{assignedUser?.id === assignee?.id && }
))}
); };