@platforma-sdk/ui-vue 1.58.2 → 1.58.4

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.
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.58.2 build /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.58.4 build /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder build --target browser-lib
5
5
 
6
6
  Building browser-lib project...
@@ -72,6 +72,7 @@ computing gzip size...
72
72
  dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js  0.19 kB │ gzip: 0.15 kB │ map: 0.47 kB
73
73
  dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js  0.19 kB │ gzip: 0.15 kB │ map: 0.47 kB
74
74
  dist/components/PlAgDataTable/sources/common.js  0.21 kB │ gzip: 0.17 kB │ map: 0.66 kB
75
+ dist/lib/util/helpers/dist/functions.js  0.21 kB │ gzip: 0.18 kB │ map: 5.34 kB
75
76
  dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js  0.21 kB │ gzip: 0.15 kB │ map: 0.50 kB
76
77
  dist/components/PlAnnotations/utils.js  0.21 kB │ gzip: 0.21 kB │ map: 1.07 kB
77
78
  dist/components/PlAnnotations/components/FilterSidebar.vue3.js  0.22 kB │ gzip: 0.17 kB │ map: 0.51 kB
@@ -98,13 +99,12 @@ computing gzip size...
98
99
  dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js  0.30 kB │ gzip: 0.22 kB │ map: 0.11 kB
99
100
  dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
100
101
  dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
101
- dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
102
102
  dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
103
+ dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
103
104
  dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js  0.32 kB │ gzip: 0.21 kB │ map: 0.64 kB
104
105
  dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js  0.32 kB │ gzip: 0.23 kB │ map: 0.12 kB
105
106
  dist/lib/util/helpers/dist/strings.js  0.35 kB │ gzip: 0.24 kB │ map: 4.22 kB
106
107
  dist/usePlugin.js  0.39 kB │ gzip: 0.28 kB │ map: 2.69 kB
107
- dist/lib/util/helpers/dist/functions.js  0.39 kB │ gzip: 0.26 kB │ map: 5.59 kB
108
108
  dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js  0.40 kB │ gzip: 0.24 kB │ map: 0.83 kB
109
109
  dist/computedResult.js  0.40 kB │ gzip: 0.26 kB │ map: 2.43 kB
110
110
  dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js  0.41 kB │ gzip: 0.25 kB │ map: 0.93 kB
@@ -172,7 +172,7 @@ computing gzip size...
172
172
  dist/components/PlTableFilters/PlTableFiltersV2.vue2.js  3.76 kB │ gzip: 1.59 kB │ map: 7.35 kB
173
173
  dist/plugins/Monetization/LimitCard.vue2.js  3.84 kB │ gzip: 1.15 kB │ map: 9.62 kB
174
174
  dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js  3.85 kB │ gzip: 1.53 kB │ map: 6.85 kB
175
- dist/components/PlAgDataTable/sources/table-state-v2.js  4.23 kB │ gzip: 1.50 kB │ map: 13.17 kB
175
+ dist/components/PlAgDataTable/sources/table-state-v2.js  4.14 kB │ gzip: 1.48 kB │ map: 13.21 kB
176
176
  dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js  4.26 kB │ gzip: 1.61 kB │ map: 6.42 kB
177
177
  dist/components/PlAnnotations/components/FilterSidebar.vue2.js  4.44 kB │ gzip: 1.57 kB │ map: 7.52 kB
178
178
  dist/plugins/Monetization/MonetizationSidebar.vue.js  4.71 kB │ gzip: 1.75 kB │ map: 6.78 kB
@@ -187,7 +187,7 @@ computing gzip size...
187
187
  dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js  8.35 kB │ gzip: 2.42 kB │ map: 16.95 kB
188
188
  dist/components/PlAdvancedFilter/FilterEditor.vue2.js 12.83 kB │ gzip: 3.28 kB │ map: 25.49 kB
189
189
  dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js 12.92 kB │ gzip: 3.68 kB │ map: 29.49 kB
190
- [vite:dts] Declaration files built in 8238ms.
190
+ [vite:dts] Declaration files built in 4437ms.
191
191
 
192
- ✓ built in 9.84s
192
+ ✓ built in 5.73s
193
193
  Build completed successfully
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.58.2 formatter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.58.4 formatter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder formatter --check
5
5
 
6
6
  Checking formatting...
@@ -8,5 +8,5 @@ Checking formatting...
8
8
  Checking formatting...
9
9
 
10
10
  All matched files use the correct format.
11
- Finished in 2409ms on 126 files using 8 threads.
11
+ Finished in 1355ms on 126 files using 8 threads.
12
12
  Format check completed successfully
