@platforma-sdk/ui-vue 1.79.27 → 1.80.0

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 (56) hide show
  1. package/.turbo/turbo-build.log +19 -19
  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 +38 -0
  6. package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -1
  7. package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -1
  8. package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts.map +1 -1
  9. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +124 -113
  10. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  11. package/dist/components/PlAdvancedFilter/types.d.ts +1 -1
  12. package/dist/components/PlAdvancedFilter/types.d.ts.map +1 -1
  13. package/dist/components/PlAdvancedFilter/utils.d.ts +1 -1
  14. package/dist/components/PlAdvancedFilter/utils.d.ts.map +1 -1
  15. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  16. package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -1
  17. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -1
  18. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  19. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +125 -121
  20. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  21. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.d.ts +4 -4
  22. package/dist/components/PlAgDataTable/sources/row-number.d.ts.map +1 -1
  23. package/dist/components/PlAgDataTable/sources/row-number.js +1 -1
  24. package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
  25. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +40 -4
  26. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
  27. package/dist/components/PlAgDataTable/sources/table-source-v2.js +91 -56
  28. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  29. package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts.map +1 -1
  30. package/dist/components/PlAgDataTable/sources/table-state-v2.js +65 -64
  31. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  32. package/dist/components/PlAgDataTable/sources/value-rendering.d.ts +3 -3
  33. package/dist/components/PlAgDataTable/sources/value-rendering.d.ts.map +1 -1
  34. package/dist/components/PlAgDataTable/sources/value-rendering.js +12 -12
  35. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  36. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  37. package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -1
  38. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -1
  39. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
  40. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +42 -45
  41. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  42. package/dist/internal/service_factories.d.ts +4 -3
  43. package/dist/internal/service_factories.d.ts.map +1 -1
  44. package/dist/internal/service_factories.js +6 -4
  45. package/dist/internal/service_factories.js.map +1 -1
  46. package/package.json +7 -6
  47. package/src/components/PlAdvancedFilter/FilterEditor.vue +39 -10
  48. package/src/components/PlAdvancedFilter/types.ts +3 -2
  49. package/src/components/PlAdvancedFilter/utils.ts +1 -1
  50. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +21 -5
  51. package/src/components/PlAgDataTable/sources/row-number.ts +1 -0
  52. package/src/components/PlAgDataTable/sources/table-source-v2.ts +132 -31
  53. package/src/components/PlAgDataTable/sources/table-state-v2.ts +6 -7
  54. package/src/components/PlAgDataTable/sources/value-rendering.ts +7 -7
  55. package/src/components/PlTableFilters/PlTableFiltersV2.vue +9 -13
  56. package/src/internal/service_factories.ts +2 -0
@@ -3,35 +3,36 @@ import { randomInt as n } from "../../../lib/util/helpers/dist/random.js";
3
3
  import "../../../lib/util/helpers/dist/index.js";
4
4
  import { isNumericValueType as r, isStringValueType as i } from "../../PlAdvancedFilter/utils.js";
5
5
  import { computed as a } from "vue";
6
- import { canonicalizeJson as o, createDefaultPTableParams as s, distillFilterSpec as c, getPTableColumnId as l, parseJson as u, upgradePlDataTableStateV2 as d } from "@platforma-sdk/model";
7
- import { debounce as f, isNil as p } from "es-toolkit";
8
- import { computedCached as m } from "@milaboratories/uikit";
6
+ import { createDefaultPTableParams as o, distillFilterSpec as s, getPTableColumnId as c, parseJson as l, upgradePlDataTableStateV2 as u } from "@platforma-sdk/model";
7
+ import { debounce as d, isNil as f } from "es-toolkit";
8
+ import { computedCached as p } from "@milaboratories/uikit";
9
9
  //#region src/components/PlAgDataTable/sources/table-state-v2.ts
10
- function h(e, n, r, i) {
11
- let o = m({
12
- get: () => d(e.value),
13
- set: f((t) => e.value = t, 300)
10
+ function m(e, n, r, i) {
11
+ let s = p({
12
+ get: () => u(e.value),
13
+ set: d((t) => e.value = t, 300),
14
+ writeThrough: !0
14
15
  }), c = a({
15
16
  get: () => {
16
- let e = D(), t = n.value.sourceId, r = "error" in n.value && n.value.error == null;
17
+ let e = E(), t = n.value.sourceId, r = "error" in n.value && n.value.error == null;
17
18
  if (!t && r) return e;
18
- let i = t ?? o.value.stateCache.at(-1)?.sourceId;
19
- return i ? o.value.stateCache.find((e) => e.sourceId === i) || {
19
+ let i = t ?? s.value.stateCache.at(-1)?.sourceId;
20
+ return i ? s.value.stateCache.find((e) => e.sourceId === i) || {
20
21
  ...e,
21
22
  sourceId: i
22
23
  } : e;
23
24
  },
24
25
  set: (e) => {
25
26
  let n = {
26
- ...o.value,
27
- pTableParams: s()
27
+ ...s.value,
28
+ pTableParams: o()
28
29
  };
29
30
  if (e.sourceId) {
30
- n.pTableParams = g(e, r.value);
31
+ n.pTableParams = h(e, r.value);
31
32
  let t = n.stateCache.findIndex((t) => t.sourceId === e.sourceId);
32
33
  t !== -1 && n.stateCache.splice(t, 1), n.stateCache.push(e), n.stateCache = n.stateCache.slice(-5);
33
34
  }
34
- t(o.value, n) || (o.value = n);
35
+ t(s.value, n) || (s.value = n);
35
36
  }
36
37
  }), l = a({
37
38
  get: () => c.value.gridState,
@@ -42,7 +43,7 @@ function h(e, n, r, i) {
42
43
  gridState: e
43
44
  });
44
45
  }
45
- }), u = a({
46
+ }), m = a({
46
47
  get: () => c.value.sheetsState,
47
48
  set: (e) => {
48
49
  let t = c.value;
@@ -51,10 +52,10 @@ function h(e, n, r, i) {
51
52
  sheetsState: e
52
53
  });
53
54
  }
54
- }), h = a({
55
+ }), _ = a({
55
56
  get: () => {
56
57
  let e = c.value.filtersState;
57
- return p(e) ? y() : _(e);
58
+ return f(e) ? v() : g(e);
58
59
  },
59
60
  set: (e) => {
60
61
  let t = c.value;
@@ -63,10 +64,10 @@ function h(e, n, r, i) {
63
64
  filtersState: e
64
65
  });
65
66
  }
66
- }), v = a({
67
+ }), y = a({
67
68
  get: () => {
68
69
  let e = c.value.defaultFiltersState;
69
- return p(e) ? p(i.value) ? null : S(_(i.value)) : _(e);
70
+ return f(e) ? f(i.value) ? null : x(g(i.value)) : g(e);
70
71
  },
71
72
  set: (e) => {
72
73
  let t = c.value;
@@ -77,11 +78,11 @@ function h(e, n, r, i) {
77
78
  }
78
79
  });
79
80
  function b() {
80
- v.value = p(i.value) ? null : S(_(i.value));
81
+ y.value = f(i.value) ? null : x(g(i.value));
81
82
  }
82
83
  return {
83
84
  gridState: l,
84
- sheetsState: u,
85
+ sheetsState: m,
85
86
  searchString: a({
86
87
  get: () => c.value.searchString ?? "",
87
88
  set: (e) => {
@@ -92,30 +93,30 @@ function h(e, n, r, i) {
92
93
  });
93
94
  }
94
95
  }),
95
- filtersState: h,
96
- defaultFiltersState: v,
96
+ filtersState: _,
97
+ defaultFiltersState: y,
97
98
  resetDefaultFilters: b
98
99
  };
99
100
  }
