@platforma-sdk/ui-vue 1.42.14 → 1.42.18

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 +25 -24
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +16 -0
  4. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +5 -5
  5. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +21 -21
  6. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
  7. package/dist/components/PlAgDataTable/sources/table-source-v2.js +122 -123
  8. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  9. package/dist/components/PlAgDataTable/sources/table-state-v2.js +9 -9
  10. package/dist/components/PlAgDataTable/sources/value-rendering.d.ts.map +1 -1
  11. package/dist/components/PlAgDataTable/sources/value-rendering.js +24 -25
  12. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  13. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +12 -12
  14. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -2
  15. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.d.ts.map +1 -1
  16. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +21 -20
  17. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +1 -1
  18. package/dist/components/PlMultiSequenceAlignment/data.d.ts.map +1 -1
  19. package/dist/components/PlMultiSequenceAlignment/data.js +169 -184
  20. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  21. package/dist/components/PlTableFilters/filters-state.js +8 -8
  22. package/dist/components/PlTableFilters/filters_logic.d.ts.map +1 -1
  23. package/dist/components/PlTableFilters/filters_logic.js +67 -77
  24. package/dist/components/PlTableFilters/filters_logic.js.map +1 -1
  25. package/dist/defineApp.js +20 -20
  26. package/dist/internal/UpdateSerializer.js +3 -3
  27. package/dist/lib/model/common/dist/index.js +576 -444
  28. package/dist/lib/model/common/dist/index.js.map +1 -1
  29. package/dist/lib/ui/uikit/dist/components/DataTable/TableComponent.vue.js +1 -1
  30. package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
  31. package/dist/lib/ui/uikit/dist/components/PlFileDialog/Local.vue.js +6 -6
  32. package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js +17 -17
  33. package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  34. package/dist/lib/ui/uikit/dist/components/PlLogView/PlLogView.vue.js +89 -63
  35. package/dist/lib/ui/uikit/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  36. package/dist/lib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js +1 -1
  37. package/dist/lib/ui/uikit/dist/helpers/dom.js.map +1 -1
  38. package/dist/lib/ui/uikit/dist/helpers/downloadContent.js +32 -0
  39. package/dist/lib/ui/uikit/dist/helpers/downloadContent.js.map +1 -0
  40. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +257 -192
  41. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js.map +1 -1
  42. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +473 -457
  43. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
  44. package/dist/lib.js +52 -50
  45. package/dist/lib.js.map +1 -1
  46. package/dist/sdk/model/dist/index.js +542 -526
  47. package/dist/sdk/model/dist/index.js.map +1 -1
  48. package/package.json +3 -3
  49. package/src/components/PlAgDataTable/sources/table-source-v2.ts +20 -16
  50. package/src/components/PlAgDataTable/sources/value-rendering.ts +15 -7
  51. package/src/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue +1 -0
  52. package/src/components/PlMultiSequenceAlignment/data.ts +12 -12
  53. package/src/components/PlTableFilters/filters_logic.ts +18 -15
  54. package/.turbo/turbo-test.log +0 -565
  55. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js +0 -27
  56. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
