autoql-fe-utils 1.11.18 → 1.11.19

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/index.mjs CHANGED
@@ -837,6 +837,7 @@ var DisplayTypes = /* @__PURE__ */ ((DisplayTypes2) => {
837
837
  DisplayTypes2["SCATTERPLOT"] = "scatterplot";
838
838
  DisplayTypes2["COLUMN_LINE"] = "column_line";
839
839
  DisplayTypes2["NETWORK_GRAPH"] = "network_graph";
840
+ DisplayTypes2["SANKEY"] = "sankey";
840
841
  return DisplayTypes2;
841
842
  })(DisplayTypes || {});
842
843
  var QueryErrorTypes = /* @__PURE__ */ ((QueryErrorTypes2) => {
@@ -1038,7 +1039,8 @@ var CHART_TYPES = [
1038
1039
  "column_line" /* COLUMN_LINE */,
1039
1040
  "histogram" /* HISTOGRAM */,
1040
1041
  "scatterplot" /* SCATTERPLOT */,
1041
- "network_graph" /* NETWORK_GRAPH */
1042
+ "network_graph" /* NETWORK_GRAPH */,
1043
+ "sankey" /* SANKEY */
1042
1044
  ];
1043
1045
  var CHARTS_WITHOUT_LEGENDS = [
1044
1046
  "pie" /* PIE */,
@@ -1046,16 +1048,18 @@ var CHARTS_WITHOUT_LEGENDS = [
1046
1048
  "bubble" /* BUBBLE */,
1047
1049
  "scatterplot" /* SCATTERPLOT */,
1048
1050
  "histogram" /* HISTOGRAM */,
1049
- "network_graph" /* NETWORK_GRAPH */
1051
+ "network_graph" /* NETWORK_GRAPH */,
1052
+ "sankey" /* SANKEY */
1050
1053
  ];
1051
1054
  var CHARTS_WITHOUT_AGGREGATED_DATA = [
1052
1055
  "histogram" /* HISTOGRAM */,
1053
1056
  "scatterplot" /* SCATTERPLOT */,
1054
- "network_graph" /* NETWORK_GRAPH */
1057
+ "network_graph" /* NETWORK_GRAPH */,
1058
+ "sankey" /* SANKEY */
1055
1059
  ];
1056
1060
  var DATE_ONLY_CHART_TYPES = ["line" /* LINE */, "stacked_line" /* STACKED_LINE */];
1057
1061
  var DOUBLE_AXIS_CHART_TYPES = ["column_line" /* COLUMN_LINE */];
1058
- var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */];
1062
+ var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */, "sankey" /* SANKEY */];
1059
1063
  var DEFAULT_CHART_CONFIG = {
1060
1064
  isScaled: false
1061
1065
  };
@@ -2161,18 +2165,33 @@ var getUniqueYearsForColumn = (data, columns, index) => {
2161
2165
  return uniqueYears;
2162
2166
  };
2163
2167
  var supportsNetworkGraph = (data, columns) => {
2164
- if (!data || data.length < 2) return false;
2165
- if (!columns || columns.length < 2) return false;
2168
+ var _a2, _b2;
2169
+ const logUnsupportedReason = (message) => {
2170
+ console.warn(`[supportsNetworkGraph] ${message}`);
2171
+ };
2172
+ if (!data || data.length < 2) {
2173
+ logUnsupportedReason(`Insufficient rows (${(_a2 = data == null ? void 0 : data.length) != null ? _a2 : 0}). Need at least 2 rows.`);
2174
+ return false;
2175
+ }
2176
+ if (!columns || columns.length < 2) {
2177
+ logUnsupportedReason(`Insufficient columns (${(_b2 = columns == null ? void 0 : columns.length) != null ? _b2 : 0}). Need at least 2 visible columns.`);
2178
+ return false;
2179
+ }
2166
2180
  const networkColumns = findNetworkColumns(columns);
2167
- if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1)
2181
+ if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1) {
2182
+ logUnsupportedReason("Unable to determine source/target columns from provided metadata.");
2168
2183
  return false;
2184
+ }
2169
2185
  const { sourceColumnIndex, targetColumnIndex } = networkColumns;
