@platforma-sdk/ui-vue 1.54.0 → 1.54.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/.turbo/turbo-build.log +142 -195
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +16 -0
  6. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  7. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  8. package/dist/components/PlAdvancedFilter/constants.d.ts +1 -1
  9. package/dist/components/PlAdvancedFilter/index.d.ts +2 -2
  10. package/dist/components/PlAdvancedFilter/index.d.ts.map +1 -1
  11. package/dist/components/PlAdvancedFilter/index.js.map +1 -1
  12. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  13. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +135 -146
  14. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  15. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -8
  16. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  17. package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts +3 -2
  18. package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts.map +1 -1
  19. package/dist/components/PlAgDataTable/sources/table-state-v2.js +93 -96
  20. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  21. package/dist/components/PlAgDataTable/types.d.ts +3 -44
  22. package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
  23. package/dist/components/PlAgDataTable/types.js +26 -42
  24. package/dist/components/PlAgDataTable/types.js.map +1 -1
  25. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +9 -10
  26. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  27. package/dist/components/PlAgRowNumHeader.vue.js +8 -9
  28. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  29. package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts.map +1 -1
  30. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +76 -74
  31. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  32. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  33. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts +7 -9
  34. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
  35. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +82 -132
  36. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  37. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js +4 -17
  38. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js.map +1 -1
  39. package/dist/components/PlTableFilters/index.d.ts +0 -1
  40. package/dist/components/PlTableFilters/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/lib/util/helpers/dist/prettyBytes.js.map +1 -1
  43. package/package.json +6 -6
  44. package/src/components/PlAdvancedFilter/index.ts +1 -1
  45. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +3 -22
  46. package/src/components/PlAgDataTable/sources/table-state-v2.ts +66 -59
  47. package/src/components/PlAgDataTable/types.ts +15 -78
  48. package/src/components/PlAnnotations/components/FilterSidebar.vue +3 -6
  49. package/src/components/PlTableFilters/PlTableFiltersV2.vue +100 -232
  50. package/src/components/PlTableFilters/index.ts +0 -1
  51. package/dist/_virtual/index.js +0 -6
  52. package/dist/_virtual/index.js.map +0 -1
  53. package/dist/_virtual/re.js +0 -5
  54. package/dist/_virtual/re.js.map +0 -1
  55. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.d.ts +0 -15
  56. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.d.ts.map +0 -1
  57. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +0 -97
  58. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +0 -1
  59. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js +0 -5
  60. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js.map +0 -1
  61. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.d.ts +0 -11
  62. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.d.ts.map +0 -1
  63. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +0 -142
  64. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +0 -1
  65. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js +0 -5
  66. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js.map +0 -1
  67. package/dist/components/PlTableFilters/filters-state.d.ts +0 -7
  68. package/dist/components/PlTableFilters/filters-state.d.ts.map +0 -1
  69. package/dist/components/PlTableFilters/filters-state.js +0 -79
  70. package/dist/components/PlTableFilters/filters-state.js.map +0 -1
  71. package/dist/components/PlTableFilters/filters_logic.d.ts +0 -24
  72. package/dist/components/PlTableFilters/filters_logic.d.ts.map +0 -1
  73. package/dist/components/PlTableFilters/filters_logic.js +0 -348
  74. package/dist/components/PlTableFilters/filters_logic.js.map +0 -1
  75. package/dist/components/PlTableFilters/types.d.ts +0 -26
  76. package/dist/components/PlTableFilters/types.d.ts.map +0 -1
  77. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js +0 -57
  78. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js.map +0 -1
  79. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js +0 -149
  80. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js.map +0 -1
  81. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js +0 -170
  82. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js.map +0 -1
  83. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js +0 -15
  84. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js.map +0 -1
  85. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js +0 -40
  86. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js.map +0 -1
  87. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js +0 -34
  88. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js.map +0 -1
  89. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js +0 -15
  90. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js.map +0 -1
  91. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js +0 -12
  92. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js.map +0 -1
  93. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js +0 -12
  94. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js.map +0 -1
  95. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js +0 -25
  96. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js.map +0 -1
  97. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js +0 -12
  98. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js.map +0 -1
  99. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js +0 -12
  100. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js.map +0 -1
  101. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js +0 -12
  102. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js.map +0 -1
  103. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js +0 -22
  104. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js.map +0 -1
  105. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js +0 -12
  106. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js.map +0 -1
  107. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js +0 -12
  108. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js.map +0 -1
  109. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js +0 -12
  110. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js.map +0 -1
  111. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js +0 -12
  112. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js.map +0 -1
  113. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js +0 -12
  114. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js.map +0 -1
  115. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js +0 -22
  116. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js.map +0 -1
  117. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js +0 -12
  118. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js.map +0 -1
  119. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js +0 -15
  120. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js.map +0 -1
  121. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js +0 -12
  122. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js.map +0 -1
  123. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js +0 -12
  124. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js.map +0 -1
  125. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js +0 -19
  126. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js.map +0 -1
  127. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js +0 -12
  128. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js.map +0 -1
  129. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js +0 -15
  130. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js.map +0 -1
  131. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js +0 -98
  132. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js.map +0 -1
  133. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js +0 -29
  134. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js.map +0 -1
  135. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js +0 -9
  136. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js.map +0 -1
  137. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js +0 -17
  138. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js.map +0 -1
  139. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js +0 -33
  140. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js.map +0 -1
  141. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js +0 -11
  142. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js.map +0 -1
  143. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js +0 -33
  144. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js.map +0 -1
  145. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js +0 -12
  146. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js.map +0 -1
  147. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js +0 -12
  148. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js.map +0 -1
  149. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js +0 -12
  150. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js.map +0 -1
  151. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js +0 -23
  152. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js.map +0 -1
  153. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js +0 -23
  154. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js.map +0 -1
  155. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js +0 -43
  156. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js.map +0 -1
  157. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js +0 -45
  158. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js.map +0 -1
  159. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js +0 -25
  160. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js.map +0 -1
  161. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js +0 -95
  162. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js.map +0 -1
  163. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js +0 -12
  164. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js.map +0 -1
  165. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js +0 -18
  166. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js.map +0 -1
  167. package/src/components/PlTableFilters/PlTableAddFilterV2.vue +0 -84
  168. package/src/components/PlTableFilters/PlTableFilterEntryV2.vue +0 -157
  169. package/src/components/PlTableFilters/filters-state.ts +0 -152
  170. package/src/components/PlTableFilters/filters_logic.ts +0 -444
  171. package/src/components/PlTableFilters/types.ts +0 -32
