• 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/useFilterNode.ts
1
import { Filter as FilterIcon } from '@teable/icons';
×
2
import { keyBy } from 'lodash';
×
3
import { useMemo } from 'react';
×
4
import type { IFieldInstance } from '../../model';
×
5
import type { IFilter } from './types';
×
6
import { getFilterFieldIds } from './utils';
×
7

×
NEW
8
export const useFilterNode = (filters: IFilter | null | undefined, fields: IFieldInstance[]) => {
×
9
  const generateFilterButtonText = (filterIds: Set<string>, fields: IFieldInstance[]): string => {
×
10
    let text = filterIds.size ? 'Filtered by ' : '';
×
11
    const defaultText = 'Filter';
×
12
    const filterIdsArr = Array.from(filterIds);
×
13

×
14
    filterIdsArr.forEach((id, index) => {
×
15
      const name = fields.find((field) => field.id === id)?.name;
×
16
      if (name) {
×
17
        text += `${index === 0 ? '' : ', '}${name}`;
×
18
      }
×
19
    });
×
20

×
21
    if (filterIds.size > 2) {
×
22
      const name = fields.find((field) => field.id === filterIdsArr?.[0])?.name;
×
23
      text = `Filtered by ${name} and ${filterIds.size - 1} other field`;
×
24
    }
×
25

×
26
    return text || defaultText;
×
27
  };
×
28

×
29
  const text = useMemo(() => {
×
30
    let filteredIds = new Set<string>();
×
31
    if (filters) {
×
32
      filteredIds = getFilterFieldIds(filters?.filterSet, keyBy(fields, 'id'));
×
33
    }
×
34
    return generateFilterButtonText(filteredIds, fields);
×
35
  }, [fields, filters]);
×
36

×
37
  return {
×
38
    text,
×
39
    isActive: text !== 'Filter',
×
40
    Icon: FilterIcon,
×
41
  };
×
42
};
×
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