100
- function g(e, t) {
101
- let n = x(t, e.searchString), r = p(e.filtersState) ? null : b(e.filtersState), i = [
102
- ...w(e.sheetsState),
103
- ...p(r) ? [] : [r],
104
- ...p(n) ? [] : [n]
105
- ], a = c(i.length === 0 ? null : i.length === 1 ? i[0] : {
101
+ function h(e, t) {
102
+ let n = b(t, e.searchString), r = f(e.filtersState) ? null : y(e.filtersState), i = [
103
+ ...C(e.sheetsState),
104
+ ...f(r) ? [] : [r],
105
+ ...f(n) ? [] : [n]
106
+ ], a = s(i.length === 0 ? null : i.length === 1 ? i[0] : {
106
107
  type: "and",
107
108
  filters: i
108
- }), o = p(e.defaultFiltersState) ? null : b(e.defaultFiltersState), s = p(o) ? null : c(o) ?? v();
109
+ }), o = f(e.defaultFiltersState) ? null : y(e.defaultFiltersState), c = f(o) ? null : s(o) ?? _();
109
110
  return {
110
111
  sourceId: e.sourceId,
111
- hiddenColIds: E(e.gridState.columnVisibility),
112
- sorting: T(e.gridState.sort),
112
+ hiddenColIds: T(e.gridState.columnVisibility),
113
+ sorting: w(e.gridState.sort),
113
114
  filters: a,
114
- defaultFilters: s
115
+ defaultFilters: c
115
116
  };
116
117
  }
117
- function _(e) {
118
- return e.type !== "and" && e.type !== "or" && e.type !== "not" ? "type" in e && !p(e.type) ? {
118
+ function g(e) {
119
+ return e.type !== "and" && e.type !== "or" && e.type !== "not" ? "type" in e && !f(e.type) ? {
119
120
  id: n(),
120
121
  type: "and",
121
122
  isExpanded: !0,
@@ -125,7 +126,7 @@ function _(e) {
125
126
  isExpanded: !0,
126
127
  filters: [e]
127
128
  }]
128
- } : y() : (e.type === "and" || e.type === "or") && "filters" in e && Array.isArray(e.filters) ? e.filters.every((e) => e.type === "and" || e.type === "or" || e.type === "not") ? e : {
129
+ } : v() : (e.type === "and" || e.type === "or") && "filters" in e && Array.isArray(e.filters) ? e.filters.every((e) => e.type === "and" || e.type === "or" || e.type === "not") ? e : {
129
130
  id: n(),
130
131
  type: e.type,
131
132
  isExpanded: !0,
@@ -135,41 +136,41 @@ function _(e) {
135
136
  isExpanded: !0,
136
137
  filters: e.filters
137
138
  }]
138
- } : y();
139
+ } : v();
139
140
  }