@@ -1,444 +0,0 @@
1
- import type {
2
- PlTableFilterNumberEquals,
3
- PlTableFilterNumberNotEquals,
4
- PlTableFilterStringEquals,
5
- PlTableFilterStringNotEquals,
6
- } from "@platforma-sdk/model";
7
- import {
8
- type SingleValuePredicateV2,
9
- type PlTableFilterType,
10
- type PlTableFilterNumberType,
11
- type PlTableFilterStringType,
12
- type PlTableFilter,
13
- type PTableColumnSpec,
14
- getRawPlatformaInstance,
15
- readDomain,
16
- Annotation,
17
- Domain,
18
- readAnnotation,
19
- parseJson,
20
- readAnnotationJson,
21
- } from "@platforma-sdk/model";
22
- import * as semver from "semver";
23
- import type { ListOption } from "@milaboratories/uikit";
24
-
25
- export function isFilterValid(
26
- filter: PlTableFilter,
27
- options: ListOption<number | string>[],
28
- discreteOptions: ListOption<number | string>[],
29
- ): boolean {
30
- const validOption = options.some((o) => o.value === filter.type);
31
- if (!validOption) return false;
32
-
33
- if (isFilterDiscreteType(filter.type) && discreteOptions.length > 0) {
34
- const reference = getFilterReference(filter);
35
- return discreteOptions.some((option) => option.value === reference);
36
- }
37
-
38
- return true;
39
- }
40
-
41
- export function getFilterLabel(type: PlTableFilterType): string {
42
- switch (type) {
43
- case "isNotNA":
44
- return "Is not NA";
45
- case "isNA":
46
- return "Is NA";
47
- case "number_equals":
48
- case "string_equals":
49
- return "Equals";
50
- case "number_notEquals":
51
- case "string_notEquals":
52
- return "Not equals";
53
- case "number_greaterThan":
54
- return "Greater than";
55
- case "number_greaterThanOrEqualTo":
56
- return "Greater than or equal to";
57
- case "number_lessThan":
58
- return "Less than";
59
- case "number_lessThanOrEqualTo":
60
- return "Less than or equal to";
61
- case "number_between":
62
- return "Between";
63
- case "string_contains":
64
- return "Contains";
65
- case "string_doesNotContain":
66
- return "Does not contain";
67
- case "string_matches":
68
- return "Matches";
69
- case "string_doesNotMatch":
70
- return "Does not match";
71
- case "string_containsFuzzyMatch":
72
- return "Contains fuzzy match";
73
- default:
74
- throw Error(`unsupported filter type: ${type satisfies never}`);
75
- }
76
- }
77
-
78
- export const filterTypesNumber: PlTableFilterNumberType[] = [
79
- "isNotNA",
80
- "isNA",
81
- "number_equals",
82
- "number_notEquals",
83
- "number_greaterThan",
84
- "number_greaterThanOrEqualTo",
85
- "number_lessThan",
86
- "number_lessThanOrEqualTo",
87
- "number_between",
88
- ] as const;
89
-
90
- export const filterTypesString: PlTableFilterStringType[] = [
91
- "isNotNA",
92
- "isNA",
93
- "string_equals",
94
- "string_notEquals",
95
- "string_contains",
96
- "string_doesNotContain",
97
- "string_matches",
98
- "string_doesNotMatch",
99
- "string_containsFuzzyMatch",
100
- ] as const;
101
-
102
- export function getFilterOptions(column: PTableColumnSpec): ListOption<PlTableFilterType>[] {
103
- const valueType = column.type === "column" ? column.spec.valueType : column.spec.type;
104
- const types: PlTableFilterType[] = valueType === "String" ? filterTypesString : filterTypesNumber;
105
- return types
106
- .filter((type) => (column.type === "axis" ? type !== "isNotNA" && type !== "isNA" : true))
107
- .map((type) => ({ value: type, text: getFilterLabel(type) }));
108
- }
109
-
110
- export type PlTableFilterDiscrete =
111
- | PlTableFilterNumberEquals
112
- | PlTableFilterNumberNotEquals
113
- | PlTableFilterStringEquals
114
- | PlTableFilterStringNotEquals;
115
-
116
- export type PlTableFilterDiscreteType = PlTableFilterDiscrete["type"];
117
-
118
- export const filterTypesDiscrete: PlTableFilterDiscreteType[] = [
119
- "number_equals",
120
- "number_notEquals",
121
- "string_equals",
122
- "string_notEquals",
123
- ] as const;
124
-
125
- export const isFilterDiscreteType = (
126
- filter: PlTableFilterType,
127
- ): filter is PlTableFilterDiscreteType => {
128
- return (filterTypesDiscrete as PlTableFilterType[]).includes(filter);
129
- };
130
-
131
- export const isFilterDiscrete = (filter: PlTableFilter): filter is PlTableFilterDiscrete => {
132
- return isFilterDiscreteType(filter.type);
133
- };
134
-
135
- export function getColumnName(column: PTableColumnSpec, index: string | number) {
136
- return (
137
- readAnnotation(column.spec, Annotation.Label)?.trim() ??
138
- "Unlabeled " + column.type + " " + index.toString()
139
- );
140
- }
141
-
142
- export function getFilterReference(filter: PlTableFilter): undefined | number | string {
143
- const type = filter.type;
144
- switch (type) {
145
- case "isNotNA":
146
- case "isNA":
147
- return undefined;
148
- case "number_equals":
149
- case "number_notEquals":
150
- case "number_greaterThan":
151
- case "number_greaterThanOrEqualTo":
152
- case "number_lessThan":
153
- case "number_lessThanOrEqualTo":
154
- return filter.reference;
155
- case "number_between":
156
- return filter.lowerBound;
157
- case "string_equals":
158
- case "string_notEquals":
159
- case "string_contains":
160
- case "string_doesNotContain":
161
- case "string_matches":
162
- case "string_doesNotMatch":
163
- case "string_containsFuzzyMatch":
164
- return filter.reference;
165
- default:
166
- throw Error(`unsupported filter type: ${type satisfies never}`);
167
- }
168
- }
169
-
170
- export function getFilterDefault(
171
- type: PlTableFilterType,
172
- reference?: undefined | number | string,
173
- ): PlTableFilter {
174
- switch (type) {
175
- case "isNotNA":
176
- case "isNA":
177
- return { type };
178
- case "number_equals":
179
- case "number_notEquals":
180
- case "number_greaterThan":
181
- case "number_greaterThanOrEqualTo":
182
- case "number_lessThan":
183
- case "number_lessThanOrEqualTo":
184
- return { type, reference: typeof reference === "number" ? reference : 0 };
185
- case "number_between":
186
- return {
187
- type,
188
- lowerBound: typeof reference === "number" ? reference : 0,
189
- includeLowerBound: true,
190
- upperBound: 100,
191
- includeUpperBound: false,
192
- };
193
- case "string_equals":
194
- case "string_notEquals":
195
- case "string_contains":
196
- case "string_doesNotContain":
197
- case "string_matches":
198
- case "string_doesNotMatch":
199
- return { type, reference: typeof reference === "string" ? reference : "" };
200
- case "string_containsFuzzyMatch":
201
- return {
202
- type,
203
- reference: typeof reference === "string" ? reference : "",
204
- maxEdits: 2,
205
- substitutionsOnly: false,
206
- wildcard: undefined,
207
- };
208
- default:
209
- throw Error(`unsupported filter type: ${type satisfies never}`);
210
- }
211
- }
212
-
213
- export function changeFilter(
214
- filter: PlTableFilter,
215
- type: PlTableFilterType,
216
- discreteOptions: ListOption<number | string>[],
217
- ): PlTableFilter {
218
- let reference = getFilterReference(filter);
219
- if (
220
- isFilterDiscreteType(type) &&
221
- discreteOptions !== undefined &&
222
- discreteOptions.length > 0 &&
223
- !discreteOptions.some((option) => option.value === reference)
224
- ) {
225
- reference = discreteOptions[0].value;
226
- }
227
- return getFilterDefault(type, reference);
228
- }
229
-
230
- export function parseNumber(column: PTableColumnSpec, value: string): number {
231
- const parsed = Number(value);
232
- if (!Number.isFinite(parsed)) throw Error("Model value is not a number.");
233
-
234
- const type = column.type === "column" ? column.spec.valueType : column.spec.type;
235
- if ((type === "Int" || type === "Long") && !Number.isInteger(parsed))
236
- throw Error("Model value is not an integer.");
237
-
238
- const min = readAnnotationJson(column.spec, Annotation.Min);
239
- if (min !== undefined) {
240
- if (Number.isFinite(min) && parsed < min) {
241
- throw Error("Model value is too low.");
242
- }
243
- }
244
-
245
- const max = readAnnotationJson(column.spec, Annotation.Max);
246
- if (max !== undefined) {
247
- if (Number.isFinite(max) && parsed > max) {
248
- throw Error("Model value is too high.");
249
- }
250
- }
251
-
252
- return parsed;
253
- }
254
-
255
- export function parseString(column: PTableColumnSpec, value: string): string {
256
- const alphabet =
257
- readDomain(column.spec, Domain.Alphabet) ?? readAnnotation(column.spec, Annotation.Alphabet);
258
- if (alphabet === "nucleotide" && !/^[AaTtGgCcNn]+$/.test(value))
259
- throw Error("Model value is not a nucleotide.");
260
- if (alphabet === "aminoacid" && !/^[AaCcDdEeFfGgHhIiKkLlMmNnPpQqRrSsTtVvWwYyXx*_]+$/.test(value))
261
- throw Error("Model value is not an aminoacid.");
262
- return value;
263
- }
264
-
265
- export function parseRegex(value: string): string {
266
- try {
267
- new RegExp(value);
268
- return value;
269
- } catch (err: unknown) {
270
- if (err instanceof SyntaxError) throw Error("Model value is not a regexp.");
271
- throw err;
272
- }
273
- }
274
-
275
- export function makeWildcardOptions(
276
- column: PTableColumnSpec,
277
- reference: string,
278
- ): ListOption<string>[] {
279
- const alphabet =
280
- readDomain(column.spec, Domain.Alphabet) ?? readAnnotation(column.spec, Annotation.Alphabet);
281
- if (alphabet === "nucleotide") {
282
- return [
283
- {
284
- label: "N",
285
- value: "N",
286
- },
287
- ];
288
- }
289
- if (alphabet === "aminoacid") {
290
- return [
291
- {
292
- label: "X",
293
- value: "X",
294
- },
295
- ];
296
- }
297
-
298
- const chars = [...new Set<string>(reference).keys()];
299
- return chars.sort().map((char) => ({
300
- label: char,
301
- value: char,
302
- }));
303
- }
304
-
305
- export function makeDiscreteOptions(column: PTableColumnSpec): ListOption<number | string>[] {
306
- const discreteValuesAnnotation = readAnnotation(column.spec, Annotation.DiscreteValues);
307
- if (!discreteValuesAnnotation) return [];
308
-
309
- try {
310
- const discreteValues = parseJson<number[] | string[]>(discreteValuesAnnotation);
311
- return discreteValues.map((v) => ({
312
- label: `${v}`,
313
- value: v,
314
- }));
315
- } catch (err: unknown) {
316
- console.error(
317
- `Column ${column.id} has invalid '${Annotation.DiscreteValues}' annotation: '${discreteValuesAnnotation}'`,
318
- err,
319
- );
320
- return [];
321
- }
322
- }
323
-
324
- export function isAlphabetic(column: PTableColumnSpec): boolean {
325
- return (
326
- semver.gt(getRawPlatformaInstance().sdkInfo.sdkVersion, "1.14.0") &&
327
- (column.type === "column" ? column.spec.valueType : column.spec.type) === "String" &&
328
- (readDomain(column.spec, Domain.Alphabet) ??
329
- readAnnotation(column.spec, Annotation.Alphabet)) !== undefined
330
- );
331
- }
332
-
333
- export function makePredicate(alphabetic: boolean, filter: PlTableFilter): SingleValuePredicateV2 {
334
- const type = filter.type;
335
- switch (type) {
336
- case "isNotNA":
337
- return {
338
- operator: "Not",
339
- operand: {
340
- operator: "IsNA",
341
- },
342
- };
343
- case "isNA":
344
- return {
345
- operator: "IsNA",
346
- };
347
- case "number_equals":
348
- return {
349
- operator: "Equal",
350
- reference: filter.reference,
351
- };
352
- case "string_equals":
353
- return {
354
- operator: alphabetic ? "IEqual" : "Equal",
355
- reference: filter.reference as string,
356
- };
357
- case "number_notEquals":
358
- return {
359
- operator: "Not",
360
- operand: {
361
- operator: "Equal",
362
- reference: filter.reference,
363
- },
364
- };
365
- case "string_notEquals":
366
- return {
367
- operator: "Not",
368
- operand: {
369
- operator: alphabetic ? "IEqual" : "Equal",
370
- reference: filter.reference,
371
- },
372
- };
373
- case "number_greaterThan":
374
- return {
375
- operator: "Greater",
376
- reference: filter.reference,
377
- };
378
- case "number_greaterThanOrEqualTo":
379
- return {
380
- operator: "GreaterOrEqual",
381
- reference: filter.reference,
382
- };
383
- case "number_lessThan":
384
- return {
385
- operator: "Less",
386
- reference: filter.reference,
387
- };
388
- case "number_lessThanOrEqualTo":
389
- return {
390
- operator: "LessOrEqual",
391
- reference: filter.reference,
392
- };
393
- case "number_between":
394
- return {
395
- operator: "And",
396
- operands: [
397
- {
398
- operator: filter.includeLowerBound ? "GreaterOrEqual" : "Greater",
399
- reference: filter.lowerBound,
400
- },
401
- {
402
- operator: filter.includeUpperBound ? "LessOrEqual" : "Less",
403
- reference: filter.upperBound,
404
- },
405
- ],
406
- };
407
- case "string_contains":
408
- return {
409
- operator: alphabetic ? "StringIContains" : "StringContains",
410
- substring: filter.reference,
411
- };
412
- case "string_doesNotContain":
413
- return {
414
- operator: "Not",
415
- operand: {
416
- operator: alphabetic ? "StringIContains" : "StringContains",
417
- substring: filter.reference,
418
- },
419
- };
420
- case "string_matches":
421
- return {
422
- operator: "Matches",
423
- regex: filter.reference,
424
- };
425
- case "string_doesNotMatch":
426
- return {
427
- operator: "Not",
428
- operand: {
429
- operator: "Matches",
430
- regex: filter.reference,
431
- },
432
- };
433
- case "string_containsFuzzyMatch":
434
- return {
435
- operator: alphabetic ? "StringIContainsFuzzy" : "StringContainsFuzzy",
436
- reference: filter.reference,
437
- maxEdits: filter.maxEdits,
438
- substitutionsOnly: filter.substitutionsOnly,
439
- wildcard: filter.wildcard,
440
- };
441
- default:
442
- throw Error(`unsupported filter type: ${type satisfies never}`);
443
- }
444
- }
@@ -1,32 +0,0 @@
1
- import type { ListOption } from "@milaboratories/uikit";
2
- import type {
3
- PTableColumnSpec,
4
- PlTableFilter,
5
- PlDataTableFilterState,
6
- PlTableFilterType,
7
- } from "@platforma-sdk/model";
8
-
9
- export type PlDataTableFiltersSettings = {
10
- /** Table columns for the sourceId */
11
- columns: PTableColumnSpec[];
12
- /** Callback configuring filter options for the column */
13
- config: (column: PTableColumnSpec) => {
14
- options?: PlTableFilterType[];
15
- default?: PlTableFilter;
16
- };
17
- /** Persisted selection for the sourceId */
18
- cachedState: PlDataTableFilterState[];
19
- };
20
-
21
- export type PlDataTableFilterStateInternal = PlDataTableFilterState & {
22
- spec: PTableColumnSpec;
23
- filter: null | {
24
- value: PlTableFilter;
25
- disabled: boolean;
26
- open: boolean;
27
- };
28
- label: string;
29
- options: ListOption<PlTableFilterType>[];
30
- discreteOptions: ListOption<number | string>[];
31
- defaultFilter: PlTableFilter | null;
32
- };