diff --git a/web/src/components/ui/avatar.tsx b/web/src/components/ui/avatar.tsx index e30079b5e..cd95b8a8f 100644 --- a/web/src/components/ui/avatar.tsx +++ b/web/src/components/ui/avatar.tsx @@ -48,3 +48,49 @@ const AvatarFallback = React.forwardRef< AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; export { Avatar, AvatarFallback, AvatarImage }; + +type AvatarProps = React.ComponentProps; + +interface AvatarGroupProps extends React.ComponentProps<'div'> { + children: React.ReactElement[]; + max?: number; +} + +export const AvatarGroup = ({ + children, + max, + className, + ...props +}: AvatarGroupProps) => { + const totalAvatars = React.Children.count(children); + const displayedAvatars = React.Children.toArray(children) + .slice(0, max) + .reverse(); + const remainingAvatars = max ? Math.max(totalAvatars - max, 1) : 0; + + return ( +
+ {remainingAvatars > 0 && ( + + + +{remainingAvatars} + + + )} + {displayedAvatars.map((avatar, index) => { + if (!React.isValidElement(avatar)) return null; + + return ( +
+ {React.cloneElement(avatar as React.ReactElement, { + className: 'ring-2 ring-background', + })} +
+ ); + })} +
+ ); +}; diff --git a/web/src/interfaces/database/user-setting.ts b/web/src/interfaces/database/user-setting.ts index 67ccc69bc..933f80d9f 100644 --- a/web/src/interfaces/database/user-setting.ts +++ b/web/src/interfaces/database/user-setting.ts @@ -69,7 +69,7 @@ interface Es { } export interface ITenantUser { - avatar: null; + avatar: string; delta_seconds: number; email: string; is_active: string;