• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

teableio / teable / 8536869866

03 Apr 2024 10:05AM CUT coverage: 21.234% (-0.3%) from 21.535%
8536869866

Pull #514

github

web-flow
Merge 91a25d710 into 45ee7ebb3
Pull Request #514: refactor: user and link selector

1394 of 2532 branches covered (55.06%)

27 of 1620 new or added lines in 60 files covered. (1.67%)

4 existing lines in 2 files now uncovered.

14588 of 68702 relevant lines covered (21.23%)

2.02 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/packages/sdk/src/components/editor/user/UserTag.tsx
NEW
1
import { X } from '@teable/icons';
×
NEW
2
import { Avatar, AvatarFallback, AvatarImage, cn } from '@teable/ui-lib';
×
NEW
3
import { useMemo, isValidElement } from 'react';
×
NEW
4
import { convertNextImageUrl } from '../../grid-enhancements';
×
NEW
5

×
NEW
6
interface IUserTagProps {
×
NEW
7
  className?: string;
×
NEW
8
  name: string;
×
NEW
9
  avatar?: string | null | React.ReactNode;
×
NEW
10
  readonly?: boolean;
×
NEW
11
  onDelete?: () => void;
×
NEW
12
}
×
NEW
13

×
NEW
14
export const UserTag = (props: IUserTagProps) => {
×
NEW
15
  const { className, name, avatar, readonly, onDelete } = props;
×
NEW
16

×
NEW
17
  const avatarCom = useMemo(() => {
×
NEW
18
    if (isValidElement(avatar)) {
×
NEW
19
      return avatar;
×
NEW
20
    }
×
NEW
21
    return (
×
NEW
22
      <>
×
NEW
23
        <AvatarImage
×
NEW
24
          src={
×
NEW
25
            avatar
×
NEW
26
              ? convertNextImageUrl({
×
NEW
27
                  url: avatar as string,
×
NEW
28
                  w: 64,
×
NEW
29
                  q: 75,
×
NEW
30
                })
×
NEW
31
              : undefined
×
NEW
32
          }
×
NEW
33
          alt={name}
×
NEW
34
        />
×
NEW
35
        <AvatarFallback className="text-sm">{name.slice(0, 1)}</AvatarFallback>
×
NEW
36
      </>
×
NEW
37
    );
×
NEW
38
  }, [avatar, name]);
×
NEW
39

×
NEW
40
  return (
×
NEW
41
    <div className={cn('flex items-center', className)}>
×
NEW
42
      <Avatar className="box-content size-5 cursor-pointer border">{avatarCom}</Avatar>
×
NEW
43
      <div className="-ml-3 flex items-center overflow-hidden rounded-[6px] bg-secondary pl-4 pr-2 text-sm text-secondary-foreground">
×
NEW
44
        <p className="flex-1 truncate">{name}</p>
×
NEW
45
        {!readonly && (
×
NEW
46
          <X
×
NEW
47
            className="ml-[2px] cursor-pointer opacity-50 hover:opacity-100"
×
NEW
48
            onClick={(e) => {
×
NEW
49
              if (onDelete) {
×
NEW
50
                e.preventDefault();
×
NEW
51
                onDelete();
×
NEW
52
              }
×
NEW
53
            }}
×
NEW
54
          />
×
NEW
55
        )}
×
NEW
56
      </div>
×
NEW
57
    </div>
×
NEW
58
  );
×
NEW
59
};
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc