mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import {css} from '@emotion/react';
|
|
import styled from '@emotion/styled';
|
|
|
|
import ActorAvatar from 'sentry/components/avatar/actorAvatar';
|
|
import type BaseAvatar from 'sentry/components/avatar/baseAvatar';
|
|
import type {Actor} from 'sentry/types';
|
|
|
|
type Props = {
|
|
owners: Actor[];
|
|
reverse?: boolean;
|
|
} & BaseAvatar['props'] &
|
|
Omit<React.ComponentProps<typeof ActorAvatar>, 'actor' | 'hasTooltip'>;
|
|
|
|
// Constrain the number of visible suggestions
|
|
const MAX_SUGGESTIONS = 3;
|
|
|
|
function SuggestedAvatarStack({
|
|
owners,
|
|
tooltip,
|
|
tooltipOptions,
|
|
reverse = true,
|
|
suggested = true,
|
|
...props
|
|
}: Props) {
|
|
const [firstSuggestion, ...suggestedOwners] = owners;
|
|
const numAvatars = Math.min(owners.length, MAX_SUGGESTIONS);
|
|
return (
|
|
<AvatarStack reverse={reverse} data-test-id="suggested-avatar-stack">
|
|
{suggestedOwners.slice(0, numAvatars - 1).map((owner, i) => (
|
|
<Avatar
|
|
round={firstSuggestion.type === 'user'}
|
|
actor={owner}
|
|
hasTooltip={false}
|
|
{...props}
|
|
key={i}
|
|
index={i}
|
|
reverse={reverse}
|
|
suggested={suggested}
|
|
/>
|
|
))}
|
|
<Avatar
|
|
actor={firstSuggestion}
|
|
tooltip={tooltip}
|
|
tooltipOptions={{...tooltipOptions, skipWrapper: true}}
|
|
{...props}
|
|
index={numAvatars - 1}
|
|
reverse={reverse}
|
|
suggested={suggested}
|
|
/>
|
|
</AvatarStack>
|
|
);
|
|
}
|
|
|
|
const AvatarStack = styled('div')<{reverse: boolean}>`
|
|
display: flex;
|
|
align-content: center;
|
|
${p => p.reverse && `flex-direction: row-reverse;`}
|
|
`;
|
|
|
|
const translateStyles = (props: {index: number; reverse: boolean}) => css`
|
|
transform: translateX(${props.reverse ? 60 * props.index : 60 * -props.index}%);
|
|
`;
|
|
|
|
const Avatar = styled(ActorAvatar)<{index: number; reverse: boolean}>`
|
|
${translateStyles}
|
|
`;
|
|
|
|
export default SuggestedAvatarStack;
|