@platforma-sdk/ui-vue 1.54.1 → 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 (170) 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 +9 -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/package.json +6 -6
  43. package/src/components/PlAdvancedFilter/index.ts +1 -1
  44. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +3 -22
  45. package/src/components/PlAgDataTable/sources/table-state-v2.ts +66 -59
  46. package/src/components/PlAgDataTable/types.ts +15 -78
  47. package/src/components/PlAnnotations/components/FilterSidebar.vue +3 -6
  48. package/src/components/PlTableFilters/PlTableFiltersV2.vue +100 -232
  49. package/src/components/PlTableFilters/index.ts +0 -1
  50. package/dist/_virtual/index.js +0 -6
  51. package/dist/_virtual/index.js.map +0 -1
  52. package/dist/_virtual/re.js +0 -5
  53. package/dist/_virtual/re.js.map +0 -1
  54. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.d.ts +0 -15
  55. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.d.ts.map +0 -1
  56. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +0 -97
  57. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +0 -1
  58. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js +0 -5
  59. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js.map +0 -1
  60. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.d.ts +0 -11
  61. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.d.ts.map +0 -1
  62. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +0 -142
  63. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +0 -1
  64. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js +0 -5
  65. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js.map +0 -1
  66. package/dist/components/PlTableFilters/filters-state.d.ts +0 -7
  67. package/dist/components/PlTableFilters/filters-state.d.ts.map +0 -1
  68. package/dist/components/PlTableFilters/filters-state.js +0 -79
  69. package/dist/components/PlTableFilters/filters-state.js.map +0 -1
  70. package/dist/components/PlTableFilters/filters_logic.d.ts +0 -24
  71. package/dist/components/PlTableFilters/filters_logic.d.ts.map +0 -1
  72. package/dist/components/PlTableFilters/filters_logic.js +0 -348
  73. package/dist/components/PlTableFilters/filters_logic.js.map +0 -1
  74. package/dist/components/PlTableFilters/types.d.ts +0 -26
  75. package/dist/components/PlTableFilters/types.d.ts.map +0 -1
  76. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js +0 -57
  77. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js.map +0 -1
  78. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js +0 -149
  79. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js.map +0 -1
  80. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js +0 -170
  81. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js.map +0 -1
  82. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js +0 -15
  83. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js.map +0 -1
  84. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js +0 -40
  85. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js.map +0 -1
  86. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js +0 -34
  87. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js.map +0 -1
  88. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js +0 -15
  89. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js.map +0 -1
  90. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js +0 -12
  91. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js.map +0 -1
  92. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js +0 -12
  93. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js.map +0 -1
  94. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js +0 -25
  95. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js.map +0 -1
  96. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js +0 -12
  97. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js.map +0 -1
  98. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js +0 -12
  99. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js.map +0 -1
  100. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js +0 -12
  101. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js.map +0 -1
  102. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js +0 -22
  103. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js.map +0 -1
  104. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js +0 -12
  105. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js.map +0 -1
  106. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js +0 -12
  107. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js.map +0 -1
  108. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js +0 -12
  109. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js.map +0 -1
  110. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js +0 -12
  111. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js.map +0 -1
  112. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js +0 -12
  113. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js.map +0 -1
  114. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js +0 -22
  115. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js.map +0 -1
  116. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js +0 -12
  117. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js.map +0 -1
  118. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js +0 -15
  119. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js.map +0 -1
  120. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js +0 -12
  121. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js.map +0 -1
  122. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js +0 -12
  123. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js.map +0 -1
  124. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js +0 -19
  125. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js.map +0 -1
  126. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js +0 -12
  127. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js.map +0 -1
  128. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js +0 -15
  129. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js.map +0 -1
  130. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js +0 -98
  131. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js.map +0 -1
  132. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js +0 -29
  133. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js.map +0 -1
  134. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js +0 -9
  135. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js.map +0 -1
  136. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js +0 -17
  137. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js.map +0 -1
  138. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js +0 -33
  139. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js.map +0 -1
  140. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js +0 -11
  141. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js.map +0 -1
  142. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js +0 -33
  143. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js.map +0 -1
  144. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js +0 -12
  145. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js.map +0 -1
  146. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js +0 -12
  147. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js.map +0 -1
  148. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js +0 -12
  149. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js.map +0 -1
  150. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js +0 -23
  151. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js.map +0 -1
  152. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js +0 -23
  153. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js.map +0 -1
  154. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js +0 -43
  155. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js.map +0 -1
  156. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js +0 -45
  157. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js.map +0 -1
  158. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js +0 -25
  159. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js.map +0 -1
  160. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js +0 -95
  161. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js.map +0 -1
  162. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js +0 -12
  163. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js.map +0 -1
  164. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js +0 -18
  165. package/dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js.map +0 -1
  166. package/src/components/PlTableFilters/PlTableAddFilterV2.vue +0 -84
  167. package/src/components/PlTableFilters/PlTableFilterEntryV2.vue +0 -157
  168. package/src/components/PlTableFilters/filters-state.ts +0 -152
  169. package/src/components/PlTableFilters/filters_logic.ts +0 -444
  170. package/src/components/PlTableFilters/types.ts +0 -32
