@vizzly/dashboard 0.14.4-dev-638c4c213227d29bb6a665fc62b13368e8b8bc5b → 0.14.4-dev-ccfbdccebc45fb0361ebf39ecb0ab567ca7a1067
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/dashboard/src/types.d.ts +1 -0
- package/dist/dashboard.cjs.development.js +1027 -1055
- package/dist/dashboard.cjs.production.min.js +1 -1
- package/dist/dashboard.esm.js +1027 -1055
- package/dist/services/src/index.d.ts +3 -2
- package/dist/shared-logic/src/CustomView/types.d.ts +2 -5
- package/dist/shared-logic/src/DataSet/DataSet.d.ts +1 -3
- package/dist/shared-logic/src/Query/Query.d.ts +1 -15
- package/dist/shared-logic/src/Result/Result.d.ts +0 -3
- package/dist/shared-logic/src/api/queryEngine/getRunQueriesCallback.d.ts +1 -1
- package/package.json +2 -2
- package/dist/shared-logic/src/Query/validate.d.ts +0 -13
- package/dist/shared-logic/src/Result/ValidationLogic.d.ts +0 -7
|
@@ -10,10 +10,9 @@ var isEmpty$2 = _interopDefault(require('lodash/isEmpty'));
|
|
|
10
10
|
var _ = require('lodash');
|
|
11
11
|
var ___default = _interopDefault(_);
|
|
12
12
|
var semanticLayerPublic = require('@vizzly/semantic-layer-public');
|
|
13
|
-
var uuid = require('uuid');
|
|
14
13
|
var Joi = _interopDefault(require('@vizzly/joi'));
|
|
15
14
|
var moment = _interopDefault(require('moment-timezone'));
|
|
16
|
-
var
|
|
15
|
+
var uuid = require('uuid');
|
|
17
16
|
var react = require('@emotion/react');
|
|
18
17
|
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
19
18
|
var chroma = _interopDefault(require('chroma-js'));
|
|
@@ -73,6 +72,7 @@ var cx = _interopDefault(require('classnames'));
|
|
|
73
72
|
var VisibilitySensor = _interopDefault(require('react-visibility-sensor'));
|
|
74
73
|
var ExcelJS = _interopDefault(require('exceljs'));
|
|
75
74
|
var fileSaver = require('file-saver');
|
|
75
|
+
var sqlbuilderPublic = require('@vizzly/sqlbuilder-public');
|
|
76
76
|
var apiClient = require('@vizzly/api-client');
|
|
77
77
|
var throttle = _interopDefault(require('lodash/throttle'));
|
|
78
78
|
|
|
@@ -1089,6 +1089,34 @@ var checkForNullValue = function checkForNullValue(dataSetId, dimensions, timeDi
|
|
|
1089
1089
|
return textOverride ? textOverride(textOverrideKey ? textOverrideKey : 'no_value', NULL_REPLACEMENT) : undefined;
|
|
1090
1090
|
};
|
|
1091
1091
|
|
|
1092
|
+
var ValidationError = /*#__PURE__*/function (_Error) {
|
|
1093
|
+
function ValidationError(message) {
|
|
1094
|
+
var _this;
|
|
1095
|
+
_this = _Error.call(this, message) || this; // (1)
|
|
1096
|
+
_this.name = 'ValidationError'; // (2)
|
|
1097
|
+
return _this;
|
|
1098
|
+
}
|
|
1099
|
+
_inheritsLoose(ValidationError, _Error);
|
|
1100
|
+
return ValidationError;
|
|
1101
|
+
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
1102
|
+
|
|
1103
|
+
var FieldNotFoundInDataSet = /*#__PURE__*/function (_ValidationError) {
|
|
1104
|
+
function FieldNotFoundInDataSet(dataSet, missingFieldId) {
|
|
1105
|
+
var _this;
|
|
1106
|
+
_this = _ValidationError.call(this, "\n An expected field is missing from a dataSet.\n\n Missing '" + missingFieldId + "'. Got;\n " + JSON.stringify(dataSet) + "\n ") || this;
|
|
1107
|
+
_this.missingFieldId = void 0;
|
|
1108
|
+
_this.name = 'FieldNotFoundInDataSet';
|
|
1109
|
+
_this.missingFieldId = missingFieldId;
|
|
1110
|
+
return _this;
|
|
1111
|
+
}
|
|
1112
|
+
_inheritsLoose(FieldNotFoundInDataSet, _ValidationError);
|
|
1113
|
+
var _proto = FieldNotFoundInDataSet.prototype;
|
|
1114
|
+
_proto.getMissingFieldId = function getMissingFieldId() {
|
|
1115
|
+
return this.missingFieldId;
|
|
1116
|
+
};
|
|
1117
|
+
return FieldNotFoundInDataSet;
|
|
1118
|
+
}(ValidationError);
|
|
1119
|
+
|
|
1092
1120
|
var timeDimensionsConstants = semanticLayerPublic.QueryEngineConfig.Constants.timeDimensionsConstants;
|
|
1093
1121
|
|
|
1094
1122
|
// All the aggregates Vizzly supports somewhere...
|
|
@@ -1116,6 +1144,300 @@ var isSupportedTimeTruncFunction = function isSupportedTimeTruncFunction(support
|
|
|
1116
1144
|
return [].concat(Object.keys(supportedTimeFunctions), ['none']).includes(proposedFunction);
|
|
1117
1145
|
};
|
|
1118
1146
|
|
|
1147
|
+
var filterIsDate = function filterIsDate(filter) {
|
|
1148
|
+
var isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
1149
|
+
if (!isoDateRegex.test(filter.value)) {
|
|
1150
|
+
return false;
|
|
1151
|
+
}
|
|
1152
|
+
var date = new Date(filter.value);
|
|
1153
|
+
if (isNaN(date.getTime())) {
|
|
1154
|
+
return false;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
// Additional check to verify that the date parts match exactly
|
|
1158
|
+
var _filter$value$split$ = filter.value.split('T')[0].split('-').map(Number),
|
|
1159
|
+
year = _filter$value$split$[0],
|
|
1160
|
+
month = _filter$value$split$[1],
|
|
1161
|
+
day = _filter$value$split$[2];
|
|
1162
|
+
if (date.getUTCFullYear() !== year || date.getUTCMonth() + 1 !== month || date.getUTCDate() !== day) {
|
|
1163
|
+
return false;
|
|
1164
|
+
}
|
|
1165
|
+
return true;
|
|
1166
|
+
};
|
|
1167
|
+
|
|
1168
|
+
var _Joi$string, _Joi$string2;
|
|
1169
|
+
var defaultDurationOptions = function defaultDurationOptions(textOverride) {
|
|
1170
|
+
return {
|
|
1171
|
+
minutes: {
|
|
1172
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Minutes') : 'Minutes',
|
|
1173
|
+
formatter: function formatter(currentDate, value) {
|
|
1174
|
+
currentDate.setMinutes(currentDate.getMinutes() + value);
|
|
1175
|
+
}
|
|
1176
|
+
},
|
|
1177
|
+
hours: {
|
|
1178
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Hours') : 'Hours',
|
|
1179
|
+
formatter: function formatter(currentDate, value) {
|
|
1180
|
+
currentDate.setHours(currentDate.getHours() + value);
|
|
1181
|
+
}
|
|
1182
|
+
},
|
|
1183
|
+
days: {
|
|
1184
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Days') : 'Days',
|
|
1185
|
+
formatter: function formatter(currentDate, value) {
|
|
1186
|
+
currentDate.setDate(currentDate.getDate() + value);
|
|
1187
|
+
}
|
|
1188
|
+
},
|
|
1189
|
+
weeks: {
|
|
1190
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Weeks') : 'Weeks',
|
|
1191
|
+
formatter: function formatter(currentDate, value) {
|
|
1192
|
+
currentDate.setDate(currentDate.getDate() + value * 7); // 1 week = 7 days
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
months: {
|
|
1196
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Months') : 'Months',
|
|
1197
|
+
formatter: function formatter(currentDate, value) {
|
|
1198
|
+
currentDate.setMonth(currentDate.getMonth() + value);
|
|
1199
|
+
}
|
|
1200
|
+
},
|
|
1201
|
+
years: {
|
|
1202
|
+
description: textOverride ? textOverride('duration_option.minutes', 'Years') : 'Years',
|
|
1203
|
+
formatter: function formatter(currentDate, value) {
|
|
1204
|
+
currentDate.setFullYear(currentDate.getFullYear() + value);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
};
|
|
1208
|
+
};
|
|
1209
|
+
var defaultTimeframeOptions = function defaultTimeframeOptions(textOverride) {
|
|
1210
|
+
return {
|
|
1211
|
+
future: {
|
|
1212
|
+
description: textOverride ? textOverride('timeframe_option.minutes', 'Future') : 'Future'
|
|
1213
|
+
},
|
|
1214
|
+
past: {
|
|
1215
|
+
description: textOverride ? textOverride('timeframe_option.past', 'Past') : 'Past'
|
|
1216
|
+
}
|
|
1217
|
+
};
|
|
1218
|
+
};
|
|
1219
|
+
var getDurationKeys = function getDurationKeys() {
|
|
1220
|
+
var options = defaultDurationOptions();
|
|
1221
|
+
return Object.keys(options);
|
|
1222
|
+
};
|
|
1223
|
+
var getTimeframeKeys = function getTimeframeKeys() {
|
|
1224
|
+
var options = defaultTimeframeOptions();
|
|
1225
|
+
return Object.keys(options);
|
|
1226
|
+
};
|
|
1227
|
+
var relativeSchema = /*#__PURE__*/Joi.object({
|
|
1228
|
+
unit: /*#__PURE__*/(_Joi$string = Joi.string()).valid.apply(_Joi$string, getDurationKeys()).required(),
|
|
1229
|
+
value: /*#__PURE__*/Joi.number().integer().required(),
|
|
1230
|
+
timeFrame: /*#__PURE__*/(_Joi$string2 = Joi.string()).valid.apply(_Joi$string2, getTimeframeKeys()).required()
|
|
1231
|
+
});
|
|
1232
|
+
function isRelative(value) {
|
|
1233
|
+
return value && typeof value === 'object' && 'unit' in value && 'value' in value && 'timeFrame' in value;
|
|
1234
|
+
}
|
|
1235
|
+
function isRelativeDateDefined(value) {
|
|
1236
|
+
var _relativeSchema$valid = relativeSchema.validate(value),
|
|
1237
|
+
error = _relativeSchema$valid.error;
|
|
1238
|
+
return !error;
|
|
1239
|
+
}
|
|
1240
|
+
var init = function init() {
|
|
1241
|
+
return {
|
|
1242
|
+
value: null,
|
|
1243
|
+
unit: null,
|
|
1244
|
+
timeFrame: 'future'
|
|
1245
|
+
};
|
|
1246
|
+
};
|
|
1247
|
+
var calculateRelativeDate = function calculateRelativeDate(relativeDate, startDate) {
|
|
1248
|
+
var currentDate = startDate ? new Date(startDate) : new Date();
|
|
1249
|
+
if (!relativeDate.value || relativeDate.unit === null) {
|
|
1250
|
+
throw new Error("Unrecognized value: " + relativeDate.value);
|
|
1251
|
+
}
|
|
1252
|
+
var newDate = relativeDate.timeFrame === 'future' ? relativeDate.value : -relativeDate.value;
|
|
1253
|
+
defaultDurationOptions()[relativeDate.unit].formatter(currentDate, newDate);
|
|
1254
|
+
return currentDate;
|
|
1255
|
+
};
|
|
1256
|
+
var buildRelativeRange = function buildRelativeRange(relativeFilters, dataSet, appliesToFields) {
|
|
1257
|
+
if (!appliesToFields) {
|
|
1258
|
+
throw new Error('appliesToFields is required');
|
|
1259
|
+
}
|
|
1260
|
+
return relativeFilters.map(function (group) {
|
|
1261
|
+
var templates = group.map(function (condition) {
|
|
1262
|
+
return {
|
|
1263
|
+
op: condition.op,
|
|
1264
|
+
value: _extends({}, condition.value)
|
|
1265
|
+
};
|
|
1266
|
+
});
|
|
1267
|
+
var newGroup = [];
|
|
1268
|
+
appliesToFields.forEach(function (field) {
|
|
1269
|
+
if (field.dataSetId != dataSet.id) return;
|
|
1270
|
+
templates.forEach(function (template) {
|
|
1271
|
+
newGroup.push(_extends({}, template, {
|
|
1272
|
+
field: field.fieldId
|
|
1273
|
+
}));
|
|
1274
|
+
});
|
|
1275
|
+
});
|
|
1276
|
+
return newGroup;
|
|
1277
|
+
});
|
|
1278
|
+
};
|
|
1279
|
+
|
|
1280
|
+
var getUTCDate = function getUTCDate(date) {
|
|
1281
|
+
if (date !== null) {
|
|
1282
|
+
var momentDate = moment(new Date(date));
|
|
1283
|
+
return momentDate.tz(Intl.DateTimeFormat().resolvedOptions().timeZone)._d;
|
|
1284
|
+
}
|
|
1285
|
+
return date;
|
|
1286
|
+
};
|
|
1287
|
+
|
|
1288
|
+
var VariableNotFoundForVariables = /*#__PURE__*/function (_ValidationError) {
|
|
1289
|
+
function VariableNotFoundForVariables(variableList, missingVariableId) {
|
|
1290
|
+
var _this;
|
|
1291
|
+
_this = _ValidationError.call(this, "\n An expected variable is missing from the defined Variables.\n\n Missing '" + missingVariableId + "'. Got;\n " + JSON.stringify(variableList) + "\n ") || this;
|
|
1292
|
+
_this.missingVariableId = void 0;
|
|
1293
|
+
_this.name = 'VariableNotFoundForVariables';
|
|
1294
|
+
_this.missingVariableId = missingVariableId;
|
|
1295
|
+
return _this;
|
|
1296
|
+
}
|
|
1297
|
+
_inheritsLoose(VariableNotFoundForVariables, _ValidationError);
|
|
1298
|
+
var _proto = VariableNotFoundForVariables.prototype;
|
|
1299
|
+
_proto.getMissingFieldId = function getMissingFieldId() {
|
|
1300
|
+
return this.missingVariableId;
|
|
1301
|
+
};
|
|
1302
|
+
return VariableNotFoundForVariables;
|
|
1303
|
+
}(ValidationError);
|
|
1304
|
+
|
|
1305
|
+
var detect = function detect(input) {
|
|
1306
|
+
var regex = /\{\{\s*([^\s{}][^{}]*?)\s*\}\}/g;
|
|
1307
|
+
var matches = [];
|
|
1308
|
+
var match;
|
|
1309
|
+
while ((match = regex.exec(input)) !== null) {
|
|
1310
|
+
matches.push(match[1].trim());
|
|
1311
|
+
}
|
|
1312
|
+
return matches.length > 0 ? matches : undefined;
|
|
1313
|
+
};
|
|
1314
|
+
var build$1 = function build(variables) {
|
|
1315
|
+
if (variables) {
|
|
1316
|
+
var dashboardDefinedVariables = variables();
|
|
1317
|
+
logInfo('Detected variables', dashboardDefinedVariables);
|
|
1318
|
+
return dashboardDefinedVariables;
|
|
1319
|
+
}
|
|
1320
|
+
return {};
|
|
1321
|
+
};
|
|
1322
|
+
var findVariable = function findVariable(value, detect, variableList) {
|
|
1323
|
+
if (!variableList) return undefined;
|
|
1324
|
+
|
|
1325
|
+
// Use the detect function to check if the value is a variable
|
|
1326
|
+
var variables = detect(value);
|
|
1327
|
+
|
|
1328
|
+
// If no variables are detected, return early
|
|
1329
|
+
if (!variables || variables.length === 0) {
|
|
1330
|
+
return undefined; // Early return if the value is not a variable
|
|
1331
|
+
}
|
|
1332
|
+
var matchedVariables = [];
|
|
1333
|
+
|
|
1334
|
+
// Check for matching variables in the variable list
|
|
1335
|
+
for (var _iterator = _createForOfIteratorHelperLoose(variables), _step; !(_step = _iterator()).done;) {
|
|
1336
|
+
var variable = _step.value;
|
|
1337
|
+
var variableEntry = variableList[variable];
|
|
1338
|
+
if (variableEntry) {
|
|
1339
|
+
// If the variable is found but its value is undefined or empty, throw an error
|
|
1340
|
+
if (variableEntry.value === undefined || variableEntry.value === '') {
|
|
1341
|
+
throw new Error("Variable '" + variable + "' is defined in the list but has no value.");
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
// Add the variable to the matched variables list
|
|
1345
|
+
matchedVariables.push(variable);
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
// If no matches are found, throw an error
|
|
1350
|
+
if (matchedVariables.length === 0 && value) {
|
|
1351
|
+
throw new VariableNotFoundForVariables(variableList, value);
|
|
1352
|
+
}
|
|
1353
|
+
return matchedVariables.length > 0 ? matchedVariables : undefined;
|
|
1354
|
+
};
|
|
1355
|
+
var useValue = function useValue(value, variables) {
|
|
1356
|
+
if (typeof value === 'string') {
|
|
1357
|
+
var valueHasVariables = detect(value);
|
|
1358
|
+
if (valueHasVariables && variables) {
|
|
1359
|
+
for (var _iterator2 = _createForOfIteratorHelperLoose(valueHasVariables), _step2; !(_step2 = _iterator2()).done;) {
|
|
1360
|
+
var key = _step2.value;
|
|
1361
|
+
if (key in variables) {
|
|
1362
|
+
return extractValue(variables, key);
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
return value;
|
|
1368
|
+
};
|
|
1369
|
+
var validate = function validate(value, variables) {
|
|
1370
|
+
try {
|
|
1371
|
+
findVariable(value, detect, variables);
|
|
1372
|
+
return true;
|
|
1373
|
+
} catch (e) {
|
|
1374
|
+
return false;
|
|
1375
|
+
}
|
|
1376
|
+
};
|
|
1377
|
+
function extractValue(variables, key) {
|
|
1378
|
+
return variables[key].value;
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
var addAndFilters = function addAndFilters(filter, filterToAddToAll) {
|
|
1382
|
+
if (!filter || _.isEmpty(filter)) filter = [[]];
|
|
1383
|
+
return [].concat(filter).map(function (andFilter) {
|
|
1384
|
+
return [].concat(andFilter, filterToAddToAll);
|
|
1385
|
+
});
|
|
1386
|
+
};
|
|
1387
|
+
var filterAttributeToQueryFilter = function filterAttributeToQueryFilter(filters, queryEngineConfig, dataSet, params) {
|
|
1388
|
+
return filters.map(function (andFilters) {
|
|
1389
|
+
return [].concat(andFilters).flatMap(function (andFilter) {
|
|
1390
|
+
var _andFilter$function;
|
|
1391
|
+
// Stop unsupported time functions being used.
|
|
1392
|
+
if (andFilter["function"] && !isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, andFilter["function"])) {
|
|
1393
|
+
throw "Query engine does not support the query function " + andFilter["function"] + ".";
|
|
1394
|
+
}
|
|
1395
|
+
var dataSetField = findField(dataSet, andFilter.field);
|
|
1396
|
+
var field = {
|
|
1397
|
+
type: 'field',
|
|
1398
|
+
value: andFilter.field,
|
|
1399
|
+
"function": (_andFilter$function = andFilter["function"]) != null ? _andFilter$function : 'none'
|
|
1400
|
+
};
|
|
1401
|
+
if (isCustomField(dataSetField)) {
|
|
1402
|
+
var _andFilter$function2;
|
|
1403
|
+
field = toQueryMeasure({
|
|
1404
|
+
field: dataSetField.id,
|
|
1405
|
+
"function": (_andFilter$function2 = andFilter["function"]) != null ? _andFilter$function2 : 'none'
|
|
1406
|
+
}, dataSetField, queryEngineConfig, dataSet, false, params);
|
|
1407
|
+
}
|
|
1408
|
+
// If `array_contains` operation has multiple. Then split these out into individual
|
|
1409
|
+
// checks.
|
|
1410
|
+
if ((andFilter.op == 'array_contains' || andFilter.op == 'array_does_not_contain') && Array.isArray(andFilter.value)) {
|
|
1411
|
+
return [].concat(andFilter.value).map(function (value) {
|
|
1412
|
+
return {
|
|
1413
|
+
field: field,
|
|
1414
|
+
op: andFilter.op,
|
|
1415
|
+
value: value
|
|
1416
|
+
};
|
|
1417
|
+
});
|
|
1418
|
+
}
|
|
1419
|
+
var value = useValue(andFilter.value, params.variables);
|
|
1420
|
+
if (isRelativeDateDefined(andFilter.value)) {
|
|
1421
|
+
value = calculateRelativeDate(andFilter.value);
|
|
1422
|
+
}
|
|
1423
|
+
if (filterIsDate(andFilter)) {
|
|
1424
|
+
value = getUTCDate(andFilter.value);
|
|
1425
|
+
}
|
|
1426
|
+
return [{
|
|
1427
|
+
field: field,
|
|
1428
|
+
op: andFilter.op,
|
|
1429
|
+
value: value
|
|
1430
|
+
}];
|
|
1431
|
+
});
|
|
1432
|
+
});
|
|
1433
|
+
};
|
|
1434
|
+
var isAvailable = function isAvailable(filter) {
|
|
1435
|
+
return filter && _.isArray(filter) && _.isArray(filter[0]);
|
|
1436
|
+
};
|
|
1437
|
+
var isAdditionalFilter = function isAdditionalFilter(value) {
|
|
1438
|
+
return value && _.isArray(value) && _.isArray(value[0]) && 'field' in value[0][0] && 'op' in value[0][0] && 'value' in value[0][0];
|
|
1439
|
+
};
|
|
1440
|
+
|
|
1119
1441
|
var combineFilters = function combineFilters(array1, array2) {
|
|
1120
1442
|
var validArray1 = array1.length > 0 && array1[0] ? array1 : [[]];
|
|
1121
1443
|
var validArray2 = array2.length > 0 && array2[0] ? array2 : [[]];
|
|
@@ -1204,126 +1526,6 @@ var MULTI_SELECT_FILTER = 'multiSelectFilter';
|
|
|
1204
1526
|
var NUMERIC_FILTER = 'numericFilter';
|
|
1205
1527
|
var ADVANCED_FILTER = 'advancedFilter';
|
|
1206
1528
|
|
|
1207
|
-
var _Joi$string, _Joi$string2;
|
|
1208
|
-
var defaultDurationOptions = function defaultDurationOptions(textOverride) {
|
|
1209
|
-
return {
|
|
1210
|
-
minutes: {
|
|
1211
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Minutes') : 'Minutes',
|
|
1212
|
-
formatter: function formatter(currentDate, value) {
|
|
1213
|
-
currentDate.setMinutes(currentDate.getMinutes() + value);
|
|
1214
|
-
}
|
|
1215
|
-
},
|
|
1216
|
-
hours: {
|
|
1217
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Hours') : 'Hours',
|
|
1218
|
-
formatter: function formatter(currentDate, value) {
|
|
1219
|
-
currentDate.setHours(currentDate.getHours() + value);
|
|
1220
|
-
}
|
|
1221
|
-
},
|
|
1222
|
-
days: {
|
|
1223
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Days') : 'Days',
|
|
1224
|
-
formatter: function formatter(currentDate, value) {
|
|
1225
|
-
currentDate.setDate(currentDate.getDate() + value);
|
|
1226
|
-
}
|
|
1227
|
-
},
|
|
1228
|
-
weeks: {
|
|
1229
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Weeks') : 'Weeks',
|
|
1230
|
-
formatter: function formatter(currentDate, value) {
|
|
1231
|
-
currentDate.setDate(currentDate.getDate() + value * 7); // 1 week = 7 days
|
|
1232
|
-
}
|
|
1233
|
-
},
|
|
1234
|
-
months: {
|
|
1235
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Months') : 'Months',
|
|
1236
|
-
formatter: function formatter(currentDate, value) {
|
|
1237
|
-
currentDate.setMonth(currentDate.getMonth() + value);
|
|
1238
|
-
}
|
|
1239
|
-
},
|
|
1240
|
-
years: {
|
|
1241
|
-
description: textOverride ? textOverride('duration_option.minutes', 'Years') : 'Years',
|
|
1242
|
-
formatter: function formatter(currentDate, value) {
|
|
1243
|
-
currentDate.setFullYear(currentDate.getFullYear() + value);
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
|
-
};
|
|
1247
|
-
};
|
|
1248
|
-
var defaultTimeframeOptions = function defaultTimeframeOptions(textOverride) {
|
|
1249
|
-
return {
|
|
1250
|
-
future: {
|
|
1251
|
-
description: textOverride ? textOverride('timeframe_option.minutes', 'Future') : 'Future'
|
|
1252
|
-
},
|
|
1253
|
-
past: {
|
|
1254
|
-
description: textOverride ? textOverride('timeframe_option.past', 'Past') : 'Past'
|
|
1255
|
-
}
|
|
1256
|
-
};
|
|
1257
|
-
};
|
|
1258
|
-
var getDurationKeys = function getDurationKeys() {
|
|
1259
|
-
var options = defaultDurationOptions();
|
|
1260
|
-
return Object.keys(options);
|
|
1261
|
-
};
|
|
1262
|
-
var getTimeframeKeys = function getTimeframeKeys() {
|
|
1263
|
-
var options = defaultTimeframeOptions();
|
|
1264
|
-
return Object.keys(options);
|
|
1265
|
-
};
|
|
1266
|
-
var relativeSchema = /*#__PURE__*/Joi.object({
|
|
1267
|
-
unit: /*#__PURE__*/(_Joi$string = Joi.string()).valid.apply(_Joi$string, getDurationKeys()).required(),
|
|
1268
|
-
value: /*#__PURE__*/Joi.number().integer().required(),
|
|
1269
|
-
timeFrame: /*#__PURE__*/(_Joi$string2 = Joi.string()).valid.apply(_Joi$string2, getTimeframeKeys()).required()
|
|
1270
|
-
});
|
|
1271
|
-
function isRelative(value) {
|
|
1272
|
-
return value && typeof value === 'object' && 'unit' in value && 'value' in value && 'timeFrame' in value;
|
|
1273
|
-
}
|
|
1274
|
-
function isRelativeDateDefined(value) {
|
|
1275
|
-
var _relativeSchema$valid = relativeSchema.validate(value),
|
|
1276
|
-
error = _relativeSchema$valid.error;
|
|
1277
|
-
return !error;
|
|
1278
|
-
}
|
|
1279
|
-
var init = function init() {
|
|
1280
|
-
return {
|
|
1281
|
-
value: null,
|
|
1282
|
-
unit: null,
|
|
1283
|
-
timeFrame: 'future'
|
|
1284
|
-
};
|
|
1285
|
-
};
|
|
1286
|
-
var calculateRelativeDate = function calculateRelativeDate(relativeDate, startDate) {
|
|
1287
|
-
var currentDate = startDate ? new Date(startDate) : new Date();
|
|
1288
|
-
if (!relativeDate.value || relativeDate.unit === null) {
|
|
1289
|
-
throw new Error("Unrecognized value: " + relativeDate.value);
|
|
1290
|
-
}
|
|
1291
|
-
var newDate = relativeDate.timeFrame === 'future' ? relativeDate.value : -relativeDate.value;
|
|
1292
|
-
defaultDurationOptions()[relativeDate.unit].formatter(currentDate, newDate);
|
|
1293
|
-
return currentDate;
|
|
1294
|
-
};
|
|
1295
|
-
var buildRelativeRange = function buildRelativeRange(relativeFilters, dataSet, appliesToFields) {
|
|
1296
|
-
if (!appliesToFields) {
|
|
1297
|
-
throw new Error('appliesToFields is required');
|
|
1298
|
-
}
|
|
1299
|
-
return relativeFilters.map(function (group) {
|
|
1300
|
-
var templates = group.map(function (condition) {
|
|
1301
|
-
return {
|
|
1302
|
-
op: condition.op,
|
|
1303
|
-
value: _extends({}, condition.value)
|
|
1304
|
-
};
|
|
1305
|
-
});
|
|
1306
|
-
var newGroup = [];
|
|
1307
|
-
appliesToFields.forEach(function (field) {
|
|
1308
|
-
if (field.dataSetId != dataSet.id) return;
|
|
1309
|
-
templates.forEach(function (template) {
|
|
1310
|
-
newGroup.push(_extends({}, template, {
|
|
1311
|
-
field: field.fieldId
|
|
1312
|
-
}));
|
|
1313
|
-
});
|
|
1314
|
-
});
|
|
1315
|
-
return newGroup;
|
|
1316
|
-
});
|
|
1317
|
-
};
|
|
1318
|
-
|
|
1319
|
-
var getUTCDate = function getUTCDate(date) {
|
|
1320
|
-
if (date !== null) {
|
|
1321
|
-
var momentDate = moment(new Date(date));
|
|
1322
|
-
return momentDate.tz(Intl.DateTimeFormat().resolvedOptions().timeZone)._d;
|
|
1323
|
-
}
|
|
1324
|
-
return date;
|
|
1325
|
-
};
|
|
1326
|
-
|
|
1327
1529
|
var toQueryAttributesFilter = function toQueryAttributesFilter(dataSet, filter, customTimeRangeFuncs) {
|
|
1328
1530
|
return filter.appliesToFields.flatMap(function (field) {
|
|
1329
1531
|
var _filter$value, _filter$value2, _filter$value3;
|
|
@@ -1725,7 +1927,7 @@ var init$1 = function init(publicName, denominatorFieldId, denominatorAggregate,
|
|
|
1725
1927
|
}, queryEngineConfig)
|
|
1726
1928
|
};
|
|
1727
1929
|
};
|
|
1728
|
-
var build$
|
|
1930
|
+
var build$2 = function build(customField, queryEngineConfig, dataSet, _queryHasDimension, params) {
|
|
1729
1931
|
var _params$filterConfig$, _params$filterConfig, _customField$numerato, _customField$numerato2, _customField$denomina, _customField$denomina2;
|
|
1730
1932
|
var localAndDashboardFilters = fromFilterConfig(params.filterConfig, dataSet, params.timeRangeOptions);
|
|
1731
1933
|
var _buildPercentageFilte = buildPercentageFilters(addAndFilters((_params$filterConfig$ = params == null || (_params$filterConfig = params.filterConfig) == null ? void 0 : _params$filterConfig.advancedFilter) != null ? _params$filterConfig$ : [], localAndDashboardFilters), customField),
|
|
@@ -1823,110 +2025,6 @@ function buildPercentageFilters(filters, customField) {
|
|
|
1823
2025
|
};
|
|
1824
2026
|
}
|
|
1825
2027
|
|
|
1826
|
-
var ValidationError = /*#__PURE__*/function (_Error) {
|
|
1827
|
-
function ValidationError(message) {
|
|
1828
|
-
var _this;
|
|
1829
|
-
_this = _Error.call(this, message) || this; // (1)
|
|
1830
|
-
_this.name = 'ValidationError'; // (2)
|
|
1831
|
-
return _this;
|
|
1832
|
-
}
|
|
1833
|
-
_inheritsLoose(ValidationError, _Error);
|
|
1834
|
-
return ValidationError;
|
|
1835
|
-
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
1836
|
-
|
|
1837
|
-
var VariableNotFoundForVariables = /*#__PURE__*/function (_ValidationError) {
|
|
1838
|
-
function VariableNotFoundForVariables(variableList, missingVariableId) {
|
|
1839
|
-
var _this;
|
|
1840
|
-
_this = _ValidationError.call(this, "\n An expected variable is missing from the defined Variables.\n\n Missing '" + missingVariableId + "'. Got;\n " + JSON.stringify(variableList) + "\n ") || this;
|
|
1841
|
-
_this.missingVariableId = void 0;
|
|
1842
|
-
_this.name = 'VariableNotFoundForVariables';
|
|
1843
|
-
_this.missingVariableId = missingVariableId;
|
|
1844
|
-
return _this;
|
|
1845
|
-
}
|
|
1846
|
-
_inheritsLoose(VariableNotFoundForVariables, _ValidationError);
|
|
1847
|
-
var _proto = VariableNotFoundForVariables.prototype;
|
|
1848
|
-
_proto.getMissingFieldId = function getMissingFieldId() {
|
|
1849
|
-
return this.missingVariableId;
|
|
1850
|
-
};
|
|
1851
|
-
return VariableNotFoundForVariables;
|
|
1852
|
-
}(ValidationError);
|
|
1853
|
-
|
|
1854
|
-
var detect = function detect(input) {
|
|
1855
|
-
var regex = /\{\{\s*([^\s{}][^{}]*?)\s*\}\}/g;
|
|
1856
|
-
var matches = [];
|
|
1857
|
-
var match;
|
|
1858
|
-
while ((match = regex.exec(input)) !== null) {
|
|
1859
|
-
matches.push(match[1].trim());
|
|
1860
|
-
}
|
|
1861
|
-
return matches.length > 0 ? matches : undefined;
|
|
1862
|
-
};
|
|
1863
|
-
var build$2 = function build(variables) {
|
|
1864
|
-
if (variables) {
|
|
1865
|
-
var dashboardDefinedVariables = variables();
|
|
1866
|
-
logInfo('Detected variables', dashboardDefinedVariables);
|
|
1867
|
-
return dashboardDefinedVariables;
|
|
1868
|
-
}
|
|
1869
|
-
return {};
|
|
1870
|
-
};
|
|
1871
|
-
var findVariable = function findVariable(value, detect, variableList) {
|
|
1872
|
-
if (!variableList) return undefined;
|
|
1873
|
-
|
|
1874
|
-
// Use the detect function to check if the value is a variable
|
|
1875
|
-
var variables = detect(value);
|
|
1876
|
-
|
|
1877
|
-
// If no variables are detected, return early
|
|
1878
|
-
if (!variables || variables.length === 0) {
|
|
1879
|
-
return undefined; // Early return if the value is not a variable
|
|
1880
|
-
}
|
|
1881
|
-
var matchedVariables = [];
|
|
1882
|
-
|
|
1883
|
-
// Check for matching variables in the variable list
|
|
1884
|
-
for (var _iterator = _createForOfIteratorHelperLoose(variables), _step; !(_step = _iterator()).done;) {
|
|
1885
|
-
var variable = _step.value;
|
|
1886
|
-
var variableEntry = variableList[variable];
|
|
1887
|
-
if (variableEntry) {
|
|
1888
|
-
// If the variable is found but its value is undefined or empty, throw an error
|
|
1889
|
-
if (variableEntry.value === undefined || variableEntry.value === '') {
|
|
1890
|
-
throw new Error("Variable '" + variable + "' is defined in the list but has no value.");
|
|
1891
|
-
}
|
|
1892
|
-
|
|
1893
|
-
// Add the variable to the matched variables list
|
|
1894
|
-
matchedVariables.push(variable);
|
|
1895
|
-
}
|
|
1896
|
-
}
|
|
1897
|
-
|
|
1898
|
-
// If no matches are found, throw an error
|
|
1899
|
-
if (matchedVariables.length === 0 && value) {
|
|
1900
|
-
throw new VariableNotFoundForVariables(variableList, value);
|
|
1901
|
-
}
|
|
1902
|
-
return matchedVariables.length > 0 ? matchedVariables : undefined;
|
|
1903
|
-
};
|
|
1904
|
-
var useValue = function useValue(value, variables) {
|
|
1905
|
-
if (typeof value === 'string') {
|
|
1906
|
-
var valueHasVariables = detect(value);
|
|
1907
|
-
if (valueHasVariables && variables) {
|
|
1908
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(valueHasVariables), _step2; !(_step2 = _iterator2()).done;) {
|
|
1909
|
-
var key = _step2.value;
|
|
1910
|
-
if (key in variables) {
|
|
1911
|
-
return extractValue(variables, key);
|
|
1912
|
-
}
|
|
1913
|
-
}
|
|
1914
|
-
}
|
|
1915
|
-
}
|
|
1916
|
-
return value;
|
|
1917
|
-
};
|
|
1918
|
-
var validate = function validate(value, variables) {
|
|
1919
|
-
try {
|
|
1920
|
-
findVariable(value, detect, variables);
|
|
1921
|
-
return true;
|
|
1922
|
-
} catch (e) {
|
|
1923
|
-
return false;
|
|
1924
|
-
}
|
|
1925
|
-
};
|
|
1926
|
-
function extractValue(variables, key) {
|
|
1927
|
-
return variables[key].value;
|
|
1928
|
-
}
|
|
1929
|
-
|
|
1930
2028
|
var init$2 = function init(publicName, leftFieldId, operator, rightFieldId, queryEngineConfig) {
|
|
1931
2029
|
return {
|
|
1932
2030
|
id: generateId(),
|
|
@@ -2475,7 +2573,7 @@ var isCustomField = function isCustomField(field) {
|
|
|
2475
2573
|
*/
|
|
2476
2574
|
var toQueryMeasure = function toQueryMeasure(measureAttribute, customField, queryEngineConfig, dataSet, queryHasDimension, params) {
|
|
2477
2575
|
if (isPercentageField(customField)) {
|
|
2478
|
-
return build$
|
|
2576
|
+
return build$2(customField, queryEngineConfig, dataSet, queryHasDimension, params);
|
|
2479
2577
|
}
|
|
2480
2578
|
if (isRules(customField)) {
|
|
2481
2579
|
return build$6(measureAttribute, customField, queryEngineConfig, dataSet, params);
|
|
@@ -2542,790 +2640,6 @@ var upcast = function upcast(maybeOldCustomField) {
|
|
|
2542
2640
|
return maybeOldCustomField;
|
|
2543
2641
|
};
|
|
2544
2642
|
|
|
2545
|
-
var filterIsDate = function filterIsDate(filter) {
|
|
2546
|
-
var isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
2547
|
-
if (!isoDateRegex.test(filter.value)) {
|
|
2548
|
-
return false;
|
|
2549
|
-
}
|
|
2550
|
-
var date = new Date(filter.value);
|
|
2551
|
-
if (isNaN(date.getTime())) {
|
|
2552
|
-
return false;
|
|
2553
|
-
}
|
|
2554
|
-
|
|
2555
|
-
// Additional check to verify that the date parts match exactly
|
|
2556
|
-
var _filter$value$split$ = filter.value.split('T')[0].split('-').map(Number),
|
|
2557
|
-
year = _filter$value$split$[0],
|
|
2558
|
-
month = _filter$value$split$[1],
|
|
2559
|
-
day = _filter$value$split$[2];
|
|
2560
|
-
if (date.getUTCFullYear() !== year || date.getUTCMonth() + 1 !== month || date.getUTCDate() !== day) {
|
|
2561
|
-
return false;
|
|
2562
|
-
}
|
|
2563
|
-
return true;
|
|
2564
|
-
};
|
|
2565
|
-
|
|
2566
|
-
var addAndFilters = function addAndFilters(filter, filterToAddToAll) {
|
|
2567
|
-
if (!filter || _.isEmpty(filter)) filter = [[]];
|
|
2568
|
-
return [].concat(filter).map(function (andFilter) {
|
|
2569
|
-
return [].concat(andFilter, filterToAddToAll);
|
|
2570
|
-
});
|
|
2571
|
-
};
|
|
2572
|
-
var filterAttributeToQueryFilter = function filterAttributeToQueryFilter(filters, queryEngineConfig, dataSet, params) {
|
|
2573
|
-
return filters.map(function (andFilters) {
|
|
2574
|
-
return [].concat(andFilters).flatMap(function (andFilter) {
|
|
2575
|
-
var _andFilter$function;
|
|
2576
|
-
// Stop unsupported time functions being used.
|
|
2577
|
-
if (andFilter["function"] && !isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, andFilter["function"])) {
|
|
2578
|
-
throw "Query engine does not support the query function " + andFilter["function"] + ".";
|
|
2579
|
-
}
|
|
2580
|
-
var dataSetField = findField(dataSet, andFilter.field);
|
|
2581
|
-
var field = {
|
|
2582
|
-
type: 'field',
|
|
2583
|
-
value: andFilter.field,
|
|
2584
|
-
"function": (_andFilter$function = andFilter["function"]) != null ? _andFilter$function : 'none'
|
|
2585
|
-
};
|
|
2586
|
-
if (isCustomField(dataSetField)) {
|
|
2587
|
-
var _andFilter$function2;
|
|
2588
|
-
field = toQueryMeasure({
|
|
2589
|
-
field: dataSetField.id,
|
|
2590
|
-
"function": (_andFilter$function2 = andFilter["function"]) != null ? _andFilter$function2 : 'none'
|
|
2591
|
-
}, dataSetField, queryEngineConfig, dataSet, false, params);
|
|
2592
|
-
}
|
|
2593
|
-
// If `array_contains` operation has multiple. Then split these out into individual
|
|
2594
|
-
// checks.
|
|
2595
|
-
if ((andFilter.op == 'array_contains' || andFilter.op == 'array_does_not_contain') && Array.isArray(andFilter.value)) {
|
|
2596
|
-
return [].concat(andFilter.value).map(function (value) {
|
|
2597
|
-
return {
|
|
2598
|
-
field: field,
|
|
2599
|
-
op: andFilter.op,
|
|
2600
|
-
value: value
|
|
2601
|
-
};
|
|
2602
|
-
});
|
|
2603
|
-
}
|
|
2604
|
-
var value = useValue(andFilter.value, params.variables);
|
|
2605
|
-
if (isRelativeDateDefined(andFilter.value)) {
|
|
2606
|
-
value = calculateRelativeDate(andFilter.value);
|
|
2607
|
-
}
|
|
2608
|
-
if (filterIsDate(andFilter)) {
|
|
2609
|
-
value = getUTCDate(andFilter.value);
|
|
2610
|
-
}
|
|
2611
|
-
return [{
|
|
2612
|
-
field: field,
|
|
2613
|
-
op: andFilter.op,
|
|
2614
|
-
value: value
|
|
2615
|
-
}];
|
|
2616
|
-
});
|
|
2617
|
-
});
|
|
2618
|
-
};
|
|
2619
|
-
var isAvailable = function isAvailable(filter) {
|
|
2620
|
-
return filter && _.isArray(filter) && _.isArray(filter[0]);
|
|
2621
|
-
};
|
|
2622
|
-
var isAdditionalFilter = function isAdditionalFilter(value) {
|
|
2623
|
-
return value && _.isArray(value) && _.isArray(value[0]) && 'field' in value[0][0] && 'op' in value[0][0] && 'value' in value[0][0];
|
|
2624
|
-
};
|
|
2625
|
-
|
|
2626
|
-
var groupFilters = function groupFilters(dataSets) {
|
|
2627
|
-
var groups = {};
|
|
2628
|
-
dataSets.forEach(function (dataSet) {
|
|
2629
|
-
if (dataSet && dataSet.fields) {
|
|
2630
|
-
dataSet.fields.forEach(function (dataSetField) {
|
|
2631
|
-
(dataSetField.dashboardRequiredFilterGroups || []).forEach(function (filterGroup) {
|
|
2632
|
-
var key = filterGroup.publicName + " - " + dataSetField.dataType;
|
|
2633
|
-
groups[key] = [].concat(groups[key] || [], [{
|
|
2634
|
-
publicName: filterGroup.publicName,
|
|
2635
|
-
dataSetField: dataSetField,
|
|
2636
|
-
dataSetId: dataSet.id
|
|
2637
|
-
}]);
|
|
2638
|
-
});
|
|
2639
|
-
});
|
|
2640
|
-
} else {
|
|
2641
|
-
logError('DataSet is undefined or does not have fields', dataSet);
|
|
2642
|
-
}
|
|
2643
|
-
});
|
|
2644
|
-
return Object.values(groups);
|
|
2645
|
-
};
|
|
2646
|
-
var fromDashboardRequiredFilterGroups = function fromDashboardRequiredFilterGroups(dataSets) {
|
|
2647
|
-
var groupedFilters = groupFilters(dataSets);
|
|
2648
|
-
return groupedFilters.map(function (group) {
|
|
2649
|
-
return {
|
|
2650
|
-
type: group[0].dataSetField.dataType == 'date_time' ? DATE_FILTER : SINGLE_SELECT_FILTER,
|
|
2651
|
-
managedByConfiguration: true,
|
|
2652
|
-
requiresValue: true,
|
|
2653
|
-
title: group[0].publicName,
|
|
2654
|
-
appliesToFields: group.map(function (g) {
|
|
2655
|
-
return {
|
|
2656
|
-
dataSetId: g.dataSetId,
|
|
2657
|
-
fieldId: g.dataSetField.id
|
|
2658
|
-
};
|
|
2659
|
-
}),
|
|
2660
|
-
value: null
|
|
2661
|
-
};
|
|
2662
|
-
});
|
|
2663
|
-
};
|
|
2664
|
-
|
|
2665
|
-
var tagSchema = function tagSchema() {
|
|
2666
|
-
return Joi.object({
|
|
2667
|
-
key: Joi.string().required()
|
|
2668
|
-
});
|
|
2669
|
-
};
|
|
2670
|
-
var tagsSchema = function tagsSchema() {
|
|
2671
|
-
return Joi.array().items(tagSchema()).min(0);
|
|
2672
|
-
};
|
|
2673
|
-
|
|
2674
|
-
var measureSchema = function measureSchema(supportedAggregates, attributeSchemaOptions) {
|
|
2675
|
-
var buildMeasureJoi = function buildMeasureJoi(fieldJoi, functionJoi) {
|
|
2676
|
-
return Joi.object({
|
|
2677
|
-
field: fieldJoi.required(),
|
|
2678
|
-
"function": functionJoi.required().description('Which if any, aggregate function should be applied to the field?')
|
|
2679
|
-
});
|
|
2680
|
-
};
|
|
2681
|
-
|
|
2682
|
-
// Return an enum using the restriction fields
|
|
2683
|
-
if (attributeSchemaOptions != null && attributeSchemaOptions.restrictFields) {
|
|
2684
|
-
return Joi.alternatives.apply(Joi, attributeSchemaOptions.restrictFields.filter(function (f) {
|
|
2685
|
-
return f.canBeMeasure;
|
|
2686
|
-
}).map(function (restrictedField) {
|
|
2687
|
-
var _Joi$string;
|
|
2688
|
-
var supportedFunctionsForField = listValidFunctionsForDataType(restrictedField, supportedAggregates);
|
|
2689
|
-
return buildMeasureJoi(Joi.string().valid(restrictedField.id).description(restrictedField.publicName + ", " + (restrictedField.description || '') + "."), (_Joi$string = Joi.string()).valid.apply(_Joi$string, supportedFunctionsForField.concat(['none'])));
|
|
2690
|
-
}));
|
|
2691
|
-
}
|
|
2692
|
-
return buildMeasureJoi(Joi.string().description('The ID of the field from the data set to reference.'), Joi.valid.apply(Joi, Object.keys(supportedAggregates).concat(['none'])));
|
|
2693
|
-
};
|
|
2694
|
-
var orderSchema = function orderSchema(queryEngineConfig) {
|
|
2695
|
-
var _Joi$string2;
|
|
2696
|
-
return Joi.object({
|
|
2697
|
-
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2698
|
-
direction: Joi.string().valid('asc', 'desc').required().description('In which direction should the results be ordered?'),
|
|
2699
|
-
"function": (_Joi$string2 = Joi.string()).valid.apply(_Joi$string2, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])).description('Which if any, function should be applied to the field?')
|
|
2700
|
-
});
|
|
2701
|
-
};
|
|
2702
|
-
var timeDimensionSchema = function timeDimensionSchema(supportedTimeTruncFunctions) {
|
|
2703
|
-
return Joi.object({
|
|
2704
|
-
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2705
|
-
truncate: Joi.valid.apply(Joi, Object.keys(supportedTimeTruncFunctions).concat(['none'])),
|
|
2706
|
-
bucketFill: Joi["boolean"]()
|
|
2707
|
-
});
|
|
2708
|
-
};
|
|
2709
|
-
var dimensionSchema = function dimensionSchema(supportedTimeTruncFunctions, attributeSchemaOptions) {
|
|
2710
|
-
var buildDimensionJoi = function buildDimensionJoi(fieldJoi, isDate) {
|
|
2711
|
-
return Joi.object({
|
|
2712
|
-
field: fieldJoi.required(),
|
|
2713
|
-
pivot: Joi.string().valid('x', 'y').optional(),
|
|
2714
|
-
"function": isDate ? Joi.valid.apply(Joi, Object.keys(supportedTimeTruncFunctions).concat(['none'])).required() : Joi.valid('none').required()
|
|
2715
|
-
});
|
|
2716
|
-
};
|
|
2717
|
-
|
|
2718
|
-
// Return an enum using the restriction fields
|
|
2719
|
-
if (attributeSchemaOptions != null && attributeSchemaOptions.restrictFields) {
|
|
2720
|
-
return Joi.array().items(Joi.alternatives.apply(Joi, attributeSchemaOptions.restrictFields.filter(function (f) {
|
|
2721
|
-
return f.canBeDimension;
|
|
2722
|
-
}).map(function (restrictedField) {
|
|
2723
|
-
return buildDimensionJoi(Joi.string().valid(restrictedField.id).description(restrictedField.publicName + ", " + (restrictedField.description || '') + "."), restrictedField.dataType === 'date_time');
|
|
2724
|
-
}))).description('Fields to group the data by');
|
|
2725
|
-
}
|
|
2726
|
-
return Joi.array().items(buildDimensionJoi(Joi.string().description('The ID of the field from the data set to reference.'), true)).description('Fields to group the data by');
|
|
2727
|
-
};
|
|
2728
|
-
var filterSchema = function filterSchema(queryEngineConfig) {
|
|
2729
|
-
var _Joi$string3, _Joi$string4;
|
|
2730
|
-
return Joi.object({
|
|
2731
|
-
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2732
|
-
op: (_Joi$string3 = Joi.string()).valid.apply(_Joi$string3, Object.keys(queryEngineConfig.supportedOperators)).required(),
|
|
2733
|
-
value: Joi.alternatives()["try"](joiDate, Joi.string().allow(null), Joi.number(), Joi["boolean"](), Joi.array().items(Joi.string(), Joi.number(), Joi.allow(null)), relativeSchema).required(),
|
|
2734
|
-
"function": (_Joi$string4 = Joi.string()).valid.apply(_Joi$string4, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])).description('Which function should be applied to the field?')
|
|
2735
|
-
});
|
|
2736
|
-
};
|
|
2737
|
-
var queryAttributesFilter = function queryAttributesFilter(queryEngineConfig) {
|
|
2738
|
-
return Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig)));
|
|
2739
|
-
};
|
|
2740
|
-
var queryAttributesLimit = function queryAttributesLimit() {
|
|
2741
|
-
return Joi.number().description('Limit the number of results returned after the query has been ran.');
|
|
2742
|
-
};
|
|
2743
|
-
var baseAttributesSchema = function baseAttributesSchema(attributeSchemaOptions) {
|
|
2744
|
-
var _Joi$string5;
|
|
2745
|
-
var dataSetIdSchema = attributeSchemaOptions != null && attributeSchemaOptions.restrictDataSetIds ? (_Joi$string5 = Joi.string()).valid.apply(_Joi$string5, attributeSchemaOptions.restrictDataSetIds) : Joi.string();
|
|
2746
|
-
return {
|
|
2747
|
-
viewId: Joi.string().allow('').optional().description('__vizzly_hide_from_docs'),
|
|
2748
|
-
displayTitle: Joi.string().allow('').description('A title that explains what is being displayed.'),
|
|
2749
|
-
displaySubject: Joi.string().allow('').description('A chance to add a more detailed description of what is being shown.'),
|
|
2750
|
-
dataSetId: dataSetIdSchema.description('The ID of the data set that is being used by the view.'),
|
|
2751
|
-
protectedByOrganisation: Joi["boolean"]().optional().description('Has the view been created by your organisation, and therefore cannot be modified by your users?')
|
|
2752
|
-
};
|
|
2753
|
-
};
|
|
2754
|
-
var approxAxisLabelCountSchema = /*#__PURE__*/Joi.valid('auto', 2, 0).description('Determine how many axis labels should be shown on the axis');
|
|
2755
|
-
var querySchema = function querySchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2756
|
-
return {
|
|
2757
|
-
measure: Joi.array().items(measureSchema(queryEngineConfig.supportedAggregates, attributeSchemaOptions)).required().description('A list of metrics that are to be shown. For example the `count` of a specific field in your data set.'),
|
|
2758
|
-
dimension: dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions).required(),
|
|
2759
|
-
order: Joi.array().items(orderSchema(queryEngineConfig)),
|
|
2760
|
-
limit: queryAttributesLimit(),
|
|
2761
|
-
offset: Joi.number().min(0).description('Paginate results by using this property with limit.')
|
|
2762
|
-
};
|
|
2763
|
-
};
|
|
2764
|
-
var timeDimensionQuerySchema = function timeDimensionQuerySchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2765
|
-
return _extends({}, querySchema(queryEngineConfig, attributeSchemaOptions), {
|
|
2766
|
-
filter: Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))),
|
|
2767
|
-
timeDimension: Joi.alternatives(timeDimensionSchema(queryEngineConfig.supportedTimeTruncFunctions), Joi.valid(null)).required(),
|
|
2768
|
-
drilldown: Joi.alternatives(dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions).required(), Joi.string()),
|
|
2769
|
-
xAxisPrefix: Joi.string().allow('').description('Add a prefix to the X Axis'),
|
|
2770
|
-
yAxisPrefix: Joi.string().allow('').description('Add a prefix to the Y Axis'),
|
|
2771
|
-
xAxisPostfix: Joi.string().allow('').description('Add a postfix to the X Axis'),
|
|
2772
|
-
yAxisPostfix: Joi.string().allow('').description('Add a postfix to the Y Axis'),
|
|
2773
|
-
yAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)).description('ID of the formatting function to apply to the Y Axis values'),
|
|
2774
|
-
xAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)).description('ID of the formatting function to apply to the X Axis values'),
|
|
2775
|
-
approxYAxisLabelCount: approxAxisLabelCountSchema,
|
|
2776
|
-
approxXAxisLabelCount: approxAxisLabelCountSchema
|
|
2777
|
-
});
|
|
2778
|
-
};
|
|
2779
|
-
var lineCurveSchema = /*#__PURE__*/Joi.string().valid('natural', 'straight', 'step', 'stepBefore', 'stepAfter', 'dotted');
|
|
2780
|
-
var areaCurveSchema = /*#__PURE__*/Joi.string().valid('natural', 'straight', 'step');
|
|
2781
|
-
var protectedFieldsMeasure = function protectedFieldsMeasure(queryEngineConfig) {
|
|
2782
|
-
var _Joi$string6;
|
|
2783
|
-
return Joi.array().items(Joi.object({
|
|
2784
|
-
"function": (_Joi$string6 = Joi.string()).valid.apply(_Joi$string6, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])),
|
|
2785
|
-
field: Joi.string().required().description('The ID of the field from the data set to reference.')
|
|
2786
|
-
}));
|
|
2787
|
-
};
|
|
2788
|
-
var protectedFieldsDimension = function protectedFieldsDimension(queryEngineConfig) {
|
|
2789
|
-
var _Joi$string7;
|
|
2790
|
-
return Joi.array().items(Joi.object({
|
|
2791
|
-
"function": (_Joi$string7 = Joi.string()).valid.apply(_Joi$string7, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])),
|
|
2792
|
-
truncate: Joi.string(),
|
|
2793
|
-
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2794
|
-
bucketFill: Joi["boolean"]().optional(),
|
|
2795
|
-
pivot: Joi.string().valid('x', 'y').optional()
|
|
2796
|
-
}));
|
|
2797
|
-
};
|
|
2798
|
-
var parameterGroupSchema = function parameterGroupSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2799
|
-
return Joi.object().pattern(Joi.string(), Joi.alternatives()["try"](Joi.array().items(timeDimensionSchema(queryEngineConfig.supportedTimeTruncFunctions)).min(1), dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions))).unknown(true);
|
|
2800
|
-
};
|
|
2801
|
-
var parameterMeasureSchema = function parameterMeasureSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2802
|
-
return Joi.object().pattern(Joi.string(), Joi.array().items(measureSchema(queryEngineConfig.supportedAggregates, attributeSchemaOptions)).min(1)).unknown(true);
|
|
2803
|
-
};
|
|
2804
|
-
var parametersSchema = function parametersSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2805
|
-
return Joi.object({
|
|
2806
|
-
measure: parameterMeasureSchema(queryEngineConfig, attributeSchemaOptions),
|
|
2807
|
-
group: parameterGroupSchema(queryEngineConfig, attributeSchemaOptions)
|
|
2808
|
-
});
|
|
2809
|
-
};
|
|
2810
|
-
var goalLineValueSchema = /*#__PURE__*/Joi.alternatives()["try"]( /*#__PURE__*/Joi.number().required(), /*#__PURE__*/Joi.string().pattern(/^\{\{.*\}\}$/).required());
|
|
2811
|
-
var goalLineSchema = function goalLineSchema() {
|
|
2812
|
-
return Joi.object({
|
|
2813
|
-
color: Joi.string().required(),
|
|
2814
|
-
value: goalLineValueSchema,
|
|
2815
|
-
strokeWidth: Joi.number().required(),
|
|
2816
|
-
strokeStyle: Joi.string().valid('dashed', 'solid').required(),
|
|
2817
|
-
label: Joi["boolean"]().optional()
|
|
2818
|
-
});
|
|
2819
|
-
};
|
|
2820
|
-
var goalLinesSchema = function goalLinesSchema() {
|
|
2821
|
-
return Joi.array().items(goalLineSchema());
|
|
2822
|
-
};
|
|
2823
|
-
var headlineSchema = function headlineSchema() {
|
|
2824
|
-
return Joi.object({
|
|
2825
|
-
func: Joi.string().valid('mean', 'sum', 'current').allow(null).optional()
|
|
2826
|
-
});
|
|
2827
|
-
};
|
|
2828
|
-
var axisTitleSchema = function axisTitleSchema() {
|
|
2829
|
-
return Joi.object({
|
|
2830
|
-
x: Joi.string().allow(''),
|
|
2831
|
-
y: Joi.string().allow('')
|
|
2832
|
-
});
|
|
2833
|
-
};
|
|
2834
|
-
var sizingSchema = /*#__PURE__*/Joi.object().pattern( /*#__PURE__*/Joi.string(), /*#__PURE__*/Joi.object({
|
|
2835
|
-
width: /*#__PURE__*/Joi.number().min(0),
|
|
2836
|
-
height: /*#__PURE__*/Joi.number().min(0)
|
|
2837
|
-
}));
|
|
2838
|
-
var joiDate = /*#__PURE__*/Joi.custom(function (value, helpers) {
|
|
2839
|
-
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
2840
|
-
return value;
|
|
2841
|
-
}
|
|
2842
|
-
return helpers.error('any.invalid');
|
|
2843
|
-
}, 'Date object validation');
|
|
2844
|
-
|
|
2845
|
-
var fieldSchema = /*#__PURE__*/Joi.object({
|
|
2846
|
-
fieldId: /*#__PURE__*/Joi.string().required(),
|
|
2847
|
-
dataSetId: /*#__PURE__*/Joi.string().required()
|
|
2848
|
-
});
|
|
2849
|
-
var optionsFiltersSchema = function optionsFiltersSchema(queryEngineConfig) {
|
|
2850
|
-
return Joi.object().pattern(Joi.string(),
|
|
2851
|
-
// keys of the object
|
|
2852
|
-
Joi.array().items(filterSchema(queryEngineConfig)).optional());
|
|
2853
|
-
};
|
|
2854
|
-
var sharedAdditionalFilterSchema = function sharedAdditionalFilterSchema(queryEngineConfig) {
|
|
2855
|
-
return {
|
|
2856
|
-
title: Joi.string().allow(''),
|
|
2857
|
-
managedByConfiguration: Joi["boolean"]().optional(),
|
|
2858
|
-
requiresValue: Joi["boolean"]().optional(),
|
|
2859
|
-
optionsFilters: optionsFiltersSchema(queryEngineConfig).optional(),
|
|
2860
|
-
appliesToFields: Joi.array().items(fieldSchema).required(),
|
|
2861
|
-
optionsPulledFrom: Joi.array().items(fieldSchema).optional(),
|
|
2862
|
-
hidden: Joi["boolean"](),
|
|
2863
|
-
options: Joi.array().items(Joi.object({
|
|
2864
|
-
value: Joi.allow(Joi.number(), Joi.string()),
|
|
2865
|
-
label: Joi.string()
|
|
2866
|
-
})).optional()
|
|
2867
|
-
};
|
|
2868
|
-
};
|
|
2869
|
-
var selectFilterSchema = function selectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2870
|
-
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
2871
|
-
type: Joi.valid(SINGLE_SELECT_FILTER).required(),
|
|
2872
|
-
value: Joi.alternatives(Joi.string(), Joi.number(), Joi["boolean"](), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]))
|
|
2873
|
-
}));
|
|
2874
|
-
};
|
|
2875
|
-
var multiSelectFilterSchema = function multiSelectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2876
|
-
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
2877
|
-
type: Joi.valid(MULTI_SELECT_FILTER).required(),
|
|
2878
|
-
value: Joi.alternatives(Joi.array().items(Joi.string(), Joi.number()).single(), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))))
|
|
2879
|
-
}));
|
|
2880
|
-
};
|
|
2881
|
-
var advancedFilterSchema = function advancedFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2882
|
-
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
2883
|
-
type: Joi.valid(ADVANCED_FILTER).required(),
|
|
2884
|
-
value: advancedFilterValueSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
2885
|
-
}));
|
|
2886
|
-
};
|
|
2887
|
-
var advancedFilterValueSchema = function advancedFilterValueSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2888
|
-
return Joi.alternatives(Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))));
|
|
2889
|
-
};
|
|
2890
|
-
var dateTimeFilterSchema = function dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, type) {
|
|
2891
|
-
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
2892
|
-
type: Joi.valid(type).required(),
|
|
2893
|
-
inclusiveDate: Joi["boolean"]().optional(),
|
|
2894
|
-
allowTimeSelection: Joi["boolean"]().optional(),
|
|
2895
|
-
value: Joi.alternatives(Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.object({
|
|
2896
|
-
type: Joi.valid('fixedRange'),
|
|
2897
|
-
before: Joi.alternatives(Joi.date()).required(),
|
|
2898
|
-
after: Joi.alternatives(Joi.date()).required()
|
|
2899
|
-
}), Joi.object({
|
|
2900
|
-
type: Joi.valid('relative'),
|
|
2901
|
-
value: Joi.string()
|
|
2902
|
-
}), Joi.object({
|
|
2903
|
-
type: Joi.valid('relativeRange'),
|
|
2904
|
-
filters: Joi.array()
|
|
2905
|
-
}))
|
|
2906
|
-
}));
|
|
2907
|
-
};
|
|
2908
|
-
var numberFilterSchema = function numberFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2909
|
-
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
2910
|
-
type: Joi.valid(NUMERIC_FILTER).required(),
|
|
2911
|
-
value: Joi.alternatives(Joi.object({
|
|
2912
|
-
op: Joi.allow('=', '<', '>', '<=', '>='),
|
|
2913
|
-
value: Joi.number().allow(null, 0)
|
|
2914
|
-
}), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]))
|
|
2915
|
-
}));
|
|
2916
|
-
};
|
|
2917
|
-
var additionalFilterSchema = function additionalFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
2918
|
-
return Joi.alternatives().conditional('.type', {
|
|
2919
|
-
is: SINGLE_SELECT_FILTER,
|
|
2920
|
-
then: selectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
2921
|
-
}).conditional('.type', {
|
|
2922
|
-
is: DATE_FILTER,
|
|
2923
|
-
then: dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, DATE_FILTER)
|
|
2924
|
-
}).conditional('.type', {
|
|
2925
|
-
is: DATE_AND_TIME_FILTER,
|
|
2926
|
-
then: dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, DATE_AND_TIME_FILTER)
|
|
2927
|
-
}).conditional('.type', {
|
|
2928
|
-
is: MULTI_SELECT_FILTER,
|
|
2929
|
-
then: multiSelectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
2930
|
-
}).conditional('.type', {
|
|
2931
|
-
is: NUMERIC_FILTER,
|
|
2932
|
-
then: numberFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
2933
|
-
}).conditional('.type', {
|
|
2934
|
-
is: ADVANCED_FILTER,
|
|
2935
|
-
then: advancedFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
2936
|
-
});
|
|
2937
|
-
};
|
|
2938
|
-
function globalFilterSchema(queryEngineConfig) {
|
|
2939
|
-
return Joi.array().items(Joi.custom(function (value, helpers) {
|
|
2940
|
-
if (!queryEngineConfig) {
|
|
2941
|
-
return helpers.error('any.invalid');
|
|
2942
|
-
}
|
|
2943
|
-
var schema = additionalFilterSchema(queryEngineConfig, !!value.requiresValue);
|
|
2944
|
-
var _schema$validate = schema.validate(value),
|
|
2945
|
-
error = _schema$validate.error;
|
|
2946
|
-
if (error) {
|
|
2947
|
-
return helpers.error('any.invalid', {
|
|
2948
|
-
message: error.message
|
|
2949
|
-
});
|
|
2950
|
-
}
|
|
2951
|
-
return value;
|
|
2952
|
-
})).required();
|
|
2953
|
-
}
|
|
2954
|
-
|
|
2955
|
-
var Clause = /*#__PURE__*/function (Clause) {
|
|
2956
|
-
Clause["AND_WHERE"] = "andWhere";
|
|
2957
|
-
Clause["OR_WHERE"] = "orWhere";
|
|
2958
|
-
Clause["WHERE"] = "where";
|
|
2959
|
-
return Clause;
|
|
2960
|
-
}({});
|
|
2961
|
-
|
|
2962
|
-
// export type WhereClause = SqlAST.MultiWhereToken<any>;
|
|
2963
|
-
|
|
2964
|
-
var filterConfigToWhere = function filterConfigToWhere(dataSet, queryEngineConfig, params) {
|
|
2965
|
-
if (!params) return undefined;
|
|
2966
|
-
var filterConfig = params.filterConfig;
|
|
2967
|
-
if (!params || !filterConfig || (!filterConfig.globalFilters || filterConfig.globalFilters.length === 0) && (!filterConfig.localFilters || filterConfig.localFilters.length === 0) && (!filterConfig.advancedFilter || filterConfig.advancedFilter.length === 0 || filterConfig.advancedFilter.every(function (arr) {
|
|
2968
|
-
return arr.length === 0;
|
|
2969
|
-
}))) {
|
|
2970
|
-
return undefined;
|
|
2971
|
-
}
|
|
2972
|
-
var dash = buildAndWhere(dataSet, queryEngineConfig, params, filterConfig.globalFilters);
|
|
2973
|
-
var local = buildAndWhere(dataSet, queryEngineConfig, params, filterConfig.localFilters);
|
|
2974
|
-
var advancedFilters = buildFromFiltersArray(dataSet, queryEngineConfig, params, filterConfig.advancedFilter);
|
|
2975
|
-
var combinedAndWhere = [dash, local, advancedFilters].filter(Boolean).filter(function (whereClause) {
|
|
2976
|
-
return whereClause && whereClause.value.length > 0;
|
|
2977
|
-
});
|
|
2978
|
-
if (combinedAndWhere.length === 0) return undefined;
|
|
2979
|
-
return {
|
|
2980
|
-
type: Clause.AND_WHERE,
|
|
2981
|
-
value: combinedAndWhere
|
|
2982
|
-
};
|
|
2983
|
-
};
|
|
2984
|
-
var buildAndWhere = function buildAndWhere(dataSet, queryEngineConfig, params, additionalFilters) {
|
|
2985
|
-
if (!additionalFilters || additionalFilters.length === 0) return undefined;
|
|
2986
|
-
var whereClauses = [];
|
|
2987
|
-
additionalFilters.forEach(function (additionalFilter) {
|
|
2988
|
-
if (additionalFilter.type === DATE_AND_TIME_FILTER || additionalFilter.type === DATE_FILTER) {
|
|
2989
|
-
toRelativeQueryAttributesFilters(additionalFilter, dataSet).forEach(function (f) {
|
|
2990
|
-
whereClauses.push(buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params));
|
|
2991
|
-
});
|
|
2992
|
-
}
|
|
2993
|
-
if (Array.isArray(additionalFilter.value) && additionalFilter.value.length > 1 && isAdditionalFilter(additionalFilter.value)) {
|
|
2994
|
-
additionalFilter.appliesToFields.flatMap(function (field) {
|
|
2995
|
-
if (field.dataSetId != dataSet.id) return [];
|
|
2996
|
-
var convertedToWhere = buildFromFiltersArray(dataSet, queryEngineConfig, params, additionalFilter.value);
|
|
2997
|
-
if (convertedToWhere) {
|
|
2998
|
-
whereClauses.push(convertedToWhere);
|
|
2999
|
-
}
|
|
3000
|
-
return;
|
|
3001
|
-
});
|
|
3002
|
-
} else {
|
|
3003
|
-
toQueryAttributesFilter(dataSet, additionalFilter, params.timeRangeOptions).forEach(function (f) {
|
|
3004
|
-
whereClauses.push(buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params));
|
|
3005
|
-
});
|
|
3006
|
-
}
|
|
3007
|
-
});
|
|
3008
|
-
return {
|
|
3009
|
-
type: Clause.AND_WHERE,
|
|
3010
|
-
value: whereClauses
|
|
3011
|
-
};
|
|
3012
|
-
};
|
|
3013
|
-
var buildWhereFromSingleFilter = function buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params) {
|
|
3014
|
-
var field;
|
|
3015
|
-
if (f["function"] && !isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, f["function"])) {
|
|
3016
|
-
throw "Query engine does not support the query function " + f["function"] + ".";
|
|
3017
|
-
}
|
|
3018
|
-
var dataSetField = findField(dataSet, f.field);
|
|
3019
|
-
if (isCustomField(dataSetField)) {
|
|
3020
|
-
var _f$function;
|
|
3021
|
-
field = toQueryMeasure({
|
|
3022
|
-
field: dataSetField.id,
|
|
3023
|
-
"function": (_f$function = f["function"]) != null ? _f$function : 'none'
|
|
3024
|
-
}, dataSetField, queryEngineConfig, dataSet, false, params);
|
|
3025
|
-
} else {
|
|
3026
|
-
var _decodedField$functio;
|
|
3027
|
-
var decodedField = decodeId(f.field, queryEngineConfig);
|
|
3028
|
-
field = {
|
|
3029
|
-
type: 'field',
|
|
3030
|
-
value: decodedField.field,
|
|
3031
|
-
"function": (_decodedField$functio = decodedField["function"]) != null ? _decodedField$functio : 'none'
|
|
3032
|
-
};
|
|
3033
|
-
}
|
|
3034
|
-
if ((f.op == 'array_contains' || f.op == 'array_does_not_contain') && Array.isArray(f.value)) {
|
|
3035
|
-
return arrayContainsFilters(f, dataSet, queryEngineConfig, params);
|
|
3036
|
-
}
|
|
3037
|
-
var value = useValue(f.value, params.variables);
|
|
3038
|
-
if (isRelativeDateDefined(f.value)) {
|
|
3039
|
-
value = calculateRelativeDate(f.value);
|
|
3040
|
-
}
|
|
3041
|
-
if (filterIsDate(f)) {
|
|
3042
|
-
value = getUTCDate(f.value);
|
|
3043
|
-
}
|
|
3044
|
-
return {
|
|
3045
|
-
type: Clause.WHERE,
|
|
3046
|
-
value: {
|
|
3047
|
-
op: f.op,
|
|
3048
|
-
value: value,
|
|
3049
|
-
field: field
|
|
3050
|
-
}
|
|
3051
|
-
};
|
|
3052
|
-
};
|
|
3053
|
-
var buildFromFiltersArray = function buildFromFiltersArray(dataSet, queryEngineConfig, params, filters) {
|
|
3054
|
-
if (!filters || filters.length === 0 || filters.every(function (arr) {
|
|
3055
|
-
return arr.length === 0;
|
|
3056
|
-
})) {
|
|
3057
|
-
return undefined;
|
|
3058
|
-
}
|
|
3059
|
-
if (filters.length === 1) return buildFromFilters(filters[0], dataSet, queryEngineConfig, params);
|
|
3060
|
-
return {
|
|
3061
|
-
type: Clause.OR_WHERE,
|
|
3062
|
-
value: filters.map(function (filter) {
|
|
3063
|
-
return buildFromFilters(filter, dataSet, queryEngineConfig, params);
|
|
3064
|
-
})
|
|
3065
|
-
};
|
|
3066
|
-
};
|
|
3067
|
-
var buildFromFilters = function buildFromFilters(filter, dataSet, queryEngineConfig, params) {
|
|
3068
|
-
return {
|
|
3069
|
-
type: Clause.AND_WHERE,
|
|
3070
|
-
value: filter.map(function (filter) {
|
|
3071
|
-
if ((filter.op == 'array_contains' || filter.op == 'array_does_not_contain') && Array.isArray(filter.value)) {
|
|
3072
|
-
return arrayContainsFilters(filter, dataSet, queryEngineConfig, params);
|
|
3073
|
-
}
|
|
3074
|
-
return buildWhereFromSingleFilter(dataSet, filter, queryEngineConfig, params);
|
|
3075
|
-
})
|
|
3076
|
-
};
|
|
3077
|
-
};
|
|
3078
|
-
var arrayContainsFilters = function arrayContainsFilters(filter, dataSet, queryEngineConfig, params) {
|
|
3079
|
-
return {
|
|
3080
|
-
type: Clause.AND_WHERE,
|
|
3081
|
-
value: [].concat(filter.value).map(function (value) {
|
|
3082
|
-
return buildWhereFromSingleFilter(dataSet, _extends({}, filter, {
|
|
3083
|
-
value: value
|
|
3084
|
-
}), queryEngineConfig, params);
|
|
3085
|
-
})
|
|
3086
|
-
};
|
|
3087
|
-
};
|
|
3088
|
-
|
|
3089
|
-
var addMeasure = function addMeasure(current, toAdd) {
|
|
3090
|
-
return [[].concat(current, [toAdd]), current.length];
|
|
3091
|
-
};
|
|
3092
|
-
var buildFromQueryAttributes = function buildFromQueryAttributes(dataSet, measureAttr, orderAttr, dimensionAttr, timeDimensionAttr, limitAttr, offsetAttr, queryEngineConfig, params, prebuiltFilters) {
|
|
3093
|
-
var measureDescription = [];
|
|
3094
|
-
var measure = [];
|
|
3095
|
-
var group = [];
|
|
3096
|
-
var order = [];
|
|
3097
|
-
var filters = buildFilters(dataSet, queryEngineConfig, params, prebuiltFilters);
|
|
3098
|
-
if (timeDimensionAttr) {
|
|
3099
|
-
// Add the measure for the time field.
|
|
3100
|
-
var addedAt = undefined;
|
|
3101
|
-
|
|
3102
|
-
// Stop unsupported time trunc functions being used.
|
|
3103
|
-
if (!isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, timeDimensionAttr.truncate)) {
|
|
3104
|
-
throw "Query engine does not support the time trunc function " + timeDimensionAttr.truncate + ".";
|
|
3105
|
-
}
|
|
3106
|
-
var _addMeasure = addMeasure(measure, {
|
|
3107
|
-
type: 'field',
|
|
3108
|
-
value: timeDimensionAttr.field,
|
|
3109
|
-
"function": timeDimensionAttr.truncate
|
|
3110
|
-
});
|
|
3111
|
-
measure = _addMeasure[0];
|
|
3112
|
-
addedAt = _addMeasure[1];
|
|
3113
|
-
measureDescription = [].concat(measureDescription, [{
|
|
3114
|
-
functionId: timeDimensionAttr.truncate,
|
|
3115
|
-
field: findField(dataSet, timeDimensionAttr.field)
|
|
3116
|
-
}]);
|
|
3117
|
-
group = [].concat(group, [{
|
|
3118
|
-
index: addedAt
|
|
3119
|
-
}]);
|
|
3120
|
-
}
|
|
3121
|
-
dimensionAttr.forEach(function (dimension) {
|
|
3122
|
-
// Add the measure for the time field.
|
|
3123
|
-
var addedAt = undefined;
|
|
3124
|
-
var _addMeasure2 = addMeasure(measure, {
|
|
3125
|
-
type: 'field',
|
|
3126
|
-
value: dimension == null ? void 0 : dimension.field,
|
|
3127
|
-
"function": dimension["function"]
|
|
3128
|
-
});
|
|
3129
|
-
measure = _addMeasure2[0];
|
|
3130
|
-
addedAt = _addMeasure2[1];
|
|
3131
|
-
measureDescription = [].concat(measureDescription, [{
|
|
3132
|
-
functionId: dimension["function"],
|
|
3133
|
-
field: findField(dataSet, dimension.field)
|
|
3134
|
-
}]);
|
|
3135
|
-
group = [].concat(group, [{
|
|
3136
|
-
index: addedAt
|
|
3137
|
-
}]);
|
|
3138
|
-
});
|
|
3139
|
-
measureAttr.forEach(function (individualMeasure) {
|
|
3140
|
-
// Stop unsupported aggregate functions being used.
|
|
3141
|
-
if (!isSupportedAggregateFunction(queryEngineConfig.supportedAggregates, individualMeasure["function"])) {
|
|
3142
|
-
throw "Query engine does not support the query function " + individualMeasure["function"] + ".";
|
|
3143
|
-
}
|
|
3144
|
-
var _addMeasure3 = addMeasure(measure, {
|
|
3145
|
-
type: 'field',
|
|
3146
|
-
value: individualMeasure.field,
|
|
3147
|
-
"function": individualMeasure["function"]
|
|
3148
|
-
});
|
|
3149
|
-
measure = _addMeasure3[0];
|
|
3150
|
-
measureDescription = [].concat(measureDescription, [{
|
|
3151
|
-
functionId: individualMeasure["function"],
|
|
3152
|
-
field: findField(dataSet, individualMeasure.field)
|
|
3153
|
-
}]);
|
|
3154
|
-
});
|
|
3155
|
-
orderAttr.forEach(function (apiQueryOrderItem) {
|
|
3156
|
-
var index = measure.findIndex(function (individualMeasure) {
|
|
3157
|
-
if (individualMeasure.type == 'field') {
|
|
3158
|
-
var sameFunction = individualMeasure["function"] == apiQueryOrderItem["function"];
|
|
3159
|
-
// const isTimeFunc = Object.keys(queryEngineConfig.supportedTimeTruncFunctions).includes(
|
|
3160
|
-
// individualMeasure.function
|
|
3161
|
-
// );
|
|
3162
|
-
var sameField = individualMeasure.value == apiQueryOrderItem.field;
|
|
3163
|
-
return sameField && sameFunction;
|
|
3164
|
-
|
|
3165
|
-
// return found;
|
|
3166
|
-
}
|
|
3167
|
-
return false;
|
|
3168
|
-
});
|
|
3169
|
-
if (index >= 0) {
|
|
3170
|
-
order = [].concat(order, [{
|
|
3171
|
-
index: index,
|
|
3172
|
-
direction: apiQueryOrderItem.direction
|
|
3173
|
-
}]);
|
|
3174
|
-
}
|
|
3175
|
-
});
|
|
3176
|
-
measure = measure.map(function (measure) {
|
|
3177
|
-
if (measure.type == 'field' && typeof measure.value == 'string') {
|
|
3178
|
-
var dataSetField = findField(dataSet, measure.value);
|
|
3179
|
-
if (isCustomField(dataSetField)) {
|
|
3180
|
-
var customMeasure = toQueryMeasure({
|
|
3181
|
-
"function": measure["function"],
|
|
3182
|
-
field: measure.value
|
|
3183
|
-
}, dataSetField, queryEngineConfig, dataSet, hasDimensions({
|
|
3184
|
-
group: group
|
|
3185
|
-
}), params);
|
|
3186
|
-
return customMeasure;
|
|
3187
|
-
}
|
|
3188
|
-
}
|
|
3189
|
-
return measure;
|
|
3190
|
-
});
|
|
3191
|
-
return {
|
|
3192
|
-
query: {
|
|
3193
|
-
type: 'query',
|
|
3194
|
-
dataSetId: dataSet.id,
|
|
3195
|
-
measure: measure,
|
|
3196
|
-
group: group,
|
|
3197
|
-
// TODO: Fix this type
|
|
3198
|
-
filter: filters,
|
|
3199
|
-
order: order,
|
|
3200
|
-
limit: limitAttr,
|
|
3201
|
-
offset: offsetAttr
|
|
3202
|
-
},
|
|
3203
|
-
measureDescription: measureDescription
|
|
3204
|
-
};
|
|
3205
|
-
};
|
|
3206
|
-
var buildFilters = function buildFilters(dataSet, queryEngineConfig, params, prebuiltFilters) {
|
|
3207
|
-
if (prebuiltFilters && prebuiltFilters.length > 0) {
|
|
3208
|
-
var filter = [];
|
|
3209
|
-
prebuiltFilters.forEach(function (andFilters) {
|
|
3210
|
-
var newAndFilters = filterAttributeToQueryFilter([andFilters], queryEngineConfig, dataSet, params);
|
|
3211
|
-
filter = [].concat(filter, [newAndFilters[0]]);
|
|
3212
|
-
});
|
|
3213
|
-
return filter;
|
|
3214
|
-
}
|
|
3215
|
-
var whereClause = filterConfigToWhere(dataSet, queryEngineConfig, params);
|
|
3216
|
-
if (whereClause) return whereClause;
|
|
3217
|
-
return [];
|
|
3218
|
-
};
|
|
3219
|
-
|
|
3220
|
-
var build$a = buildFromQueryAttributes;
|
|
3221
|
-
var hasDimensions = function hasDimensions(query) {
|
|
3222
|
-
return query.group.length > 0;
|
|
3223
|
-
};
|
|
3224
|
-
var buildPreAggregatedPreparedQuery = function buildPreAggregatedPreparedQuery(query, dataSet) {
|
|
3225
|
-
return {
|
|
3226
|
-
query: query,
|
|
3227
|
-
resultFields: dataSet.fields.map(function (field) {
|
|
3228
|
-
return {
|
|
3229
|
-
id: field.id,
|
|
3230
|
-
publicName: field.publicName,
|
|
3231
|
-
dataType: field.dataType,
|
|
3232
|
-
fieldId: field.id,
|
|
3233
|
-
"function": 'none',
|
|
3234
|
-
outputDataType: field.dataType
|
|
3235
|
-
};
|
|
3236
|
-
})
|
|
3237
|
-
};
|
|
3238
|
-
};
|
|
3239
|
-
var buildUniqueArrayValuesPreparedQuery = function buildUniqueArrayValuesPreparedQuery(dataSetId, dataSetField, optionsFilters) {
|
|
3240
|
-
return {
|
|
3241
|
-
query: {
|
|
3242
|
-
type: 'preparedQuery',
|
|
3243
|
-
preparedQueryType: 'uniqueArrayValues',
|
|
3244
|
-
dataSetId: dataSetId,
|
|
3245
|
-
fieldId: dataSetField.id,
|
|
3246
|
-
filter: optionsFilters || []
|
|
3247
|
-
},
|
|
3248
|
-
resultFields: [{
|
|
3249
|
-
id: dataSetField.id,
|
|
3250
|
-
publicName: dataSetField.publicName,
|
|
3251
|
-
dataType: dataSetField.dataType,
|
|
3252
|
-
fieldId: dataSetField.id,
|
|
3253
|
-
"function": 'none',
|
|
3254
|
-
outputDataType: 'string'
|
|
3255
|
-
}]
|
|
3256
|
-
};
|
|
3257
|
-
};
|
|
3258
|
-
var buildFilterQuery = function buildFilterQuery(dataSet, fieldId, optionsFilters, optionsOrders) {
|
|
3259
|
-
var measure = [{
|
|
3260
|
-
field: fieldId,
|
|
3261
|
-
"function": 'count'
|
|
3262
|
-
}];
|
|
3263
|
-
var order = optionsOrders != null ? optionsOrders : [];
|
|
3264
|
-
var filter = optionsFilters ? [optionsFilters] : [];
|
|
3265
|
-
var dimension = [{
|
|
3266
|
-
field: fieldId,
|
|
3267
|
-
"function": 'none'
|
|
3268
|
-
}];
|
|
3269
|
-
var timeDimension = null;
|
|
3270
|
-
var limit = 5000;
|
|
3271
|
-
return {
|
|
3272
|
-
dataSetId: dataSet.id,
|
|
3273
|
-
measure: measure,
|
|
3274
|
-
order: order,
|
|
3275
|
-
filter: filter,
|
|
3276
|
-
dimension: dimension,
|
|
3277
|
-
timeDimension: timeDimension,
|
|
3278
|
-
limit: limit,
|
|
3279
|
-
offset: 0
|
|
3280
|
-
};
|
|
3281
|
-
};
|
|
3282
|
-
var supportsFeature = function supportsFeature(queryEngineConfig, feature) {
|
|
3283
|
-
return queryEngineConfig.supportedFeatures.includes(feature);
|
|
3284
|
-
};
|
|
3285
|
-
var toDataSetDashboardFilters = function toDataSetDashboardFilters(dataSets, additionalFilters, dateFilterOptions) {
|
|
3286
|
-
var dashboardFilters = {};
|
|
3287
|
-
dataSets.forEach(function (dataSet) {
|
|
3288
|
-
var filtered = additionalFilters.filter(function (filter) {
|
|
3289
|
-
return filter.appliesToFields.find(function (field) {
|
|
3290
|
-
return field.dataSetId === dataSet.id;
|
|
3291
|
-
});
|
|
3292
|
-
}).map(function (filter) {
|
|
3293
|
-
return toQueryAttributesFilter(dataSet, filter, dateFilterOptions);
|
|
3294
|
-
});
|
|
3295
|
-
dashboardFilters[dataSet.id] = filtered;
|
|
3296
|
-
});
|
|
3297
|
-
return dashboardFilters;
|
|
3298
|
-
};
|
|
3299
|
-
function addGlobalFiltersToQueries(queries, dashboardFilters) {
|
|
3300
|
-
var enhancedQueries = queries;
|
|
3301
|
-
if (dashboardFilters) {
|
|
3302
|
-
enhancedQueries.map(function (query) {
|
|
3303
|
-
var flattenedFilters = dashboardFilters[query.dataSetId].flat();
|
|
3304
|
-
if (flattenedFilters.length === 0) return;
|
|
3305
|
-
query.filter.push(flattenedFilters);
|
|
3306
|
-
return;
|
|
3307
|
-
});
|
|
3308
|
-
}
|
|
3309
|
-
return enhancedQueries;
|
|
3310
|
-
}
|
|
3311
|
-
|
|
3312
|
-
var FieldNotFoundInDataSet = /*#__PURE__*/function (_ValidationError) {
|
|
3313
|
-
function FieldNotFoundInDataSet(dataSet, missingFieldId) {
|
|
3314
|
-
var _this;
|
|
3315
|
-
_this = _ValidationError.call(this, "\n An expected field is missing from a dataSet.\n\n Missing '" + missingFieldId + "'. Got;\n " + JSON.stringify(dataSet) + "\n ") || this;
|
|
3316
|
-
_this.missingFieldId = void 0;
|
|
3317
|
-
_this.name = 'FieldNotFoundInDataSet';
|
|
3318
|
-
_this.missingFieldId = missingFieldId;
|
|
3319
|
-
return _this;
|
|
3320
|
-
}
|
|
3321
|
-
_inheritsLoose(FieldNotFoundInDataSet, _ValidationError);
|
|
3322
|
-
var _proto = FieldNotFoundInDataSet.prototype;
|
|
3323
|
-
_proto.getMissingFieldId = function getMissingFieldId() {
|
|
3324
|
-
return this.missingFieldId;
|
|
3325
|
-
};
|
|
3326
|
-
return FieldNotFoundInDataSet;
|
|
3327
|
-
}(ValidationError);
|
|
3328
|
-
|
|
3329
2643
|
var _doMerge = function doMerge(a, b) {
|
|
3330
2644
|
return _.mergeWith({}, a, b, function (objValue, srcValue) {
|
|
3331
2645
|
if (_.isArray(srcValue)) return srcValue;
|
|
@@ -3502,6 +2816,186 @@ var setAttributes = function setAttributes(attributes, partialAttributes, schema
|
|
|
3502
2816
|
return validAttributes;
|
|
3503
2817
|
};
|
|
3504
2818
|
|
|
2819
|
+
var tagSchema = function tagSchema() {
|
|
2820
|
+
return Joi.object({
|
|
2821
|
+
key: Joi.string().required()
|
|
2822
|
+
});
|
|
2823
|
+
};
|
|
2824
|
+
var tagsSchema = function tagsSchema() {
|
|
2825
|
+
return Joi.array().items(tagSchema()).min(0);
|
|
2826
|
+
};
|
|
2827
|
+
|
|
2828
|
+
var measureSchema = function measureSchema(supportedAggregates, attributeSchemaOptions) {
|
|
2829
|
+
var buildMeasureJoi = function buildMeasureJoi(fieldJoi, functionJoi) {
|
|
2830
|
+
return Joi.object({
|
|
2831
|
+
field: fieldJoi.required(),
|
|
2832
|
+
"function": functionJoi.required().description('Which if any, aggregate function should be applied to the field?')
|
|
2833
|
+
});
|
|
2834
|
+
};
|
|
2835
|
+
|
|
2836
|
+
// Return an enum using the restriction fields
|
|
2837
|
+
if (attributeSchemaOptions != null && attributeSchemaOptions.restrictFields) {
|
|
2838
|
+
return Joi.alternatives.apply(Joi, attributeSchemaOptions.restrictFields.filter(function (f) {
|
|
2839
|
+
return f.canBeMeasure;
|
|
2840
|
+
}).map(function (restrictedField) {
|
|
2841
|
+
var _Joi$string;
|
|
2842
|
+
var supportedFunctionsForField = listValidFunctionsForDataType(restrictedField, supportedAggregates);
|
|
2843
|
+
return buildMeasureJoi(Joi.string().valid(restrictedField.id).description(restrictedField.publicName + ", " + (restrictedField.description || '') + "."), (_Joi$string = Joi.string()).valid.apply(_Joi$string, supportedFunctionsForField.concat(['none'])));
|
|
2844
|
+
}));
|
|
2845
|
+
}
|
|
2846
|
+
return buildMeasureJoi(Joi.string().description('The ID of the field from the data set to reference.'), Joi.valid.apply(Joi, Object.keys(supportedAggregates).concat(['none'])));
|
|
2847
|
+
};
|
|
2848
|
+
var orderSchema = function orderSchema(queryEngineConfig) {
|
|
2849
|
+
var _Joi$string2;
|
|
2850
|
+
return Joi.object({
|
|
2851
|
+
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2852
|
+
direction: Joi.string().valid('asc', 'desc').required().description('In which direction should the results be ordered?'),
|
|
2853
|
+
"function": (_Joi$string2 = Joi.string()).valid.apply(_Joi$string2, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])).description('Which if any, function should be applied to the field?')
|
|
2854
|
+
});
|
|
2855
|
+
};
|
|
2856
|
+
var timeDimensionSchema = function timeDimensionSchema(supportedTimeTruncFunctions) {
|
|
2857
|
+
return Joi.object({
|
|
2858
|
+
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2859
|
+
truncate: Joi.valid.apply(Joi, Object.keys(supportedTimeTruncFunctions).concat(['none'])),
|
|
2860
|
+
bucketFill: Joi["boolean"]()
|
|
2861
|
+
});
|
|
2862
|
+
};
|
|
2863
|
+
var dimensionSchema = function dimensionSchema(supportedTimeTruncFunctions, attributeSchemaOptions) {
|
|
2864
|
+
var buildDimensionJoi = function buildDimensionJoi(fieldJoi, isDate) {
|
|
2865
|
+
return Joi.object({
|
|
2866
|
+
field: fieldJoi.required(),
|
|
2867
|
+
pivot: Joi.string().valid('x', 'y').optional(),
|
|
2868
|
+
"function": isDate ? Joi.valid.apply(Joi, Object.keys(supportedTimeTruncFunctions).concat(['none'])).required() : Joi.valid('none').required()
|
|
2869
|
+
});
|
|
2870
|
+
};
|
|
2871
|
+
|
|
2872
|
+
// Return an enum using the restriction fields
|
|
2873
|
+
if (attributeSchemaOptions != null && attributeSchemaOptions.restrictFields) {
|
|
2874
|
+
return Joi.array().items(Joi.alternatives.apply(Joi, attributeSchemaOptions.restrictFields.filter(function (f) {
|
|
2875
|
+
return f.canBeDimension;
|
|
2876
|
+
}).map(function (restrictedField) {
|
|
2877
|
+
return buildDimensionJoi(Joi.string().valid(restrictedField.id).description(restrictedField.publicName + ", " + (restrictedField.description || '') + "."), restrictedField.dataType === 'date_time');
|
|
2878
|
+
}))).description('Fields to group the data by');
|
|
2879
|
+
}
|
|
2880
|
+
return Joi.array().items(buildDimensionJoi(Joi.string().description('The ID of the field from the data set to reference.'), true)).description('Fields to group the data by');
|
|
2881
|
+
};
|
|
2882
|
+
var filterSchema = function filterSchema(queryEngineConfig) {
|
|
2883
|
+
var _Joi$string3, _Joi$string4;
|
|
2884
|
+
return Joi.object({
|
|
2885
|
+
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2886
|
+
op: (_Joi$string3 = Joi.string()).valid.apply(_Joi$string3, Object.keys(queryEngineConfig.supportedOperators)).required(),
|
|
2887
|
+
value: Joi.alternatives()["try"](joiDate, Joi.string().allow(null), Joi.number(), Joi["boolean"](), Joi.array().items(Joi.string(), Joi.number(), Joi.allow(null)), relativeSchema).required(),
|
|
2888
|
+
"function": (_Joi$string4 = Joi.string()).valid.apply(_Joi$string4, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])).description('Which function should be applied to the field?')
|
|
2889
|
+
});
|
|
2890
|
+
};
|
|
2891
|
+
var queryAttributesFilter = function queryAttributesFilter(queryEngineConfig) {
|
|
2892
|
+
return Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig)));
|
|
2893
|
+
};
|
|
2894
|
+
var queryAttributesLimit = function queryAttributesLimit() {
|
|
2895
|
+
return Joi.number().description('Limit the number of results returned after the query has been ran.');
|
|
2896
|
+
};
|
|
2897
|
+
var baseAttributesSchema = function baseAttributesSchema(attributeSchemaOptions) {
|
|
2898
|
+
var _Joi$string5;
|
|
2899
|
+
var dataSetIdSchema = attributeSchemaOptions != null && attributeSchemaOptions.restrictDataSetIds ? (_Joi$string5 = Joi.string()).valid.apply(_Joi$string5, attributeSchemaOptions.restrictDataSetIds) : Joi.string();
|
|
2900
|
+
return {
|
|
2901
|
+
viewId: Joi.string().allow('').optional().description('__vizzly_hide_from_docs'),
|
|
2902
|
+
displayTitle: Joi.string().allow('').description('A title that explains what is being displayed.'),
|
|
2903
|
+
displaySubject: Joi.string().allow('').description('A chance to add a more detailed description of what is being shown.'),
|
|
2904
|
+
dataSetId: dataSetIdSchema.description('The ID of the data set that is being used by the view.'),
|
|
2905
|
+
protectedByOrganisation: Joi["boolean"]().optional().description('Has the view been created by your organisation, and therefore cannot be modified by your users?')
|
|
2906
|
+
};
|
|
2907
|
+
};
|
|
2908
|
+
var approxAxisLabelCountSchema = /*#__PURE__*/Joi.valid('auto', 2, 0).description('Determine how many axis labels should be shown on the axis');
|
|
2909
|
+
var querySchema = function querySchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2910
|
+
return {
|
|
2911
|
+
measure: Joi.array().items(measureSchema(queryEngineConfig.supportedAggregates, attributeSchemaOptions)).required().description('A list of metrics that are to be shown. For example the `count` of a specific field in your data set.'),
|
|
2912
|
+
dimension: dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions).required(),
|
|
2913
|
+
order: Joi.array().items(orderSchema(queryEngineConfig)),
|
|
2914
|
+
limit: queryAttributesLimit(),
|
|
2915
|
+
offset: Joi.number().min(0).description('Paginate results by using this property with limit.')
|
|
2916
|
+
};
|
|
2917
|
+
};
|
|
2918
|
+
var timeDimensionQuerySchema = function timeDimensionQuerySchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2919
|
+
return _extends({}, querySchema(queryEngineConfig, attributeSchemaOptions), {
|
|
2920
|
+
filter: Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))),
|
|
2921
|
+
timeDimension: Joi.alternatives(timeDimensionSchema(queryEngineConfig.supportedTimeTruncFunctions), Joi.valid(null)).required(),
|
|
2922
|
+
drilldown: Joi.alternatives(dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions).required(), Joi.string()),
|
|
2923
|
+
xAxisPrefix: Joi.string().allow('').description('Add a prefix to the X Axis'),
|
|
2924
|
+
yAxisPrefix: Joi.string().allow('').description('Add a prefix to the Y Axis'),
|
|
2925
|
+
xAxisPostfix: Joi.string().allow('').description('Add a postfix to the X Axis'),
|
|
2926
|
+
yAxisPostfix: Joi.string().allow('').description('Add a postfix to the Y Axis'),
|
|
2927
|
+
yAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)).description('ID of the formatting function to apply to the Y Axis values'),
|
|
2928
|
+
xAxisFormat: Joi.alternatives(Joi.string(), Joi.valid(null)).description('ID of the formatting function to apply to the X Axis values'),
|
|
2929
|
+
approxYAxisLabelCount: approxAxisLabelCountSchema,
|
|
2930
|
+
approxXAxisLabelCount: approxAxisLabelCountSchema
|
|
2931
|
+
});
|
|
2932
|
+
};
|
|
2933
|
+
var lineCurveSchema = /*#__PURE__*/Joi.string().valid('natural', 'straight', 'step', 'stepBefore', 'stepAfter', 'dotted');
|
|
2934
|
+
var areaCurveSchema = /*#__PURE__*/Joi.string().valid('natural', 'straight', 'step');
|
|
2935
|
+
var protectedFieldsMeasure = function protectedFieldsMeasure(queryEngineConfig) {
|
|
2936
|
+
var _Joi$string6;
|
|
2937
|
+
return Joi.array().items(Joi.object({
|
|
2938
|
+
"function": (_Joi$string6 = Joi.string()).valid.apply(_Joi$string6, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])),
|
|
2939
|
+
field: Joi.string().required().description('The ID of the field from the data set to reference.')
|
|
2940
|
+
}));
|
|
2941
|
+
};
|
|
2942
|
+
var protectedFieldsDimension = function protectedFieldsDimension(queryEngineConfig) {
|
|
2943
|
+
var _Joi$string7;
|
|
2944
|
+
return Joi.array().items(Joi.object({
|
|
2945
|
+
"function": (_Joi$string7 = Joi.string()).valid.apply(_Joi$string7, Object.keys(queryEngineConfig.supportedAggregates).concat(Object.keys(queryEngineConfig.supportedTimeTruncFunctions), ['none'])),
|
|
2946
|
+
truncate: Joi.string(),
|
|
2947
|
+
field: Joi.string().required().description('The ID of the field from the data set to reference.'),
|
|
2948
|
+
bucketFill: Joi["boolean"]().optional(),
|
|
2949
|
+
pivot: Joi.string().valid('x', 'y').optional()
|
|
2950
|
+
}));
|
|
2951
|
+
};
|
|
2952
|
+
var parameterGroupSchema = function parameterGroupSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2953
|
+
return Joi.object().pattern(Joi.string(), Joi.alternatives()["try"](Joi.array().items(timeDimensionSchema(queryEngineConfig.supportedTimeTruncFunctions)).min(1), dimensionSchema(queryEngineConfig.supportedTimeTruncFunctions, attributeSchemaOptions))).unknown(true);
|
|
2954
|
+
};
|
|
2955
|
+
var parameterMeasureSchema = function parameterMeasureSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2956
|
+
return Joi.object().pattern(Joi.string(), Joi.array().items(measureSchema(queryEngineConfig.supportedAggregates, attributeSchemaOptions)).min(1)).unknown(true);
|
|
2957
|
+
};
|
|
2958
|
+
var parametersSchema = function parametersSchema(queryEngineConfig, attributeSchemaOptions) {
|
|
2959
|
+
return Joi.object({
|
|
2960
|
+
measure: parameterMeasureSchema(queryEngineConfig, attributeSchemaOptions),
|
|
2961
|
+
group: parameterGroupSchema(queryEngineConfig, attributeSchemaOptions)
|
|
2962
|
+
});
|
|
2963
|
+
};
|
|
2964
|
+
var goalLineValueSchema = /*#__PURE__*/Joi.alternatives()["try"]( /*#__PURE__*/Joi.number().required(), /*#__PURE__*/Joi.string().pattern(/^\{\{.*\}\}$/).required());
|
|
2965
|
+
var goalLineSchema = function goalLineSchema() {
|
|
2966
|
+
return Joi.object({
|
|
2967
|
+
color: Joi.string().required(),
|
|
2968
|
+
value: goalLineValueSchema,
|
|
2969
|
+
strokeWidth: Joi.number().required(),
|
|
2970
|
+
strokeStyle: Joi.string().valid('dashed', 'solid').required(),
|
|
2971
|
+
label: Joi["boolean"]().optional()
|
|
2972
|
+
});
|
|
2973
|
+
};
|
|
2974
|
+
var goalLinesSchema = function goalLinesSchema() {
|
|
2975
|
+
return Joi.array().items(goalLineSchema());
|
|
2976
|
+
};
|
|
2977
|
+
var headlineSchema = function headlineSchema() {
|
|
2978
|
+
return Joi.object({
|
|
2979
|
+
func: Joi.string().valid('mean', 'sum', 'current').allow(null).optional()
|
|
2980
|
+
});
|
|
2981
|
+
};
|
|
2982
|
+
var axisTitleSchema = function axisTitleSchema() {
|
|
2983
|
+
return Joi.object({
|
|
2984
|
+
x: Joi.string().allow(''),
|
|
2985
|
+
y: Joi.string().allow('')
|
|
2986
|
+
});
|
|
2987
|
+
};
|
|
2988
|
+
var sizingSchema = /*#__PURE__*/Joi.object().pattern( /*#__PURE__*/Joi.string(), /*#__PURE__*/Joi.object({
|
|
2989
|
+
width: /*#__PURE__*/Joi.number().min(0),
|
|
2990
|
+
height: /*#__PURE__*/Joi.number().min(0)
|
|
2991
|
+
}));
|
|
2992
|
+
var joiDate = /*#__PURE__*/Joi.custom(function (value, helpers) {
|
|
2993
|
+
if (Object.prototype.toString.call(value) === '[object Date]') {
|
|
2994
|
+
return value;
|
|
2995
|
+
}
|
|
2996
|
+
return helpers.error('any.invalid');
|
|
2997
|
+
}, 'Date object validation');
|
|
2998
|
+
|
|
3505
2999
|
var conditionalFormattingRuleSchema = function conditionalFormattingRuleSchema(queryEngineConfig) {
|
|
3506
3000
|
return Joi.object({
|
|
3507
3001
|
filters: Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig)).required().max(1)).required().max(1),
|
|
@@ -14884,7 +14378,7 @@ var Code = function Code(_ref12) {
|
|
|
14884
14378
|
}));
|
|
14885
14379
|
};
|
|
14886
14380
|
|
|
14887
|
-
var supportsFeature
|
|
14381
|
+
var supportsFeature = function supportsFeature(queryEngineConfig, feature) {
|
|
14888
14382
|
return [].concat(queryEngineConfig.supportedFeatures).includes(feature);
|
|
14889
14383
|
};
|
|
14890
14384
|
|
|
@@ -14964,7 +14458,7 @@ var END_USER_DEFAULT_FEATURE_TOGGLES = {
|
|
|
14964
14458
|
showSavingIndicator: true,
|
|
14965
14459
|
disablePersistingGlobalFiltersLocally: false
|
|
14966
14460
|
};
|
|
14967
|
-
var build$
|
|
14461
|
+
var build$a = function build(partialFeatureToggles, queryEngineConfig, mode, scope) {
|
|
14968
14462
|
var featureToggles = {};
|
|
14969
14463
|
featureToggles = _extends({}, END_USER_DEFAULT_FEATURE_TOGGLES, featureToggles, partialFeatureToggles);
|
|
14970
14464
|
if (mode == 'admin') {
|
|
@@ -14988,22 +14482,22 @@ var build$b = function build(partialFeatureToggles, queryEngineConfig, mode, sco
|
|
|
14988
14482
|
featureToggles.showSavingIndicator = false;
|
|
14989
14483
|
featureToggles.disablePersistingGlobalFiltersLocally = (_featureToggles$disab = featureToggles.disablePersistingGlobalFiltersLocally) != null ? _featureToggles$disab : false;
|
|
14990
14484
|
}
|
|
14991
|
-
if (!supportsFeature
|
|
14485
|
+
if (!supportsFeature(queryEngineConfig, 'simpleMaths')) {
|
|
14992
14486
|
featureToggles.allowSimpleMathsCustomField = false;
|
|
14993
14487
|
}
|
|
14994
|
-
if (!supportsFeature
|
|
14488
|
+
if (!supportsFeature(queryEngineConfig, 'aggregateMaths')) {
|
|
14995
14489
|
featureToggles.allowAggregateMathsCustomField = false;
|
|
14996
14490
|
}
|
|
14997
|
-
if (!supportsFeature
|
|
14491
|
+
if (!supportsFeature(queryEngineConfig, 'subquery')) {
|
|
14998
14492
|
featureToggles.allowPercentagesCustomField = false;
|
|
14999
14493
|
}
|
|
15000
|
-
if (!supportsFeature
|
|
14494
|
+
if (!supportsFeature(queryEngineConfig, 'switchField')) {
|
|
15001
14495
|
featureToggles.allowRulesCustomField = false;
|
|
15002
14496
|
}
|
|
15003
|
-
if (!supportsFeature
|
|
14497
|
+
if (!supportsFeature(queryEngineConfig, 'roundedNumbers')) {
|
|
15004
14498
|
featureToggles.allowRoundedNumberCustomField = false;
|
|
15005
14499
|
}
|
|
15006
|
-
if (!supportsFeature
|
|
14500
|
+
if (!supportsFeature(queryEngineConfig, 'dateMaths')) {
|
|
15007
14501
|
featureToggles.allowDateCalculationsCustomField = false;
|
|
15008
14502
|
}
|
|
15009
14503
|
if (featureToggles.forceMobile) {
|
|
@@ -15058,6 +14552,155 @@ var removeField$3 = function removeField(component, fieldId) {
|
|
|
15058
14552
|
return newComponent;
|
|
15059
14553
|
};
|
|
15060
14554
|
|
|
14555
|
+
var groupFilters = function groupFilters(dataSets) {
|
|
14556
|
+
var groups = {};
|
|
14557
|
+
dataSets.forEach(function (dataSet) {
|
|
14558
|
+
if (dataSet && dataSet.fields) {
|
|
14559
|
+
dataSet.fields.forEach(function (dataSetField) {
|
|
14560
|
+
(dataSetField.dashboardRequiredFilterGroups || []).forEach(function (filterGroup) {
|
|
14561
|
+
var key = filterGroup.publicName + " - " + dataSetField.dataType;
|
|
14562
|
+
groups[key] = [].concat(groups[key] || [], [{
|
|
14563
|
+
publicName: filterGroup.publicName,
|
|
14564
|
+
dataSetField: dataSetField,
|
|
14565
|
+
dataSetId: dataSet.id
|
|
14566
|
+
}]);
|
|
14567
|
+
});
|
|
14568
|
+
});
|
|
14569
|
+
} else {
|
|
14570
|
+
logError('DataSet is undefined or does not have fields', dataSet);
|
|
14571
|
+
}
|
|
14572
|
+
});
|
|
14573
|
+
return Object.values(groups);
|
|
14574
|
+
};
|
|
14575
|
+
var fromDashboardRequiredFilterGroups = function fromDashboardRequiredFilterGroups(dataSets) {
|
|
14576
|
+
var groupedFilters = groupFilters(dataSets);
|
|
14577
|
+
return groupedFilters.map(function (group) {
|
|
14578
|
+
return {
|
|
14579
|
+
type: group[0].dataSetField.dataType == 'date_time' ? DATE_FILTER : SINGLE_SELECT_FILTER,
|
|
14580
|
+
managedByConfiguration: true,
|
|
14581
|
+
requiresValue: true,
|
|
14582
|
+
title: group[0].publicName,
|
|
14583
|
+
appliesToFields: group.map(function (g) {
|
|
14584
|
+
return {
|
|
14585
|
+
dataSetId: g.dataSetId,
|
|
14586
|
+
fieldId: g.dataSetField.id
|
|
14587
|
+
};
|
|
14588
|
+
}),
|
|
14589
|
+
value: null
|
|
14590
|
+
};
|
|
14591
|
+
});
|
|
14592
|
+
};
|
|
14593
|
+
|
|
14594
|
+
var fieldSchema = /*#__PURE__*/Joi.object({
|
|
14595
|
+
fieldId: /*#__PURE__*/Joi.string().required(),
|
|
14596
|
+
dataSetId: /*#__PURE__*/Joi.string().required()
|
|
14597
|
+
});
|
|
14598
|
+
var optionsFiltersSchema = function optionsFiltersSchema(queryEngineConfig) {
|
|
14599
|
+
return Joi.object().pattern(Joi.string(),
|
|
14600
|
+
// keys of the object
|
|
14601
|
+
Joi.array().items(filterSchema(queryEngineConfig)).optional());
|
|
14602
|
+
};
|
|
14603
|
+
var sharedAdditionalFilterSchema = function sharedAdditionalFilterSchema(queryEngineConfig) {
|
|
14604
|
+
return {
|
|
14605
|
+
title: Joi.string().allow(''),
|
|
14606
|
+
managedByConfiguration: Joi["boolean"]().optional(),
|
|
14607
|
+
requiresValue: Joi["boolean"]().optional(),
|
|
14608
|
+
optionsFilters: optionsFiltersSchema(queryEngineConfig).optional(),
|
|
14609
|
+
appliesToFields: Joi.array().items(fieldSchema).required(),
|
|
14610
|
+
optionsPulledFrom: Joi.array().items(fieldSchema).optional(),
|
|
14611
|
+
hidden: Joi["boolean"](),
|
|
14612
|
+
options: Joi.array().items(Joi.object({
|
|
14613
|
+
value: Joi.allow(Joi.number(), Joi.string()),
|
|
14614
|
+
label: Joi.string()
|
|
14615
|
+
})).optional()
|
|
14616
|
+
};
|
|
14617
|
+
};
|
|
14618
|
+
var selectFilterSchema = function selectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14619
|
+
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
14620
|
+
type: Joi.valid(SINGLE_SELECT_FILTER).required(),
|
|
14621
|
+
value: Joi.alternatives(Joi.string(), Joi.number(), Joi["boolean"](), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]))
|
|
14622
|
+
}));
|
|
14623
|
+
};
|
|
14624
|
+
var multiSelectFilterSchema = function multiSelectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14625
|
+
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
14626
|
+
type: Joi.valid(MULTI_SELECT_FILTER).required(),
|
|
14627
|
+
value: Joi.alternatives(Joi.array().items(Joi.string(), Joi.number()).single(), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))))
|
|
14628
|
+
}));
|
|
14629
|
+
};
|
|
14630
|
+
var advancedFilterSchema = function advancedFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14631
|
+
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
14632
|
+
type: Joi.valid(ADVANCED_FILTER).required(),
|
|
14633
|
+
value: advancedFilterValueSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
14634
|
+
}));
|
|
14635
|
+
};
|
|
14636
|
+
var advancedFilterValueSchema = function advancedFilterValueSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14637
|
+
return Joi.alternatives(Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))));
|
|
14638
|
+
};
|
|
14639
|
+
var dateTimeFilterSchema = function dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, type) {
|
|
14640
|
+
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
14641
|
+
type: Joi.valid(type).required(),
|
|
14642
|
+
inclusiveDate: Joi["boolean"]().optional(),
|
|
14643
|
+
allowTimeSelection: Joi["boolean"]().optional(),
|
|
14644
|
+
value: Joi.alternatives(Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]), Joi.object({
|
|
14645
|
+
type: Joi.valid('fixedRange'),
|
|
14646
|
+
before: Joi.alternatives(Joi.date()).required(),
|
|
14647
|
+
after: Joi.alternatives(Joi.date()).required()
|
|
14648
|
+
}), Joi.object({
|
|
14649
|
+
type: Joi.valid('relative'),
|
|
14650
|
+
value: Joi.string()
|
|
14651
|
+
}), Joi.object({
|
|
14652
|
+
type: Joi.valid('relativeRange'),
|
|
14653
|
+
filters: Joi.array()
|
|
14654
|
+
}))
|
|
14655
|
+
}));
|
|
14656
|
+
};
|
|
14657
|
+
var numberFilterSchema = function numberFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14658
|
+
return Joi.object(_extends({}, sharedAdditionalFilterSchema(queryEngineConfig), {
|
|
14659
|
+
type: Joi.valid(NUMERIC_FILTER).required(),
|
|
14660
|
+
value: Joi.alternatives(Joi.object({
|
|
14661
|
+
op: Joi.allow('=', '<', '>', '<=', '>='),
|
|
14662
|
+
value: Joi.number().allow(null, 0)
|
|
14663
|
+
}), Joi.array().items(Joi.array().items(filterSchema(queryEngineConfig))), Joi.valid.apply(Joi, shouldAlwaysHaveValue ? [] : [null]))
|
|
14664
|
+
}));
|
|
14665
|
+
};
|
|
14666
|
+
var additionalFilterSchema = function additionalFilterSchema(queryEngineConfig, shouldAlwaysHaveValue) {
|
|
14667
|
+
return Joi.alternatives().conditional('.type', {
|
|
14668
|
+
is: SINGLE_SELECT_FILTER,
|
|
14669
|
+
then: selectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
14670
|
+
}).conditional('.type', {
|
|
14671
|
+
is: DATE_FILTER,
|
|
14672
|
+
then: dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, DATE_FILTER)
|
|
14673
|
+
}).conditional('.type', {
|
|
14674
|
+
is: DATE_AND_TIME_FILTER,
|
|
14675
|
+
then: dateTimeFilterSchema(queryEngineConfig, shouldAlwaysHaveValue, DATE_AND_TIME_FILTER)
|
|
14676
|
+
}).conditional('.type', {
|
|
14677
|
+
is: MULTI_SELECT_FILTER,
|
|
14678
|
+
then: multiSelectFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
14679
|
+
}).conditional('.type', {
|
|
14680
|
+
is: NUMERIC_FILTER,
|
|
14681
|
+
then: numberFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
14682
|
+
}).conditional('.type', {
|
|
14683
|
+
is: ADVANCED_FILTER,
|
|
14684
|
+
then: advancedFilterSchema(queryEngineConfig, shouldAlwaysHaveValue)
|
|
14685
|
+
});
|
|
14686
|
+
};
|
|
14687
|
+
function globalFilterSchema(queryEngineConfig) {
|
|
14688
|
+
return Joi.array().items(Joi.custom(function (value, helpers) {
|
|
14689
|
+
if (!queryEngineConfig) {
|
|
14690
|
+
return helpers.error('any.invalid');
|
|
14691
|
+
}
|
|
14692
|
+
var schema = additionalFilterSchema(queryEngineConfig, !!value.requiresValue);
|
|
14693
|
+
var _schema$validate = schema.validate(value),
|
|
14694
|
+
error = _schema$validate.error;
|
|
14695
|
+
if (error) {
|
|
14696
|
+
return helpers.error('any.invalid', {
|
|
14697
|
+
message: error.message
|
|
14698
|
+
});
|
|
14699
|
+
}
|
|
14700
|
+
return value;
|
|
14701
|
+
})).required();
|
|
14702
|
+
}
|
|
14703
|
+
|
|
15061
14704
|
var init$a = function init(displayTitle) {
|
|
15062
14705
|
return {
|
|
15063
14706
|
displayTitle: displayTitle,
|
|
@@ -15545,7 +15188,7 @@ var defaultDateFilterOptions = function defaultDateFilterOptions() {
|
|
|
15545
15188
|
}
|
|
15546
15189
|
return defaultDateFilterOptions;
|
|
15547
15190
|
};
|
|
15548
|
-
var build$
|
|
15191
|
+
var build$b = function build(textOverride, overrides) {
|
|
15549
15192
|
var timeRangeMapping = defaultTimeRangeMapping(textOverride);
|
|
15550
15193
|
var orderedKeys = Object.keys(DEFAULT_DATETIME_FILTER_OPTIONS).map(function (key) {
|
|
15551
15194
|
return key in timeRangeMapping ? "_vizzly_" + key : key;
|
|
@@ -15879,7 +15522,7 @@ var init$b = function init(overrides, includeComponentTypes, excludeComponentTyp
|
|
|
15879
15522
|
return _extends({}, defaultFormatMapping, overrides.defaultFormats ? overrides.defaultFormats() : {});
|
|
15880
15523
|
},
|
|
15881
15524
|
onEditorUpdate: overrides.onEditorUpdate ? overrides.onEditorUpdate : base.onEditorUpdate,
|
|
15882
|
-
dateFilterOptions: build$
|
|
15525
|
+
dateFilterOptions: build$b(textOverride, overrides.dateFilterOptions),
|
|
15883
15526
|
onSave: overrides.onSave ? overrides.onSave : base.onSave,
|
|
15884
15527
|
onScheduledReportChange: overrides.onScheduledReportChange || base.onScheduledReportChange,
|
|
15885
15528
|
dashboardFilters: overrides.dashboardFilters ? overrides.dashboardFilters : base.dashboardFilters,
|
|
@@ -15933,7 +15576,7 @@ function useSubscription(callback, idOverride, deps) {
|
|
|
15933
15576
|
var useFeatureTogglesSetup = function useFeatureTogglesSetup(mode, overrideFeatureToggles, queryEngineConfig, scope, id) {
|
|
15934
15577
|
var base$1 = base;
|
|
15935
15578
|
var buildInitialFeatureToggles = function () {
|
|
15936
|
-
var updatedFeatureToggles = build$
|
|
15579
|
+
var updatedFeatureToggles = build$a(___default.merge({}, base$1.featureToggles, overrideFeatureToggles), queryEngineConfig != null ? queryEngineConfig : base$1.queryEngineConfig, mode || base$1.mode, scope || base$1.scope);
|
|
15937
15580
|
return updatedFeatureToggles;
|
|
15938
15581
|
}();
|
|
15939
15582
|
var _useState = React.useState(buildInitialFeatureToggles),
|
|
@@ -26244,6 +25887,334 @@ var filterStyles = /*#__PURE__*/Object.assign(function () {
|
|
|
26244
25887
|
complete: complete
|
|
26245
25888
|
});
|
|
26246
25889
|
|
|
25890
|
+
var Clause = /*#__PURE__*/function (Clause) {
|
|
25891
|
+
Clause["AND_WHERE"] = "andWhere";
|
|
25892
|
+
Clause["OR_WHERE"] = "orWhere";
|
|
25893
|
+
Clause["WHERE"] = "where";
|
|
25894
|
+
return Clause;
|
|
25895
|
+
}({});
|
|
25896
|
+
|
|
25897
|
+
// export type WhereClause = SqlAST.MultiWhereToken<any>;
|
|
25898
|
+
|
|
25899
|
+
var filterConfigToWhere = function filterConfigToWhere(dataSet, queryEngineConfig, params) {
|
|
25900
|
+
if (!params) return undefined;
|
|
25901
|
+
var filterConfig = params.filterConfig;
|
|
25902
|
+
if (!params || !filterConfig || (!filterConfig.globalFilters || filterConfig.globalFilters.length === 0) && (!filterConfig.localFilters || filterConfig.localFilters.length === 0) && (!filterConfig.advancedFilter || filterConfig.advancedFilter.length === 0 || filterConfig.advancedFilter.every(function (arr) {
|
|
25903
|
+
return arr.length === 0;
|
|
25904
|
+
}))) {
|
|
25905
|
+
return undefined;
|
|
25906
|
+
}
|
|
25907
|
+
var dash = buildAndWhere(dataSet, queryEngineConfig, params, filterConfig.globalFilters);
|
|
25908
|
+
var local = buildAndWhere(dataSet, queryEngineConfig, params, filterConfig.localFilters);
|
|
25909
|
+
var advancedFilters = buildFromFiltersArray(dataSet, queryEngineConfig, params, filterConfig.advancedFilter);
|
|
25910
|
+
var combinedAndWhere = [dash, local, advancedFilters].filter(Boolean).filter(function (whereClause) {
|
|
25911
|
+
return whereClause && whereClause.value.length > 0;
|
|
25912
|
+
});
|
|
25913
|
+
if (combinedAndWhere.length === 0) return undefined;
|
|
25914
|
+
return {
|
|
25915
|
+
type: Clause.AND_WHERE,
|
|
25916
|
+
value: combinedAndWhere
|
|
25917
|
+
};
|
|
25918
|
+
};
|
|
25919
|
+
var buildAndWhere = function buildAndWhere(dataSet, queryEngineConfig, params, additionalFilters) {
|
|
25920
|
+
if (!additionalFilters || additionalFilters.length === 0) return undefined;
|
|
25921
|
+
var whereClauses = [];
|
|
25922
|
+
additionalFilters.forEach(function (additionalFilter) {
|
|
25923
|
+
if (additionalFilter.type === DATE_AND_TIME_FILTER || additionalFilter.type === DATE_FILTER) {
|
|
25924
|
+
toRelativeQueryAttributesFilters(additionalFilter, dataSet).forEach(function (f) {
|
|
25925
|
+
whereClauses.push(buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params));
|
|
25926
|
+
});
|
|
25927
|
+
}
|
|
25928
|
+
if (Array.isArray(additionalFilter.value) && additionalFilter.value.length > 1 && isAdditionalFilter(additionalFilter.value)) {
|
|
25929
|
+
additionalFilter.appliesToFields.flatMap(function (field) {
|
|
25930
|
+
if (field.dataSetId != dataSet.id) return [];
|
|
25931
|
+
var convertedToWhere = buildFromFiltersArray(dataSet, queryEngineConfig, params, additionalFilter.value);
|
|
25932
|
+
if (convertedToWhere) {
|
|
25933
|
+
whereClauses.push(convertedToWhere);
|
|
25934
|
+
}
|
|
25935
|
+
return;
|
|
25936
|
+
});
|
|
25937
|
+
} else {
|
|
25938
|
+
toQueryAttributesFilter(dataSet, additionalFilter, params.timeRangeOptions).forEach(function (f) {
|
|
25939
|
+
whereClauses.push(buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params));
|
|
25940
|
+
});
|
|
25941
|
+
}
|
|
25942
|
+
});
|
|
25943
|
+
return {
|
|
25944
|
+
type: Clause.AND_WHERE,
|
|
25945
|
+
value: whereClauses
|
|
25946
|
+
};
|
|
25947
|
+
};
|
|
25948
|
+
var buildWhereFromSingleFilter = function buildWhereFromSingleFilter(dataSet, f, queryEngineConfig, params) {
|
|
25949
|
+
var field;
|
|
25950
|
+
if (f["function"] && !isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, f["function"])) {
|
|
25951
|
+
throw "Query engine does not support the query function " + f["function"] + ".";
|
|
25952
|
+
}
|
|
25953
|
+
var dataSetField = findField(dataSet, f.field);
|
|
25954
|
+
if (isCustomField(dataSetField)) {
|
|
25955
|
+
var _f$function;
|
|
25956
|
+
field = toQueryMeasure({
|
|
25957
|
+
field: dataSetField.id,
|
|
25958
|
+
"function": (_f$function = f["function"]) != null ? _f$function : 'none'
|
|
25959
|
+
}, dataSetField, queryEngineConfig, dataSet, false, params);
|
|
25960
|
+
} else {
|
|
25961
|
+
var _decodedField$functio;
|
|
25962
|
+
var decodedField = decodeId(f.field, queryEngineConfig);
|
|
25963
|
+
field = {
|
|
25964
|
+
type: 'field',
|
|
25965
|
+
value: decodedField.field,
|
|
25966
|
+
"function": (_decodedField$functio = decodedField["function"]) != null ? _decodedField$functio : 'none'
|
|
25967
|
+
};
|
|
25968
|
+
}
|
|
25969
|
+
if ((f.op == 'array_contains' || f.op == 'array_does_not_contain') && Array.isArray(f.value)) {
|
|
25970
|
+
return arrayContainsFilters(f, dataSet, queryEngineConfig, params);
|
|
25971
|
+
}
|
|
25972
|
+
var value = useValue(f.value, params.variables);
|
|
25973
|
+
if (isRelativeDateDefined(f.value)) {
|
|
25974
|
+
value = calculateRelativeDate(f.value);
|
|
25975
|
+
}
|
|
25976
|
+
if (filterIsDate(f)) {
|
|
25977
|
+
value = getUTCDate(f.value);
|
|
25978
|
+
}
|
|
25979
|
+
return {
|
|
25980
|
+
type: Clause.WHERE,
|
|
25981
|
+
value: {
|
|
25982
|
+
op: f.op,
|
|
25983
|
+
value: value,
|
|
25984
|
+
field: field
|
|
25985
|
+
}
|
|
25986
|
+
};
|
|
25987
|
+
};
|
|
25988
|
+
var buildFromFiltersArray = function buildFromFiltersArray(dataSet, queryEngineConfig, params, filters) {
|
|
25989
|
+
if (!filters || filters.length === 0 || filters.every(function (arr) {
|
|
25990
|
+
return arr.length === 0;
|
|
25991
|
+
})) {
|
|
25992
|
+
return undefined;
|
|
25993
|
+
}
|
|
25994
|
+
if (filters.length === 1) return buildFromFilters(filters[0], dataSet, queryEngineConfig, params);
|
|
25995
|
+
return {
|
|
25996
|
+
type: Clause.OR_WHERE,
|
|
25997
|
+
value: filters.map(function (filter) {
|
|
25998
|
+
return buildFromFilters(filter, dataSet, queryEngineConfig, params);
|
|
25999
|
+
})
|
|
26000
|
+
};
|
|
26001
|
+
};
|
|
26002
|
+
var buildFromFilters = function buildFromFilters(filter, dataSet, queryEngineConfig, params) {
|
|
26003
|
+
return {
|
|
26004
|
+
type: Clause.AND_WHERE,
|
|
26005
|
+
value: filter.map(function (filter) {
|
|
26006
|
+
if ((filter.op == 'array_contains' || filter.op == 'array_does_not_contain') && Array.isArray(filter.value)) {
|
|
26007
|
+
return arrayContainsFilters(filter, dataSet, queryEngineConfig, params);
|
|
26008
|
+
}
|
|
26009
|
+
return buildWhereFromSingleFilter(dataSet, filter, queryEngineConfig, params);
|
|
26010
|
+
})
|
|
26011
|
+
};
|
|
26012
|
+
};
|
|
26013
|
+
var arrayContainsFilters = function arrayContainsFilters(filter, dataSet, queryEngineConfig, params) {
|
|
26014
|
+
return {
|
|
26015
|
+
type: Clause.AND_WHERE,
|
|
26016
|
+
value: [].concat(filter.value).map(function (value) {
|
|
26017
|
+
return buildWhereFromSingleFilter(dataSet, _extends({}, filter, {
|
|
26018
|
+
value: value
|
|
26019
|
+
}), queryEngineConfig, params);
|
|
26020
|
+
})
|
|
26021
|
+
};
|
|
26022
|
+
};
|
|
26023
|
+
|
|
26024
|
+
var addMeasure = function addMeasure(current, toAdd) {
|
|
26025
|
+
return [[].concat(current, [toAdd]), current.length];
|
|
26026
|
+
};
|
|
26027
|
+
var buildFromQueryAttributes = function buildFromQueryAttributes(dataSet, measureAttr, orderAttr, dimensionAttr, timeDimensionAttr, limitAttr, offsetAttr, queryEngineConfig, params, prebuiltFilters) {
|
|
26028
|
+
var measureDescription = [];
|
|
26029
|
+
var measure = [];
|
|
26030
|
+
var group = [];
|
|
26031
|
+
var order = [];
|
|
26032
|
+
var filters = buildFilters(dataSet, queryEngineConfig, params, prebuiltFilters);
|
|
26033
|
+
if (timeDimensionAttr) {
|
|
26034
|
+
// Add the measure for the time field.
|
|
26035
|
+
var addedAt = undefined;
|
|
26036
|
+
|
|
26037
|
+
// Stop unsupported time trunc functions being used.
|
|
26038
|
+
if (!isSupportedTimeTruncFunction(queryEngineConfig.supportedTimeTruncFunctions, timeDimensionAttr.truncate)) {
|
|
26039
|
+
throw "Query engine does not support the time trunc function " + timeDimensionAttr.truncate + ".";
|
|
26040
|
+
}
|
|
26041
|
+
var _addMeasure = addMeasure(measure, {
|
|
26042
|
+
type: 'field',
|
|
26043
|
+
value: timeDimensionAttr.field,
|
|
26044
|
+
"function": timeDimensionAttr.truncate
|
|
26045
|
+
});
|
|
26046
|
+
measure = _addMeasure[0];
|
|
26047
|
+
addedAt = _addMeasure[1];
|
|
26048
|
+
measureDescription = [].concat(measureDescription, [{
|
|
26049
|
+
functionId: timeDimensionAttr.truncate,
|
|
26050
|
+
field: findField(dataSet, timeDimensionAttr.field)
|
|
26051
|
+
}]);
|
|
26052
|
+
group = [].concat(group, [{
|
|
26053
|
+
index: addedAt
|
|
26054
|
+
}]);
|
|
26055
|
+
}
|
|
26056
|
+
dimensionAttr.forEach(function (dimension) {
|
|
26057
|
+
// Add the measure for the time field.
|
|
26058
|
+
var addedAt = undefined;
|
|
26059
|
+
var _addMeasure2 = addMeasure(measure, {
|
|
26060
|
+
type: 'field',
|
|
26061
|
+
value: dimension == null ? void 0 : dimension.field,
|
|
26062
|
+
"function": dimension["function"]
|
|
26063
|
+
});
|
|
26064
|
+
measure = _addMeasure2[0];
|
|
26065
|
+
addedAt = _addMeasure2[1];
|
|
26066
|
+
measureDescription = [].concat(measureDescription, [{
|
|
26067
|
+
functionId: dimension["function"],
|
|
26068
|
+
field: findField(dataSet, dimension.field)
|
|
26069
|
+
}]);
|
|
26070
|
+
group = [].concat(group, [{
|
|
26071
|
+
index: addedAt
|
|
26072
|
+
}]);
|
|
26073
|
+
});
|
|
26074
|
+
measureAttr.forEach(function (individualMeasure) {
|
|
26075
|
+
// Stop unsupported aggregate functions being used.
|
|
26076
|
+
if (!isSupportedAggregateFunction(queryEngineConfig.supportedAggregates, individualMeasure["function"])) {
|
|
26077
|
+
throw "Query engine does not support the query function " + individualMeasure["function"] + ".";
|
|
26078
|
+
}
|
|
26079
|
+
var _addMeasure3 = addMeasure(measure, {
|
|
26080
|
+
type: 'field',
|
|
26081
|
+
value: individualMeasure.field,
|
|
26082
|
+
"function": individualMeasure["function"]
|
|
26083
|
+
});
|
|
26084
|
+
measure = _addMeasure3[0];
|
|
26085
|
+
measureDescription = [].concat(measureDescription, [{
|
|
26086
|
+
functionId: individualMeasure["function"],
|
|
26087
|
+
field: findField(dataSet, individualMeasure.field)
|
|
26088
|
+
}]);
|
|
26089
|
+
});
|
|
26090
|
+
orderAttr.forEach(function (apiQueryOrderItem) {
|
|
26091
|
+
var index = measure.findIndex(function (individualMeasure) {
|
|
26092
|
+
if (individualMeasure.type == 'field') {
|
|
26093
|
+
var sameFunction = individualMeasure["function"] == apiQueryOrderItem["function"];
|
|
26094
|
+
// const isTimeFunc = Object.keys(queryEngineConfig.supportedTimeTruncFunctions).includes(
|
|
26095
|
+
// individualMeasure.function
|
|
26096
|
+
// );
|
|
26097
|
+
var sameField = individualMeasure.value == apiQueryOrderItem.field;
|
|
26098
|
+
return sameField && sameFunction;
|
|
26099
|
+
|
|
26100
|
+
// return found;
|
|
26101
|
+
}
|
|
26102
|
+
return false;
|
|
26103
|
+
});
|
|
26104
|
+
if (index >= 0) {
|
|
26105
|
+
order = [].concat(order, [{
|
|
26106
|
+
index: index,
|
|
26107
|
+
direction: apiQueryOrderItem.direction
|
|
26108
|
+
}]);
|
|
26109
|
+
}
|
|
26110
|
+
});
|
|
26111
|
+
measure = measure.map(function (measure) {
|
|
26112
|
+
if (measure.type == 'field' && typeof measure.value == 'string') {
|
|
26113
|
+
var dataSetField = findField(dataSet, measure.value);
|
|
26114
|
+
if (isCustomField(dataSetField)) {
|
|
26115
|
+
var customMeasure = toQueryMeasure({
|
|
26116
|
+
"function": measure["function"],
|
|
26117
|
+
field: measure.value
|
|
26118
|
+
}, dataSetField, queryEngineConfig, dataSet, hasDimensions({
|
|
26119
|
+
group: group
|
|
26120
|
+
}), params);
|
|
26121
|
+
return customMeasure;
|
|
26122
|
+
}
|
|
26123
|
+
}
|
|
26124
|
+
return measure;
|
|
26125
|
+
});
|
|
26126
|
+
return {
|
|
26127
|
+
query: {
|
|
26128
|
+
type: 'query',
|
|
26129
|
+
dataSetId: dataSet.id,
|
|
26130
|
+
measure: measure,
|
|
26131
|
+
group: group,
|
|
26132
|
+
// TODO: Fix this type
|
|
26133
|
+
filter: filters,
|
|
26134
|
+
order: order,
|
|
26135
|
+
limit: limitAttr,
|
|
26136
|
+
offset: offsetAttr
|
|
26137
|
+
},
|
|
26138
|
+
measureDescription: measureDescription
|
|
26139
|
+
};
|
|
26140
|
+
};
|
|
26141
|
+
var buildFilters = function buildFilters(dataSet, queryEngineConfig, params, prebuiltFilters) {
|
|
26142
|
+
if (prebuiltFilters && prebuiltFilters.length > 0) {
|
|
26143
|
+
var filter = [];
|
|
26144
|
+
prebuiltFilters.forEach(function (andFilters) {
|
|
26145
|
+
var newAndFilters = filterAttributeToQueryFilter([andFilters], queryEngineConfig, dataSet, params);
|
|
26146
|
+
filter = [].concat(filter, [newAndFilters[0]]);
|
|
26147
|
+
});
|
|
26148
|
+
return filter;
|
|
26149
|
+
}
|
|
26150
|
+
var whereClause = filterConfigToWhere(dataSet, queryEngineConfig, params);
|
|
26151
|
+
if (whereClause) return whereClause;
|
|
26152
|
+
return [];
|
|
26153
|
+
};
|
|
26154
|
+
|
|
26155
|
+
var build$c = buildFromQueryAttributes;
|
|
26156
|
+
var hasDimensions = function hasDimensions(query) {
|
|
26157
|
+
return query.group.length > 0;
|
|
26158
|
+
};
|
|
26159
|
+
var buildPreAggregatedPreparedQuery = function buildPreAggregatedPreparedQuery(query, dataSet) {
|
|
26160
|
+
return {
|
|
26161
|
+
query: query,
|
|
26162
|
+
resultFields: dataSet.fields.map(function (field) {
|
|
26163
|
+
return {
|
|
26164
|
+
id: field.id,
|
|
26165
|
+
publicName: field.publicName,
|
|
26166
|
+
dataType: field.dataType,
|
|
26167
|
+
fieldId: field.id,
|
|
26168
|
+
"function": 'none',
|
|
26169
|
+
outputDataType: field.dataType
|
|
26170
|
+
};
|
|
26171
|
+
})
|
|
26172
|
+
};
|
|
26173
|
+
};
|
|
26174
|
+
var buildUniqueArrayValuesPreparedQuery = function buildUniqueArrayValuesPreparedQuery(dataSetId, dataSetField, optionsFilters) {
|
|
26175
|
+
return {
|
|
26176
|
+
query: {
|
|
26177
|
+
type: 'preparedQuery',
|
|
26178
|
+
preparedQueryType: 'uniqueArrayValues',
|
|
26179
|
+
dataSetId: dataSetId,
|
|
26180
|
+
fieldId: dataSetField.id,
|
|
26181
|
+
filter: optionsFilters || []
|
|
26182
|
+
},
|
|
26183
|
+
resultFields: [{
|
|
26184
|
+
id: dataSetField.id,
|
|
26185
|
+
publicName: dataSetField.publicName,
|
|
26186
|
+
dataType: dataSetField.dataType,
|
|
26187
|
+
fieldId: dataSetField.id,
|
|
26188
|
+
"function": 'none',
|
|
26189
|
+
outputDataType: 'string'
|
|
26190
|
+
}]
|
|
26191
|
+
};
|
|
26192
|
+
};
|
|
26193
|
+
var buildFilterQuery = function buildFilterQuery(dataSet, fieldId, optionsFilters, optionsOrders) {
|
|
26194
|
+
var measure = [{
|
|
26195
|
+
field: fieldId,
|
|
26196
|
+
"function": 'count'
|
|
26197
|
+
}];
|
|
26198
|
+
var order = optionsOrders != null ? optionsOrders : [];
|
|
26199
|
+
var filter = optionsFilters ? [optionsFilters] : [];
|
|
26200
|
+
var dimension = [{
|
|
26201
|
+
field: fieldId,
|
|
26202
|
+
"function": 'none'
|
|
26203
|
+
}];
|
|
26204
|
+
var timeDimension = null;
|
|
26205
|
+
var limit = 5000;
|
|
26206
|
+
return {
|
|
26207
|
+
dataSetId: dataSet.id,
|
|
26208
|
+
measure: measure,
|
|
26209
|
+
order: order,
|
|
26210
|
+
filter: filter,
|
|
26211
|
+
dimension: dimension,
|
|
26212
|
+
timeDimension: timeDimension,
|
|
26213
|
+
limit: limit,
|
|
26214
|
+
offset: 0
|
|
26215
|
+
};
|
|
26216
|
+
};
|
|
26217
|
+
|
|
26247
26218
|
/** Returns a key to be used in an useEffect dependency, that changes if there's any change to a field in a data set. */
|
|
26248
26219
|
var watchDataSetFieldChanges = function watchDataSetFieldChanges(dataSet, queryable) {
|
|
26249
26220
|
if ('dataSetId' in queryable) {
|
|
@@ -26348,12 +26319,12 @@ var useVariables = function useVariables(variables, dashboardId) {
|
|
|
26348
26319
|
subscriptionChanges = _useState2[0],
|
|
26349
26320
|
setSubscriptionChanges = _useState2[1];
|
|
26350
26321
|
React.useEffect(function () {
|
|
26351
|
-
var staticVariables = build$
|
|
26322
|
+
var staticVariables = build$1(variables);
|
|
26352
26323
|
setVariablesState(staticVariables);
|
|
26353
26324
|
}, [JSON.stringify(variables)]);
|
|
26354
26325
|
useSubscription(function (data) {
|
|
26355
26326
|
if (data.variables) {
|
|
26356
|
-
var staticVariables = build$
|
|
26327
|
+
var staticVariables = build$1(variables);
|
|
26357
26328
|
var updatedVariables = _extends({}, staticVariables, data.variables);
|
|
26358
26329
|
logDebug('Updated variables', updatedVariables);
|
|
26359
26330
|
setSubscriptionChanges(data.variables);
|
|
@@ -34788,8 +34759,6 @@ var showLegend = function showLegend(legend, verbose) {
|
|
|
34788
34759
|
return false;
|
|
34789
34760
|
};
|
|
34790
34761
|
|
|
34791
|
-
// import { hasMeasure } from '../../../shared-logic/src/Query';
|
|
34792
|
-
|
|
34793
34762
|
var EMPTY_METRICS = 'The Data settings are missing a Metric. Select from the list of Metrics to display the Chart.';
|
|
34794
34763
|
var EMPTY_PARAMETER = 'The Data settings are missing a parameter. Select from the list of parameters to display the Chart.';
|
|
34795
34764
|
function noMetricMessage(query) {
|
|
@@ -41562,7 +41531,7 @@ var AdminTools = function AdminTools(props) {
|
|
|
41562
41531
|
onOpenConfigManagerUi = _useDashboardBehaviou.onOpenConfigManagerUi,
|
|
41563
41532
|
disableToolbar = _useDashboardBehaviou.disableToolbar;
|
|
41564
41533
|
var saveableDashboard = toSaveableDefinition(dashboard);
|
|
41565
|
-
var supportsConfigManagerUi = supportsFeature
|
|
41534
|
+
var supportsConfigManagerUi = supportsFeature(queryEngineConfig, 'configManagerUi') && onOpenConfigManagerUi;
|
|
41566
41535
|
React.useEffect(function () {
|
|
41567
41536
|
var abortController = new AbortController();
|
|
41568
41537
|
var trySave = /*#__PURE__*/function () {
|
|
@@ -47064,8 +47033,7 @@ var CustomView = function CustomView(_ref) {
|
|
|
47064
47033
|
var component = _ref.component;
|
|
47065
47034
|
var attributes = component.attributes;
|
|
47066
47035
|
var _useDashboardBehaviou = useDashboardBehaviourContext(),
|
|
47067
|
-
customViews = _useDashboardBehaviou.customViews
|
|
47068
|
-
dateFilterOptions = _useDashboardBehaviou.dateFilterOptions;
|
|
47036
|
+
customViews = _useDashboardBehaviou.customViews;
|
|
47069
47037
|
var _useDashboardContext = useDashboardContext(),
|
|
47070
47038
|
dashboard = _useDashboardContext.dashboard;
|
|
47071
47039
|
var FoundComponent = null;
|
|
@@ -47078,7 +47046,9 @@ var CustomView = function CustomView(_ref) {
|
|
|
47078
47046
|
if (!FoundComponent) return null;
|
|
47079
47047
|
var result = FoundComponent.Component({
|
|
47080
47048
|
attributes: attributes,
|
|
47081
|
-
|
|
47049
|
+
filterConfig: {
|
|
47050
|
+
globalFilters: dashboard.globalFilters
|
|
47051
|
+
}
|
|
47082
47052
|
});
|
|
47083
47053
|
if (typeof result === 'string') {
|
|
47084
47054
|
return jsxRuntime.jsx("div", {
|
|
@@ -60015,12 +59985,13 @@ var StaticCustomView = function StaticCustomView(_ref) {
|
|
|
60015
59985
|
component = _ref.component;
|
|
60016
59986
|
var _useDashboardContext = useDashboardContext(),
|
|
60017
59987
|
dashboard = _useDashboardContext.dashboard;
|
|
60018
|
-
var _useDashboardBehaviou = useDashboardBehaviourContext()
|
|
60019
|
-
dateFilterOptions = _useDashboardBehaviou.dateFilterOptions;
|
|
59988
|
+
var _useDashboardBehaviou = useDashboardBehaviourContext();
|
|
60020
59989
|
var renderComponent = function renderComponent() {
|
|
60021
59990
|
var result = customView.Component({
|
|
60022
59991
|
attributes: component.attributes,
|
|
60023
|
-
|
|
59992
|
+
filterConfig: {
|
|
59993
|
+
globalFilters: dashboard.globalFilters
|
|
59994
|
+
}
|
|
60024
59995
|
});
|
|
60025
59996
|
if (typeof result === 'string') {
|
|
60026
59997
|
return jsxRuntime.jsx("div", {
|
|
@@ -71760,7 +71731,7 @@ function getOptionsOrders(dataSetField) {
|
|
|
71760
71731
|
}
|
|
71761
71732
|
|
|
71762
71733
|
var commonToQueries = function commonToQueries(attributes, dataSet, queryEngineConfig, params) {
|
|
71763
|
-
var _Query$build = build$
|
|
71734
|
+
var _Query$build = build$c(dataSet, attributes.measure, attributes.order, attributes.dimension,
|
|
71764
71735
|
// @ts-ignore
|
|
71765
71736
|
attributes.timeDimension || null, attributes.limit, attributes.offset, queryEngineConfig, params),
|
|
71766
71737
|
query = _Query$build.query,
|
|
@@ -71785,8 +71756,8 @@ var toQueries$6 = commonToQueries;
|
|
|
71785
71756
|
var toQueries$7 = commonToQueries;
|
|
71786
71757
|
|
|
71787
71758
|
var buildMainQueries = function buildMainQueries(attributes, dataSet, queryEngineConfig, params) {
|
|
71788
|
-
var line = build$
|
|
71789
|
-
var bar = build$
|
|
71759
|
+
var line = build$c(dataSet, attributes.lineMeasure, attributes.order, attributes.lineDimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params);
|
|
71760
|
+
var bar = build$c(dataSet, attributes.barMeasure, attributes.order, attributes.barDimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params);
|
|
71790
71761
|
return {
|
|
71791
71762
|
bar: bar,
|
|
71792
71763
|
line: line
|
|
@@ -71813,8 +71784,8 @@ var toQueries$b = commonToQueries;
|
|
|
71813
71784
|
var toQueries$c = commonToQueries;
|
|
71814
71785
|
|
|
71815
71786
|
var buildMainQueries$1 = function buildMainQueries(attributes, dataSet, queryEngineConfig, params) {
|
|
71816
|
-
var line = build$
|
|
71817
|
-
var bar = build$
|
|
71787
|
+
var line = build$c(dataSet, attributes.lineMeasure, attributes.order, attributes.lineDimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params);
|
|
71788
|
+
var bar = build$c(dataSet, attributes.barMeasure, attributes.order, attributes.barDimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params);
|
|
71818
71789
|
return {
|
|
71819
71790
|
bar: bar,
|
|
71820
71791
|
line: line
|
|
@@ -71833,7 +71804,7 @@ var toQueries$d = function toQueries(attributes, dataSet, queryEngineConfig, par
|
|
|
71833
71804
|
};
|
|
71834
71805
|
|
|
71835
71806
|
var buildMainQuery = function buildMainQuery(attributes, dataSet, queryEngineConfig, params) {
|
|
71836
|
-
var _Query$build = build$
|
|
71807
|
+
var _Query$build = build$c(dataSet, attributes.measure, [], [], null, 1, attributes.offset, queryEngineConfig, params),
|
|
71837
71808
|
query = _Query$build.query,
|
|
71838
71809
|
measureDescription = _Query$build.measureDescription;
|
|
71839
71810
|
|
|
@@ -71861,7 +71832,7 @@ var buildMainQuery = function buildMainQuery(attributes, dataSet, queryEngineCon
|
|
|
71861
71832
|
};
|
|
71862
71833
|
var buildDeltaQuery = function buildDeltaQuery(dataSet, attributes, queryEngineConfig, params) {
|
|
71863
71834
|
if (!attributes.deltaTimeDimension) return null;
|
|
71864
|
-
return build$
|
|
71835
|
+
return build$c(dataSet, attributes.measure, [{
|
|
71865
71836
|
field: attributes.deltaTimeDimension.field,
|
|
71866
71837
|
direction: 'asc',
|
|
71867
71838
|
"function": attributes.deltaTimeDimension.truncate
|
|
@@ -71893,7 +71864,7 @@ var toQueries$f = function toQueries(attributes, dataSet, queryEngineConfig, par
|
|
|
71893
71864
|
var measures = [];
|
|
71894
71865
|
attributes.xMeasure && measures.push(attributes.xMeasure);
|
|
71895
71866
|
attributes.yMeasure && measures.push(attributes.yMeasure);
|
|
71896
|
-
var _Query$build = build$
|
|
71867
|
+
var _Query$build = build$c(dataSet, measures, attributes.order, attributes.dimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params),
|
|
71897
71868
|
query = _Query$build.query,
|
|
71898
71869
|
measureDescription = _Query$build.measureDescription;
|
|
71899
71870
|
var resultFields = toResultFields([measureDescription], queryEngineConfig);
|
|
@@ -71907,7 +71878,7 @@ var toQueries$g = function toQueries(attributes, dataSet, queryEngineConfig, par
|
|
|
71907
71878
|
var measures = [];
|
|
71908
71879
|
attributes.xMeasure && measures.push(attributes.xMeasure);
|
|
71909
71880
|
attributes.yMeasure && measures.push(attributes.yMeasure);
|
|
71910
|
-
var _Query$build = build$
|
|
71881
|
+
var _Query$build = build$c(dataSet, measures, attributes.order, attributes.dimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params),
|
|
71911
71882
|
query = _Query$build.query,
|
|
71912
71883
|
measureDescription = _Query$build.measureDescription;
|
|
71913
71884
|
var resultFields = toResultFields([measureDescription], queryEngineConfig);
|
|
@@ -71919,7 +71890,7 @@ var toQueries$g = function toQueries(attributes, dataSet, queryEngineConfig, par
|
|
|
71919
71890
|
|
|
71920
71891
|
var toQueries$h = function toQueries(attributes, dataSet, queryEngineConfig, params) {
|
|
71921
71892
|
var measures = [].concat(attributes.measure || [], attributes.xMeasure || [], attributes.zMeasure || []);
|
|
71922
|
-
var _Query$build = build$
|
|
71893
|
+
var _Query$build = build$c(dataSet, measures, attributes.order, attributes.dimension, attributes.timeDimension, attributes.limit, attributes.offset, queryEngineConfig, params),
|
|
71923
71894
|
query = _Query$build.query,
|
|
71924
71895
|
measureDescription = _Query$build.measureDescription;
|
|
71925
71896
|
var resultFields = toResultFields([measureDescription], queryEngineConfig);
|
|
@@ -72035,6 +72006,7 @@ var buildVizzlyQuery = function buildVizzlyQuery(thing, queryEngineConfig, param
|
|
|
72035
72006
|
var dataSet = find(params.dataSets, queryAttributes.dataSetId);
|
|
72036
72007
|
if (!dataSet) throw 'Data set not found for query-attributes query';
|
|
72037
72008
|
return _extends({}, queryAttributes, {
|
|
72009
|
+
// TODO; this means that services queries that povide a query, cannot work... GTDEV-6947
|
|
72038
72010
|
filter: [],
|
|
72039
72011
|
whereClause: filterConfigToWhere(dataSet, queryEngineConfig, _extends({}, params, {
|
|
72040
72012
|
filterConfig: _extends({}, params.filterConfig, {
|
|
@@ -73271,7 +73243,7 @@ var VizzlyServices = /*#__PURE__*/function () {
|
|
|
73271
73243
|
_proto.query = /*#__PURE__*/function () {
|
|
73272
73244
|
var _query = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(queries, params) {
|
|
73273
73245
|
var _this2 = this;
|
|
73274
|
-
var instanceId, service,
|
|
73246
|
+
var instanceId, service, queryEngineEndpoint, runQueriesCallback, fetch;
|
|
73275
73247
|
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
73276
73248
|
while (1) switch (_context11.prev = _context11.next) {
|
|
73277
73249
|
case 0:
|
|
@@ -73281,8 +73253,7 @@ var VizzlyServices = /*#__PURE__*/function () {
|
|
|
73281
73253
|
instanceId = params.instanceId;
|
|
73282
73254
|
}
|
|
73283
73255
|
service = VizzlyServices._instanceStore[instanceId];
|
|
73284
|
-
|
|
73285
|
-
validateQuery(enhancedQueries, service.queryEngineConfig);
|
|
73256
|
+
validateQuery(queries, service.queryEngineConfig);
|
|
73286
73257
|
queryEngineEndpoint = function () {
|
|
73287
73258
|
if (params != null && params.queryEngineEndpoint) {
|
|
73288
73259
|
return params.queryEngineEndpoint;
|
|
@@ -73297,7 +73268,7 @@ var VizzlyServices = /*#__PURE__*/function () {
|
|
|
73297
73268
|
}
|
|
73298
73269
|
return undefined;
|
|
73299
73270
|
}();
|
|
73300
|
-
runQueriesCallback = getRunQueriesCallback(service.identityConfig, service.queryEngineConfig, build$
|
|
73271
|
+
runQueriesCallback = getRunQueriesCallback(service.identityConfig, service.queryEngineConfig, build$b(defaultText, params == null ? void 0 : params.dateFilterOptions), (params == null ? void 0 : params.variables) || {}, params == null ? void 0 : params.runQueries, params == null ? void 0 : params.data, queryEngineEndpoint);
|
|
73301
73272
|
fetch = /*#__PURE__*/function () {
|
|
73302
73273
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
73303
73274
|
var _params$abortControll;
|
|
@@ -73306,9 +73277,10 @@ var VizzlyServices = /*#__PURE__*/function () {
|
|
|
73306
73277
|
case 0:
|
|
73307
73278
|
_context10.prev = 0;
|
|
73308
73279
|
_context10.next = 3;
|
|
73309
|
-
return runQueriesCallback(
|
|
73280
|
+
return runQueriesCallback(queries, {
|
|
73310
73281
|
abortSignal: params == null || (_params$abortControll = params.abortController) == null ? void 0 : _params$abortControll.signal,
|
|
73311
|
-
dataSets: _this2.dataSets
|
|
73282
|
+
dataSets: _this2.dataSets,
|
|
73283
|
+
filterConfig: params == null ? void 0 : params.filterConfig
|
|
73312
73284
|
});
|
|
73313
73285
|
case 3:
|
|
73314
73286
|
return _context10.abrupt("return", _context10.sent);
|
|
@@ -73327,14 +73299,14 @@ var VizzlyServices = /*#__PURE__*/function () {
|
|
|
73327
73299
|
return _ref.apply(this, arguments);
|
|
73328
73300
|
};
|
|
73329
73301
|
}();
|
|
73330
|
-
_context11.next =
|
|
73302
|
+
_context11.next = 10;
|
|
73331
73303
|
return fetch();
|
|
73332
|
-
case
|
|
73304
|
+
case 10:
|
|
73333
73305
|
_context11.t0 = _context11.sent;
|
|
73334
73306
|
return _context11.abrupt("return", {
|
|
73335
73307
|
results: _context11.t0
|
|
73336
73308
|
});
|
|
73337
|
-
case
|
|
73309
|
+
case 12:
|
|
73338
73310
|
case "end":
|
|
73339
73311
|
return _context11.stop();
|
|
73340
73312
|
}
|
|
@@ -76265,7 +76237,7 @@ var GlobalProviderContents = function GlobalProviderContents(props) {
|
|
|
76265
76237
|
}
|
|
76266
76238
|
};
|
|
76267
76239
|
var resolvedDateFilterOptions = (_props$dateFilterOpti = props.dateFilterOptions) != null ? _props$dateFilterOpti : props.dateTimeFilterOptions;
|
|
76268
|
-
var runQueriesCallback = getRunQueriesCallback(session.identityConfig, session.queryEngineConfig, build$
|
|
76240
|
+
var runQueriesCallback = getRunQueriesCallback(session.identityConfig, session.queryEngineConfig, build$b(textOverride, resolvedDateFilterOptions), variables.variables, props.runQueries, props.data, props.queryEngineEndpoint, props.timeZone);
|
|
76269
76241
|
var aiOnAction = /*#__PURE__*/function () {
|
|
76270
76242
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(conversationId, messageId, actionOptions) {
|
|
76271
76243
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
@@ -76482,7 +76454,7 @@ var index = {
|
|
|
76482
76454
|
displayPositions: displayPositions,
|
|
76483
76455
|
DataSetField: DataSetField
|
|
76484
76456
|
};
|
|
76485
|
-
var VIRDIS_COLOR_PALETTE = [
|
|
76457
|
+
var VIRDIS_COLOR_PALETTE = ['#440154FF', '#414487FF', '#2A788EFF', '#22A884FF', '#7AD151FF', '#FDE725FF'];
|
|
76486
76458
|
|
|
76487
76459
|
exports.Dashboard = Dashboard$2;
|
|
76488
76460
|
exports.DataSetField = DataSetField;
|