@adaptabletools/adaptable 12.0.4 → 12.0.7
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/bundle.cjs.js +92 -92
- package/package.json +1 -1
- package/publishTimestamp.d.ts +1 -1
- package/publishTimestamp.js +1 -1
- package/src/AdaptableOptions/ExportOptions.d.ts +3 -3
- package/src/Api/GridApi.d.ts +2 -1
- package/src/Api/Implementation/GridApiImpl.d.ts +1 -1
- package/src/Api/Implementation/GridApiImpl.js +1 -1
- package/src/Api/Implementation/InternalApiImpl.js +3 -0
- package/src/PredefinedConfig/Common/SpecialColumnSettings.d.ts +1 -1
- package/src/Strategy/AlertModule.js +2 -2
- package/src/Strategy/FlashingCellModule.js +2 -2
- package/src/Utilities/Constants/DocumentationLinkConstants.js +2 -2
- package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +4 -4
- package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +7 -7
- package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +3 -3
- package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +5 -5
- package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +11 -11
- package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +2 -2
- package/src/Utilities/Services/QueryLanguageService.js +4 -4
- package/src/Utilities/Services/ReportService.js +1 -1
- package/src/Utilities/Services/RowEditService.js +4 -1
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +8 -0
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/{ConfigurationForm.js → AdaptableOptionsForm.js} +3 -39
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +27 -3
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/{ConfigurationForm.d.ts → EntitlementsForm.d.ts} +3 -3
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +17 -0
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.d.ts +8 -0
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +54 -0
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +0 -1
- package/src/agGrid/Adaptable.js +9 -7
- package/src/agGrid/agGridHelper.js +2 -2
- package/src/components/ExpressionEditor/BaseEditorInput.js +4 -1
- package/src/components/ExpressionEditor/index.js +2 -2
- package/src/metamodel/adaptable.metamodel.d.ts +5 -5
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/parser/src/types.d.ts +4 -8
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptabletools/adaptable",
|
|
3
|
-
"version": "12.0.
|
|
3
|
+
"version": "12.0.7",
|
|
4
4
|
"description": "Powerful data-agnostic HTML5 datagrid add-on that sits on top of an underlying grid component and provides all the rich functionality that advanced users expect from their DataGrids and Data Tables",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
package/publishTimestamp.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: 1657722189050;
|
|
2
2
|
export default _default;
|
package/publishTimestamp.js
CHANGED
|
@@ -72,15 +72,15 @@ export interface CustomReport {
|
|
|
72
72
|
*/
|
|
73
73
|
export interface CustomDestination {
|
|
74
74
|
/**
|
|
75
|
-
* Name of Custom Destination
|
|
75
|
+
* Name of Custom Destination (mandatory)
|
|
76
76
|
*/
|
|
77
77
|
name: string;
|
|
78
78
|
/**
|
|
79
|
-
* Optional Adaptable Form
|
|
79
|
+
* Optional Adaptable Form; if provided, it must include Buttons that will execute the Export
|
|
80
80
|
*/
|
|
81
81
|
form?: AdaptableForm<ExportFormContext>;
|
|
82
82
|
/**
|
|
83
|
-
* Function invoked when
|
|
83
|
+
* Optional Function invoked when Export is applied (used if no form is supplied)
|
|
84
84
|
*/
|
|
85
85
|
onExport?: (reportContext: ReportContext) => void;
|
|
86
86
|
}
|
package/src/Api/GridApi.d.ts
CHANGED
|
@@ -261,8 +261,9 @@ export interface GridApi {
|
|
|
261
261
|
* Retrieves Formatted Value for a given Raw Value in given Column
|
|
262
262
|
* @param columnId ColumnId to lookup
|
|
263
263
|
* @param rawValue Raw Value
|
|
264
|
+
* @param rowNode Node containig the Column
|
|
264
265
|
*/
|
|
265
|
-
|
|
266
|
+
getDisplayValueFromRawValue(rowNode: RowNode, columnId: string, rawValue: any): string | undefined;
|
|
266
267
|
/**
|
|
267
268
|
* Retrieves Display Value for Cell in given Row and Column
|
|
268
269
|
* @param rowNode Row to use
|
|
@@ -65,7 +65,7 @@ export declare class GridApiImpl extends ApiBase implements GridApi {
|
|
|
65
65
|
getGridCellFromRowNode(rowNode: RowNode, columnId: string): GridCell | undefined;
|
|
66
66
|
getRawValueFromRowNode(rowNode: RowNode, columnId: string): any | undefined;
|
|
67
67
|
getDisplayValueFromRowNode(rowNode: RowNode, columnId: string): any | undefined;
|
|
68
|
-
|
|
68
|
+
getDisplayValueFromRawValue(rowNode: RowNode, columnId: string, rawValue: any): string | undefined;
|
|
69
69
|
getNormalisedValueFromRowNode(rowNode: RowNode, columnId: string): any | undefined;
|
|
70
70
|
getRowNodesForPrimaryKeys(primaryKeyValues: any[]): RowNode[];
|
|
71
71
|
getRowNodeForPrimaryKey(primaryKeyValue: any): RowNode;
|
|
@@ -200,7 +200,7 @@ class GridApiImpl extends ApiBase_1.ApiBase {
|
|
|
200
200
|
getDisplayValueFromRowNode(rowNode, columnId) {
|
|
201
201
|
return this.adaptable.getDisplayValueFromRowNode(rowNode, columnId);
|
|
202
202
|
}
|
|
203
|
-
|
|
203
|
+
getDisplayValueFromRawValue(rowNode, columnId, rawValue) {
|
|
204
204
|
return this.adaptable.getDisplayValueFromRawValue(rowNode, columnId, rawValue);
|
|
205
205
|
}
|
|
206
206
|
getNormalisedValueFromRowNode(rowNode, columnId) {
|
|
@@ -390,6 +390,9 @@ class InternalApiImpl extends ApiBase_1.ApiBase {
|
|
|
390
390
|
getQueryPreviewData() {
|
|
391
391
|
var _a;
|
|
392
392
|
const firstRowNode = this.adaptable.api.gridApi.getFirstRowNode();
|
|
393
|
+
if (firstRowNode == undefined) {
|
|
394
|
+
return {};
|
|
395
|
+
}
|
|
393
396
|
const firstRowData = (_a = Object.assign({}, firstRowNode === null || firstRowNode === void 0 ? void 0 : firstRowNode.data)) !== null && _a !== void 0 ? _a : {};
|
|
394
397
|
// handle CalcCols which are not persisted in the rowModel
|
|
395
398
|
this.adaptable.api.calculatedColumnApi.getAllCalculatedColumn().forEach((calculatedColumn) => {
|
|
@@ -32,8 +32,8 @@ class AlertModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
32
32
|
'formattedValue') {
|
|
33
33
|
const { oldValue, newValue, rowNode } = cellDataChangedInfo;
|
|
34
34
|
const columnId = cellDataChangedInfo.column.columnId;
|
|
35
|
-
const oldFormattedValue = this.api.gridApi.
|
|
36
|
-
const newFormattedValue = this.api.gridApi.
|
|
35
|
+
const oldFormattedValue = this.api.gridApi.getDisplayValueFromRawValue(rowNode, columnId, oldValue);
|
|
36
|
+
const newFormattedValue = this.api.gridApi.getDisplayValueFromRawValue(rowNode, columnId, newValue);
|
|
37
37
|
if (oldFormattedValue === newFormattedValue) {
|
|
38
38
|
// if the formattedValues are identical, then no alert is fired
|
|
39
39
|
return;
|
|
@@ -31,8 +31,8 @@ class FlashingCellModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
31
31
|
'formattedValue') {
|
|
32
32
|
const { oldValue, newValue, rowNode } = cellDataChangedInfo;
|
|
33
33
|
const columnId = cellDataChangedInfo.column.columnId;
|
|
34
|
-
const oldFormattedValue = this.api.gridApi.
|
|
35
|
-
const newFormattedValue = this.api.gridApi.
|
|
34
|
+
const oldFormattedValue = this.api.gridApi.getDisplayValueFromRawValue(rowNode, columnId, oldValue);
|
|
35
|
+
const newFormattedValue = this.api.gridApi.getDisplayValueFromRawValue(rowNode, columnId, newValue);
|
|
36
36
|
if (oldFormattedValue === newFormattedValue) {
|
|
37
37
|
// if the formattedValues are identical, then no alert is fired
|
|
38
38
|
return;
|
|
@@ -7,8 +7,8 @@ exports.ExpressionEditorDocsLink = `${exports.HOST_URL_DOCS}/guide/ui-expression
|
|
|
7
7
|
exports.BooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-boolean`;
|
|
8
8
|
exports.ScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-scalar`;
|
|
9
9
|
exports.ObservableQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-observable`;
|
|
10
|
-
exports.AggregatedBooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation
|
|
11
|
-
exports.AggregatedScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation
|
|
10
|
+
exports.AggregatedBooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation-boolean`;
|
|
11
|
+
exports.AggregatedScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation-scalar`;
|
|
12
12
|
exports.PredicateDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-predicate`;
|
|
13
13
|
exports.PrimaryKeyDocsLink = `${exports.HOST_URL_DOCS}/guide/dev-guide-tutorial-primary-key`;
|
|
14
14
|
exports.LicenseDocsLink = `${exports.HOST_URL_DOCS}/guide/licensing`;
|
|
@@ -28,7 +28,7 @@ exports.aggregatedBooleanExpressionFunctions = {
|
|
|
28
28
|
SUM: {
|
|
29
29
|
handler(args, context) {
|
|
30
30
|
const columnParameter = expressionFunctionUtils_1.extractColumnParameter('SUM', args);
|
|
31
|
-
expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number'], 'SUM', context.
|
|
31
|
+
expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number'], 'SUM', context.adaptableApi);
|
|
32
32
|
const sumAggregationFn = (dataSource$) => getSumAggregation$(dataSource$, getColumnValueSum(columnParameter.value, context));
|
|
33
33
|
const result = {
|
|
34
34
|
type: 'aggregation',
|
|
@@ -195,15 +195,15 @@ const getSumAggregation$ = (source$, initialSum) => {
|
|
|
195
195
|
};
|
|
196
196
|
const getColumnValueSum = (column, context) => {
|
|
197
197
|
let sum = 0;
|
|
198
|
-
context.
|
|
198
|
+
context.adaptableApi.internalApi.forAllRowNodesDo((rowNode) => {
|
|
199
199
|
// if there is a WHERE clause defined, check if the current rowNode satisfies the condition
|
|
200
200
|
if (context.filterFn && !context.filterFn(rowNode)) {
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
203
|
-
if (context.
|
|
203
|
+
if (context.adaptableApi.gridApi.isGroupRowNode(rowNode)) {
|
|
204
204
|
return;
|
|
205
205
|
}
|
|
206
|
-
const cellValue = context.
|
|
206
|
+
const cellValue = context.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, column);
|
|
207
207
|
if (cellValue != undefined) {
|
|
208
208
|
sum = sum + expressionFunctionUtils_1.getNumericValue(rowNode.data[column]);
|
|
209
209
|
}
|
|
@@ -8,7 +8,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
8
8
|
handler(args, context) {
|
|
9
9
|
const sumColumnParameter = expressionFunctionUtils_1.extractColumnParameter('SUM', args);
|
|
10
10
|
const sumColumnName = sumColumnParameter.value;
|
|
11
|
-
expressionFunctionUtils_1.validateColumnType(sumColumnName, ['Number'], 'SUM', context.
|
|
11
|
+
expressionFunctionUtils_1.validateColumnType(sumColumnName, ['Number'], 'SUM', context.adaptableApi);
|
|
12
12
|
const groupByParameter = expressionFunctionUtils_1.extractParameter('SUM', 'operand', ['GROUP_BY'], args, true);
|
|
13
13
|
const aggregationExpressionEvaluation = {
|
|
14
14
|
aggregationParams: {
|
|
@@ -50,7 +50,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
50
50
|
var _a;
|
|
51
51
|
const percentageColumnParameter = expressionFunctionUtils_1.extractColumnParameter('PERCENTAGE', args);
|
|
52
52
|
const percentageColumnName = percentageColumnParameter.value;
|
|
53
|
-
expressionFunctionUtils_1.validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.
|
|
53
|
+
expressionFunctionUtils_1.validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.adaptableApi);
|
|
54
54
|
const sumOperand = expressionFunctionUtils_1.extractParameter('PERCENTAGE', 'aggregation', ['SUM'], args, true);
|
|
55
55
|
const groupByOperand = expressionFunctionUtils_1.extractParameter('PERCENTAGE', 'operand', ['GROUP_BY'], args, true);
|
|
56
56
|
if (sumOperand && groupByOperand) {
|
|
@@ -79,7 +79,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
79
79
|
},
|
|
80
80
|
},
|
|
81
81
|
rowValueGetter: (rowNode, aggregationValue) => {
|
|
82
|
-
return ((context.
|
|
82
|
+
return ((context.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, percentageColumnName) /
|
|
83
83
|
aggregationValue) *
|
|
84
84
|
100);
|
|
85
85
|
},
|
|
@@ -118,7 +118,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
118
118
|
handler(args, context) {
|
|
119
119
|
const avgColumnParameter = expressionFunctionUtils_1.extractColumnParameter('AVG', args);
|
|
120
120
|
const avgColumnName = avgColumnParameter.value;
|
|
121
|
-
expressionFunctionUtils_1.validateColumnType(avgColumnName, ['Number'], 'AVG', context.
|
|
121
|
+
expressionFunctionUtils_1.validateColumnType(avgColumnName, ['Number'], 'AVG', context.adaptableApi);
|
|
122
122
|
const groupByParameter = expressionFunctionUtils_1.extractParameter('AVG', 'operand', ['GROUP_BY'], args, true);
|
|
123
123
|
const aggregationExpressionEvaluation = {
|
|
124
124
|
aggregationParams: {
|
|
@@ -162,7 +162,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
162
162
|
handler(args, context) {
|
|
163
163
|
const minColumnParameter = expressionFunctionUtils_1.extractColumnParameter('MIN', args);
|
|
164
164
|
const minColumnName = minColumnParameter.value;
|
|
165
|
-
expressionFunctionUtils_1.validateColumnType(minColumnName, ['Number'], 'MIN', context.
|
|
165
|
+
expressionFunctionUtils_1.validateColumnType(minColumnName, ['Number'], 'MIN', context.adaptableApi);
|
|
166
166
|
const groupByParameter = expressionFunctionUtils_1.extractParameter('MIN', 'operand', ['GROUP_BY'], args, true);
|
|
167
167
|
const aggregationExpressionEvaluation = {
|
|
168
168
|
aggregationParams: {
|
|
@@ -203,7 +203,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
203
203
|
handler(args, context) {
|
|
204
204
|
const maxColumnParameter = expressionFunctionUtils_1.extractColumnParameter('MAX', args);
|
|
205
205
|
const maxColumnName = maxColumnParameter.value;
|
|
206
|
-
expressionFunctionUtils_1.validateColumnType(maxColumnName, ['Number'], 'MAX', context.
|
|
206
|
+
expressionFunctionUtils_1.validateColumnType(maxColumnName, ['Number'], 'MAX', context.adaptableApi);
|
|
207
207
|
const groupByParameter = expressionFunctionUtils_1.extractParameter('MAX', 'operand', ['GROUP_BY'], args, true);
|
|
208
208
|
const aggregationExpressionEvaluation = {
|
|
209
209
|
aggregationParams: {
|
|
@@ -284,7 +284,7 @@ exports.aggregatedScalarExpressionFunctions = {
|
|
|
284
284
|
OVER: {
|
|
285
285
|
handler(args, context) {
|
|
286
286
|
const columnParameter = expressionFunctionUtils_1.extractColumnParameter('OVER', args);
|
|
287
|
-
expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number', 'Date'], 'OVER', context.
|
|
287
|
+
expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number', 'Date'], 'OVER', context.adaptableApi);
|
|
288
288
|
const result = {
|
|
289
289
|
type: 'operand',
|
|
290
290
|
name: 'OVER',
|
|
@@ -225,9 +225,9 @@ exports.booleanExpressionFunctions = {
|
|
|
225
225
|
handler(args, context) {
|
|
226
226
|
var _a;
|
|
227
227
|
const searchTerm = expressionFunctionUtils_1.getStringValue(context, String(args[0]));
|
|
228
|
-
return (_a = context.
|
|
228
|
+
return (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.columnApi.getColumns().some((column) => {
|
|
229
229
|
var _a;
|
|
230
|
-
const value = (_a = context.
|
|
230
|
+
const value = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.gridApi.getDisplayValueFromRowNode(context.node, column.columnId);
|
|
231
231
|
const columnValue = expressionFunctionUtils_1.getStringValue(context, String(value));
|
|
232
232
|
return columnValue.indexOf(searchTerm) !== -1;
|
|
233
233
|
});
|
|
@@ -266,7 +266,7 @@ exports.booleanExpressionFunctions = {
|
|
|
266
266
|
if (StringExtensions_1.default.IsNullOrEmpty(namedQueryName)) {
|
|
267
267
|
return false;
|
|
268
268
|
}
|
|
269
|
-
const namedQuery = (_a = context.
|
|
269
|
+
const namedQuery = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.queryApi.getNamedQueryByName(namedQueryName);
|
|
270
270
|
if (!namedQuery) {
|
|
271
271
|
throw new ExpressionEvaluationError_1.ExpressionEvaluationError('QUERY', `Named Query with name ${namedQueryName} not found!`);
|
|
272
272
|
}
|
|
@@ -19,12 +19,12 @@ const getStringValue = (context, stringArgument) => {
|
|
|
19
19
|
return exports.isTextSearchCaseInsensitive(context) ? stringArgument.toLowerCase() : stringArgument;
|
|
20
20
|
};
|
|
21
21
|
exports.getStringValue = getStringValue;
|
|
22
|
-
const isTextSearchCaseInsensitive = (context) => !context.
|
|
22
|
+
const isTextSearchCaseInsensitive = (context) => !context.adaptableApi.internalApi.isTextComparisonCaseSensitive();
|
|
23
23
|
exports.isTextSearchCaseInsensitive = isTextSearchCaseInsensitive;
|
|
24
24
|
// returns an observable which filters the source$ emissions and emits only if the CellDataChangedInfo relates to the given column
|
|
25
25
|
// optionally, if a filter function (where clause) is provided, it is also evaluated
|
|
26
26
|
const getDataChangeLog$ = (context, columnNameFilter) => {
|
|
27
|
-
let dataChangeLog$ = context.
|
|
27
|
+
let dataChangeLog$ = context.adaptableApi.internalApi.getDataService().dataChangeLog$;
|
|
28
28
|
// filter only the given column changes
|
|
29
29
|
dataChangeLog$ = dataChangeLog$.pipe(operators_1.filter((dataChangeLog) => dataChangeLog.column.columnId === columnNameFilter));
|
|
30
30
|
// filter based on the WHERE clause
|
|
@@ -41,14 +41,14 @@ const handleWhereFunction = (args, context) => {
|
|
|
41
41
|
// whereClauseResult
|
|
42
42
|
return evaluator_1.evaluateNode(whereClauseExpressionNode, {
|
|
43
43
|
node: rowNode,
|
|
44
|
-
|
|
44
|
+
adaptableApi: context.adaptableApi,
|
|
45
45
|
functions: context.whereClauseFunctions,
|
|
46
46
|
});
|
|
47
47
|
};
|
|
48
48
|
// observableExpressionResult
|
|
49
49
|
return evaluator_1.evaluateNode(reactiveExpressionNode, {
|
|
50
50
|
node: context.node,
|
|
51
|
-
|
|
51
|
+
adaptableApi: context.adaptableApi,
|
|
52
52
|
functions: context.functions,
|
|
53
53
|
filterFn,
|
|
54
54
|
});
|
|
@@ -76,7 +76,7 @@ const handleColumnFunction = (args, context) => {
|
|
|
76
76
|
if (StringExtensions_1.default.IsNullOrEmpty(args[0])) {
|
|
77
77
|
throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `no column name is provided`);
|
|
78
78
|
}
|
|
79
|
-
validateColumnId(args[0], context.
|
|
79
|
+
validateColumnId(args[0], context.adaptableApi);
|
|
80
80
|
const result = {
|
|
81
81
|
type: 'config',
|
|
82
82
|
name: 'COL',
|
|
@@ -32,12 +32,12 @@ exports.observableExpressionFunctions = {
|
|
|
32
32
|
return getDataChangeCount$(dataChangeLog$, timeframeChange$, operandParameter.value);
|
|
33
33
|
}
|
|
34
34
|
case 'MIN': {
|
|
35
|
-
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.
|
|
35
|
+
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.adaptableApi);
|
|
36
36
|
const timeframeChange$ = getTrailingRowValueChange$(dataChangeLog$, timeframeParameter.value);
|
|
37
37
|
return getDataChangeMin$(dataChangeLog$, timeframeChange$);
|
|
38
38
|
}
|
|
39
39
|
case 'MAX': {
|
|
40
|
-
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.
|
|
40
|
+
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.adaptableApi);
|
|
41
41
|
const timeframeChange$ = getTrailingRowValueChange$(dataChangeLog$, timeframeParameter.value);
|
|
42
42
|
return getDataChangeMax$(dataChangeLog$, timeframeChange$);
|
|
43
43
|
}
|
|
@@ -71,12 +71,12 @@ exports.observableExpressionFunctions = {
|
|
|
71
71
|
return getDataChangeCount$(dataChangeLog$, timeframeChange$, operandParameter.value);
|
|
72
72
|
}
|
|
73
73
|
case 'MIN': {
|
|
74
|
-
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.
|
|
74
|
+
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.adaptableApi);
|
|
75
75
|
const timeframeChange$ = getTrailingGridValueChange$(dataChangeLog$, timeframeParameter.value);
|
|
76
76
|
return getDataChangeMin$(dataChangeLog$, timeframeChange$);
|
|
77
77
|
}
|
|
78
78
|
case 'MAX': {
|
|
79
|
-
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.
|
|
79
|
+
expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.adaptableApi);
|
|
80
80
|
const timeframeChange$ = getTrailingGridValueChange$(dataChangeLog$, timeframeParameter.value);
|
|
81
81
|
return getDataChangeMax$(dataChangeLog$, timeframeChange$);
|
|
82
82
|
}
|
|
@@ -229,11 +229,11 @@ const getDataChangedInfoStub = (context) => {
|
|
|
229
229
|
var _a;
|
|
230
230
|
let rowNodeStub;
|
|
231
231
|
if (!context.filterFn) {
|
|
232
|
-
rowNodeStub = context.
|
|
232
|
+
rowNodeStub = context.adaptableApi.gridApi.getFirstRowNode();
|
|
233
233
|
}
|
|
234
234
|
else {
|
|
235
235
|
// if there is a WHERE clause defined, find the first rowNode which satisfies the condition
|
|
236
|
-
context.
|
|
236
|
+
context.adaptableApi.internalApi.forAllRowNodesDo((rowNode) => {
|
|
237
237
|
if (!rowNodeStub) {
|
|
238
238
|
if (context.filterFn(rowNode)) {
|
|
239
239
|
rowNodeStub = rowNode;
|
|
@@ -243,10 +243,10 @@ const getDataChangedInfoStub = (context) => {
|
|
|
243
243
|
}
|
|
244
244
|
const rowNode = rowNodeStub;
|
|
245
245
|
if (rowNode) {
|
|
246
|
-
const primaryKeyValue = context.
|
|
247
|
-
const columnId = (_a = context.
|
|
248
|
-
const oldValue = context.
|
|
249
|
-
const column = context.
|
|
246
|
+
const primaryKeyValue = context.adaptableApi.gridApi.getPrimaryKeyValueForRowNode(rowNode);
|
|
247
|
+
const columnId = (_a = context.adaptableApi.columnApi.getQueryableColumns()[0]) === null || _a === void 0 ? void 0 : _a.columnId;
|
|
248
|
+
const oldValue = context.adaptableApi.gridApi.getCellRawValue(primaryKeyValue, columnId);
|
|
249
|
+
const column = context.adaptableApi.columnApi.getColumnFromId(columnId);
|
|
250
250
|
const newValue = oldValue;
|
|
251
251
|
return {
|
|
252
252
|
changedAt: Date.now(),
|
|
@@ -417,7 +417,7 @@ const getSlidingTimeframe$ = (source$, timeframeDuration, onTimeframeEnter, onTi
|
|
|
417
417
|
}));
|
|
418
418
|
};
|
|
419
419
|
const getMaxTimeframeSize = (expressionValue, context) => {
|
|
420
|
-
let maxTimeframeSize = context.
|
|
420
|
+
let maxTimeframeSize = context.adaptableApi.internalApi.getAdaptableOptions().adaptableQLOptions.expressionOptions
|
|
421
421
|
.maxTimeframeSize;
|
|
422
422
|
if (maxTimeframeSize > SYSTEM_MAX_TIMEFRAME_SIZE) {
|
|
423
423
|
maxTimeframeSize = SYSTEM_MAX_TIMEFRAME_SIZE;
|
|
@@ -95,14 +95,14 @@ exports.scalarExpressionFunctions = {
|
|
|
95
95
|
handler(args, context) {
|
|
96
96
|
var _a, _b;
|
|
97
97
|
const columnId = args[0];
|
|
98
|
-
const column = (_a = context.
|
|
98
|
+
const column = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.columnApi.getColumnFromId(columnId);
|
|
99
99
|
if (!column) {
|
|
100
100
|
throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `Column name "${columnId}" is not found`);
|
|
101
101
|
}
|
|
102
102
|
if (!column.queryable) {
|
|
103
103
|
throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `Column name "${columnId}" is not queryable`);
|
|
104
104
|
}
|
|
105
|
-
return (_b = context.
|
|
105
|
+
return (_b = context.adaptableApi) === null || _b === void 0 ? void 0 : _b.gridApi.getRawValueFromRowNode(context.node, columnId);
|
|
106
106
|
},
|
|
107
107
|
description: 'Returns the value of a column',
|
|
108
108
|
signatures: ['[colName]', 'COL(name: string)'],
|
|
@@ -19,7 +19,7 @@ class QueryLanguageService {
|
|
|
19
19
|
const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
|
|
20
20
|
return parser.evaluate(expression, {
|
|
21
21
|
node: rowNode,
|
|
22
|
-
|
|
22
|
+
adaptableApi: this.adaptableApi,
|
|
23
23
|
functions: booleanAndScalarFunctions,
|
|
24
24
|
});
|
|
25
25
|
}
|
|
@@ -31,7 +31,7 @@ class QueryLanguageService {
|
|
|
31
31
|
const aggregatedScalarFunctions = this.getModuleExpressionFunctions(module).aggregatedScalarFunctions;
|
|
32
32
|
return parser.evaluate(expression, {
|
|
33
33
|
node: null,
|
|
34
|
-
|
|
34
|
+
adaptableApi: this.adaptableApi,
|
|
35
35
|
functions: aggregatedScalarFunctions,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
@@ -40,7 +40,7 @@ class QueryLanguageService {
|
|
|
40
40
|
const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
|
|
41
41
|
const reactiveExpression$ = parser.evaluate(reactiveExpression, {
|
|
42
42
|
node: reactiveExpression,
|
|
43
|
-
|
|
43
|
+
adaptableApi: this.adaptableApi,
|
|
44
44
|
functions: moduleExpressionFunctions.observableFunctions,
|
|
45
45
|
whereClauseFunctions: booleanAndScalarFunctions,
|
|
46
46
|
});
|
|
@@ -51,7 +51,7 @@ class QueryLanguageService {
|
|
|
51
51
|
const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
|
|
52
52
|
const aggregationExpression$ = parser.evaluate(aggregationExpression, {
|
|
53
53
|
node: aggregationExpression,
|
|
54
|
-
|
|
54
|
+
adaptableApi: this.adaptableApi,
|
|
55
55
|
functions: moduleExpressionFunctions.aggregatedBooleanFunctions,
|
|
56
56
|
whereClauseFunctions: booleanAndScalarFunctions,
|
|
57
57
|
});
|
|
@@ -339,7 +339,7 @@ class ReportService {
|
|
|
339
339
|
return type === 'rawValue'
|
|
340
340
|
? cellRawValue
|
|
341
341
|
: // type === formattedValue
|
|
342
|
-
this.adaptableApi.gridApi.
|
|
342
|
+
this.adaptableApi.gridApi.getDisplayValueFromRawValue(rowNode, columnId, cellRawValue);
|
|
343
343
|
}
|
|
344
344
|
computeCellExportValueFormat(columnDataType) {
|
|
345
345
|
const exportOptions = this.adaptableApi.internalApi.getAdaptableOptions().exportOptions;
|
|
@@ -189,7 +189,10 @@ class RowEditService {
|
|
|
189
189
|
adaptableApi,
|
|
190
190
|
})
|
|
191
191
|
: Object.assign({}, formData);
|
|
192
|
-
|
|
192
|
+
const config = {
|
|
193
|
+
addIndex: 0,
|
|
194
|
+
};
|
|
195
|
+
adaptableApi.gridApi.addGridData([newRowData], config);
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { AdaptableOptions } from '../../../types';
|
|
3
|
+
interface AdaptableOptionsFormOptions {
|
|
4
|
+
adaptableOptions: AdaptableOptions;
|
|
5
|
+
onChangeadaptableOptions: (adaptableOptions: AdaptableOptions) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const AdaptableOptionsForm: (props: AdaptableOptionsFormOptions) => JSX.Element;
|
|
8
|
+
export default AdaptableOptionsForm;
|
|
@@ -8,17 +8,13 @@ const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlo
|
|
|
8
8
|
const Input_1 = tslib_1.__importDefault(require("../../../components/Input"));
|
|
9
9
|
const rebass_1 = require("rebass");
|
|
10
10
|
const DefaultAdaptableOptions_1 = require("../../../Utilities/Defaults/DefaultAdaptableOptions");
|
|
11
|
-
const
|
|
12
|
-
var _a, _b
|
|
11
|
+
const AdaptableOptionsForm = (props) => {
|
|
12
|
+
var _a, _b;
|
|
13
13
|
let abOptions = props.adaptableOptions;
|
|
14
14
|
const layoutOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.layoutOptions), abOptions.layoutOptions);
|
|
15
15
|
const generalOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.generalOptions), abOptions.generalOptions);
|
|
16
16
|
const adaptableQLOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.adaptableQLOptions), abOptions.adaptableQLOptions);
|
|
17
|
-
const userInterfaceOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.userInterfaceOptions), abOptions.userInterfaceOptions);
|
|
18
|
-
const searchOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.searchOptions), abOptions.searchOptions);
|
|
19
17
|
const filterOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.filterOptions), abOptions.filterOptions);
|
|
20
|
-
// we are 'hard-coding' this to use AG Grid but so does helper so ok for now and we can refactor when Adaptable Grid is ready
|
|
21
|
-
const gridOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.gridOptions), abOptions.gridOptions);
|
|
22
18
|
return (React.createElement(React.Fragment, null,
|
|
23
19
|
React.createElement(HelpBlock_1.default, null, "Base Options"),
|
|
24
20
|
React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'label', style: { textAlign: 'start' } }, { name: 'children' }] },
|
|
@@ -36,38 +32,6 @@ const ConfigurationForm = (props) => {
|
|
|
36
32
|
abOptions.generalOptions.showMissingPrimaryKeyAlert = showMissingPrimaryKeyWarning;
|
|
37
33
|
props.onChangeadaptableOptions(abOptions);
|
|
38
34
|
} }))),
|
|
39
|
-
React.createElement(HelpBlock_1.default, null, "Grid Options"),
|
|
40
|
-
React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'children' }, { name: 'label', style: { textAlign: 'start' } }] },
|
|
41
|
-
React.createElement(FormLayout_1.FormRow, { label: "Enable Range Selection" },
|
|
42
|
-
React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.enableRangeSelection, onChange: (enableRangeSelection) => {
|
|
43
|
-
abOptions = Object.assign({}, abOptions);
|
|
44
|
-
abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
|
|
45
|
-
abOptions.gridOptions.enableRangeSelection = enableRangeSelection;
|
|
46
|
-
props.onChangeadaptableOptions(abOptions);
|
|
47
|
-
} })),
|
|
48
|
-
React.createElement(FormLayout_1.FormRow, { label: "Show Quick Filter" },
|
|
49
|
-
React.createElement(CheckBox_1.CheckBox, { checked: (_c = gridOptions.defaultColDef) === null || _c === void 0 ? void 0 : _c.floatingFilter, onChange: (floatingFilter) => {
|
|
50
|
-
abOptions = Object.assign({}, abOptions);
|
|
51
|
-
abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
|
|
52
|
-
abOptions.gridOptions.defaultColDef = {
|
|
53
|
-
floatingFilter,
|
|
54
|
-
};
|
|
55
|
-
props.onChangeadaptableOptions(abOptions);
|
|
56
|
-
} })),
|
|
57
|
-
React.createElement(FormLayout_1.FormRow, { label: "Suppress Column Virtualisation" },
|
|
58
|
-
React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.suppressColumnVirtualisation, onChange: (suppressColumnVirtualisation) => {
|
|
59
|
-
abOptions = Object.assign({}, abOptions);
|
|
60
|
-
abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
|
|
61
|
-
abOptions.gridOptions.suppressColumnVirtualisation = suppressColumnVirtualisation;
|
|
62
|
-
props.onChangeadaptableOptions(abOptions);
|
|
63
|
-
} })),
|
|
64
|
-
React.createElement(FormLayout_1.FormRow, { label: "Show Column Menu Button" },
|
|
65
|
-
React.createElement(CheckBox_1.CheckBox, { checked: gridOptions.suppressMenuHide, onChange: (suppressMenuHide) => {
|
|
66
|
-
abOptions = Object.assign({}, abOptions);
|
|
67
|
-
abOptions.gridOptions = Object.assign({}, abOptions.gridOptions);
|
|
68
|
-
abOptions.gridOptions.suppressMenuHide = suppressMenuHide;
|
|
69
|
-
props.onChangeadaptableOptions(abOptions);
|
|
70
|
-
} }))),
|
|
71
35
|
React.createElement(HelpBlock_1.default, null, "Layout Options"),
|
|
72
36
|
React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'children' }, { name: 'label', style: { textAlign: 'start' } }] },
|
|
73
37
|
React.createElement(FormLayout_1.FormRow, { label: "Auto Save Layouts" },
|
|
@@ -134,4 +98,4 @@ const ConfigurationForm = (props) => {
|
|
|
134
98
|
props.onChangeadaptableOptions(abOptions);
|
|
135
99
|
}, value: filterOptions.maxFilterValuesToDisplay, marginRight: 3 })))));
|
|
136
100
|
};
|
|
137
|
-
exports.default =
|
|
101
|
+
exports.default = AdaptableOptionsForm;
|
|
@@ -7,7 +7,8 @@ const react_1 = require("react");
|
|
|
7
7
|
const StringExtensions_1 = tslib_1.__importDefault(require("../../../Utilities/Extensions/StringExtensions"));
|
|
8
8
|
const OnePageWizards_1 = require("../../Wizard/OnePageWizards");
|
|
9
9
|
const ConfigurationWizardColumnsStep_1 = require("./ConfigurationWizardColumnsStep");
|
|
10
|
-
const
|
|
10
|
+
const GridOptionsForm_1 = tslib_1.__importDefault(require("./GridOptionsForm"));
|
|
11
|
+
const AdaptableOptionsForm_1 = tslib_1.__importDefault(require("./AdaptableOptionsForm"));
|
|
11
12
|
const ConfigurationWizard = (props) => {
|
|
12
13
|
const [isPrimaryKeySelected, setIsValid] = React.useState(true);
|
|
13
14
|
const [adaptableOptions, setAdaptableOptions] = react_1.useState(props.adaptableOptions);
|
|
@@ -50,7 +51,7 @@ const ConfigurationWizard = (props) => {
|
|
|
50
51
|
let sections = [
|
|
51
52
|
{
|
|
52
53
|
title: 'Columns',
|
|
53
|
-
details: 'Configure
|
|
54
|
+
details: 'Configure Columns',
|
|
54
55
|
isValid: () => {
|
|
55
56
|
if (!isPrimaryKeySelected) {
|
|
56
57
|
return 'Primary key column must be included';
|
|
@@ -65,10 +66,33 @@ const ConfigurationWizard = (props) => {
|
|
|
65
66
|
title: 'Adaptable Options',
|
|
66
67
|
details: 'Configure Adaptable Options',
|
|
67
68
|
isValid: () => (adaptableOptions.adaptableId ? true : 'Adaptable ID is required'),
|
|
68
|
-
render: () => (React.createElement(
|
|
69
|
+
render: () => (React.createElement(AdaptableOptionsForm_1.default, { adaptableOptions: adaptableOptions, onChangeadaptableOptions: (abOptions) => {
|
|
69
70
|
setAdaptableOptions(abOptions);
|
|
70
71
|
} })),
|
|
71
72
|
},
|
|
73
|
+
{
|
|
74
|
+
title: 'Grid Options',
|
|
75
|
+
details: 'Configure AG Grid Options',
|
|
76
|
+
render: () => (React.createElement(GridOptionsForm_1.default, { adaptableOptions: adaptableOptions, onChangeadaptableOptions: (abOptions) => {
|
|
77
|
+
setAdaptableOptions(abOptions);
|
|
78
|
+
} })),
|
|
79
|
+
},
|
|
80
|
+
// JW - I would like at some point to do a page of Entitlements
|
|
81
|
+
// to show all the Modules and let users select which are Full, ReadOnly or Hidden
|
|
82
|
+
/*
|
|
83
|
+
{
|
|
84
|
+
title: 'Entitlements',
|
|
85
|
+
details: 'Configure Entitlements',
|
|
86
|
+
render: () => (
|
|
87
|
+
<EntitlementsForm
|
|
88
|
+
adaptableOptions={adaptableOptions}
|
|
89
|
+
onChangeadaptableOptions={(abOptions) => {
|
|
90
|
+
setAdaptableOptions(abOptions);
|
|
91
|
+
}}
|
|
92
|
+
/>
|
|
93
|
+
),
|
|
94
|
+
},
|
|
95
|
+
*/
|
|
72
96
|
];
|
|
73
97
|
if (props.startSections) {
|
|
74
98
|
sections = [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { AdaptableOptions } from '../../../types';
|
|
3
|
-
interface
|
|
3
|
+
interface EntitlementsFormOptions {
|
|
4
4
|
adaptableOptions: AdaptableOptions;
|
|
5
5
|
onChangeadaptableOptions: (adaptableOptions: AdaptableOptions) => void;
|
|
6
6
|
}
|
|
7
|
-
declare const
|
|
8
|
-
export default
|
|
7
|
+
declare const EntitlementsForm: (props: EntitlementsFormOptions) => JSX.Element;
|
|
8
|
+
export default EntitlementsForm;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const React = tslib_1.__importStar(require("react"));
|
|
5
|
+
const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
|
|
6
|
+
const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlock"));
|
|
7
|
+
const DefaultAdaptableOptions_1 = require("../../../Utilities/Defaults/DefaultAdaptableOptions");
|
|
8
|
+
const EntitlementsForm = (props) => {
|
|
9
|
+
let abOptions = props.adaptableOptions;
|
|
10
|
+
const entitlementOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.entitlementOptions), abOptions.entitlementOptions);
|
|
11
|
+
const gridOptions = Object.assign(Object.assign({}, DefaultAdaptableOptions_1.DefaultAdaptableOptions.gridOptions), abOptions.gridOptions);
|
|
12
|
+
return (React.createElement(React.Fragment, null,
|
|
13
|
+
React.createElement(HelpBlock_1.default, null, "EntitlementOptions Options"),
|
|
14
|
+
React.createElement(FormLayout_1.default, { margin: 2, columns: [{ name: 'children' }, { name: 'label', style: { textAlign: 'start' } }] },
|
|
15
|
+
React.createElement(FormLayout_1.FormRow, { label: "Entitlements to be set here" }))));
|
|
16
|
+
};
|
|
17
|
+
exports.default = EntitlementsForm;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { AdaptableOptions } from '../../../types';
|
|
3
|
+
interface GridOptionsFormOptions {
|
|
4
|
+
adaptableOptions: AdaptableOptions;
|
|
5
|
+
onChangeadaptableOptions: (adaptableOptions: AdaptableOptions) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const GridOptionsForm: (props: GridOptionsFormOptions) => JSX.Element;
|
|
8
|
+
export default GridOptionsForm;
|