2170
2186
  const sourceValues = data.map((row) => row[sourceColumnIndex]).filter(Boolean);
2171
2187
  const targetValues = data.map((row) => row[targetColumnIndex]).filter(Boolean);
2172
2188
  const uniqueSources = new Set(sourceValues);
2173
2189
  const uniqueTargets = new Set(targetValues);
2174
2190
  const totalUniqueEntities = (/* @__PURE__ */ new Set([...uniqueSources, ...uniqueTargets])).size;
2175
- if (totalUniqueEntities < 1) return false;
2191
+ if (totalUniqueEntities < 2) {
2192
+ logUnsupportedReason(`Found only ${totalUniqueEntities} unique node(s). Need at least 2.`);
2193
+ return false;
2194
+ }
2176
2195
  const sourceCounts = {};
2177
2196
  const targetCounts = {};
2178
2197
  const relationshipPairs = /* @__PURE__ */ new Set();
@@ -2186,9 +2205,18 @@ var supportsNetworkGraph = (data, columns) => {
2186
2205
  }
2187
2206
  });
2188
2207
  const actualConnections = relationshipPairs.size;
2189
- if (actualConnections === 0) return false;
2208
+ if (actualConnections === 0) {
2209
+ logUnsupportedReason("No valid source\u2192target connections detected in dataset.");
2210
+ return false;
2211
+ }
2190
2212
  const MAX_UNIQUE_ENTITIES = 5e4;
2191
- return totalUniqueEntities <= MAX_UNIQUE_ENTITIES;
2213
+ if (totalUniqueEntities > MAX_UNIQUE_ENTITIES) {
2214
+ logUnsupportedReason(
2215
+ `Too many unique nodes (${totalUniqueEntities}). Limit is ${MAX_UNIQUE_ENTITIES} for performance reasons.`
2216
+ );
2217
+ return false;
2218
+ }
2219
+ return true;
2192
2220
  };
