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

teableio / teable / 8478979078

29 Mar 2024 08:32AM CUT coverage: 82.643% (+61.0%) from 21.636%
8478979078

push

github

web-flow
feat: search api (#507)

* feat: search api

* test: add advanced test case

* feat: search responsive ui

* feat: realtime search

3942 of 4135 branches covered (95.33%)

454 of 493 new or added lines in 29 files covered. (92.09%)

26536 of 32109 relevant lines covered (82.64%)

1222.65 hits per line

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

97.5
/apps/nestjs-backend/src/db-provider/search-query/abstract.ts
1
import { CellValueType } from '@teable/core';
4✔
2
import type { Knex } from 'knex';
4✔
3
import type { IFieldInstance } from '../../features/field/model/factory';
4✔
4

4✔
5
export abstract class SearchQueryAbstract {
4✔
6
  static factory(
40✔
7
    // eslint-disable-next-line @typescript-eslint/naming-convention
681✔
8
    SearchQuery: new (
681✔
9
      originQueryBuilder: Knex.QueryBuilder,
681✔
10
      field: IFieldInstance,
681✔
11
      searchValue: string
681✔
12
    ) => SearchQueryAbstract,
681✔
13
    originQueryBuilder: Knex.QueryBuilder,
681✔
14
    fieldMap?: { [fieldId: string]: IFieldInstance },
681✔
15
    search?: string[]
681✔
16
  ) {
681✔
17
    if (!search || !search[1] || !fieldMap) {
681✔
18
      return originQueryBuilder;
639✔
19
    }
639✔
20
    const field = fieldMap?.[search[1]];
681✔
21
    const searchValue = search[0];
681✔
22
    if (field.cellValueType === CellValueType.Boolean) {
681✔
23
      return originQueryBuilder;
2✔
24
    }
2✔
25

40✔
26
    const searchQueryBuilder = new SearchQuery(originQueryBuilder, field, searchValue);
40✔
27

40✔
28
    if (field.isMultipleCellValue) {
42✔
29
      switch (field.cellValueType) {
22✔
30
        case CellValueType.DateTime:
22✔
31
          return searchQueryBuilder.multipleDate();
2✔
32
        case CellValueType.Number:
22✔
33
          return searchQueryBuilder.multipleNumber();
2✔
34
        case CellValueType.String:
22✔
35
          if (field.isStructuredCellValue) {
18✔
36
            return searchQueryBuilder.multipleJson();
12✔
37
          }
12✔
38
          return searchQueryBuilder.multipleText();
6✔
39
        default:
22!
NEW
40
          return originQueryBuilder;
×
41
      }
22✔
42
    }
22✔
43

18✔
44
    switch (field.cellValueType) {
18✔
45
      case CellValueType.DateTime:
42✔
46
        return searchQueryBuilder.date();
4✔
47
      case CellValueType.Number:
681✔
48
        return searchQueryBuilder.number();
8✔
49
      case CellValueType.String:
681✔
50
        if (field.isStructuredCellValue) {
6✔
51
          return searchQueryBuilder.json();
2✔
52
        }
2✔
53
        return searchQueryBuilder.text();
4✔
54
      default:
681!
NEW
55
        return originQueryBuilder;
×
56
    }
681✔
57
  }
681✔
58

40✔
59
  constructor(
40✔
60
    protected readonly originQueryBuilder: Knex.QueryBuilder,
40✔
61
    protected readonly field: IFieldInstance,
40✔
62
    protected readonly searchValue: string
40✔
63
  ) {}
40✔
64

40✔
65
  abstract multipleNumber(): Knex.QueryBuilder;
40✔
66

40✔
67
  abstract multipleDate(): Knex.QueryBuilder;
40✔
68

40✔
69
  abstract multipleText(): Knex.QueryBuilder;
40✔
70

40✔
71
  abstract multipleJson(): Knex.QueryBuilder;
40✔
72

40✔
73
  abstract json(): Knex.QueryBuilder;
40✔
74

40✔
75
  abstract text(): Knex.QueryBuilder;
40✔
76

40✔
77
  abstract date(): Knex.QueryBuilder;
40✔
78

40✔
79
  abstract number(): Knex.QueryBuilder;
40✔
80
}
40✔
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