140
- function v() {
141
+ function _() {
141
142
  return {
142
143
  type: "and",
143
144
  filters: []
144
145
  };
145
146
  }
146
- function y() {
147
+ function v() {
147
148
  return {
148
- ...v(),
149
+ ..._(),
149
150
  id: n(),
150
151
  isExpanded: !0
151
152
  };
152
153
  }
153
- function b(e) {
154
+ function y(e) {
154
155
  return {
155
156
  ...e,
156
- filters: e.filters.filter((e) => !("isSuppressed" in e && e.isSuppressed === !0)).map((e) => "filters" in e && (e.type === "and" || e.type === "or") ? b(e) : e)
157
+ filters: e.filters.filter((e) => !("isSuppressed" in e && e.isSuppressed === !0)).map((e) => "filters" in e && (e.type === "and" || e.type === "or") ? y(e) : e)
157
158
  };
158
159
  }
159
- function x(e, t) {
160
+ function b(e, t) {
160
161
  let n = t?.trim();
161
- if (p(n) || n.length === 0) return null;
162
- let a = [], s = Number(n), c = n.length > 0 && !isNaN(s) && isFinite(s);
162
+ if (f(n) || n.length === 0) return null;
163
+ let a = [], o = Number(n), s = n.length > 0 && !isNaN(o) && isFinite(o);
163
164
  for (let t of e) {
164
- let e = o(l(t)), u = t.spec;
165
- i(u) && a.push({
165
+ let e = c(t), l = t.spec;
166
+ i(l) && a.push({
166
167
  type: "patternEquals",
167
168
  column: e,
168
169
  value: n
169
- }), r(u) && c && a.push({
170
+ }), r(l) && s && a.push({
170
171
  type: "equal",
171
172
  column: e,
172
- x: s
173
+ x: o
173
174
  });
174
175
  }
175
176
  return a.length === 0 ? null : {
@@ -177,28 +178,28 @@ function x(e, t) {
177
178
  filters: a
178
179
  };
179
180
  }
180
- function S(e) {
181
- return C(e);
181
+ function x(e) {
182
+ return S(e);
182
183
  }
183
- function C(t) {
184
+ function S(t) {
184
185
  switch (t.type) {
185
186
  case "and": return {
186
187
  id: e(t, "id") ?? n(),
187
188
  isExpanded: e(t, "isExpanded") ?? !0,
188
189
  type: "and",
189
- filters: t.filters.map((e) => C(e))
190
+ filters: t.filters.map((e) => S(e))
190
191
  };
191
192
  case "or": return {
192
193
  id: e(t, "id") ?? n(),
193
194
  isExpanded: e(t, "isExpanded") ?? !0,
194
195
  type: "or",
195
- filters: t.filters.map((e) => C(e))
196
+ filters: t.filters.map((e) => S(e))
196
197
  };
197
198
  case "not": return {
198
199
  id: n(),
199
200
  isExpanded: !0,
200
201
  type: "not",
201
- filter: C(t.filter)
202
+ filter: S(t.filter)
202
203
  };
203
204
  default: return {
204
205
  ...t,
@@ -206,12 +207,12 @@ function C(t) {
206
207
  };
207
208
  }
208
209
  }
209
- function w(e) {
210
+ function C(e) {
210
211
  return e.map((e) => {
211
- let t = o({
212
+ let t = {
212
213
  type: "axis",
213
214
  id: e.axisId
214
- });
215
+ };
215
216
  return typeof e.value == "number" ? {
216
217
  type: "equal",
217
218
  column: t,
@@ -223,17 +224,17 @@ function w(e) {
223
224
  };
224
225
  });
225
226
  }
226
- function T(e) {
227
+ function w(e) {
227
228
  return e?.sortModel.map((e) => ({
228
- column: u(e.colId),
229
+ column: l(e.colId),
229
230
  ascending: e.sort === "asc",
230
231
  naAndAbsentAreLeastValues: e.sort === "asc"
231
232
  })) ?? [];
232
233
  }
233
- function E(e) {
234
- return e?.hiddenColIds?.map((e) => u(e)) ?? null;
234
+ function T(e) {
235
+ return e?.hiddenColIds?.map((e) => l(e)) ?? null;
235
236
  }
236
- function D() {
237
+ function E() {
237
238
  return {
238
239
  sourceId: null,
239
240
  gridState: {},
@@ -243,6 +244,6 @@ function D() {
243
244
  };
244
245
  }
245
246
  //#endregion
246
- export { h as useTableState };
247
+ export { m as useTableState };
247
248
 
248
249
  //# sourceMappingURL=table-state-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-state-v2.js","names":[],"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 PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilterSpecLeaf,\n type PlDataTableFilterMeta,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt, getField, Nil } 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 defaultFilters: Ref<Nil | PlDataTableFilters>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n\n searchString: WritableComputedRef<string>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n defaultFiltersState: Ref<null | PlDataTableFiltersWithMeta>;\n resetDefaultFilters: () => void;\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 const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\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.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\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 // --- User filters (editable by user) ---\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n return isNil(raw) ? getEmptyGroupWithMeta() : normalizeFiltersState(raw);\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\n // --- Default filters (from model, separate list) ---\n const defaultFiltersState = computed<null | PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.defaultFiltersState;\n if (!isNil(raw)) {\n return normalizeFiltersState(raw);\n }\n if (!isNil(defaultFilters.value)) {\n return annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\n }\n return null;\n },\n set: (defaultFiltersState: null | PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n defaultFiltersState,\n };\n }\n },\n });\n\n function resetDefaultFilters(): void {\n defaultFiltersState.value = isNil(defaultFilters.value)\n ? null\n : annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\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 {\n gridState,\n sheetsState,\n searchString,\n filtersState,\n defaultFiltersState,\n resetDefaultFilters,\n };\n}\n\n// --- Types ---\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n defaultFiltersState: null;\n searchString?: string;\n };\n\ntype FilterNode = FilterSpec<PlDataTableFilterSpecLeaf>;\ntype AnnotatedFilterSpec = FilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;\n\n// --- Core ---\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n // User filters: sheets + user filter state + search\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const unsuppressedUserFilters = isNil(state.filtersState)\n ? null\n : stripSuppressedFilters(state.filtersState);\n const userParts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(isNil(unsuppressedUserFilters) ? [] : [unsuppressedUserFilters]),\n ...(isNil(searchNode) ? [] : [searchNode]),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n userParts.length === 0\n ? null\n : userParts.length === 1\n ? userParts[0]\n : { type: \"and\", filters: userParts },\n );\n const unsuppressedDefaultFilters = isNil(state.defaultFiltersState)\n ? null\n : stripSuppressedFilters(state.defaultFiltersState);\n const defaultFilters: null | PlDataTableFilters = isNil(unsuppressedDefaultFilters)\n ? null\n : // If all filters are suppressed, we should pass an empty filter group instead of null to prevent fallback to defaults in the model\n (distillFilterSpec(unsuppressedDefaultFilters) ?? getEmptyGroup());\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n filters,\n defaultFilters,\n };\n}\n\n/**\n * Normalizes raw filter state into a valid root filter structure.\n * Valid structure is Root(Group, Group, ...) — double nesting required:\n * root is and/or group, each child is also and/or group containing leaf filters.\n * - null/undefined/invalid → empty root\n * - Leaf node → Root(Group(leaf))\n * - Group with leaf children → Root(Group(leaves...))\n * - Group with group children → as-is\n */\nfunction normalizeFiltersState(raw: FilterNode) {\n // Leaf node → wrap in double nesting: Root(Group(leaf))\n if (raw.type !== \"and\" && raw.type !== \"or\" && raw.type !== \"not\") {\n if (\"type\" in raw && !isNil(raw.type)) {\n return {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [raw as AnnotatedFilterSpec],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n return getEmptyGroupWithMeta();\n }\n\n // Already a group — ensure children are also groups (double nesting)\n if ((raw.type === \"and\" || raw.type === \"or\") && \"filters\" in raw && Array.isArray(raw.filters)) {\n const allChildrenAreGroups = raw.filters.every(\n (f: FilterNode) => f.type === \"and\" || f.type === \"or\" || f.type === \"not\",\n );\n if (allChildrenAreGroups) {\n return raw as PlDataTableFiltersWithMeta;\n }\n // Children are leaves — wrap them in a single group\n return {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: raw.filters as AnnotatedFilterSpec[],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n\n return getEmptyGroupWithMeta();\n}\n\nfunction getEmptyGroup(): PlDataTableFilters {\n return {\n type: \"and\" as const,\n filters: [],\n };\n}\nfunction getEmptyGroupWithMeta(): PlDataTableFiltersWithMeta {\n return {\n ...getEmptyGroup(),\n id: randomInt(),\n isExpanded: true,\n } as PlDataTableFiltersWithMeta;\n}\n\n/**\n * Recursively removes nodes where isSuppressed === true from a PlDataTableFiltersWithMeta tree.\n */\nfunction stripSuppressedFilters(node: PlDataTableFiltersWithMeta): PlDataTableFiltersWithMeta {\n return {\n ...node,\n filters: node.filters\n .filter((child) => !(\"isSuppressed\" in child && child.isSuppressed === true))\n .map((child) =>\n \"filters\" in child && (child.type === \"and\" || child.type === \"or\")\n ? stripSuppressedFilters(child as PlDataTableFiltersWithMeta)\n : child,\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\n// --- Helpers ---\n\n/**\n * Recursively ensures every node in a filter tree has an `id` field.\n * Does not set `source` meta — defaults are now a separate list.\n */\nfunction annotateFiltersWithIds(\n filters: PlDataTableFilters | PlDataTableFiltersWithMeta,\n): PlDataTableFiltersWithMeta {\n return annotateNodeWithIds(filters) as PlDataTableFiltersWithMeta;\n}\n\nfunction annotateNodeWithIds(\n node: FilterNode | PlDataTableFilters | PlDataTableFiltersWithMeta,\n): AnnotatedFilterSpec {\n switch (node.type) {\n case \"and\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"and\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"or\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"or\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"not\":\n return {\n id: randomInt(),\n isExpanded: true,\n type: \"not\" as const,\n filter: annotateNodeWithIds(node.filter),\n };\n default:\n return { ...node, id: getField(node, \"id\") ?? randomInt() } as AnnotatedFilterSpec;\n }\n}\n\n// --- Utilities ---\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 column: parseJson<PTableColumnId>(item.colId),\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n })) ?? []\n );\n}\n\nfunction getHiddenColIds(\n state: PlDataTableGridStateCore[\"columnVisibility\"],\n): PTableColumnId[] | null {\n return state?.hiddenColIds?.map((json) => parseJson<PTableColumnId>(json)) ?? null;\n}\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n defaultFiltersState: null,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-state-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\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 PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilterSpecLeaf,\n type PlDataTableFilterMeta,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport { computed, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt, getField, Nil } 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 defaultFilters: Ref<Nil | PlDataTableFilters>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n\n searchString: WritableComputedRef<string>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n defaultFiltersState: Ref<null | PlDataTableFiltersWithMeta>;\n resetDefaultFilters: () => void;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n writeThrough: true,\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\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.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\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 // --- User filters (editable by user) ---\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n return isNil(raw) ? getEmptyGroupWithMeta() : normalizeFiltersState(raw);\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\n // --- Default filters (from model, separate list) ---\n const defaultFiltersState = computed<null | PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.defaultFiltersState;\n if (!isNil(raw)) {\n return normalizeFiltersState(raw);\n }\n if (!isNil(defaultFilters.value)) {\n return annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\n }\n return null;\n },\n set: (defaultFiltersState: null | PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n defaultFiltersState,\n };\n }\n },\n });\n\n function resetDefaultFilters(): void {\n defaultFiltersState.value = isNil(defaultFilters.value)\n ? null\n : annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\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 {\n gridState,\n sheetsState,\n searchString,\n filtersState,\n defaultFiltersState,\n resetDefaultFilters,\n };\n}\n\n// --- Types ---\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n defaultFiltersState: null;\n searchString?: string;\n };\n\ntype FilterNode = FilterSpec<PlDataTableFilterSpecLeaf>;\ntype AnnotatedFilterSpec = FilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;\n\n// --- Core ---\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n // User filters: sheets + user filter state + search\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const unsuppressedUserFilters = isNil(state.filtersState)\n ? null\n : stripSuppressedFilters(state.filtersState);\n const userParts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(isNil(unsuppressedUserFilters) ? [] : [unsuppressedUserFilters]),\n ...(isNil(searchNode) ? [] : [searchNode]),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n userParts.length === 0\n ? null\n : userParts.length === 1\n ? userParts[0]\n : { type: \"and\", filters: userParts },\n );\n const unsuppressedDefaultFilters = isNil(state.defaultFiltersState)\n ? null\n : stripSuppressedFilters(state.defaultFiltersState);\n const defaultFilters: null | PlDataTableFilters = isNil(unsuppressedDefaultFilters)\n ? null\n : // If all filters are suppressed, we should pass an empty filter group instead of null to prevent fallback to defaults in the model\n (distillFilterSpec(unsuppressedDefaultFilters) ?? getEmptyGroup());\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n filters,\n defaultFilters,\n };\n}\n\n/**\n * Normalizes raw filter state into a valid root filter structure.\n * Valid structure is Root(Group, Group, ...) — double nesting required:\n * root is and/or group, each child is also and/or group containing leaf filters.\n * - null/undefined/invalid → empty root\n * - Leaf node → Root(Group(leaf))\n * - Group with leaf children → Root(Group(leaves...))\n * - Group with group children → as-is\n */\nfunction normalizeFiltersState(raw: FilterNode) {\n // Leaf node → wrap in double nesting: Root(Group(leaf))\n if (raw.type !== \"and\" && raw.type !== \"or\" && raw.type !== \"not\") {\n if (\"type\" in raw && !isNil(raw.type)) {\n return {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [raw as AnnotatedFilterSpec],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n return getEmptyGroupWithMeta();\n }\n\n // Already a group — ensure children are also groups (double nesting)\n if ((raw.type === \"and\" || raw.type === \"or\") && \"filters\" in raw && Array.isArray(raw.filters)) {\n const allChildrenAreGroups = raw.filters.every(\n (f: FilterNode) => f.type === \"and\" || f.type === \"or\" || f.type === \"not\",\n );\n if (allChildrenAreGroups) {\n return raw as PlDataTableFiltersWithMeta;\n }\n // Children are leaves — wrap them in a single group\n return {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: raw.filters as AnnotatedFilterSpec[],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n\n return getEmptyGroupWithMeta();\n}\n\nfunction getEmptyGroup(): PlDataTableFilters {\n return {\n type: \"and\" as const,\n filters: [],\n };\n}\nfunction getEmptyGroupWithMeta(): PlDataTableFiltersWithMeta {\n return {\n ...getEmptyGroup(),\n id: randomInt(),\n isExpanded: true,\n } as PlDataTableFiltersWithMeta;\n}\n\n/**\n * Recursively removes nodes where isSuppressed === true from a PlDataTableFiltersWithMeta tree.\n */\nfunction stripSuppressedFilters(node: PlDataTableFiltersWithMeta): PlDataTableFiltersWithMeta {\n return {\n ...node,\n filters: node.filters\n .filter((child) => !(\"isSuppressed\" in child && child.isSuppressed === true))\n .map((child) =>\n \"filters\" in child && (child.type === \"and\" || child.type === \"or\")\n ? stripSuppressedFilters(child as PlDataTableFiltersWithMeta)\n : child,\n ),\n };\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<PTableColumnId>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<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 = 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\n// --- Helpers ---\n\n/**\n * Recursively ensures every node in a filter tree has an `id` field.\n * Does not set `source` meta — defaults are now a separate list.\n */\nfunction annotateFiltersWithIds(\n filters: PlDataTableFilters | PlDataTableFiltersWithMeta,\n): PlDataTableFiltersWithMeta {\n return annotateNodeWithIds(filters) as PlDataTableFiltersWithMeta;\n}\n\nfunction annotateNodeWithIds(\n node: FilterNode | PlDataTableFilters | PlDataTableFiltersWithMeta,\n): AnnotatedFilterSpec {\n switch (node.type) {\n case \"and\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"and\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"or\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"or\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"not\":\n return {\n id: randomInt(),\n isExpanded: true,\n type: \"not\" as const,\n filter: annotateNodeWithIds(node.filter),\n };\n default:\n return { ...node, id: getField(node, \"id\") ?? randomInt() } as AnnotatedFilterSpec;\n }\n}\n\n// --- Utilities ---\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<PTableColumnId>>[] {\n return sheetsState.map((s) => {\n const column: 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 column: parseJson<PTableColumnId>(item.colId),\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n })) ?? []\n );\n}\n\nfunction getHiddenColIds(\n state: PlDataTableGridStateCore[\"columnVisibility\"],\n): PTableColumnId[] | null {\n return state?.hiddenColIds?.map((json) => parseJson<PTableColumnId>(json)) ?? null;\n}\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n defaultFiltersState: null,\n };\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { PTableColumnSpec, PTableValue } from '@platforma-sdk/model';
1
+ import { AnnotationDataStatus, PTableColumnSpec, PTableValue } from '@platforma-sdk/model';
2
2
  import { ValueFormatterFunc } from 'ag-grid-enterprise';
3
3
  import { PTableHidden } from './common';
4
4
  import { PlAgDataTableV2Row } from '../types';
5
- export declare function formatSpecialValues(value: undefined | PTableValue | PTableHidden, dataStatus: undefined | "absent" | "error" | "computing" | "ready"): string | undefined;
5
+ export declare function formatSpecialValues(value: undefined | PTableValue | PTableHidden, dataStatus: undefined | AnnotationDataStatus): string | undefined;
6
6
  export type ColumnRenderingSpec = {
7
7
  valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;
8
8
  fontFamily?: string;
9
9
  };
10
- export declare function getColumnRenderingSpec(spec: PTableColumnSpec): ColumnRenderingSpec;
10
+ export declare function getColumnRenderingSpec(spec: PTableColumnSpec, dataStatus: undefined | AnnotationDataStatus): ColumnRenderingSpec;
11
11
  //# sourceMappingURL=value-rendering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,EAC7C,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GACjE,MAAM,GAAG,SAAS,CAcpB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAoClF"}
1
+ {"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAIpB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,EAC7C,UAAU,EAAE,SAAS,GAAG,oBAAoB,GAC3C,MAAM,GAAG,SAAS,CAcpB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,SAAS,GAAG,oBAAoB,GAC3C,mBAAmB,CAgCrB"}
@@ -9,29 +9,29 @@ function o(t, r) {
9
9
  if (e(t)) return "loading...";
10
10
  if (t === n) return "";
11
11
  }
12
- function s(e) {
13
- let n = e.type === "axis" ? e.spec.type : e.spec.valueType, s;
14
- switch (n) {
12
+ function s(e, n) {
13
+ let s = e.type === "axis" ? e.spec.type : e.spec.valueType, c;
14
+ switch (s) {
15
15
  case r.Int:
16
16
  case r.Long:
17
17
  case r.Float:
18
18
  case r.Double: {
19
- let n = i(e.spec, t.Format), r = i(e.spec, t.DataStatus), c = n ? a.format(n) : void 0;
20
- s = { valueFormatter: (e) => {
21
- let t = o(e.value, r);
22
- return t === void 0 ? c ? c(Number(e.value)) : e.value?.toString() ?? "" : t;
19
+ let r = i(e.spec, t.Format), s = r ? a.format(r) : void 0;
20
+ c = { valueFormatter: (e) => {
21
+ let t = o(e.value, n);
22
+ return t === void 0 ? s ? s(Number(e.value)) : e.value?.toString() ?? "" : t;
23
23
  } };
24
24
  break;
25
25
  }
26
26
  default:
27
- s = { valueFormatter: (n) => {
28
- let r = o(n.value, i(e.spec, t.DataStatus));
29
- return r === void 0 ? n.value?.toString() ?? "" : r;
27
+ c = { valueFormatter: (e) => {
28
+ let t = o(e.value, n);
29
+ return t === void 0 ? e.value?.toString() ?? "" : t;
30
30
  } };
31
31
  break;
32
32
  }
33
- let c = i(e.spec, t.Table.FontFamily);
34
- return c && (s.fontFamily = c), s;
33
+ let l = i(e.spec, t.Table.FontFamily);
34
+ return l && (c.fontFamily = l), c;
35
35
  }
36
36
  //#endregion
37
37
  export { s as getColumnRenderingSpec };
@@ -1 +1 @@
1
- {"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n PTableNA,\n readAnnotation,\n ValueType,\n type PTableColumnSpec,\n type PTableValue,\n} from \"@platforma-sdk/model\";\nimport type { ValueFormatterFunc } from \"ag-grid-enterprise\";\nimport type { PTableHidden } from \"./common\";\nimport { isPTableHidden } from \"./common\";\nimport * as d3 from \"d3-format\";\nimport type { PlAgDataTableV2Row } from \"../types\";\n\nexport function formatSpecialValues(\n value: undefined | PTableValue | PTableHidden,\n dataStatus: undefined | \"absent\" | \"error\" | \"computing\" | \"ready\",\n): string | undefined {\n if (dataStatus === \"absent\") {\n return \"absent\";\n } else if (dataStatus === \"error\") {\n return \"error\";\n } else if (dataStatus === \"computing\") {\n return \"computing...\";\n } else if (isPTableHidden(value)) {\n return \"loading...\";\n } else if (value === PTableNA) {\n return \"\";\n } else {\n return undefined;\n }\n}\n\nexport type ColumnRenderingSpec = {\n valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;\n fontFamily?: string;\n};\n\nexport function getColumnRenderingSpec(spec: PTableColumnSpec): ColumnRenderingSpec {\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n let renderSpec: ColumnRenderingSpec;\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double: {\n const format = readAnnotation(spec.spec, Annotation.Format);\n const dataStatus = readAnnotation(spec.spec, Annotation.DataStatus);\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value, dataStatus);\n if (formatted !== undefined) return formatted;\n return formatFn ? formatFn(Number(params.value)) : (params.value?.toString() ?? \"\");\n },\n };\n break;\n }\n default:\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(\n params.value,\n readAnnotation(spec.spec, Annotation.DataStatus),\n );\n if (formatted !== undefined) return formatted;\n return params.value?.toString() ?? \"\";\n },\n };\n break;\n }\n const fontFamily = readAnnotation(spec.spec, Annotation.Table.FontFamily);\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"mappings":";;;;AAcA,SAAgB,EACd,GACA,GACoB;AACpB,KAAI,MAAe,SACjB,QAAO;KACE,MAAe,QACxB,QAAO;KACE,MAAe,YACxB,QAAO;KACE,EAAe,EAAM,CAC9B,QAAO;KACE,MAAU,EACnB,QAAO;;AAWX,SAAgB,EAAuB,GAA6C;CAClF,IAAM,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAChE;AACJ,SAAQ,GAAR;EACE,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU,QAAQ;GACrB,IAAM,IAAS,EAAe,EAAK,MAAM,EAAW,OAAO,EACrD,IAAa,EAAe,EAAK,MAAM,EAAW,WAAW,EAC7D,IAAW,IAAS,EAAG,OAAO,EAAO,GAAG,KAAA;AAC9C,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,OAAO,EAAW;AAE/D,WADI,MAAc,KAAA,IACX,IAAW,EAAS,OAAO,EAAO,MAAM,CAAC,GAAI,EAAO,OAAO,UAAU,IAAI,KAD5C;MAGvC;AACD;;EAEF;AACE,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAChB,EAAO,OACP,EAAe,EAAK,MAAM,EAAW,WAAW,CACjD;AAED,WADI,MAAc,KAAA,IACX,EAAO,OAAO,UAAU,IAAI,KADC;MAGvC;AACD;;CAEJ,IAAM,IAAa,EAAe,EAAK,MAAM,EAAW,MAAM,WAAW;AAEzE,QADI,MAAY,EAAW,aAAa,IACjC"}
1
+ {"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n AnnotationDataStatus,\n PTableNA,\n readAnnotation,\n ValueType,\n type PTableColumnSpec,\n type PTableValue,\n} from \"@platforma-sdk/model\";\nimport type { ValueFormatterFunc } from \"ag-grid-enterprise\";\nimport type { PTableHidden } from \"./common\";\nimport { isPTableHidden } from \"./common\";\nimport * as d3 from \"d3-format\";\nimport type { PlAgDataTableV2Row } from \"../types\";\n\nexport function formatSpecialValues(\n value: undefined | PTableValue | PTableHidden,\n dataStatus: undefined | AnnotationDataStatus,\n): string | undefined {\n if (dataStatus === \"absent\") {\n return \"absent\";\n } else if (dataStatus === \"error\") {\n return \"error\";\n } else if (dataStatus === \"computing\") {\n return \"computing...\";\n } else if (isPTableHidden(value)) {\n return \"loading...\";\n } else if (value === PTableNA) {\n return \"\";\n } else {\n return undefined;\n }\n}\n\nexport type ColumnRenderingSpec = {\n valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;\n fontFamily?: string;\n};\n\nexport function getColumnRenderingSpec(\n spec: PTableColumnSpec,\n dataStatus: undefined | AnnotationDataStatus,\n): ColumnRenderingSpec {\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n let renderSpec: ColumnRenderingSpec;\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double: {\n const format = readAnnotation(spec.spec, Annotation.Format);\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value, dataStatus);\n if (formatted !== undefined) return formatted;\n return formatFn ? formatFn(Number(params.value)) : (params.value?.toString() ?? \"\");\n },\n };\n break;\n }\n default:\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value, dataStatus);\n if (formatted !== undefined) return formatted;\n return params.value?.toString() ?? \"\";\n },\n };\n break;\n }\n const fontFamily = readAnnotation(spec.spec, Annotation.Table.FontFamily);\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"mappings":";;;;AAeA,SAAgB,EACd,GACA,GACoB;AACpB,KAAI,MAAe,SACjB,QAAO;KACE,MAAe,QACxB,QAAO;KACE,MAAe,YACxB,QAAO;KACE,EAAe,EAAM,CAC9B,QAAO;KACE,MAAU,EACnB,QAAO;;AAWX,SAAgB,EACd,GACA,GACqB;CACrB,IAAM,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAChE;AACJ,SAAQ,GAAR;EACE,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU,QAAQ;GACrB,IAAM,IAAS,EAAe,EAAK,MAAM,EAAW,OAAO,EACrD,IAAW,IAAS,EAAG,OAAO,EAAO,GAAG,KAAA;AAC9C,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,OAAO,EAAW;AAE/D,WADI,MAAc,KAAA,IACX,IAAW,EAAS,OAAO,EAAO,MAAM,CAAC,GAAI,EAAO,OAAO,UAAU,IAAI,KAD5C;MAGvC;AACD;;EAEF;AACE,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,OAAO,EAAW;AAE/D,WADI,MAAc,KAAA,IACX,EAAO,OAAO,UAAU,IAAI,KADC;MAGvC;AACD;;CAEJ,IAAM,IAAa,EAAe,EAAK,MAAM,EAAW,MAAM,WAAW;AAEzE,QADI,MAAY,EAAW,aAAa,IACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = Omit<BaseProps, \"step\" | \"onUpdateStep\"> & {\n annotation: Annotation;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { produce } from \"immer\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation, Filter } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\nconst props = defineProps<Props>();\n\nconst selectedStepId = shallowRef<undefined | number>(undefined);\n\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(props.annotation)\n ? undefined\n : props.annotation.steps.find((step) => step.id === selectedStepId.value);\n});\n\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && props.annotation.steps.length > 0) {\n selectedStepId.value = props.annotation.steps[0].id;\n }\n});\n\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\nfunction updateSelectedStepId(id: undefined | number) {\n selectedStepId.value = id;\n}\n\nfunction updateSelectedStep(step: Filter) {\n props.onUpdateAnnotation(\n produce(props.annotation, (draft) => {\n const idx = draft.steps.findIndex((s) => s.id === step.id);\n if (idx !== -1) {\n draft.steps[idx] = step;\n }\n }),\n );\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n :annotation=\"props.annotation\"\n :selected-step-id=\"selectedStepId\"\n :on-update-annotation=\"props.onUpdateAnnotation\"\n :on-update-selected-step-id=\"updateSelectedStepId\"\n :class=\"$style.sidebarItem\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n :step=\"selectedStep\"\n :on-update-step=\"updateSelectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAoBA,IAAM,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAE1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAM,WAAU,GACxD,KAAA,IACA,EAAM,WAAW,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAEF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAM,WAAW,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAM,WAAW,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;EAI5B,SAAS,EAAqB,GAAwB;AACpD,KAAe,QAAQ;;EAGzB,SAAS,EAAmB,GAAc;AACxC,KAAM,mBACJ,EAAQ,EAAM,aAAa,MAAU;IACnC,IAAM,IAAM,EAAM,MAAM,WAAW,MAAM,EAAE,OAAO,EAAK,GAAG;AAC1D,IAAI,MAAQ,OACV,EAAM,MAAM,KAAO;KAErB,CACH;;yBAKD,EAuBiB,EAAA,EAAA,EAAA,MAAA;GAtBJ,UAAM,QAQb,CAPF,EAOE,GAAA;IANC,YAAY,EAAM;IAClB,oBAAkB,EAAA;IAClB,wBAAsB,EAAM;IAC5B,8BAA4B;IAC5B,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,gBAAe;;;;;;;GAGT,UAAM,QAUb,CARM,EAAA,SAAA,GAAA,EADR,EASE,GAAA;;IAPC,MAAM,EAAA;IACN,kBAAgB;IAChB,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,uBAAqB,EAAM;IAC3B,oBAAoB,EAAM;IAC1B,6BAA6B,EAAM"}
1
+ {"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = Omit<BaseProps, \"step\" | \"onUpdateStep\"> & {\n annotation: Annotation;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { produce } from \"immer\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation, Filter } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\nconst props = defineProps<Props>();\n\nconst selectedStepId = shallowRef<undefined | number>(undefined);\n\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(props.annotation)\n ? undefined\n : props.annotation.steps.find((step) => step.id === selectedStepId.value);\n});\n\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && props.annotation.steps.length > 0) {\n selectedStepId.value = props.annotation.steps[0].id;\n }\n});\n\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n\nfunction updateSelectedStepId(id: undefined | number) {\n selectedStepId.value = id;\n}\n\nfunction updateSelectedStep(step: Filter) {\n props.onUpdateAnnotation(\n produce(props.annotation, (draft) => {\n const idx = draft.steps.findIndex((s) => s.id === step.id);\n if (idx !== -1) {\n draft.steps[idx] = step;\n }\n }),\n );\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n :annotation=\"props.annotation\"\n :selected-step-id=\"selectedStepId\"\n :on-update-annotation=\"props.onUpdateAnnotation\"\n :on-update-selected-step-id=\"updateSelectedStepId\"\n :class=\"$style.sidebarItem\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n :step=\"selectedStep\"\n :on-update-step=\"updateSelectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAoBA,IAAM,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAE1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAM,WAAU,GACxD,KAAA,IACA,EAAM,WAAW,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAEF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAM,WAAW,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAM,WAAW,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;EAI5B,SAAS,EAAqB,GAAwB;AACpD,KAAe,QAAQ;;EAGzB,SAAS,EAAmB,GAAc;AACxC,KAAM,mBACJ,EAAQ,EAAM,aAAa,MAAU;IACnC,IAAM,IAAM,EAAM,MAAM,WAAW,MAAM,EAAE,OAAO,EAAK,GAAG;AAC1D,IAAI,MAAQ,OACV,EAAM,MAAM,KAAO;KAErB,CACH;;yBAKD,EAuBiB,EAAA,EAAA,EAAA,MAAA;GAtBJ,UAAM,QAQb,CAPF,EAOE,GAAA;IANC,YAAY,EAAM;IAClB,oBAAkB,EAAA;IAClB,wBAAsB,EAAM;IAC5B,8BAA4B;IAC5B,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,gBAAe;;;;;;;GAGT,UAAM,QAiBZ,CAfK,EAAA,SAAA,GAAA,EADR,EASE,GAAA;;IAPC,MAAM,EAAA;IACN,kBAAgB;IAChB,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,uBAAqB,EAAM;IAC3B,oBAAoB,EAAM;IAC1B,6BAA6B,EAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFiltersV2.js","names":[],"sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n PTableColumnSpec,\n PlDataTableFiltersWithMeta,\n PFrameHandle,\n PTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n Annotation,\n Domain,\n readAnnotation,\n readDomain,\n getUniqueSourceValuesWithLabels,\n parseJson,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport { computed, ref } from \"vue\";\nimport { PlBtnGhost, PlSlideModal, usePlBlockPageTitleTeleportTarget } from \"@milaboratories/uikit\";\nimport {\n PlAdvancedFilter,\n PlAdvancedFilterComponent,\n PlAdvancedFilterSupportedFilters,\n type PlAdvancedFilterItem,\n} from \"../PlAdvancedFilter\";\nimport type { PlAdvancedFilterColumnId } from \"../PlAdvancedFilter/types\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport { isFunction, isNil } from \"es-toolkit\";\n\nconst props = defineProps<{\n columns: PTableColumnSpec[];\n pframeHandle: Nil | PFrameHandle;\n filters: PlDataTableFiltersWithMeta;\n defaultFilters: Nil | PlDataTableFiltersWithMeta;\n onUpdateFilters: (value: PlDataTableFiltersWithMeta) => void;\n onResetDefaultFilters?: () => void;\n onUpdateDefaultFilters?: (value: PlDataTableFiltersWithMeta) => void;\n}>();\n\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlTableFiltersV2\");\nconst showManager = ref(false);\nconst hasFilters = computed(() => props.filters.filters.length > 0);\nconst hasDefaultFilters = computed(\n () => !isNil(props.defaultFilters) && props.defaultFilters.filters.length > 0,\n);\nconst filters = computed<PlDataTableFiltersWithMeta>(() => {\n if (isNil(props.defaultFilters) || props.defaultFilters?.filters.length === 0) {\n return props.filters;\n }\n\n return {\n ...props.filters,\n filters: [...(props.defaultFilters?.filters ?? []), ...props.filters.filters],\n };\n});\nconst onUpdateFilters = (_value: PlAdvancedFilter) => {\n const value = _value as PlDataTableFiltersWithMeta;\n\n if (isNil(props.defaultFilters)) {\n return props.onUpdateFilters(value);\n }\n\n const [defaults, ...rest] = value.filters;\n props.onUpdateFilters({ ...value, filters: rest });\n props.onUpdateDefaultFilters?.({ ...props.defaultFilters, filters: [defaults] });\n};\n\nconst options = computed<PlAdvancedFilterItem[]>(() => {\n return props.columns.map((col, idx) => {\n const id = makeFilterColumnId(col);\n const label =\n readAnnotation(col.spec, Annotation.Label)?.trim() ?? `Unlabeled ${col.type} ${idx}`;\n const alphabet =\n readDomain(col.spec, Domain.Alphabet) ?? readAnnotation(col.spec, Annotation.Alphabet);\n return {\n id,\n label,\n spec: col.spec,\n alphabet: alphabet ?? undefined,\n };\n });\n});\n\n// Supported filters (same set as FilterSidebar)\nconst supportedFilters = [\n \"isNA\",\n \"isNotNA\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"patternEquals\",\n \"patternNotEquals\",\n \"patternContainSubsequence\",\n \"patternNotContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"patternFuzzyContainSubsequence\",\n \"equal\",\n \"notEqual\",\n] as (typeof PlAdvancedFilterSupportedFilters)[number][];\n\n// getSuggestOptions - provide discrete values from column annotations\nfunction handleSuggestOptions(params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n}) {\n if (isNil(props.pframeHandle)) {\n console.warn(\"PFrame handle is not available, cannot fetch suggest options\");\n return [];\n }\n\n const strId = params.columnId as CanonicalizedJson<PTableColumnId>;\n const tableColumnId = parseJson<PTableColumnId>(strId);\n\n if (tableColumnId.type !== \"column\") {\n throw new Error(\"ColumnId should be of type 'column' for suggest options\");\n }\n\n return getUniqueSourceValuesWithLabels(props.pframeHandle, {\n columnId: tableColumnId.id,\n axisIdx: params.axisIdx,\n limit: 100,\n searchQuery: params.searchType === \"label\" ? params.searchStr : undefined,\n searchQueryValue: params.searchType === \"value\" ? params.searchStr : undefined,\n }).then((v) => v.values);\n}\n\nfunction makeFilterColumnId(spec: PTableColumnSpec): CanonicalizedJson<PTableColumnId> {\n return canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n}\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n :icon=\"hasFilters || hasDefaultFilters ? 'filter-on' : 'filter'\"\n @click.stop=\"showManager = true\"\n >\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div :class=\"$style.root\">\n <PlAdvancedFilterComponent\n :filters=\"filters as PlAdvancedFilter\"\n :options=\"options\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"handleSuggestOptions\"\n :is-pinned=\"(_, index) => hasDefaultFilters && index === 0\"\n :is-removable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :is-draggable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :enable-dnd=\"false\"\n :enable-toggling=\"true\"\n :enable-add-group-button=\"true\"\n @update-filters=\"onUpdateFilters\"\n >\n <template #group-title=\"{ index }\">\n <div v-if=\"hasDefaultFilters && index === 0\" :class=\"$style.defaultGroupTitle\">\n Default Group\n <PlBtnGhost\n v-if=\"isFunction(props.onResetDefaultFilters)\"\n icon=\"restart\"\n :class=\"$style.restartBtn\"\n @click.stop=\"props.onResetDefaultFilters()\"\n />\n </div>\n <div v-else>Custom Group</div>\n </template>\n </PlAdvancedFilterComponent>\n </div>\n </PlSlideModal>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.defaultGroupTitle {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.restartBtn {\n width: 24px;\n height: 24px;\n padding: 4px;\n --button-width: 24px;\n --btn-min-width: 24px;\n --button-height: 24px;\n --btn-min-height: 24x;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlTableFiltersV2.js","names":[],"sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n PTableColumnSpec,\n PlDataTableFiltersWithMeta,\n PFrameHandle,\n PTableColumnId,\n} from \"@platforma-sdk/model\";\nimport {\n Annotation,\n Domain,\n readAnnotation,\n readDomain,\n getUniqueSourceValuesWithLabels,\n extractPObjectId,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport { computed, ref } from \"vue\";\nimport { PlBtnGhost, PlSlideModal, usePlBlockPageTitleTeleportTarget } from \"@milaboratories/uikit\";\nimport {\n PlAdvancedFilter,\n PlAdvancedFilterComponent,\n PlAdvancedFilterSupportedFilters,\n type PlAdvancedFilterItem,\n} from \"../PlAdvancedFilter\";\nimport type { PlAdvancedFilterColumnId } from \"../PlAdvancedFilter/types\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport { isFunction, isNil } from \"es-toolkit\";\n\nconst props = defineProps<{\n columns: PTableColumnSpec[];\n pframeHandle: Nil | PFrameHandle;\n filters: PlDataTableFiltersWithMeta;\n defaultFilters: Nil | PlDataTableFiltersWithMeta;\n onUpdateFilters: (value: PlDataTableFiltersWithMeta) => void;\n onResetDefaultFilters?: () => void;\n onUpdateDefaultFilters?: (value: PlDataTableFiltersWithMeta) => void;\n}>();\n\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlTableFiltersV2\");\nconst showManager = ref(false);\nconst hasFilters = computed(() => props.filters.filters.length > 0);\nconst hasDefaultFilters = computed(\n () => !isNil(props.defaultFilters) && props.defaultFilters.filters.length > 0,\n);\nconst filters = computed<PlDataTableFiltersWithMeta>(() => {\n if (isNil(props.defaultFilters) || props.defaultFilters?.filters.length === 0) {\n return props.filters;\n }\n\n return {\n ...props.filters,\n filters: [...(props.defaultFilters?.filters ?? []), ...props.filters.filters],\n };\n});\nconst onUpdateFilters = (_value: PlAdvancedFilter) => {\n const value = _value as PlDataTableFiltersWithMeta;\n\n if (isNil(props.defaultFilters)) {\n return props.onUpdateFilters(value);\n }\n\n const [defaults, ...rest] = value.filters;\n props.onUpdateFilters({ ...value, filters: rest });\n props.onUpdateDefaultFilters?.({ ...props.defaultFilters, filters: [defaults] });\n};\n\nconst options = computed<PlAdvancedFilterItem[]>(() => {\n return props.columns.map((col, idx) => {\n const id = getPTableColumnId(col);\n const label =\n readAnnotation(col.spec, Annotation.Label)?.trim() ?? `Unlabeled ${col.type} ${idx}`;\n const alphabet =\n readDomain(col.spec, Domain.Alphabet) ?? readAnnotation(col.spec, Annotation.Alphabet);\n return {\n id,\n label,\n spec: col.spec,\n alphabet: alphabet ?? undefined,\n };\n });\n});\n\n// Supported filters (same set as FilterSidebar)\nconst supportedFilters = [\n \"isNA\",\n \"isNotNA\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"patternEquals\",\n \"patternNotEquals\",\n \"patternContainSubsequence\",\n \"patternNotContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"patternFuzzyContainSubsequence\",\n \"equal\",\n \"notEqual\",\n] as (typeof PlAdvancedFilterSupportedFilters)[number][];\n\n// getSuggestOptions - provide discrete values from column annotations\nfunction handleSuggestOptions(params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n}) {\n if (isNil(props.pframeHandle)) {\n console.warn(\"PFrame handle is not available, cannot fetch suggest options\");\n return [];\n }\n\n const tableColumnId = params.columnId as PTableColumnId;\n if (\n typeof tableColumnId !== \"object\" ||\n tableColumnId === null ||\n tableColumnId.type !== \"column\"\n ) {\n throw new Error(\"ColumnId should be of type 'column' for suggest options\");\n }\n\n return getUniqueSourceValuesWithLabels(props.pframeHandle, {\n columnId: extractPObjectId(tableColumnId.id),\n axisIdx: params.axisIdx,\n limit: 100,\n searchQuery: params.searchType === \"label\" ? params.searchStr : undefined,\n searchQueryValue: params.searchType === \"value\" ? params.searchStr : undefined,\n }).then((v) => v.values);\n}\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n :icon=\"hasFilters || hasDefaultFilters ? 'filter-on' : 'filter'\"\n @click.stop=\"showManager = true\"\n >\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div :class=\"$style.root\">\n <PlAdvancedFilterComponent\n :filters=\"filters as PlAdvancedFilter\"\n :options=\"options\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"handleSuggestOptions\"\n :is-pinned=\"(_, index) => hasDefaultFilters && index === 0\"\n :is-removable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :is-draggable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :enable-dnd=\"false\"\n :enable-toggling=\"true\"\n :enable-add-group-button=\"true\"\n @update-filters=\"onUpdateFilters\"\n >\n <template #group-title=\"{ index }\">\n <div v-if=\"hasDefaultFilters && index === 0\" :class=\"$style.defaultGroupTitle\">\n Default Group\n <PlBtnGhost\n v-if=\"isFunction(props.onResetDefaultFilters)\"\n icon=\"restart\"\n :class=\"$style.restartBtn\"\n @click.stop=\"props.onResetDefaultFilters()\"\n />\n </div>\n <div v-else>Custom Group</div>\n </template>\n </PlAdvancedFilterComponent>\n </div>\n </PlSlideModal>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.defaultGroupTitle {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.restartBtn {\n width: 24px;\n height: 24px;\n padding: 4px;\n --button-width: 24px;\n --btn-min-width: 24px;\n --button-height: 24px;\n --btn-min-height: 24x;\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFiltersV2.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n PTableColumnSpec,\n PlDataTableFiltersWithMeta,\n PFrameHandle,\n PTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n Annotation,\n Domain,\n readAnnotation,\n readDomain,\n getUniqueSourceValuesWithLabels,\n parseJson,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport { computed, ref } from \"vue\";\nimport { PlBtnGhost, PlSlideModal, usePlBlockPageTitleTeleportTarget } from \"@milaboratories/uikit\";\nimport {\n PlAdvancedFilter,\n PlAdvancedFilterComponent,\n PlAdvancedFilterSupportedFilters,\n type PlAdvancedFilterItem,\n} from \"../PlAdvancedFilter\";\nimport type { PlAdvancedFilterColumnId } from \"../PlAdvancedFilter/types\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport { isFunction, isNil } from \"es-toolkit\";\n\nconst props = defineProps<{\n columns: PTableColumnSpec[];\n pframeHandle: Nil | PFrameHandle;\n filters: PlDataTableFiltersWithMeta;\n defaultFilters: Nil | PlDataTableFiltersWithMeta;\n onUpdateFilters: (value: PlDataTableFiltersWithMeta) => void;\n onResetDefaultFilters?: () => void;\n onUpdateDefaultFilters?: (value: PlDataTableFiltersWithMeta) => void;\n}>();\n\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlTableFiltersV2\");\nconst showManager = ref(false);\nconst hasFilters = computed(() => props.filters.filters.length > 0);\nconst hasDefaultFilters = computed(\n () => !isNil(props.defaultFilters) && props.defaultFilters.filters.length > 0,\n);\nconst filters = computed<PlDataTableFiltersWithMeta>(() => {\n if (isNil(props.defaultFilters) || props.defaultFilters?.filters.length === 0) {\n return props.filters;\n }\n\n return {\n ...props.filters,\n filters: [...(props.defaultFilters?.filters ?? []), ...props.filters.filters],\n };\n});\nconst onUpdateFilters = (_value: PlAdvancedFilter) => {\n const value = _value as PlDataTableFiltersWithMeta;\n\n if (isNil(props.defaultFilters)) {\n return props.onUpdateFilters(value);\n }\n\n const [defaults, ...rest] = value.filters;\n props.onUpdateFilters({ ...value, filters: rest });\n props.onUpdateDefaultFilters?.({ ...props.defaultFilters, filters: [defaults] });\n};\n\nconst options = computed<PlAdvancedFilterItem[]>(() => {\n return props.columns.map((col, idx) => {\n const id = makeFilterColumnId(col);\n const label =\n readAnnotation(col.spec, Annotation.Label)?.trim() ?? `Unlabeled ${col.type} ${idx}`;\n const alphabet =\n readDomain(col.spec, Domain.Alphabet) ?? readAnnotation(col.spec, Annotation.Alphabet);\n return {\n id,\n label,\n spec: col.spec,\n alphabet: alphabet ?? undefined,\n };\n });\n});\n\n// Supported filters (same set as FilterSidebar)\nconst supportedFilters = [\n \"isNA\",\n \"isNotNA\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"patternEquals\",\n \"patternNotEquals\",\n \"patternContainSubsequence\",\n \"patternNotContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"patternFuzzyContainSubsequence\",\n \"equal\",\n \"notEqual\",\n] as (typeof PlAdvancedFilterSupportedFilters)[number][];\n\n// getSuggestOptions - provide discrete values from column annotations\nfunction handleSuggestOptions(params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n}) {\n if (isNil(props.pframeHandle)) {\n console.warn(\"PFrame handle is not available, cannot fetch suggest options\");\n return [];\n }\n\n const strId = params.columnId as CanonicalizedJson<PTableColumnId>;\n const tableColumnId = parseJson<PTableColumnId>(strId);\n\n if (tableColumnId.type !== \"column\") {\n throw new Error(\"ColumnId should be of type 'column' for suggest options\");\n }\n\n return getUniqueSourceValuesWithLabels(props.pframeHandle, {\n columnId: tableColumnId.id,\n axisIdx: params.axisIdx,\n limit: 100,\n searchQuery: params.searchType === \"label\" ? params.searchStr : undefined,\n searchQueryValue: params.searchType === \"value\" ? params.searchStr : undefined,\n }).then((v) => v.values);\n}\n\nfunction makeFilterColumnId(spec: PTableColumnSpec): CanonicalizedJson<PTableColumnId> {\n return canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n}\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n :icon=\"hasFilters || hasDefaultFilters ? 'filter-on' : 'filter'\"\n @click.stop=\"showManager = true\"\n >\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div :class=\"$style.root\">\n <PlAdvancedFilterComponent\n :filters=\"filters as PlAdvancedFilter\"\n :options=\"options\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"handleSuggestOptions\"\n :is-pinned=\"(_, index) => hasDefaultFilters && index === 0\"\n :is-removable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :is-draggable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :enable-dnd=\"false\"\n :enable-toggling=\"true\"\n :enable-add-group-button=\"true\"\n @update-filters=\"onUpdateFilters\"\n >\n <template #group-title=\"{ index }\">\n <div v-if=\"hasDefaultFilters && index === 0\" :class=\"$style.defaultGroupTitle\">\n Default Group\n <PlBtnGhost\n v-if=\"isFunction(props.onResetDefaultFilters)\"\n icon=\"restart\"\n :class=\"$style.restartBtn\"\n @click.stop=\"props.onResetDefaultFilters()\"\n />\n </div>\n <div v-else>Custom Group</div>\n </template>\n </PlAdvancedFilterComponent>\n </div>\n </PlSlideModal>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.defaultGroupTitle {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.restartBtn {\n width: 24px;\n height: 24px;\n padding: 4px;\n --button-width: 24px;\n --btn-min-width: 24px;\n --button-height: 24px;\n --btn-min-height: 24x;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlTableFiltersV2.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n PTableColumnSpec,\n PlDataTableFiltersWithMeta,\n PFrameHandle,\n PTableColumnId,\n} from \"@platforma-sdk/model\";\nimport {\n Annotation,\n Domain,\n readAnnotation,\n readDomain,\n getUniqueSourceValuesWithLabels,\n extractPObjectId,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport { computed, ref } from \"vue\";\nimport { PlBtnGhost, PlSlideModal, usePlBlockPageTitleTeleportTarget } from \"@milaboratories/uikit\";\nimport {\n PlAdvancedFilter,\n PlAdvancedFilterComponent,\n PlAdvancedFilterSupportedFilters,\n type PlAdvancedFilterItem,\n} from \"../PlAdvancedFilter\";\nimport type { PlAdvancedFilterColumnId } from \"../PlAdvancedFilter/types\";\nimport type { Nil } from \"@milaboratories/helpers\";\nimport { isFunction, isNil } from \"es-toolkit\";\n\nconst props = defineProps<{\n columns: PTableColumnSpec[];\n pframeHandle: Nil | PFrameHandle;\n filters: PlDataTableFiltersWithMeta;\n defaultFilters: Nil | PlDataTableFiltersWithMeta;\n onUpdateFilters: (value: PlDataTableFiltersWithMeta) => void;\n onResetDefaultFilters?: () => void;\n onUpdateDefaultFilters?: (value: PlDataTableFiltersWithMeta) => void;\n}>();\n\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlTableFiltersV2\");\nconst showManager = ref(false);\nconst hasFilters = computed(() => props.filters.filters.length > 0);\nconst hasDefaultFilters = computed(\n () => !isNil(props.defaultFilters) && props.defaultFilters.filters.length > 0,\n);\nconst filters = computed<PlDataTableFiltersWithMeta>(() => {\n if (isNil(props.defaultFilters) || props.defaultFilters?.filters.length === 0) {\n return props.filters;\n }\n\n return {\n ...props.filters,\n filters: [...(props.defaultFilters?.filters ?? []), ...props.filters.filters],\n };\n});\nconst onUpdateFilters = (_value: PlAdvancedFilter) => {\n const value = _value as PlDataTableFiltersWithMeta;\n\n if (isNil(props.defaultFilters)) {\n return props.onUpdateFilters(value);\n }\n\n const [defaults, ...rest] = value.filters;\n props.onUpdateFilters({ ...value, filters: rest });\n props.onUpdateDefaultFilters?.({ ...props.defaultFilters, filters: [defaults] });\n};\n\nconst options = computed<PlAdvancedFilterItem[]>(() => {\n return props.columns.map((col, idx) => {\n const id = getPTableColumnId(col);\n const label =\n readAnnotation(col.spec, Annotation.Label)?.trim() ?? `Unlabeled ${col.type} ${idx}`;\n const alphabet =\n readDomain(col.spec, Domain.Alphabet) ?? readAnnotation(col.spec, Annotation.Alphabet);\n return {\n id,\n label,\n spec: col.spec,\n alphabet: alphabet ?? undefined,\n };\n });\n});\n\n// Supported filters (same set as FilterSidebar)\nconst supportedFilters = [\n \"isNA\",\n \"isNotNA\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"patternEquals\",\n \"patternNotEquals\",\n \"patternContainSubsequence\",\n \"patternNotContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"patternFuzzyContainSubsequence\",\n \"equal\",\n \"notEqual\",\n] as (typeof PlAdvancedFilterSupportedFilters)[number][];\n\n// getSuggestOptions - provide discrete values from column annotations\nfunction handleSuggestOptions(params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n}) {\n if (isNil(props.pframeHandle)) {\n console.warn(\"PFrame handle is not available, cannot fetch suggest options\");\n return [];\n }\n\n const tableColumnId = params.columnId as PTableColumnId;\n if (\n typeof tableColumnId !== \"object\" ||\n tableColumnId === null ||\n tableColumnId.type !== \"column\"\n ) {\n throw new Error(\"ColumnId should be of type 'column' for suggest options\");\n }\n\n return getUniqueSourceValuesWithLabels(props.pframeHandle, {\n columnId: extractPObjectId(tableColumnId.id),\n axisIdx: params.axisIdx,\n limit: 100,\n searchQuery: params.searchType === \"label\" ? params.searchStr : undefined,\n searchQueryValue: params.searchType === \"value\" ? params.searchStr : undefined,\n }).then((v) => v.values);\n}\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n :icon=\"hasFilters || hasDefaultFilters ? 'filter-on' : 'filter'\"\n @click.stop=\"showManager = true\"\n >\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div :class=\"$style.root\">\n <PlAdvancedFilterComponent\n :filters=\"filters as PlAdvancedFilter\"\n :options=\"options\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"handleSuggestOptions\"\n :is-pinned=\"(_, index) => hasDefaultFilters && index === 0\"\n :is-removable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :is-draggable=\"(_, index) => (hasDefaultFilters ? index > 0 : true)\"\n :enable-dnd=\"false\"\n :enable-toggling=\"true\"\n :enable-add-group-button=\"true\"\n @update-filters=\"onUpdateFilters\"\n >\n <template #group-title=\"{ index }\">\n <div v-if=\"hasDefaultFilters && index === 0\" :class=\"$style.defaultGroupTitle\">\n Default Group\n <PlBtnGhost\n v-if=\"isFunction(props.onResetDefaultFilters)\"\n icon=\"restart\"\n :class=\"$style.restartBtn\"\n @click.stop=\"props.onResetDefaultFilters()\"\n />\n </div>\n <div v-else>Custom Group</div>\n </template>\n </PlAdvancedFilterComponent>\n </div>\n </PlSlideModal>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.defaultGroupTitle {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.restartBtn {\n width: 24px;\n height: 24px;\n padding: 4px;\n --button-width: 24px;\n --btn-min-width: 24px;\n --button-height: 24px;\n --btn-min-height: 24x;\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFiltersV2.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"names":[],"mappings":"AA0MA,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAoB9B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGnD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,YAAY,EAAE,GAAG,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,0BAA0B,CAAC;IACpC,cAAc,EAAE,GAAG,GAAG,0BAA0B,CAAC;IACjD,eAAe,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC7D,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;CACtE,CAAC;;AAqRF,wBAMG"}
1
+ {"version":3,"file":"PlTableFiltersV2.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"names":[],"mappings":"AAsMA,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAmB9B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGnD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,YAAY,EAAE,GAAG,GAAG,YAAY,CAAC;IACjC,OAAO,EAAE,0BAA0B,CAAC;IACpC,cAAc,EAAE,GAAG,GAAG,0BAA0B,CAAC;IACjD,eAAe,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC7D,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;CACtE,CAAC;;AAmRF,wBAMG"}