@platforma-sdk/model 1.45.42 → 1.45.45
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.
- package/dist/annotations/converter.cjs +30 -14
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts.map +1 -1
- package/dist/annotations/converter.js +30 -14
- package/dist/annotations/converter.js.map +1 -1
- package/dist/components/PFrameForGraphs.cjs +12 -27
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +4 -3
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +12 -28
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/filters/converter.cjs +4 -2
- package/dist/filters/converter.cjs.map +1 -1
- package/dist/filters/converter.d.ts.map +1 -1
- package/dist/filters/converter.js +4 -2
- package/dist/filters/converter.js.map +1 -1
- package/dist/filters/types.d.ts +1 -1
- package/dist/filters/types.d.ts.map +1 -1
- package/dist/index.cjs +10 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/package.json.cjs +1 -1
- package/dist/package.json.js +1 -1
- package/dist/pframe.cjs +11 -5
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts +1 -0
- package/dist/pframe.d.ts.map +1 -1
- package/dist/pframe.js +11 -5
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/index.cjs +294 -0
- package/dist/pframe_utils/index.cjs.map +1 -0
- package/dist/pframe_utils/index.d.ts +48 -0
- package/dist/pframe_utils/index.d.ts.map +1 -0
- package/dist/pframe_utils/index.js +285 -0
- package/dist/pframe_utils/index.js.map +1 -0
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +2 -2
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js.map +1 -1
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +11 -6
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +10 -6
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +3 -3
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +10 -6
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/package.json +11 -10
- package/src/annotations/converter.ts +35 -15
- package/src/components/PFrameForGraphs.ts +19 -37
- package/src/filters/converter.ts +4 -1
- package/src/filters/types.ts +1 -1
- package/src/global.d.ts +2 -2
- package/src/index.ts +1 -0
- package/src/internal.ts +2 -2
- package/src/pframe.ts +12 -5
- package/src/pframe_utils/index.ts +442 -0
- package/src/render/api.ts +6 -4
- package/src/render/util/column_collection.ts +13 -5
- package/src/render/util/pcolumn_data.ts +15 -10
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var esToolkit = require('es-toolkit');
|
|
4
|
+
var plModelCommon = require('@milaboratories/pl-model-common');
|
|
5
|
+
|
|
6
|
+
// Constants
|
|
7
|
+
const UNIQUE_VALUES_LIMIT = 1000000;
|
|
8
|
+
// Helper functions
|
|
9
|
+
const sortValuesPredicate = (a, b) => a.label.localeCompare(b.label, 'en', { numeric: true });
|
|
10
|
+
function convertColumnData(type, response, absentValue = null) {
|
|
11
|
+
if (type === 'String') {
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
const res = new Array(response.data.length);
|
|
15
|
+
for (let i = 0; i < response.data.length; i++) {
|
|
16
|
+
res[i] = plModelCommon.pTableValue(response, i, { absent: absentValue, na: null });
|
|
17
|
+
}
|
|
18
|
+
return res;
|
|
19
|
+
}
|
|
20
|
+
function createSearchFilter(columnId, substring) {
|
|
21
|
+
return {
|
|
22
|
+
type: 'bySingleColumnV2',
|
|
23
|
+
column: {
|
|
24
|
+
type: 'column',
|
|
25
|
+
id: columnId,
|
|
26
|
+
},
|
|
27
|
+
predicate: {
|
|
28
|
+
operator: 'StringIContains',
|
|
29
|
+
substring,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function createAxisSearchFilter(axisSpec, substring) {
|
|
34
|
+
return {
|
|
35
|
+
type: 'bySingleColumnV2',
|
|
36
|
+
column: {
|
|
37
|
+
type: 'axis',
|
|
38
|
+
id: {
|
|
39
|
+
type: axisSpec.type,
|
|
40
|
+
name: axisSpec.name,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
predicate: {
|
|
44
|
+
operator: 'StringIContains',
|
|
45
|
+
substring,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function mapValuesToSuggestions(values) {
|
|
50
|
+
return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);
|
|
51
|
+
}
|
|
52
|
+
function getPFrameDriver() {
|
|
53
|
+
if (typeof platforma === 'undefined') {
|
|
54
|
+
throw new Error('Platforma instance is not available');
|
|
55
|
+
}
|
|
56
|
+
if (typeof platforma.pFrameDriver === 'undefined') {
|
|
57
|
+
throw new Error('PFrame driver is not available in the current Platforma instance');
|
|
58
|
+
}
|
|
59
|
+
return platforma.pFrameDriver;
|
|
60
|
+
}
|
|
61
|
+
// Core functions
|
|
62
|
+
async function getColumnSpecById(handle, id) {
|
|
63
|
+
try {
|
|
64
|
+
const response = await getPFrameDriver().getColumnSpec(handle, id);
|
|
65
|
+
return response ?? null;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error('PFrame: get single column error', err);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function getSingleColumnData(handle, id, filters = []) {
|
|
73
|
+
try {
|
|
74
|
+
const response = await getPFrameDriver().calculateTableData(handle, {
|
|
75
|
+
src: {
|
|
76
|
+
type: 'column',
|
|
77
|
+
column: id,
|
|
78
|
+
},
|
|
79
|
+
filters,
|
|
80
|
+
sorting: [],
|
|
81
|
+
});
|
|
82
|
+
const axes = response.filter((item) => item.spec.type === 'axis');
|
|
83
|
+
const columns = response.filter((item) => item.spec.type === 'column');
|
|
84
|
+
return {
|
|
85
|
+
axesData: axes.reduce((res, item) => {
|
|
86
|
+
const id = plModelCommon.getAxisId(item.spec.spec);
|
|
87
|
+
res[plModelCommon.canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);
|
|
88
|
+
return res;
|
|
89
|
+
}, {}),
|
|
90
|
+
data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error('PFrame: calculateTableData error');
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function getColumnUniqueValues(handle, id, limit = UNIQUE_VALUES_LIMIT, filters = []) {
|
|
99
|
+
const request = {
|
|
100
|
+
columnId: id,
|
|
101
|
+
filters,
|
|
102
|
+
limit,
|
|
103
|
+
};
|
|
104
|
+
try {
|
|
105
|
+
const response = await getPFrameDriver().getUniqueValues(handle, request);
|
|
106
|
+
if (response.overflow) {
|
|
107
|
+
console.warn(`More than ${limit} values for ${id} column`);
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
values: Array.from(response.values.data).map(String),
|
|
111
|
+
overflow: response.overflow,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.error('PFrame: getUniqueValues for column error');
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function getAxisUniqueValues(handle, params) {
|
|
120
|
+
const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;
|
|
121
|
+
const strAxisId = plModelCommon.canonicalizeAxisId(axisId);
|
|
122
|
+
const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))
|
|
123
|
+
.flatMap((spec, i) => spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [])
|
|
124
|
+
.filter(([_, spec]) => spec.axesSpec.some((axisSpec) => plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec)) === strAxisId));
|
|
125
|
+
if (parentsSpecs.length === 0) {
|
|
126
|
+
console.warn('Axis unique values requested without parent columns');
|
|
127
|
+
return { values: [], overflow: false };
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const responses = await Promise.all(parentsSpecs.map(([id]) => getPFrameDriver().getUniqueValues(handle, {
|
|
131
|
+
columnId: id,
|
|
132
|
+
axis: axisId,
|
|
133
|
+
filters,
|
|
134
|
+
limit,
|
|
135
|
+
})));
|
|
136
|
+
const overflow = responses.some((r) => r.overflow);
|
|
137
|
+
return {
|
|
138
|
+
values: esToolkit.uniq(esToolkit.flatten(responses.map((r) => Array.from(r.values.data).map(String)))),
|
|
139
|
+
overflow,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
console.error('PFrame: getUniqueValues for axis error', err);
|
|
144
|
+
return { values: [], overflow: false };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function getRequestColumnsFromSelectedSources(handle, sources) {
|
|
148
|
+
const result = [];
|
|
149
|
+
for (const item of sources) {
|
|
150
|
+
const spec = await getColumnSpecById(handle, item);
|
|
151
|
+
if (spec?.kind === 'PColumn') {
|
|
152
|
+
result.push(...spec.axesSpec.map((spec) => plModelCommon.getAxisId(spec)));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
async function getColumnsFull(handle, params) {
|
|
158
|
+
const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;
|
|
159
|
+
try {
|
|
160
|
+
const request = {
|
|
161
|
+
columnFilter: {
|
|
162
|
+
type: types,
|
|
163
|
+
name: names,
|
|
164
|
+
annotationValue: annotations,
|
|
165
|
+
annotationPattern: annotationsNotEmpty?.reduce((res, v) => {
|
|
166
|
+
res[v] = '.+';
|
|
167
|
+
return res;
|
|
168
|
+
}, {}),
|
|
169
|
+
},
|
|
170
|
+
compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),
|
|
171
|
+
strictlyCompatible,
|
|
172
|
+
};
|
|
173
|
+
const response = await getPFrameDriver().findColumns(handle, request);
|
|
174
|
+
return response.hits;
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
console.error('PFrame: findColumns error');
|
|
178
|
+
throw err;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function getColumnOrAxisValueLabelsId(handle, strAxisId) {
|
|
182
|
+
const labelColumns = await getColumnsFull(handle, {
|
|
183
|
+
selectedSources: [],
|
|
184
|
+
strictlyCompatible: false,
|
|
185
|
+
names: [plModelCommon.Annotation.Label],
|
|
186
|
+
});
|
|
187
|
+
const labelColumn = labelColumns.find(({ spec }) => {
|
|
188
|
+
return spec && spec.axesSpec.length === 1 && plModelCommon.canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;
|
|
189
|
+
});
|
|
190
|
+
return labelColumn?.columnId;
|
|
191
|
+
}
|
|
192
|
+
function getDiscreteValuesFromAnnotation(columnSpec) {
|
|
193
|
+
const discreteValuesStr = plModelCommon.readAnnotation(columnSpec, plModelCommon.Annotation.DiscreteValues);
|
|
194
|
+
if (!discreteValuesStr) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const discreteValues = JSON.parse(discreteValuesStr).map((v) => String(v));
|
|
199
|
+
const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);
|
|
200
|
+
return { values, overflow: false };
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async function getAxisValuesWithLabels(handle, params) {
|
|
208
|
+
const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;
|
|
209
|
+
const strAxisId = plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec));
|
|
210
|
+
let filters = [];
|
|
211
|
+
if (labelsColumnId) {
|
|
212
|
+
if (searchQuery) {
|
|
213
|
+
filters = [createSearchFilter(labelsColumnId, searchQuery)];
|
|
214
|
+
}
|
|
215
|
+
if (searchQueryValue) {
|
|
216
|
+
filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];
|
|
217
|
+
}
|
|
218
|
+
const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);
|
|
219
|
+
const axisKeys = axesData[strAxisId];
|
|
220
|
+
const values = [];
|
|
221
|
+
for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {
|
|
222
|
+
values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });
|
|
223
|
+
}
|
|
224
|
+
values.sort(sortValuesPredicate);
|
|
225
|
+
return { values, overflow: !(limit === undefined || axisKeys.length < limit) };
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
|
|
229
|
+
if (searchInLabelsOrValue) {
|
|
230
|
+
filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];
|
|
231
|
+
}
|
|
232
|
+
const response = await getAxisUniqueValues(handle, {
|
|
233
|
+
axisId: plModelCommon.getAxisId(axisSpec),
|
|
234
|
+
parentColumnIds: [columnId],
|
|
235
|
+
limit,
|
|
236
|
+
filters,
|
|
237
|
+
});
|
|
238
|
+
const values = mapValuesToSuggestions(response.values);
|
|
239
|
+
return { values, overflow: response.overflow };
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async function getColumnValuesWithLabels(handle, params) {
|
|
243
|
+
const { columnId, limit, searchQuery, searchQueryValue } = params;
|
|
244
|
+
const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
|
|
245
|
+
const filters = searchInLabelsOrValue
|
|
246
|
+
? [createSearchFilter(columnId, searchInLabelsOrValue)]
|
|
247
|
+
: [];
|
|
248
|
+
const response = await getColumnUniqueValues(handle, columnId, limit, filters);
|
|
249
|
+
const values = mapValuesToSuggestions(response.values);
|
|
250
|
+
return { values, overflow: response.overflow };
|
|
251
|
+
}
|
|
252
|
+
async function getUniqueSourceValuesWithLabels(handle, params) {
|
|
253
|
+
const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;
|
|
254
|
+
const selectedSourceSpec = await getColumnSpecById(handle, columnId);
|
|
255
|
+
if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {
|
|
256
|
+
return { values: [], overflow: false };
|
|
257
|
+
}
|
|
258
|
+
// Try to get discrete values from annotation
|
|
259
|
+
const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);
|
|
260
|
+
if (discreteValues != null) {
|
|
261
|
+
return discreteValues;
|
|
262
|
+
}
|
|
263
|
+
// Handle axis values
|
|
264
|
+
if (axisIdx != null) {
|
|
265
|
+
const axisSpec = selectedSourceSpec.axesSpec[axisIdx];
|
|
266
|
+
const strAxisId = plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec));
|
|
267
|
+
const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);
|
|
268
|
+
return getAxisValuesWithLabels(handle, {
|
|
269
|
+
columnId,
|
|
270
|
+
axisSpec,
|
|
271
|
+
labelsColumnId,
|
|
272
|
+
limit,
|
|
273
|
+
searchQuery,
|
|
274
|
+
searchQueryValue,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
// Handle column values
|
|
278
|
+
return getColumnValuesWithLabels(handle, {
|
|
279
|
+
columnId,
|
|
280
|
+
limit,
|
|
281
|
+
searchQuery,
|
|
282
|
+
searchQueryValue,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
exports.getAxisUniqueValues = getAxisUniqueValues;
|
|
287
|
+
exports.getColumnOrAxisValueLabelsId = getColumnOrAxisValueLabelsId;
|
|
288
|
+
exports.getColumnSpecById = getColumnSpecById;
|
|
289
|
+
exports.getColumnUniqueValues = getColumnUniqueValues;
|
|
290
|
+
exports.getColumnsFull = getColumnsFull;
|
|
291
|
+
exports.getRequestColumnsFromSelectedSources = getRequestColumnsFromSelectedSources;
|
|
292
|
+
exports.getSingleColumnData = getSingleColumnData;
|
|
293
|
+
exports.getUniqueSourceValuesWithLabels = getUniqueSourceValuesWithLabels;
|
|
294
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from 'es-toolkit';\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue, Annotation, canonicalizeAxisId, getAxisId, readAnnotation } from '@milaboratories/pl-model-common';\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, 'en', { numeric: true });\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'column',\n id: columnId,\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: 'StringIContains',\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === 'undefined') {\n throw new Error('Platforma instance is not available');\n }\n if (typeof platforma.pFrameDriver === 'undefined') {\n throw new Error('PFrame driver is not available in the current Platforma instance');\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error', err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: 'column',\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === 'axis');\n const columns = response.filter((item) => item.spec.type === 'column');\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === 'PColumn' ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn('Axis unique values requested without parent columns');\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) =>\n Array.from(r.values.data as ArrayLike<unknown>).map(String),\n )),\n ),\n overflow,\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === 'PColumn') {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+';\n return res;\n }, {} as Record<string, string>),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [Annotation.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map((v) => String(v));\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== 'PColumn') {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":["pTableValue","getAxisId","canonicalizeAxisId","uniq","flatten","Annotation","readAnnotation"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { PColumnSpec, PFrameHandle, AxisId, CanonicalizedJson, FindColumnsRequest, PColumnIdAndSpec, PObjectId, PTableRecordSingleValueFilterV2, ValueType } from '@milaboratories/pl-model-common';
|
|
2
|
+
type PValue = string | number | null;
|
|
3
|
+
type SuggestionResponse = {
|
|
4
|
+
values: {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}[];
|
|
8
|
+
overflow: boolean;
|
|
9
|
+
};
|
|
10
|
+
type SingleColumnData = {
|
|
11
|
+
axesData: Record<string, PValue[]>;
|
|
12
|
+
data: PValue[];
|
|
13
|
+
};
|
|
14
|
+
type UniqueValuesResponse = {
|
|
15
|
+
values: string[];
|
|
16
|
+
overflow: boolean;
|
|
17
|
+
};
|
|
18
|
+
type GetUniqueSourceValuesParams = {
|
|
19
|
+
columnId: PObjectId;
|
|
20
|
+
axisIdx?: number;
|
|
21
|
+
limit?: number;
|
|
22
|
+
searchQuery?: string;
|
|
23
|
+
searchQueryValue?: string;
|
|
24
|
+
};
|
|
25
|
+
type GetAxisUniqueValuesParams = {
|
|
26
|
+
axisId: AxisId;
|
|
27
|
+
parentColumnIds: PObjectId[];
|
|
28
|
+
limit?: number;
|
|
29
|
+
filters?: PTableRecordSingleValueFilterV2[];
|
|
30
|
+
};
|
|
31
|
+
type GetColumnsFullParams = {
|
|
32
|
+
selectedSources: PObjectId[];
|
|
33
|
+
strictlyCompatible: boolean;
|
|
34
|
+
types?: ValueType[];
|
|
35
|
+
names?: string[];
|
|
36
|
+
annotations?: FindColumnsRequest['columnFilter']['annotationValue'];
|
|
37
|
+
annotationsNotEmpty?: string[];
|
|
38
|
+
};
|
|
39
|
+
export declare function getColumnSpecById(handle: PFrameHandle, id: PObjectId): Promise<PColumnSpec | null>;
|
|
40
|
+
export declare function getSingleColumnData(handle: PFrameHandle, id: PObjectId, filters?: PTableRecordSingleValueFilterV2[]): Promise<SingleColumnData>;
|
|
41
|
+
export declare function getColumnUniqueValues(handle: PFrameHandle, id: PObjectId, limit?: number, filters?: PTableRecordSingleValueFilterV2[]): Promise<UniqueValuesResponse>;
|
|
42
|
+
export declare function getAxisUniqueValues(handle: PFrameHandle, params: GetAxisUniqueValuesParams): Promise<UniqueValuesResponse>;
|
|
43
|
+
export declare function getRequestColumnsFromSelectedSources(handle: PFrameHandle, sources: PObjectId[]): Promise<AxisId[]>;
|
|
44
|
+
export declare function getColumnsFull(handle: PFrameHandle, params: GetColumnsFullParams): Promise<PColumnIdAndSpec[]>;
|
|
45
|
+
export declare function getColumnOrAxisValueLabelsId(handle: PFrameHandle, strAxisId: CanonicalizedJson<AxisId>): Promise<PObjectId | undefined>;
|
|
46
|
+
export declare function getUniqueSourceValuesWithLabels(handle: PFrameHandle, params: GetUniqueSourceValuesParams): Promise<SuggestionResponse>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pframe_utils/index.ts"],"names":[],"mappings":"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"}
|