@@ -1,10 +1,10 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.58.2 linter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.58.4 linter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder linter --check
5
5
 
6
6
  Linting project...
7
7
  ↳ oxlint --config /home/runner/_work/platforma/platforma/sdk/ui-vue/.oxlintrc.json --deny-warnings
8
8
  Found 0 warnings and 0 errors.
9
- Finished in 39ms on 109 files with 98 rules using 8 threads.
9
+ Finished in 27ms on 109 files with 98 rules using 8 threads.
10
10
  Linting completed successfully
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.58.2 types:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.58.4 types:check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder type-check --target browser-lib
5
5
 
6
6
  ↳ vue-tsc.js --noEmit --project ./tsconfig.json --customConditions ,
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.58.4
4
+
5
+ ### Patch Changes
6
+
7
+ - ea0c353: fix reactivity
8
+
9
+ ## 1.58.3
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [327444c]
14
+ - @platforma-sdk/model@1.58.3
15
+ - @milaboratories/uikit@2.10.36
16
+
3
17
  ## 1.58.2
4
18
 
5
19
  ### Patch Changes
@@ -4,7 +4,7 @@ import { PlDataTableSettingsV2 } from '../types';
4
4
  export declare function useTableState(tableStateDenormalized: Ref<PlDataTableStateV2>, settings: Ref<PlDataTableSettingsV2>, columns: Ref<PTableColumnSpec[]>): {
5
5
  gridState: WritableComputedRef<PlDataTableGridStateCore>;
6
6
  sheetsState: WritableComputedRef<PlDataTableSheetState[]>;
7
- filtersState: WritableComputedRef<PlDataTableFiltersWithMeta>;
7
+ filtersState: Ref<PlDataTableFiltersWithMeta>;
8
8
  searchString: WritableComputedRef<string>;
9
9
  };
10
10
  //# sourceMappingURL=table-state-v2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAQvB,0BAA0B,EAG3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmB,KAAK,GAAG,EAAE,KAAK,mBAAmB,EAAE,MAAM,KAAK,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAMtD,wBAAgB,aAAa,CAC3B,sBAAsB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAC/C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpC,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAC/B;IACD,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACzD,WAAW,EAAE,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC1D,YAAY,EAAE,mBAAmB,CAAC,0BAA0B,CAAC,CAAC;IAC9D,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CAC3C,CAqHA"}