2193
2221
  var findNetworkColumns = (columns) => {
2194
2222
  if (!columns || columns.length < 2) {
@@ -2265,6 +2293,78 @@ var findNetworkColumns = (columns) => {
2265
2293
  }
2266
2294
  return { sourceColumnIndex, targetColumnIndex, weightColumnIndex };
2267
2295
  };
2296
+ var supportsSankey = (rows, columns) => {
2297
+ var _a2, _b2;
2298
+ try {
2299
+ const logUnsupportedReason = (message) => {
2300
+ console.warn(`[supportsSankey] ${message}`);
2301
+ };
2302
+ if (!(rows == null ? void 0 : rows.length) || !(columns == null ? void 0 : columns.length)) {
2303
+ logUnsupportedReason(
2304
+ `Missing required data. rows=${(_a2 = rows == null ? void 0 : rows.length) != null ? _a2 : 0}, columns=${(_b2 = columns == null ? void 0 : columns.length) != null ? _b2 : 0}. Need at least 1 row and 3 columns.`
2305
+ );
2306
+ return false;
2307
+ }
2308
+ const { sourceColumnIndex, targetColumnIndex, weightColumnIndex } = findNetworkColumns(columns);
2309
+ if (sourceColumnIndex === -1 || targetColumnIndex === -1 || weightColumnIndex === -1) {
2310
+ logUnsupportedReason("Unable to determine source, target, and weight columns required for Sankey.");
2311
+ return false;
2312
+ }
2313
+ const uniqueNodes = /* @__PURE__ */ new Set();
2314
+ const uniqueLinks = /* @__PURE__ */ new Set();
2315
+ let skippedRows = 0;
2316
+ const normalizeNodeValue = (value) => {
2317
+ if (value === void 0 || value === null) {
2318
+ return void 0;
2319
+ }
2320
+ const sanitized = `${value}`.trim();
2321
+ return sanitized.length ? sanitized : void 0;
2322
+ };
2323
+ const toFinitePositiveNumber = (value) => {
2324
+ if (typeof value === "number") {
2325
+ return Number.isFinite(value) ? value : NaN;
2326
+ }
2327
+ if (typeof value === "string") {
2328
+ const cleaned = value.replace(/[^0-9.-]/g, "");
2329
+ if (!cleaned.length) {
2330
+ return NaN;
2331
+ }
2332
+ const parsed = Number(cleaned);
2333
+ return Number.isFinite(parsed) ? parsed : NaN;
2334
+ }
2335
+ return NaN;
2336
+ };
2337
+ for (const row of rows) {
2338
+ if (!row) {
2339
+ continue;
2340
+ }
2341
+ const source = normalizeNodeValue(row[sourceColumnIndex]);
2342
+ const target = normalizeNodeValue(row[targetColumnIndex]);
2343
+ if (!source || !target || source === target) {
2344
+ skippedRows += 1;
2345
+ continue;
2346
+ }
2347
+ const weight = toFinitePositiveNumber(row[weightColumnIndex]);
2348
+ if (!Number.isFinite(weight) || weight <= 0) {
2349
+ skippedRows += 1;
2350
+ continue;
2351
+ }
2352
+ uniqueNodes.add(source);
2353
+ uniqueNodes.add(target);
2354
+ uniqueLinks.add(`${source}__${target}`);
2355
+ }
2356
+ if (!uniqueLinks.size || uniqueNodes.size < 2) {
2357
+ logUnsupportedReason(
2358
+ `Insufficient valid flows. uniqueNodes=${uniqueNodes.size}, uniqueLinks=${uniqueLinks.size}, skippedRows=${skippedRows}.`
2359
+ );
2360
+ return false;
2361
+ }
2362
+ return true;
2363
+ } catch (error) {
2364
+ console.error("[supportsSankey] Unexpected error determining support", error);
2365
+ return false;
2366
+ }
2367
+ };
2268
2368
  var getSupportedDisplayTypes = ({
2269
2369
  response,
2270
2370
  columns,
@@ -2353,6 +2453,9 @@ var getSupportedDisplayTypes = ({
2353
2453
  if (supportsNetworkGraph(rows, visibleColumns)) {
2354
2454
  supportedDisplayTypes.push("network_graph");
2355
2455
  }
2456
+ if (supportsSankey(rows, visibleColumns)) {
2457
+ supportedDisplayTypes.push("sankey");
2458
+ }
2356
2459
  return supportedDisplayTypes;
2357
2460
  } catch (error) {
2358
2461
  console.error(error);
@@ -10334,12 +10437,18 @@ var exportCSV = ({
10334
10437
  domain,
10335
10438
  apiKey,
10336
10439
  token,
10440
+ filters,
10441
+ tableFilters,
10337
10442
  csvProgressCallback
10338
10443
  } = {}) => {
10339
10444
  if (!token || !domain || !apiKey) {
10340
10445
  return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
10341
10446
  }
10342
10447
  const url = `${domain}/autoql/api/v1/query/${queryId}/export?key=${apiKey}`;
10448
+ const data = {
10449
+ session_filter_locks: filters,
10450
+ filters: tableFilters
10451
+ };
10343
10452
  const config = {
10344
10453
  headers: {
10345
10454
  Authorization: `Bearer ${token}`
@@ -10352,7 +10461,7 @@ var exportCSV = ({
10352
10461
  }
10353
10462
  }
10354
10463
  };
10355
- return axios.post(url, {}, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
10464
+ return axios.post(url, data, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
10356
10465
  };
10357
10466
  var runDrilldown = ({
10358
10467
  queryID,
@@ -13182,6 +13291,7 @@ export {
13182
13291
  supportsNetworkGraph,
13183
13292
  supportsPieChart,
13184
13293
  supportsRegularPivotTable,
13294
+ supportsSankey,
13185
13295
  svgPathD,
13186
13296
  svgToPng,
13187
13297
  titlelizeString,