@@ -1,13 +1,13 @@
1
- import { isLabelColumn as L, isColumnHidden as H, isColumnOptional as _ } from "../../../sdk/model/dist/index.js";
2
- import V from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
3
- import z from "../../PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js";
4
- import { PTableHidden as K } from "./common.js";
5
- import { defaultMainMenuItems as j } from "./menu-items.js";
6
- import { makeRowNumberColDef as Q, PlAgDataTableRowNumberColId as U } from "./row-number.js";
7
- import { getColumnRenderingSpec as W } from "./value-rendering.js";
8
- import { isJsonEqual as E } from "../../../lib/util/helpers/dist/index.js";
9
- import { canonicalizeJson as F, getAxisId as O, matchAxisId as T, pTableValue as q, isPTableValueAxis as X } from "../../../lib/model/common/dist/index.js";
10
- function Y(i) {
1
+ import { isLabelColumn as H, isColumnHidden as V, isColumnOptional as _ } from "../../../sdk/model/dist/index.js";
2
+ import z from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
3
+ import K from "../../PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js";
4
+ import { PTableHidden as j } from "./common.js";
5
+ import { defaultMainMenuItems as U } from "./menu-items.js";
6
+ import { makeRowNumberColDef as W, PlAgDataTableRowNumberColId as Q } from "./row-number.js";
7
+ import { getColumnRenderingSpec as X } from "./value-rendering.js";
8
+ import { isJsonEqual as N } from "../../../lib/util/helpers/dist/index.js";
9
+ import { canonicalizeJson as F, getAxisId as O, readAnnotationJson as E, matchAxisId as R, readAnnotation as Y, ValueType as l, pTableValue as $, isPTableValueAxis as Z, Annotation as A } from "../../../lib/model/common/dist/index.js";
10
+ function B(i) {
11
11
  switch (i.type) {
12
12
  case "axis":
13
13
  return {
@@ -21,198 +21,197 @@ function Y(i) {
21
21
  };
22
22
  }
23
23
  }
24
- function Z(i, o, w, u) {
25
- const l = [];
26
- for (let d = 0; d < o[0].data.length; ++d) {
27
- const f = w.map((n) => {
28
- const a = q(o[u[n]], d);
29
- if (!X(a))
30
- throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(a)}`);
31
- return a;
32
- }), c = { id: F(f), axesKey: f };
33
- i.forEach((n, a) => {
34
- c[n.toString()] = u[a] === -1 ? K : q(o[u[a]], d);
35
- }), l.push(c);
24
+ function ee(i, o, h, d) {
25
+ const c = [];
26
+ for (let f = 0; f < o[0].data.length; ++f) {
27
+ const p = h.map((n) => {
28
+ const r = $(o[d[n]], f);
29
+ if (!Z(r))
30
+ throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(r)}`);
31
+ return r;
32
+ }), u = { id: F(p), axesKey: p };
33
+ i.forEach((n, r) => {
34
+ u[n.toString()] = d[r] === -1 ? j : $(o[d[r]], f);
35
+ }), c.push(u);
36
36
  }
37
- return l;
37
+ return c;
38
38
  }