1
+ {"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAQvB,0BAA0B,EAG3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,KAAK,GAAG,EAAE,KAAK,mBAAmB,EAAE,MAAM,KAAK,CAAC;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAMtD,wBAAgB,aAAa,CAC3B,sBAAsB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAC/C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpC,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAC/B;IACD,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACzD,WAAW,EAAE,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC1D,YAAY,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC9C,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CAC3C,CAqHA"}
@@ -1,88 +1,86 @@
1
- import { upgradePlDataTableStateV2 as g, createDefaultPTableParams as v, distillFilterSpec as h, canonicalizeJson as m, getPTableColumnId as I, parseJson as S } from "@platforma-sdk/model";
2
- import { computed as i, watch as y } from "vue";
3
- import { isJsonEqual as b } from "../../../lib/util/helpers/dist/objects.js";
4
- import { debounce as C } from "../../../lib/util/helpers/dist/functions.js";
5
- import { randomInt as T } from "../../../lib/util/helpers/dist/random.js";
6
- import { computedCached as P } from "@milaboratories/uikit";
7
- import { isStringValueType as N, isNumericValueType as x } from "../../PlAdvancedFilter/utils.js";
8
- import { isNil as A } from "es-toolkit";
9
- function B(r, a, s) {
10
- const n = P({
11
- get: () => g(r.value),
12
- set: C((e) => r.value = e, 300)
13
- }), o = i({
1
+ import { upgradePlDataTableStateV2 as v, createDefaultPTableParams as h, distillFilterSpec as I, canonicalizeJson as S, getPTableColumnId as y, parseJson as m } from "@platforma-sdk/model";
2
+ import { computed as c, ref as b, watch as C } from "vue";
3
+ import { isJsonEqual as T } from "../../../lib/util/helpers/dist/objects.js";
4
+ import { randomInt as P } from "../../../lib/util/helpers/dist/random.js";
5
+ import { computedCached as N } from "@milaboratories/uikit";
6
+ import { isStringValueType as x, isNumericValueType as V } from "../../PlAdvancedFilter/utils.js";
7
+ import { debounce as A, isNil as q } from "es-toolkit";
8
+ function B(r, a, o) {
9
+ const n = N({
10
+ get: () => v(r.value),
11
+ set: A((e) => r.value = e, 300)
12
+ }), s = c({
14
13
  get: () => {
15
- const e = V(), t = a.value.sourceId;
14
+ const e = F(), t = a.value.sourceId;
16
15
  if (!t) return e;
17
- const u = n.value.stateCache.find(
16
+ const i = n.value.stateCache.find(
18
17
  (p) => p.sourceId === t
19
18
  );
20
- return u || { ...e, sourceId: t };
19
+ return i || { ...e, sourceId: t };
21
20
  },
22
21
  set: (e) => {
23
22
  const t = {
24
23
  ...n.value,
25
- pTableParams: v()
24
+ pTableParams: h()
26
25
  };
27
26
  if (e.sourceId) {
28
- t.pTableParams = w(e, s.value);
29
- const u = t.stateCache.findIndex(
27
+ t.pTableParams = k(e, o.value);
28
+ const i = t.stateCache.findIndex(
30
29
  (p) => p.sourceId === e.sourceId
31
30
  );
32
- u !== -1 ? t.stateCache[u] = e : (t.stateCache.push(e), t.stateCache = t.stateCache.slice(-5));
31
+ i !== -1 ? t.stateCache[i] = e : (t.stateCache.push(e), t.stateCache = t.stateCache.slice(-5));
33
32
  }
34
- b(n.value, t) || (n.value = t);
33
+ T(n.value, t) || (n.value = t);
35
34
  }
36
- }), f = i({
37
- get: () => o.value.gridState,
35
+ }), f = c({
36
+ get: () => s.value.gridState,
38
37
  set: (e) => {
39
- const t = o.value;
40
- t.sourceId && (o.value = {
38
+ const t = s.value;
39
+ t.sourceId && (s.value = {
41
40
  ...t,
42
41
  gridState: e
43
42
  });
44
43
  }
45
- }), c = i({
46
- get: () => o.value.sheetsState,
44
+ }), d = c({
45
+ get: () => s.value.sheetsState,
47
46
  set: (e) => {
48
- const t = o.value;
49
- t.sourceId && (o.value = {
47
+ const t = s.value;
48
+ t.sourceId && (s.value = {
50
49
  ...t,
51
50
  sheetsState: e
52
51
  });
53
52
  }
54
- }), l = i({
53
+ }), l = c({
55
54
  get: () => {
56
- const e = o.value.filtersState;
57
- return e && (e.type === "and" || e.type === "or") && "filters" in e && Array.isArray(e.filters) ? e : { id: T(), type: "and", isExpanded: !0, filters: [] };
55
+ const e = s.value.filtersState;
56
+ return e && (e.type === "and" || e.type === "or") && "filters" in e && Array.isArray(e.filters) ? e : { id: P(), type: "and", isExpanded: !0, filters: [] };
58
57
  },
59
58
  set: (e) => {
60
- const t = o.value;
61
- t.sourceId && (o.value = {
59
+ const t = s.value;
60
+ t.sourceId && (s.value = {
62
61
  ...t,
63
62
  filtersState: e
64
63
  });
65
64
  }
66
- });
67
- y(
68
- () => l.value,
69
- // capture only mutations
70
- (e, t) => e === t && (l.value = e),
65
+ }), u = b(l);
66
+ C(
67
+ () => u.value,
68
+ (e) => l.value = e,
71
69
  { deep: !0 }
72
70
  );
73
- const d = i({
74
- get: () => o.value.searchString ?? "",
71
+ const g = c({
72
+ get: () => s.value.searchString ?? "",
75
73
  set: (e) => {
76
- const t = o.value;
77
- t.sourceId && (o.value = {
74
+ const t = s.value;
75
+ t.sourceId && (s.value = {
78
76
  ...t,
79
77
  searchString: e
80
78
  });
81
79
  }
82
80
  });
83
- return { gridState: f, sheetsState: c, filtersState: l, searchString: d };
81
+ return { gridState: f, sheetsState: d, filtersState: u, searchString: g };
84
82
  }
85
- function V() {
83
+ function F() {
86
84
  return {
87
85
  sourceId: null,
88
86
  gridState: {},
@@ -90,19 +88,19 @@ function V() {
90
88
  filtersState: null
91
89
  };
92
90
  }
93
- function q(r) {
91
+ function E(r) {
94
92
  var a;
95
- return ((a = r == null ? void 0 : r.hiddenColIds) == null ? void 0 : a.map(S).reduce((s, n) => (n.source.type === "column" && s.push(n.source.id), s), [])) ?? null;
93
+ return ((a = r == null ? void 0 : r.hiddenColIds) == null ? void 0 : a.map(m).reduce((o, n) => (n.source.type === "column" && o.push(n.source.id), o), [])) ?? null;
96
94
  }
97
- function F(r) {
95
+ function w(r) {
98
96
  return r.map((a) => {
99
- const s = m({ type: "axis", id: a.axisId });
100
- return typeof a.value == "number" ? { type: "equal", column: s, x: a.value } : { type: "patternEquals", column: s, value: a.value };
97
+ const o = S({ type: "axis", id: a.axisId });
98
+ return typeof a.value == "number" ? { type: "equal", column: o, x: a.value } : { type: "patternEquals", column: o, value: a.value };
101
99
  });
102
100
  }
103
- function E(r) {
101
+ function D(r) {
104
102
  return (r == null ? void 0 : r.sortModel.map((a) => {
105
- const { spec: s, ...n } = S(a.colId).labeled;
103
+ const { spec: o, ...n } = m(a.colId).labeled;
106
104
  return {
107
105
  column: n,
108
106
  ascending: a.sort === "asc",
@@ -111,28 +109,28 @@ function E(r) {
111
109
  })) ?? [];
112
110
  }
113
111
  function J(r, a) {
114
- const s = a == null ? void 0 : a.trim();
115
- if (A(s) || s.length === 0) return null;
116
- const n = [], o = Number(s), f = s.length > 0 && !isNaN(o) && isFinite(o);
117
- for (const c of r) {
118
- const l = m(I(c)), d = c.spec;
119
- N(d) && n.push({ type: "patternEquals", column: l, value: s }), x(d) && f && n.push({ type: "equal", column: l, x: o });
112
+ const o = a == null ? void 0 : a.trim();
113
+ if (q(o) || o.length === 0) return null;
114
+ const n = [], s = Number(o), f = o.length > 0 && !isNaN(s) && isFinite(s);
115
+ for (const d of r) {
116
+ const l = S(y(d)), u = d.spec;
117
+ x(u) && n.push({ type: "patternEquals", column: l, value: o }), V(u) && f && n.push({ type: "equal", column: l, x: s });
120
118
  }
121
119
  return n.length === 0 ? null : { type: "or", filters: n };
122
120
  }
123
- function w(r, a) {
124
- const s = J(a, r.searchString), n = [
125
- ...F(r.sheetsState),
121
+ function k(r, a) {
122
+ const o = J(a, r.searchString), n = [
123
+ ...w(r.sheetsState),
126
124
  ...r.filtersState ? [r.filtersState] : [],
127
- ...s ? [s] : []
128
- ], o = h(
125
+ ...o ? [o] : []
126
+ ], s = I(
129
127
  n.length === 0 ? null : n.length === 1 ? n[0] : { type: "and", filters: n }
130
128
  );
131
129
  return {
132
130
  sourceId: r.sourceId,
133
- hiddenColIds: q(r.gridState.columnVisibility),
134
- filters: o,
135
- sorting: E(r.gridState.sort)
131
+ hiddenColIds: E(r.gridState.columnVisibility),
132
+ filters: s,
133
+ sorting: D(r.gridState.sort)
136
134
  };
137
135
  }
138
136
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"table-state-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, watch, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { debounce, isJsonEqual, randomInt } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: WritableComputedRef<PlDataTableFiltersWithMeta>;\n searchString: WritableComputedRef<string>;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n if (!sourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === sourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache[stateIdx] = state;\n } else {\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n const isCorrect =\n raw &&\n (raw.type === \"and\" || raw.type === \"or\") &&\n \"filters\" in raw &&\n Array.isArray(raw.filters);\n\n return isCorrect\n ? (raw satisfies PlDataTableFiltersWithMeta)\n : { id: randomInt(), type: \"and\" as const, isExpanded: true, filters: [] };\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n watch(\n () => filtersState.value,\n // capture only mutations\n (newValue, oldValue) => newValue === oldValue && (filtersState.value = newValue),\n { deep: true },\n );\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState, searchString };\n}\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n searchString?: string;\n };\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore[\"columnVisibility\"]): PObjectId[] | null {\n return (\n state?.hiddenColIds?.map(parseJson).reduce((acc, c) => {\n if (c.source.type === \"column\") {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[]) ?? null\n );\n}\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const parts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(state.filtersState ? [state.filtersState] : []),\n ...(searchNode ? [searchNode] : []),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n parts.length === 0 ? null : parts.length === 1 ? parts[0] : { type: \"and\", filters: parts },\n );\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n filters,\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n };\n}\n"],"names":["useTableState","tableStateDenormalized","settings","columns","tableStateNormalized","computedCached","upgradePlDataTableStateV2","debounce","newState","tableState","computed","defaultState","makeDefaultState","sourceId","cachedState","entry","state","createDefaultPTableParams","createPTableParams","stateIdx","isJsonEqual","gridState","oldState","sheetsState","filtersState","raw","randomInt","watch","newValue","oldValue","searchString","getHiddenColIds","_a","parseJson","acc","c","convertPartitionFiltersToFilterSpec","s","column","canonicalizeJson","convertAgSortingToPTableSorting","item","_","createSearchFilterNode","search","trimmed","isNil","parts","numericValue","isValidNumber","col","getPTableColumnId","spec","isStringValueType","isNumericValueType","filterableColumns","searchNode","filters","distillFilterSpec"],"mappings":"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"}
1
+ {"version":3,"file":"table-state-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, ref, watch, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { debounce, isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n searchString: WritableComputedRef<string>;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n if (!sourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === sourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache[stateIdx] = state;\n } else {\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n const isCorrect =\n raw &&\n (raw.type === \"and\" || raw.type === \"or\") &&\n \"filters\" in raw &&\n Array.isArray(raw.filters);\n\n return isCorrect\n ? (raw satisfies PlDataTableFiltersWithMeta)\n : { id: randomInt(), type: \"and\" as const, isExpanded: true, filters: [] };\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n const filtersStateDeepReactive = ref(filtersState);\n watch(\n () => filtersStateDeepReactive.value,\n (newValue) => (filtersState.value = newValue),\n { deep: true },\n );\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState: filtersStateDeepReactive, searchString };\n}\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n searchString?: string;\n };\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore[\"columnVisibility\"]): PObjectId[] | null {\n return (\n state?.hiddenColIds?.map(parseJson).reduce((acc, c) => {\n if (c.source.type === \"column\") {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[]) ?? null\n );\n}\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const parts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(state.filtersState ? [state.filtersState] : []),\n ...(searchNode ? [searchNode] : []),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n parts.length === 0 ? null : parts.length === 1 ? parts[0] : { type: \"and\", filters: parts },\n );\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n filters,\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n };\n}\n"],"names":["useTableState","tableStateDenormalized","settings","columns","tableStateNormalized","computedCached","upgradePlDataTableStateV2","debounce","newState","tableState","computed","defaultState","makeDefaultState","sourceId","cachedState","entry","state","createDefaultPTableParams","createPTableParams","stateIdx","isJsonEqual","gridState","oldState","sheetsState","filtersState","raw","randomInt","filtersStateDeepReactive","ref","watch","newValue","searchString","getHiddenColIds","_a","parseJson","acc","c","convertPartitionFiltersToFilterSpec","s","column","canonicalizeJson","convertAgSortingToPTableSorting","item","_","createSearchFilterNode","search","trimmed","isNil","parts","numericValue","isValidNumber","col","getPTableColumnId","spec","isStringValueType","isNumericValueType","filterableColumns","searchNode","filters","distillFilterSpec"],"mappings":"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"}
@@ -1,19 +1,10 @@
1
- function u(i, t) {
1
+ function t(r, e) {
2
2
  return Promise.race([
3
- i,
4
- new Promise((o, e) => setTimeout(() => e(Error(`Timeout exceeded ${t}`)), t))
3
+ r,
4
+ new Promise((i, o) => setTimeout(() => o(Error(`Timeout exceeded ${e}`)), e))
5
5
  ]);
6
6
  }
7
- function n(i, t, o) {
8
- let e;
9
- return function(...r) {
10
- e && clearTimeout(e), e = setTimeout(() => {
11
- e = void 0, i.apply(this, r);
12
- }, t);
13
- };
14
- }
15
7
  export {
16
- n as debounce,
17
- u as promiseTimeout
8
+ t as promiseTimeout
18
9
  };
19
10
  //# sourceMappingURL=functions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sources":["../../../../../../../lib/util/helpers/src/functions.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\n/**\n * A utility class that ensures asynchronous locks, allowing only one task to proceed at a time.\n */\nexport class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n release(): void {\n if (!this.acquired) {\n throw new Error(\"Cannot release not acquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n } else {\n this.acquired = false;\n }\n }\n}\n\n/**\n * A utility to add a timeout to a promise, rejecting the promise if the timeout is exceeded.\n */\nexport function promiseTimeout<T>(prom: PromiseLike<T>, ms: number): Promise<T> {\n return Promise.race<T>([\n prom,\n new Promise((_r, reject) => setTimeout(() => reject(Error(`Timeout exceeded ${ms}`)), ms)),\n ]);\n}\n\n/**\n * Debounce utility: delays the execution of a function until a certain time has passed since the last call.\n * @param callback\n * @param ms\n * @param immediate (if first call is required)\n * @returns\n */\nexport function debounce<F extends AnyFunction>(\n callback: F,\n ms: number,\n immediate?: boolean,\n): (...args: Parameters<F>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return function (this: unknown, ...args: Parameters<F>) {\n const i = immediate && !timeout;\n if (i) {\n callback.apply(this, args);\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = undefined;\n if (!i) {\n callback.apply(this, args);\n }\n }, ms);\n };\n}\n\n/**\n * Throttle utility: ensures a function is called at most once every `ms` milliseconds.\n * @param callback\n * @param ms milliseconds\n * @param trailing (ensure last call)\n * @returns\n */\nexport function throttle<F extends AnyFunction>(\n callback: F,\n ms: number,\n trailing = true,\n): (...args: Parameters<F>) => void {\n let t = 0,\n call: AnyFunction | null;\n return function (this: unknown, ...args: Parameters<F>) {\n call = () => {\n callback.apply(this, args);\n t = new Date().getTime() + ms;\n call = null;\n if (trailing) {\n setTimeout(() => {\n call?.();\n }, ms);\n }\n };\n if (new Date().getTime() > t) call();\n };\n}\n\n/**\n * Memoization utility: caches results of function calls based on their arguments to avoid redundant calculations.\n */\nexport const memoize = <F extends AnyFunction>(fn: F) => {\n const cache = new Map();\n return function (...args: Parameters<F>): ReturnType<F> {\n const key = JSON.stringify(args);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cache.has(key)\n ? cache.get(key)\n : cache.set(key, fn.call(null, ...args)) && cache.get(key);\n };\n};\n\n/**\n * Function wrapper utility: executes a function before the main function is called.\n */\nexport const wrapFunction = <T extends unknown[], U>(fn: (...args: T) => U, before: () => void) => {\n return (...args: T): U => {\n before();\n return fn(...args);\n };\n};\n\n/**\n * Function piping utility: allows chaining of functions by passing the result of one as input to another\n */\nexport function pipe<A, B>(cb: (a: A) => B) {\n const fn = (a: A) => cb(a);\n\n fn.pipe = <C>(next: (b: B) => C) => pipe((a: A) => next(cb(a)));\n\n return fn;\n}\n\n/**\n * Ensures that only one request can be processed at a time.\n */\nexport function exclusiveRequest<A, R>(request: (...args: A[]) => Promise<R>) {\n let counter = 0n;\n let ongoingOperation: Promise<R> | undefined;\n\n return async function (...params: A[]): Promise<\n | {\n ok: false;\n }\n | {\n ok: true;\n value: R;\n }\n > {\n const myId = ++counter;\n\n try {\n await ongoingOperation;\n } catch {\n // ignoring the error here, original caller will receive any rejections\n }\n\n // checking that this update is still the most recent\n if (counter !== myId) {\n return {\n ok: false,\n };\n }\n\n const promise = request(...params);\n\n ongoingOperation = promise;\n\n const value = await promise;\n\n return {\n ok: true,\n value,\n };\n };\n}\n\nexport function tryDo<R1>(fn: () => R1): R1 | undefined;\nexport function tryDo<R1, R2>(fn: () => R1, fallback: (cause: unknown) => R2): R1 | R2;\nexport function tryDo(fn: () => unknown, fallback?: (cause: unknown) => unknown) {\n try {\n return fn();\n } catch (cause: unknown) {\n return fallback?.(cause);\n }\n}\n"],"names":["promiseTimeout","prom","ms","_r","reject","debounce","callback","immediate","timeout","args"],"mappings":"AAwCM,SAAUA,EAAkBC,GAAsBC,GAAU;AAChE,SAAO,QAAQ,KAAQ;AAAA,IACrBD;AAAA,IACA,IAAI,QAAQ,CAACE,GAAIC,MAAW,WAAW,MAAMA,EAAO,MAAM,oBAAoBF,CAAE,EAAE,CAAC,GAAGA,CAAE,CAAC;AAAA,EAC1F,CAAA;AACH;AASgB,SAAAG,EACdC,GACAJ,GACAK,GAAmB;AAEnB,MAAIC;AACJ,SAAO,YAA4BC,GAAmB;AAKpD,IAAID,KACF,aAAaA,CAAO,GAEtBA,IAAU,WAAW,MAAK;AACxB,MAAAA,IAAU,QAERF,EAAS,MAAM,MAAMG,CAAI;AAAA,IAE7B,GAAGP,CAAE;AAAA,EACP;AACF;"}
1
+ {"version":3,"file":"functions.js","sources":["../../../../../../../lib/util/helpers/src/functions.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\n/**\n * A utility class that ensures asynchronous locks, allowing only one task to proceed at a time.\n */\nexport class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n release(): void {\n if (!this.acquired) {\n throw new Error(\"Cannot release not acquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n } else {\n this.acquired = false;\n }\n }\n}\n\n/**\n * A utility to add a timeout to a promise, rejecting the promise if the timeout is exceeded.\n */\nexport function promiseTimeout<T>(prom: PromiseLike<T>, ms: number): Promise<T> {\n return Promise.race<T>([\n prom,\n new Promise((_r, reject) => setTimeout(() => reject(Error(`Timeout exceeded ${ms}`)), ms)),\n ]);\n}\n\n/**\n * Debounce utility: delays the execution of a function until a certain time has passed since the last call.\n * @param callback\n * @param ms\n * @param immediate (if first call is required)\n * @returns\n */\nexport function debounce<F extends AnyFunction>(\n callback: F,\n ms: number,\n immediate?: boolean,\n): (...args: Parameters<F>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return function (this: unknown, ...args: Parameters<F>) {\n const i = immediate && !timeout;\n if (i) {\n callback.apply(this, args);\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = undefined;\n if (!i) {\n callback.apply(this, args);\n }\n }, ms);\n };\n}\n\n/**\n * Throttle utility: ensures a function is called at most once every `ms` milliseconds.\n * @param callback\n * @param ms milliseconds\n * @param trailing (ensure last call)\n * @returns\n */\nexport function throttle<F extends AnyFunction>(\n callback: F,\n ms: number,\n trailing = true,\n): (...args: Parameters<F>) => void {\n let t = 0,\n call: AnyFunction | null;\n return function (this: unknown, ...args: Parameters<F>) {\n call = () => {\n callback.apply(this, args);\n t = new Date().getTime() + ms;\n call = null;\n if (trailing) {\n setTimeout(() => {\n call?.();\n }, ms);\n }\n };\n if (new Date().getTime() > t) call();\n };\n}\n\n/**\n * Memoization utility: caches results of function calls based on their arguments to avoid redundant calculations.\n */\nexport const memoize = <F extends AnyFunction>(fn: F) => {\n const cache = new Map();\n return function (...args: Parameters<F>): ReturnType<F> {\n const key = JSON.stringify(args);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cache.has(key)\n ? cache.get(key)\n : cache.set(key, fn.call(null, ...args)) && cache.get(key);\n };\n};\n\n/**\n * Function wrapper utility: executes a function before the main function is called.\n */\nexport const wrapFunction = <T extends unknown[], U>(fn: (...args: T) => U, before: () => void) => {\n return (...args: T): U => {\n before();\n return fn(...args);\n };\n};\n\n/**\n * Function piping utility: allows chaining of functions by passing the result of one as input to another\n */\nexport function pipe<A, B>(cb: (a: A) => B) {\n const fn = (a: A) => cb(a);\n\n fn.pipe = <C>(next: (b: B) => C) => pipe((a: A) => next(cb(a)));\n\n return fn;\n}\n\n/**\n * Ensures that only one request can be processed at a time.\n */\nexport function exclusiveRequest<A, R>(request: (...args: A[]) => Promise<R>) {\n let counter = 0n;\n let ongoingOperation: Promise<R> | undefined;\n\n return async function (...params: A[]): Promise<\n | {\n ok: false;\n }\n | {\n ok: true;\n value: R;\n }\n > {\n const myId = ++counter;\n\n try {\n await ongoingOperation;\n } catch {\n // ignoring the error here, original caller will receive any rejections\n }\n\n // checking that this update is still the most recent\n if (counter !== myId) {\n return {\n ok: false,\n };\n }\n\n const promise = request(...params);\n\n ongoingOperation = promise;\n\n const value = await promise;\n\n return {\n ok: true,\n value,\n };\n };\n}\n\nexport function tryDo<R1>(fn: () => R1): R1 | undefined;\nexport function tryDo<R1, R2>(fn: () => R1, fallback: (cause: unknown) => R2): R1 | R2;\nexport function tryDo(fn: () => unknown, fallback?: (cause: unknown) => unknown) {\n try {\n return fn();\n } catch (cause: unknown) {\n return fallback?.(cause);\n }\n}\n"],"names":["promiseTimeout","prom","ms","_r","reject"],"mappings":"AAwCM,SAAUA,EAAkBC,GAAsBC,GAAU;AAChE,SAAO,QAAQ,KAAQ;AAAA,IACrBD;AAAA,IACA,IAAI,QAAQ,CAACE,GAAIC,MAAW,WAAW,MAAMA,EAAO,MAAM,oBAAoBF,CAAE,EAAE,CAAC,GAAGA,CAAE,CAAC;AAAA,EAC1F,CAAA;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/ui-vue",
3
- "version": "1.58.2",
3
+ "version": "1.58.4",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css"
@@ -28,8 +28,8 @@
28
28
  "lru-cache": "^11.2.2",
29
29
  "vue": "^3.5.24",
30
30
  "zod": "~3.23.8",
31
- "@platforma-sdk/model": "1.58.2",
32
- "@milaboratories/uikit": "2.10.35"
31
+ "@platforma-sdk/model": "1.58.3",
32
+ "@milaboratories/uikit": "2.10.36"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@faker-js/faker": "^9.2.0",
@@ -43,10 +43,10 @@
43
43
  "typescript": "~5.6.3",
44
44
  "vite": "^6.4.1",
45
45
  "vitest": "^4.0.18",
46
- "@milaboratories/helpers": "1.13.5",
47
- "@milaboratories/build-configs": "1.5.0",
46
+ "@milaboratories/ts-builder": "1.2.11",
48
47
  "@milaboratories/ts-configs": "1.2.1",
49
- "@milaboratories/ts-builder": "1.2.11"
48
+ "@milaboratories/helpers": "1.13.5",
49
+ "@milaboratories/build-configs": "1.5.0"
50
50
  },
51
51
  "scripts": {
52
52
  "dev": "ts-builder serve --target browser-lib",
@@ -21,12 +21,12 @@ import {
21
21
  getPTableColumnId,
22
22
  CanonicalizedJson,
23
23
  } from "@platforma-sdk/model";
24
- import { computed, watch, type Ref, type WritableComputedRef } from "vue";
24
+ import { computed, ref, watch, type Ref, type WritableComputedRef } from "vue";
25
25
  import type { PlDataTableSettingsV2 } from "../types";
26
- import { debounce, isJsonEqual, randomInt } from "@milaboratories/helpers";
26
+ import { isJsonEqual, randomInt } from "@milaboratories/helpers";
27
27
  import { computedCached } from "@milaboratories/uikit";
28
28
  import { isStringValueType, isNumericValueType } from "../../PlAdvancedFilter/utils";
29
- import { isNil } from "es-toolkit";
29
+ import { debounce, isNil } from "es-toolkit";
30
30
 
31
31
  export function useTableState(
32
32
  tableStateDenormalized: Ref<PlDataTableStateV2>,
@@ -35,7 +35,7 @@ export function useTableState(
35
35
  ): {
36
36
  gridState: WritableComputedRef<PlDataTableGridStateCore>;
37
37
  sheetsState: WritableComputedRef<PlDataTableSheetState[]>;
38
- filtersState: WritableComputedRef<PlDataTableFiltersWithMeta>;
38
+ filtersState: Ref<PlDataTableFiltersWithMeta>;
39
39
  searchString: WritableComputedRef<string>;
40
40
  } {
41
41
  const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({
@@ -133,10 +133,10 @@ export function useTableState(
133
133
  }
134
134
  },
135
135
  });
136
+ const filtersStateDeepReactive = ref(filtersState);
136
137
  watch(
137
- () => filtersState.value,
138
- // capture only mutations
139
- (newValue, oldValue) => newValue === oldValue && (filtersState.value = newValue),
138
+ () => filtersStateDeepReactive.value,
139
+ (newValue) => (filtersState.value = newValue),
140
140
  { deep: true },
141
141
  );
142
142
 
@@ -153,7 +153,7 @@ export function useTableState(
153
153
  },
154
154
  });
155
155
 
156
- return { gridState, sheetsState, filtersState, searchString };
156
+ return { gridState, sheetsState, filtersState: filtersStateDeepReactive, searchString };
157
157
  }
158
158
 
159
159
  type PlDataTableStateV2CacheEntryNullable =