@@ -1,12 +0,0 @@
1
- import { __require as m } from "../classes/range.js";
2
- var r, o;
3
- function u() {
4
- if (o) return r;
5
- o = 1;
6
- const a = m();
7
- return r = (e, t) => new a(e, t).set.map((s) => s.map((i) => i.value).join(" ").trim().split(" ")), r;
8
- }
9
- export {
10
- u as __require
11
- };
12
- //# sourceMappingURL=to-comparators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-comparators.js","sources":["../../../../../../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js"],"sourcesContent":["'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n"],"names":["Range","require$$0","toComparators_1","range","options","comp","c"],"mappings":";;;;;AAEA,QAAMA,IAAQC,EAAA;AAOd,SAAAC,IAJsB,CAACC,GAAOC,MAC5B,IAAIJ,EAAMG,GAAOC,CAAO,EAAE,IACvB,IAAI,CAAAC,MAAQA,EAAK,IAAI,CAAAC,MAAKA,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,KAAI,EAAG,MAAM,GAAG,CAAC;;","x_google_ignoreList":[0]}
@@ -1,18 +0,0 @@
1
- import { __require as t } from "../classes/range.js";
2
- var r, e;
3
- function o() {
4
- if (e) return r;
5
- e = 1;
6
- const a = t();
7
- return r = (n, i) => {
8
- try {
9
- return new a(n, i).range || "*";
10
- } catch {
11
- return null;
12
- }
13
- }, r;
14
- }
15
- export {
16
- o as __require
17
- };
18
- //# sourceMappingURL=valid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"valid.js","sources":["../../../../../../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js"],"sourcesContent":["'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n"],"names":["Range","require$$0","valid","range","options"],"mappings":";;;;;AAEA,QAAMA,IAAQC,EAAA;AAUd,SAAAC,IATmB,CAACC,GAAOC,MAAY;AACrC,QAAI;AAGF,aAAO,IAAIJ,EAAMG,GAAOC,CAAO,EAAE,SAAS;AAAA,IAC9C,QAAe;AACX,aAAO;AAAA,IACX;AAAA,EACA;;","x_google_ignoreList":[0]}
@@ -1,84 +0,0 @@
1
- <script setup lang="ts">
2
- import { deepClone } from "@milaboratories/helpers";
3
- import {
4
- PlBtnGhost,
5
- PlBtnPrimary,
6
- PlDropdown,
7
- PlSlideModal,
8
- type ListOption,
9
- } from "@milaboratories/uikit";
10
- import { computed, ref, watch } from "vue";
11
- import { type PlDataTableFilterStateInternal } from "./types";
12
- import { getFilterDefault } from "./filters_logic";
13
- import PlTableFilterEntryV2 from "./PlTableFilterEntryV2.vue";
14
-
15
- const show = defineModel<boolean>({ required: true });
16
- const props = defineProps<{
17
- filters: Readonly<PlDataTableFilterStateInternal[]>;
18
- setFilter(idx: number, filter: PlDataTableFilterStateInternal): void;
19
- }>();
20
-
21
- const filterOptions = computed<ListOption<number>[]>(() => {
22
- return props.filters
23
- .map((s, i) => {
24
- return {
25
- value: i,
26
- text: s.label,
27
- };
28
- })
29
- .filter((o) => props.filters[o.value].filter === null);
30
- });
31
-
32
- const newFilterIdx = ref<number>();
33
- const newFilter = ref<PlDataTableFilterStateInternal | null>(null);
34
- watch(
35
- () => newFilterIdx.value,
36
- (newFilterIdx) => {
37
- if (newFilterIdx === undefined) {
38
- newFilter.value = null;
39
- } else {
40
- const filterClone = deepClone(props.filters[newFilterIdx]);
41
- if (!filterClone.filter) {
42
- filterClone.filter = {
43
- value: filterClone.defaultFilter ?? getFilterDefault(filterClone.options[0].value),
44
- disabled: false,
45
- open: true,
46
- };
47
- }
48
- newFilter.value = filterClone;
49
- }
50
- },
51
- );
52
- const discardFilter = () => {
53
- newFilterIdx.value = undefined;
54
- show.value = false;
55
- };
56
- const applyFilter = () => {
57
- if (newFilterIdx.value !== undefined && newFilter.value) {
58
- props.setFilter(newFilterIdx.value, newFilter.value);
59
- }
60
- discardFilter();
61
- };
62
- </script>
63
-
64
- <template>
65
- <PlSlideModal v-model="show" :close-on-outside-click="false">
66
- <template #title>Add Filter</template>
67
- <div class="d-flex flex-column gap-24">
68
- <PlDropdown
69
- v-model="newFilterIdx"
70
- :options="filterOptions"
71
- label="Column"
72
- placeholder="Choose..."
73
- />
74
- <div v-if="newFilterIdx === undefined" class="text-subtitle-m" style="color: var(--txt-mask)">
75
- Choose a column to view and adjust its options
76
- </div>
77
- <PlTableFilterEntryV2 v-if="newFilter" v-model="newFilter" />
78
- </div>
79
- <template #actions>
80
- <PlBtnPrimary :disabled="!newFilter" @click="applyFilter">Add Filter</PlBtnPrimary>
81
- <PlBtnGhost :justify-center="false" @click="discardFilter">Cancel</PlBtnGhost>
82
- </template>
83
- </PlSlideModal>
84
- </template>
@@ -1,157 +0,0 @@
1
- <script setup lang="ts">
2
- import { PlDropdown, PlTextField, PlToggleSwitch, Slider, PlBtnGhost } from "@milaboratories/uikit";
3
- import { isJsonEqual } from "@milaboratories/helpers";
4
- import {
5
- changeFilter,
6
- parseNumber,
7
- parseString,
8
- parseRegex,
9
- makeWildcardOptions,
10
- isFilterDiscrete,
11
- getFilterDefault,
12
- } from "./filters_logic";
13
- import type { PlDataTableFilterStateInternal } from "./types";
14
- import { watchEffect } from "vue";
15
-
16
- const entry = defineModel<PlDataTableFilterStateInternal>({ required: true });
17
- watchEffect(() => {
18
- if (!entry.value.filter) {
19
- entry.value.filter = {
20
- value: getFilterDefault(entry.value.options[0].value),
21
- disabled: false,
22
- open: true,
23
- };
24
- }
25
- });
26
- </script>
27
-
28
- <template>
29
- <div v-if="entry.filter" class="d-flex flex-column gap-24">
30
- <PlDropdown
31
- :model-value="entry.filter.value.type"
32
- :options="entry.options"
33
- :disabled="entry.filter.disabled"
34
- label="Predicate"
35
- @update:model-value="
36
- (type) =>
37
- (entry.filter!.value = changeFilter(entry.filter!.value, type!, entry.discreteOptions))
38
- "
39
- />
40
-
41
- <template v-if="entry.discreteOptions.length > 0 && isFilterDiscrete(entry.filter.value)">
42
- <PlDropdown v-model="entry.filter.value.reference" :options="entry.discreteOptions" />
43
- </template>
44
- <template v-else>
45
- <template
46
- v-if="
47
- entry.filter.value.type === 'number_equals' ||
48
- entry.filter.value.type === 'number_notEquals' ||
49
- entry.filter.value.type === 'number_lessThan' ||
50
- entry.filter.value.type === 'number_lessThanOrEqualTo' ||
51
- entry.filter.value.type === 'number_greaterThan' ||
52
- entry.filter.value.type === 'number_greaterThanOrEqualTo'
53
- "
54
- >
55
- <PlTextField
56
- v-model="entry.filter.value.reference"
57
- :disabled="entry.filter.disabled"
58
- :parse="(value: string): number => parseNumber(entry.spec, value)"
59
- label="Reference value"
60
- />
61
- </template>
62
-
63
- <template v-if="entry.filter.value.type === 'number_between'">
64
- <PlTextField
65
- v-model="entry.filter.value.lowerBound"
66
- :disabled="entry.filter.disabled"
67
- :parse="(value: string): number => parseNumber(entry.spec, value)"
68
- label="Lower bound"
69
- />
70
- <PlToggleSwitch
71
- v-model="entry.filter.value.includeLowerBound"
72
- :disabled="entry.filter.disabled"
73
- label="Include lower bound"
74
- />
75
- <PlTextField
76
- v-model="entry.filter.value.upperBound"
77
- :disabled="entry.filter.disabled"
78
- :parse="(value: string): number => parseNumber(entry.spec, value)"
79
- label="Upper bound"
80
- />
81
- <PlToggleSwitch
82
- v-model="entry.filter.value.includeUpperBound"
83
- :disabled="entry.filter.disabled"
84
- label="Include upper bound"
85
- />
86
- </template>
87
-
88
- <template
89
- v-if="
90
- entry.filter.value.type === 'string_equals' ||
91
- entry.filter.value.type === 'string_notEquals' ||
92
- entry.filter.value.type === 'string_contains' ||
93
- entry.filter.value.type === 'string_doesNotContain'
94
- "
95
- >
96
- <PlTextField
97
- v-model="entry.filter.value.reference"
98
- :disabled="entry.filter.disabled"
99
- :parse="(value: string): string => parseString(entry.spec, value)"
100
- label="Reference value"
101
- />
102
- </template>
103
-
104
- <template
105
- v-if="
106
- entry.filter.value.type === 'string_matches' ||
107
- entry.filter.value.type === 'string_doesNotMatch'
108
- "
109
- >
110
- <PlTextField
111
- v-model="entry.filter.value.reference"
112
- :disabled="entry.filter.disabled"
113
- :parse="parseRegex"
114
- label="Reference value"
115
- />
116
- </template>
117
-
118
- <template v-if="entry.filter.value.type === 'string_containsFuzzyMatch'">
119
- <PlTextField
120
- v-model="entry.filter.value.reference"
121
- :disabled="entry.filter.disabled"
122
- :parse="(value: string): string => parseString(entry.spec, value)"
123
- label="Reference value"
124
- />
125
- <Slider
126
- v-model="entry.filter.value.maxEdits"
127
- :max="5"
128
- :disabled="entry.filter.disabled"
129
- breakpoints
130
- label="Maximum nuber of substitutions and indels"
131
- />
132
- <PlToggleSwitch
133
- v-model="entry.filter.value.substitutionsOnly"
134
- :disabled="entry.filter.disabled"
135
- label="Substitutions only"
136
- />
137
- <PlDropdown
138
- v-model="entry.filter.value.wildcard"
139
- :disabled="entry.filter.disabled"
140
- :options="makeWildcardOptions(entry.spec, entry.filter.value.reference)"
141
- clearable
142
- label="Wildcard symbol"
143
- />
144
- </template>
145
- </template>
146
-
147
- <div v-if="entry.defaultFilter" class="d-flex justify-center">
148
- <PlBtnGhost
149
- :disabled="entry.filter.disabled || isJsonEqual(entry.filter.value, entry.defaultFilter)"
150
- icon="reverse"
151
- @click="entry.filter.value = entry.defaultFilter"
152
- >
153
- Revert Settings to Default
154
- </PlBtnGhost>
155
- </div>
156
- </div>
157
- </template>
@@ -1,152 +0,0 @@
1
- import type { Reactive, Ref } from "vue";
2
- import { reactive, ref, watch } from "vue";
3
- import type { PlDataTableFiltersSettings, PlDataTableFilterStateInternal } from "./types";
4
- import {
5
- canonicalizeJson,
6
- getPTableColumnId,
7
- type CanonicalizedJson,
8
- type PTableColumnId,
9
- type PlDataTableFilterState,
10
- } from "@platforma-sdk/model";
11
- import { isJsonEqual } from "@milaboratories/helpers";
12
- import {
13
- getFilterOptions,
14
- makeDiscreteOptions,
15
- isFilterValid,
16
- getColumnName,
17
- isAlphabetic,
18
- } from "./filters_logic";
19
-
20
- export function useFilters(
21
- settings: Ref<PlDataTableFiltersSettings>,
22
- state: Ref<PlDataTableFilterState[]>,
23
- ): Reactive<{
24
- value: PlDataTableFilterStateInternal[];
25
- }> {
26
- // Watcher instead of computed to preserve open state of filters locally
27
- const defaultStateMap = ref<
28
- Map<CanonicalizedJson<PTableColumnId>, PlDataTableFilterStateInternal>
29
- >(new Map());
30
- const filters = reactive<{
31
- value: PlDataTableFilterStateInternal[];
32
- }>({
33
- value: [],
34
- });
35
- watch(
36
- () => settings.value,
37
- ({ columns, config: configFn, cachedState }) => {
38
- // Comptute default states for columns
39
- const defaultStateMapValue = (defaultStateMap.value = new Map(
40
- columns
41
- .map((c, i) => {
42
- try {
43
- const id = getPTableColumnId(c);
44
- const config = configFn(c);
45
- const options = config.options
46
- ? getFilterOptions(c).filter((o) => config.options!.includes(o.value))
47
- : getFilterOptions(c);
48
- if (options.length === 0) return null;
49
- const discreteOptions = makeDiscreteOptions(c);
50
- const defaultFilter =
51
- config.default && isFilterValid(config.default, options, discreteOptions)
52
- ? config.default
53
- : null;
54
- const filter = defaultFilter
55
- ? {
56
- value: defaultFilter,
57
- disabled: false,
58
- open: false,
59
- }
60
- : null;
61
- const state: PlDataTableFilterStateInternal = {
62
- id,
63
- spec: c,
64
- label: getColumnName(c, i),
65
- alphabetic: isAlphabetic(c),
66
- options,
67
- discreteOptions,
68
- defaultFilter,
69
- filter,
70
- };
71
- return [canonicalizeJson<PTableColumnId>(id), state] as const;
72
- } catch (err: unknown) {
73
- console.error(`Filter creation for column ${c.id} has failed`, err);
74
- return null;
75
- }
76
- })
77
- .filter((e) => e !== null),
78
- ));
79
-
80
- // Go through cached state, filter out states for not present columns, update state to match valid options
81
- const stateMap = new Map<CanonicalizedJson<PTableColumnId>, PlDataTableFilterStateInternal>(
82
- cachedState
83
- .filter((s) => defaultStateMapValue.has(canonicalizeJson<PTableColumnId>(s.id)))
84
- .map((s) => {
85
- const defaultState = defaultStateMapValue.get(canonicalizeJson<PTableColumnId>(s.id))!;
86
- const state = {
87
- ...defaultState,
88
- filter:
89
- s.filter &&
90
- isFilterValid(s.filter.value, defaultState.options, defaultState.discreteOptions)
91
- ? {
92
- ...s.filter,
93
- open:
94
- filters.value.find((f) => isJsonEqual(f.id, s.id))?.filter?.open ?? false,
95
- }
96
- : null,
97
- } satisfies PlDataTableFilterStateInternal;
98
- return [canonicalizeJson<PTableColumnId>(s.id), state] as const;
99
- }),
100
- );
101
-
102
- // Set default states for columns not present in cached state
103
- for (const [idKey, state] of defaultStateMapValue) {
104
- if (!stateMap.has(idKey)) {
105
- stateMap.set(idKey, state);
106
- }
107
- }
108
-
109
- // States with not null filters should go first, in order they were added, then follow null filters in alphabetic order
110
- const states = stateMap
111
- .values()
112
- .filter((s) => s.filter)
113
- .toArray();
114
- const hiddenFilters = stateMap
115
- .values()
116
- .filter((s) => !s.filter)
117
- .toArray();
118
- states.push(...hiddenFilters.sort((a, b) => a.label.localeCompare(b.label)));
119
- filters.value = states;
120
- },
121
- { immediate: true },
122
- );
123
-
124
- // Persist state on change
125
- watch(
126
- () => filters.value,
127
- (filters) => {
128
- const cachedState = filters.map(
129
- (f) =>
130
- ({
131
- id: f.id,
132
- alphabetic: f.alphabetic,
133
- filter: f.filter
134
- ? {
135
- value: f.filter.value,
136
- disabled: f.filter.disabled,
137
- }
138
- : null,
139
- }) satisfies PlDataTableFilterState,
140
- );
141
- if (cachedState.length > 0 && !isJsonEqual(cachedState, state.value)) {
142
- state.value = cachedState;
143
- }
144
- },
145
- {
146
- immediate: true,
147
- deep: true,
148
- },
149
- );
150
-
151
- return filters;
152
- }