• 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/filter/component/filter-link/FilterLinkSelect.tsx
NEW
1
import { Button, Popover, PopoverContent, PopoverTrigger } from '@teable/ui-lib';
×
NEW
2
import { useState } from 'react';
×
NEW
3
import { SINGLE_SELECT_OPERATORS } from './constant';
×
NEW
4
import { DefaultList } from './DefaultList';
×
NEW
5
import { DefaultTrigger } from './DefaultTrigger';
×
NEW
6
import type { IFilterLinkProps, IFilterLinkSelectListProps } from './types';
×
NEW
7

×
NEW
8
interface FilterLinkSelectProps extends IFilterLinkProps {
×
NEW
9
  components?: {
×
NEW
10
    Trigger?: (props: IFilterLinkProps) => JSX.Element;
×
NEW
11
    List?: (value: IFilterLinkSelectListProps) => JSX.Element;
×
NEW
12
  };
×
NEW
13
}
×
NEW
14

×
NEW
15
export const FilterLinkSelect = (props: FilterLinkSelectProps) => {
×
NEW
16
  const { value, operator, onSelect, components } = props;
×
NEW
17
  const { Trigger, List } = components || {};
×
NEW
18
  const [open, setOpen] = useState(false);
×
NEW
19

×
NEW
20
  const InnerTrigger = Trigger ?? DefaultTrigger;
×
NEW
21
  const InnerSelector = List ?? DefaultList;
×
NEW
22

×
NEW
23
  const onListClick = (recordId: string) => {
×
NEW
24
    const values = typeof value === 'string' ? [value] : value || [];
×
NEW
25
    console.log('values', values, recordId);
×
NEW
26

×
NEW
27
    if (!SINGLE_SELECT_OPERATORS.includes(operator)) {
×
NEW
28
      values.includes(recordId)
×
NEW
29
        ? onSelect(values.filter((id) => id !== recordId))
×
NEW
30
        : onSelect([...values, recordId]);
×
NEW
31
    } else {
×
NEW
32
      setOpen(false);
×
NEW
33
      onSelect(value?.[0] === recordId ? null : values?.[0]);
×
NEW
34
    }
×
NEW
35
  };
×
NEW
36

×
NEW
37
  return (
×
NEW
38
    <div className="space-y-3">
×
NEW
39
      <Popover open={open} onOpenChange={setOpen}>
×
NEW
40
        <PopoverTrigger asChild>
×
NEW
41
          <Button variant="outline" size={'sm'} className="w-40 justify-start">
×
NEW
42
            <InnerTrigger {...props} />
×
NEW
43
          </Button>
×
NEW
44
        </PopoverTrigger>
×
NEW
45
        <PopoverContent className="h-[350px] w-screen md:w-[480px]">
×
NEW
46
          <InnerSelector {...props} onClick={onListClick} />
×
NEW
47
        </PopoverContent>
×
NEW
48
      </Popover>
×
NEW
49
    </div>
×
NEW
50
  );
×
NEW
51
};
×
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