39
- async function ue({
39
+ async function fe({
40
40
  generation: i,
41
41
  pfDriver: o,
42
- model: w,
43
- sheets: u,
44
- dataRenderedTracker: l,
45
- hiddenColIds: d,
46
- cellButtonAxisParams: f
42
+ model: h,
43
+ sheets: d,
44
+ dataRenderedTracker: c,
45
+ hiddenColIds: f,
46
+ cellButtonAxisParams: p
47
47
  }) {
48
- const r = i.value, c = new Error("table state generation changed"), n = await o.getSpec(w.fullTableHandle);
49
- if (r !== i.value) throw c;
50
- const a = w.visibleTableHandle, S = await o.getSpec(a);
51
- if (r !== i.value) throw c;
52
- const x = (e) => F(Y(e)), b = new Map(
53
- S.entries().map(([e, t]) => [x(t), e])
54
- ), g = new Map(
48
+ const a = i.value, u = new Error("table state generation changed"), n = await o.getSpec(h.fullTableHandle);
49
+ if (a !== i.value) throw u;
50
+ const r = h.visibleTableHandle, v = await o.getSpec(r);
51
+ if (a !== i.value) throw u;
52
+ const x = (e) => F(B(e)), g = new Map(
53
+ v.entries().map(([e, t]) => [x(t), e])
54
+ ), S = new Map(
55
55
  n.entries().map(([e, t]) => {
56
- const s = b.get(x(t)) ?? -1;
56
+ const s = g.get(x(t)) ?? -1;
57
57
  if (s === -1 && t.type === "axis")
58
58
  throw new Error(`axis ${JSON.stringify(t.spec)} not present in join result`);
59
59
  return [e, s];
60
60
  })
61
- ), v = u.map((e) => O(e.axis)), h = (e) => v.some((t) => T(t, e)), I = [], A = (e, t) => {
62
- I.some((s) => T(s.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : I.push({ axisId: e, labelColumnIdx: t });
63
- }, P = (e) => {
61
+ ), b = d.map((e) => O(e.axis)), M = (e) => b.some((t) => R(t, e)), I = [], L = (e, t) => {
62
+ I.some((s) => R(s.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : I.push({ axisId: e, labelColumnIdx: t });
63
+ }, J = (e) => {
64
64
  var t;
65
- return ((t = I.find((s) => T(s.axisId, e))) == null ? void 0 : t.labelColumnIdx) ?? -1;
65
+ return ((t = I.find((s) => R(s.axisId, e))) == null ? void 0 : t.labelColumnIdx) ?? -1;
66
66
  };
67
- let p = n.entries().filter(
67
+ let y = n.entries().filter(
68
68
  ([e, t]) => {
69
69
  switch (t.type) {
70
70
  case "axis":
71
- return !h(t.id);
71
+ return !M(t.id);
72
72
  case "column":
73
- if (L(t.spec)) {
73
+ if (H(t.spec)) {
74
74
  const s = O(t.spec.axesSpec[0]);
75
- return h(s) || A(s, e), !1;
75
+ return M(s) || L(s, e), !1;
76
76
  }
77
- return !H(t.spec);
77
+ return !V(t.spec);
78
78
  }
79
79
  }
80
80
  ).map(([e]) => e).toArray();
81
- p.sort((e, t) => {
82
- var $, k;
81
+ y.sort((e, t) => {
83
82
  if (n[e].type !== n[t].type) return n[e].type === "axis" ? -1 : 1;
84
- const s = ($ = n[e].spec.annotations) == null ? void 0 : $["pl7.app/table/orderPriority"], y = (k = n[t].spec.annotations) == null ? void 0 : k["pl7.app/table/orderPriority"];
85
- return s === void 0 ? y === void 0 ? 0 : 1 : y === void 0 ? -1 : Number(y) - Number(s);
83
+ const s = E(n[e].spec, A.Table.OrderPriority), m = E(n[t].spec, A.Table.OrderPriority);
84
+ return s === void 0 ? m === void 0 ? 0 : 1 : m === void 0 ? -1 : m - s;
86
85
  });
87
- const M = [...p];
88
- p = p.map((e) => {
86
+ const k = [...y];
87
+ y = y.map((e) => {
89
88
  const t = n[e];
90
89
  if (t.type === "axis") {
91
- const s = P(t.id);
90
+ const s = J(t.id);
92
91
  if (s !== -1)
93
92
  return s;
94
93
  }
95
94
  return e;
96
95
  });
97
- const G = [
98
- Q(),
99
- ...M.map((e, t) => B(e, n[e], n[p[t]], d, f))
100
- ], N = n.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), J = N.keys().map((e) => {
101
- let t = p.indexOf(e);
102
- return t === -1 && (t = p.length, p.push(e)), t;
96
+ const P = [
97
+ W(),
98
+ ...k.map((e, t) => te(e, n[e], n[y[t]], f, p))
99
+ ], q = n.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), G = q.keys().map((e) => {
100
+ let t = y.indexOf(e);
101
+ return t === -1 && (t = y.length, y.push(e)), t;
103
102
  }).toArray(), C = [], D = [];
104
- p.forEach((e) => {
105
- const t = g.get(e);
103
+ y.forEach((e) => {
104
+ const t = S.get(e);
106
105
  t !== -1 ? (D.push(C.length), C.push(t)) : D.push(-1);
107
106
  });
108
- let m = -1, R;
107
+ let w = -1, T;
109
108
  return {
110
- axesSpec: N,
111
- columnDefs: G,
109
+ axesSpec: q,
110
+ columnDefs: P,
112
111
  serverSideDatasource: {
113
112
  getRows: async (e) => {
114
- if (r !== i.value) return e.fail();
113
+ if (a !== i.value) return e.fail();
115
114
  try {
116
- if (m === -1) {
117
- const y = await o.getShape(a);
118
- if (r !== i.value || e.api.isDestroyed()) return e.fail();
119
- m = y.rows;
115
+ if (w === -1) {
116
+ const m = await o.getShape(r);
117
+ if (a !== i.value || e.api.isDestroyed()) return e.fail();
118
+ w = m.rows;
120
119
  }
121
- if (m == 0) {
122
- e.success({ rowData: [], rowCount: m }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
120
+ if (w == 0) {
121
+ e.success({ rowData: [], rowCount: w }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
123
122
  return;
124
123
  }
125
- if (R && !E(R.request.sortModel, e.request.sortModel))
126
- return e.success({ rowData: [], rowCount: m });
127
- R = e;
124
+ if (T && !N(T.request.sortModel, e.request.sortModel))
125
+ return e.success({ rowData: [], rowCount: w });
126
+ T = e;
128
127
  let t = 0, s = [];
129
- if (m > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(m, e.request.endRow) - e.request.startRow, t > 0)) {
130
- const y = await o.getData(a, C, {
128
+ if (w > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(w, e.request.endRow) - e.request.startRow, t > 0)) {
129
+ const m = await o.getData(r, C, {
131
130
  offset: e.request.startRow,
132
131
  length: t
133
132
  });
134
- if (r !== i.value || e.api.isDestroyed()) return e.fail();
135
- s = Z(M, y, J, D);
133
+ if (a !== i.value || e.api.isDestroyed()) return e.fail();
134
+ s = ee(k, m, G, D);
136
135
  }
137
- e.success({ rowData: s, rowCount: m }), e.api.autoSizeColumns(
138
- e.api.getAllDisplayedColumns().filter((y) => y.getColId() !== U)
139
- ), e.api.setGridOption("loading", !1), l.resolve(e.api);
136
+ e.success({ rowData: s, rowCount: w }), e.api.autoSizeColumns(
137
+ e.api.getAllDisplayedColumns().filter((m) => m.getColId() !== Q)
138
+ ), e.api.setGridOption("loading", !1), c.resolve(e.api);
140
139
  } catch (t) {
141
- if (r !== i.value || e.api.isDestroyed()) return e.fail();
140
+ if (a !== i.value || e.api.isDestroyed()) return e.fail();
142
141
  e.api.setGridOption("loading", !0), e.fail(), console.trace(t);
143
142
  }
144
143
  }
145
144
  }
146
145
  };
147
146
  }
148
- function B(i, o, w, u, l) {
149
- var n, a;
150
- const d = F({
147
+ function te(i, o, h, d, c) {
148
+ var n;
149
+ const f = F({
151
150
  source: o,
152
- labeled: w
153
- }), f = o.type === "axis" ? o.spec.type : o.spec.valueType, r = W(o), c = {};
154
- return r.fontFamily && (r.fontFamily === "monospace" ? (c.fontFamily = "Spline Sans Mono", c.fontWeight = 300) : c.fontFamily = r.fontFamily), {
155
- colId: d,
156
- mainMenuItems: j,
151
+ labeled: h
152
+ }), p = o.type === "axis" ? o.spec.type : o.spec.valueType, a = X(o), u = {};
153
+ return a.fontFamily && (a.fontFamily === "monospace" ? (u.fontFamily = "Spline Sans Mono", u.fontWeight = 300) : u.fontFamily = a.fontFamily), {
154
+ colId: f,
155
+ mainMenuItems: U,
157
156
  context: o,
158
157
  field: `${i}`,
159
- headerName: ((a = (n = w.spec.annotations) == null ? void 0 : n["pl7.app/label"]) == null ? void 0 : a.trim()) ?? `Unlabeled ${o.type} ${i}`,
158
+ headerName: ((n = Y(h.spec, A.Label)) == null ? void 0 : n.trim()) ?? `Unlabeled ${o.type} ${i}`,
160
159
  lockPosition: o.type === "axis",
161
- hide: (u == null ? void 0 : u.includes(d)) ?? _(o.spec),
162
- valueFormatter: r.valueFormatter,
163
- headerComponent: V,
164
- cellRendererSelector: l != null && l.showCellButtonForAxisId ? (S) => {
165
- var b, g;
160
+ hide: (d == null ? void 0 : d.includes(f)) ?? _(o.spec),
161
+ valueFormatter: a.valueFormatter,
162
+ headerComponent: z,
163
+ cellRendererSelector: c != null && c.showCellButtonForAxisId ? (r) => {
164
+ var x, g;
166
165
  if (o.type !== "axis") return;
167
- const x = (g = (b = S.colDef) == null ? void 0 : b.context) == null ? void 0 : g.id;
168
- if (E(x, l.showCellButtonForAxisId))
166
+ const v = (g = (x = r.colDef) == null ? void 0 : x.context) == null ? void 0 : g.id;
167
+ if (N(v, c.showCellButtonForAxisId))
169
168
  return {
170
- component: z,
169
+ component: K,
171
170
  params: {
172
- invokeRowsOnDoubleClick: l.cellButtonInvokeRowsOnDoubleClick,
173
- onClick: (v) => {
174
- var h;
175
- l.trigger((h = v.data) == null ? void 0 : h.axesKey);
171
+ invokeRowsOnDoubleClick: c.cellButtonInvokeRowsOnDoubleClick,
172
+ onClick: (S) => {
173
+ var b;
174
+ c.trigger((b = S.data) == null ? void 0 : b.axesKey);
176
175
  }
177
176
  }
178
177
  };
179
178
  } : void 0,
180
- cellStyle: c,
179
+ cellStyle: u,
181
180
  headerComponentParams: {
182
181
  type: (() => {
183
- switch (f) {
184
- case "Int":
185
- case "Long":
186
- case "Float":
187
- case "Double":
182
+ switch (p) {
183
+ case l.Int:
184
+ case l.Long:
185
+ case l.Float:
186
+ case l.Double:
188
187
  return "Number";
189
- case "String":
190
- case "Bytes":
188
+ case l.String:
189
+ case l.Bytes:
191
190
  return "Text";
192
191
  default:
193
- throw Error(`unsupported data type: ${f}`);
192
+ throw Error(`unsupported data type: ${p}`);
194
193
  }
195
194
  })()
196
195
  },
197
196
  cellDataType: (() => {
198
- switch (f) {
199
- case "Int":
200
- case "Long":
201
- case "Float":
202
- case "Double":
197
+ switch (p) {
198
+ case l.Int:
199
+ case l.Long:
200
+ case l.Float:
201
+ case l.Double:
203
202
  return "number";
204
- case "String":
205
- case "Bytes":
203
+ case l.String:
204
+ case l.Bytes:
206
205
  return "text";
207
206
  default:
208
- throw Error(`unsupported data type: ${f}`);
207
+ throw Error(`unsupported data type: ${p}`);
209
208
  }
210
209
  })()
211
210
  };
212
211
  }
213
212
  export {
214
- ue as calculateGridOptions,
215
- Y as getPTableColumnId,
216
- B as makeColDef
213
+ fe as calculateGridOptions,
214
+ B as getPTableColumnId,
215
+ te as makeColDef
217
216
  };
218
217
  //# sourceMappingURL=table-source-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\n} from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n isPTableValueAxis,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type { DeferredCircular } from './focus-row';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error('table state generation changed');\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': return !isPartitionedAxis(spec.id);\n case 'column':\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n },\n )\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === 'axis') {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","bPriority","_b","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":"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"}
1
+ {"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\n} from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n isPTableValueAxis,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type { DeferredCircular } from './focus-row';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error('table state generation changed');\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': return !isPartitionedAxis(spec.id);\n case 'column':\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n },\n )\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === 'axis') {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName: readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ?? `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'Number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","readAnnotationJson","Annotation","bPriority","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","readAnnotation","isColumnOptional","PlAgColumnHeader","_b","PlAgTextAndButtonCell","ValueType"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { isJsonEqual as I } from "../../../lib/util/helpers/dist/index.js";
4
4
  import { makePredicate as g } from "../../PlTableFilters/filters_logic.js";
5
5
  import "../../../lib/ui/uikit/dist/index.js";
6
6
  import { computedCached as b } from "../../../lib/ui/uikit/dist/composition/computedCached.js";
7
- import { parseJson as c } from "../../../lib/model/common/dist/index.js";
7
+ import { parseJson as d } from "../../../lib/model/common/dist/index.js";
8
8
  function P() {
9
9
  return {
10
10
  sourceId: null,
@@ -15,7 +15,7 @@ function P() {
15
15
  }
16
16
  function C(e) {
17
17
  var o;
18
- return ((o = e == null ? void 0 : e.hiddenColIds) == null ? void 0 : o.map(c).reduce((a, s) => (s.source.type === "column" && a.push(s.source.id), a), [])) ?? null;
18
+ return ((o = e == null ? void 0 : e.hiddenColIds) == null ? void 0 : o.map(d).reduce((a, s) => (s.source.type === "column" && a.push(s.source.id), a), [])) ?? null;
19
19
  }
20
20
  function T(e) {
21
21
  return e.map((o) => ({
@@ -39,7 +39,7 @@ function k(e) {
39
39
  }
40
40
  function y(e) {
41
41
  return (e == null ? void 0 : e.sortModel.map((o) => {
42
- const { spec: a, ...s } = c(
42
+ const { spec: a, ...s } = d(
43
43
  o.colId
44
44
  ).labeled;
45
45
  return {
@@ -49,7 +49,7 @@ function y(e) {
49
49
  };
50
50
  })) ?? [];
51
51
  }
52
- function d(e) {
52
+ function c(e) {
53
53
  return {
54
54
  sourceId: e.sourceId,
55
55
  hiddenColIds: C(e.gridState.columnVisibility),
@@ -78,7 +78,7 @@ function E(e, o) {
78
78
  pTableParams: i()
79
79
  };
80
80
  if (t.sourceId) {
81
- u.pTableParams = d(t);
81
+ u.pTableParams = c(t);
82
82
  const l = u.stateCache.findIndex((S) => S.sourceId === t.sourceId);
83
83
  l !== -1 ? u.stateCache[l] = t : (u.stateCache.push(t), u.stateCache = u.stateCache.slice(-5));
84
84
  }
@@ -88,7 +88,7 @@ function E(e, o) {
88
88
  h(
89
89
  () => s.value,
90
90
  (t) => {
91
- const r = t.sourceId ? d(t) : i(), u = a.value.pTableParams;
91
+ const r = t.sourceId ? c(t) : i(), u = a.value.pTableParams;
92
92
  I(r, u) || (a.value = {
93
93
  ...a.value,
94
94
  pTableParams: r
@@ -96,7 +96,7 @@ function E(e, o) {
96
96
  },
97
97
  { deep: !0 }
98
98
  );
99
- const f = n({
99
+ const m = n({
100
100
  get: () => s.value.gridState,
101
101
  set: (t) => {
102
102
  const r = s.value;
@@ -105,7 +105,7 @@ function E(e, o) {
105
105
  gridState: t
106
106
  });
107
107
  }
108
- }), m = n({
108
+ }), f = n({
109
109
  get: () => s.value.sheetsState,
110
110
  set: (t) => {
111
111
  const r = s.value;
@@ -124,7 +124,7 @@ function E(e, o) {
124
124
  });
125
125
  }
126
126
  });
127
- return { gridState: f, sheetsState: m, filtersState: p };
127
+ return { gridState: m, sheetsState: f, filtersState: p };
128
128
  }
129
129
  export {
130
130
  E as useTableState
@@ -1 +1 @@
1
- {"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzG,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,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUrG;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,CAgClF"}
1
+ {"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,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,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUrG;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,CAgClF"}
@@ -1,42 +1,41 @@
1
1
  import "../../../sdk/model/dist/index.js";
2
- import { isPTableHidden as m } from "./common.js";
3
- import { isPTableAbsent as c, PTableNA as d } from "../../../lib/model/common/dist/index.js";
2
+ import { isPTableHidden as c } from "./common.js";
3
+ import { ValueType as r, readAnnotation as u, Annotation as f, isPTableAbsent as d, PTableNA as v } from "../../../lib/model/common/dist/index.js";
4
4
  import { format as p } from "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js";
5
- function u(e) {
6
- return e === void 0 ? "undefined" : m(e) ? "loading..." : c(e) || e === d ? "" : void 0;
5
+ function s(e) {
6
+ return e === void 0 ? "undefined" : c(e) ? "loading..." : d(e) || e === v ? "" : void 0;
7
7
  }
8
- function g(e) {
9
- var i, l;
10
- const s = e.type === "axis" ? e.spec.type : e.spec.valueType;
11
- let n;
12
- switch (s) {
13
- case "Int":
14
- case "Long":
15
- case "Float":
16
- case "Double": {
17
- const t = (i = e.spec.annotations) == null ? void 0 : i["pl7.app/format"], o = t ? p(t) : void 0;
18
- n = {
19
- valueFormatter: (r) => {
20
- const f = u(r.value);
21
- return f !== void 0 ? f : o ? o(Number(r.value)) : r.value.toString();
8
+ function T(e) {
9
+ const m = e.type === "axis" ? e.spec.type : e.spec.valueType;
10
+ let o;
11
+ switch (m) {
12
+ case r.Int:
13
+ case r.Long:
14
+ case r.Float:
15
+ case r.Double: {
16
+ const t = u(e.spec, f.Format), n = t ? p(t) : void 0;
17
+ o = {
18
+ valueFormatter: (a) => {
19
+ const l = s(a.value);
20
+ return l !== void 0 ? l : n ? n(Number(a.value)) : a.value.toString();
22
21
  }
23
22
  };
24
23
  break;
25
24
  }
26
25
  default:
27
- n = {
26
+ o = {
28
27
  valueFormatter: (t) => {
29
- const o = u(t.value);
30
- return o !== void 0 ? o : t.value.toString();
28
+ const n = s(t.value);
29
+ return n !== void 0 ? n : t.value.toString();
31
30
  }
32
31
  };
33
32
  break;
34
33
  }
35
- const a = (l = e.spec.annotations) == null ? void 0 : l["pl7.app/table/fontFamily"];
36
- return a && (n.fontFamily = a), n;
34
+ const i = u(e.spec, f.Table.FontFamily);
35
+ return i && (o.fontFamily = i), o;
37
36
  }
38
37
  export {
39
- u as formatSpecialValues,
40
- g as getColumnRenderingSpec
38
+ s as formatSpecialValues,
39
+ T as getColumnRenderingSpec
41
40
  };
42
41
  //# sourceMappingURL=value-rendering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-rendering.js","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import { isPTableAbsent, PTableNA, type PTableColumnSpec, type PTableValue } 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(value: PTableValue | PTableHidden | undefined): string | undefined {\n if (value === undefined) {\n return 'undefined';\n } else if (isPTableHidden(value)) {\n return 'loading...';\n } else if (isPTableAbsent(value) || 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 'Int':\n case 'Long':\n case 'Float':\n case 'Double': {\n const format = spec.spec.annotations?.['pl7.app/format'];\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\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);\n if (formatted !== undefined) return formatted;\n return params.value!.toString();\n },\n };\n break;\n }\n const fontFamily = spec.spec.annotations?.['pl7.app/table/fontFamily'];\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"names":["formatSpecialValues","value","isPTableHidden","isPTableAbsent","PTableNA","getColumnRenderingSpec","spec","valueType","renderSpec","format","_a","formatFn","d3.format","params","formatted","fontFamily","_b"],"mappings":";;;;AAOO,SAASA,EAAoBC,GAAmE;AACrG,SAAIA,MAAU,SACL,cACEC,EAAeD,CAAK,IACtB,eACEE,EAAeF,CAAK,KAAKA,MAAUG,IACrC,KAEA;AAEX;AAOO,SAASC,EAAuBC,GAA6C;;AAC5E,QAAAC,IAAYD,EAAK,SAAS,SAASA,EAAK,KAAK,OAAOA,EAAK,KAAK;AAChE,MAAAE;AACJ,UAAQD,GAAW;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,UAAU;AACb,YAAME,KAASC,IAAAJ,EAAK,KAAK,gBAAV,gBAAAI,EAAwB,mBACjCC,IAAWF,IAASG,EAAUH,CAAM,IAAI;AACjC,MAAAD,IAAA;AAAA,QACX,gBAAgB,CAACK,MAAW;AACpB,gBAAAC,IAAYd,EAAoBa,EAAO,KAAK;AAC9C,iBAAAC,MAAc,SAAkBA,IAC7BH,IAAWA,EAAS,OAAOE,EAAO,KAAK,CAAC,IAAIA,EAAO,MAAO,SAAS;AAAA,QAAA;AAAA,MAE9E;AACA;AAAA,IAAA;AAAA,IAEF;AACe,MAAAL,IAAA;AAAA,QACX,gBAAgB,CAACK,MAAW;AACpB,gBAAAC,IAAYd,EAAoBa,EAAO,KAAK;AAC9C,iBAAAC,MAAc,SAAkBA,IAC7BD,EAAO,MAAO,SAAS;AAAA,QAAA;AAAA,MAElC;AACA;AAAA,EAAA;AAEJ,QAAME,KAAaC,IAAAV,EAAK,KAAK,gBAAV,gBAAAU,EAAwB;AACvC,SAAAD,QAAuB,aAAaA,IACjCP;AACT;"}
1
+ {"version":3,"file":"value-rendering.js","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n isPTableAbsent,\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(value: PTableValue | PTableHidden | undefined): string | undefined {\n if (value === undefined) {\n return 'undefined';\n } else if (isPTableHidden(value)) {\n return 'loading...';\n } else if (isPTableAbsent(value) || 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 formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\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);\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"],"names":["formatSpecialValues","value","isPTableHidden","isPTableAbsent","PTableNA","getColumnRenderingSpec","spec","valueType","renderSpec","ValueType","format","readAnnotation","Annotation","formatFn","d3.format","params","formatted","fontFamily"],"mappings":";;;;AAeO,SAASA,EAAoBC,GAAmE;AACrG,SAAIA,MAAU,SACL,cACEC,EAAeD,CAAK,IACtB,eACEE,EAAeF,CAAK,KAAKA,MAAUG,IACrC,KAEA;AAEX;AAOO,SAASC,EAAuBC,GAA6C;AAC5E,QAAAC,IAAYD,EAAK,SAAS,SAASA,EAAK,KAAK,OAAOA,EAAK,KAAK;AAChE,MAAAE;AACJ,UAAQD,GAAW;AAAA,IACjB,KAAKE,EAAU;AAAA,IACf,KAAKA,EAAU;AAAA,IACf,KAAKA,EAAU;AAAA,IACf,KAAKA,EAAU,QAAQ;AACrB,YAAMC,IAASC,EAAeL,EAAK,MAAMM,EAAW,MAAM,GACpDC,IAAWH,IAASI,EAAUJ,CAAM,IAAI;AACjC,MAAAF,IAAA;AAAA,QACX,gBAAgB,CAACO,MAAW;AACpB,gBAAAC,IAAYhB,EAAoBe,EAAO,KAAK;AAC9C,iBAAAC,MAAc,SAAkBA,IAC7BH,IAAWA,EAAS,OAAOE,EAAO,KAAK,CAAC,IAAIA,EAAO,MAAO,SAAS;AAAA,QAAA;AAAA,MAE9E;AACA;AAAA,IAAA;AAAA,IAEF;AACe,MAAAP,IAAA;AAAA,QACX,gBAAgB,CAACO,MAAW;AACpB,gBAAAC,IAAYhB,EAAoBe,EAAO,KAAK;AAC9C,iBAAAC,MAAc,SAAkBA,IAC7BD,EAAO,MAAO,SAAS;AAAA,QAAA;AAAA,MAElC;AACA;AAAA,EAAA;AAEJ,QAAME,IAAaN,EAAeL,EAAK,MAAMM,EAAW,MAAM,UAAU;AACpE,SAAAK,QAAuB,aAAaA,IACjCT;AACT;"}